interactsh stopAtFirstMatch intergration test

dev
Sajad Parra 2021-12-21 15:24:16 +05:30
parent 911045ae9a
commit c0f9c1da70
5 changed files with 52 additions and 5 deletions

View File

@ -0,0 +1,23 @@
id: interactsh-stop-at-first-match-integration-test
info:
name: Interactsh StopAtFirstMatch Integration Test
author: pdteam
severity: info
requests:
- method: GET
path:
- "{{BaseURL}}"
- "{{BaseURL}}"
- "{{BaseURL}}"
headers:
url: 'http://{{interactsh-url}}'
stop-at-first-match: true
matchers:
- type: word
part: interactsh_protocol # Confirms the HTTP Interaction
words:
- "http"

View File

@ -35,6 +35,7 @@ var httpTestcases = map[string]testutils.TestCase{
"http/request-condition.yaml": &httpRequestCondition{}, "http/request-condition.yaml": &httpRequestCondition{},
"http/request-condition-new.yaml": &httpRequestCondition{}, "http/request-condition-new.yaml": &httpRequestCondition{},
"http/interactsh.yaml": &httpInteractshRequest{}, "http/interactsh.yaml": &httpInteractshRequest{},
"http/interactsh-stop-at-first-match.yaml": &httpInteractshStopAtFirstMatchRequest{},
"http/self-contained.yaml": &httpRequestSelContained{}, "http/self-contained.yaml": &httpRequestSelContained{},
"http/get-case-insensitive.yaml": &httpGetCaseInsensitive{}, "http/get-case-insensitive.yaml": &httpGetCaseInsensitive{},
"http/get.yaml,http/get-case-insensitive.yaml": &httpGetCaseInsensitiveCluster{}, "http/get.yaml,http/get-case-insensitive.yaml": &httpGetCaseInsensitiveCluster{},
@ -67,6 +68,29 @@ func (h *httpInteractshRequest) Execute(filePath string) error {
return expectResultsCount(results, 1) return expectResultsCount(results, 1)
} }
type httpInteractshStopAtFirstMatchRequest struct{}
// Execute executes a test case and returns an error if occurred
func (h *httpInteractshStopAtFirstMatchRequest) Execute(filePath string) error {
router := httprouter.New()
router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
value := r.Header.Get("url")
if value != "" {
if resp, _ := http.DefaultClient.Get(value); resp != nil {
resp.Body.Close()
}
}
})
ts := httptest.NewServer(router)
defer ts.Close()
results, err := testutils.RunNucleiTemplateAndGetResults(filePath, ts.URL, debug)
if err != nil {
return err
}
return expectResultsCount(results, 1)
}
type httpGetHeaders struct{} type httpGetHeaders struct{}
// Execute executes a test case and returns an error if occurred // Execute executes a test case and returns an error if occurred

View File

@ -233,9 +233,9 @@ func (c *Client) ReplaceMarkers(data string, interactshURLs []string) (string, [
return data, interactshURLs return data, interactshURLs
} }
// SetStopAtFirstMatch sets StopAtFirstMatch for interactsh client options // SetStopAtFirstMatch sets StopAtFirstMatch true for interactsh client options
func (c *Client) SetStopAtFirstMatch(stopAtFirstMatch bool) { func (c *Client) SetStopAtFirstMatch() {
c.options.StopAtFirstMatch = stopAtFirstMatch c.options.StopAtFirstMatch = true
} }
// MakeResultEventFunc is a result making function for nuclei // MakeResultEventFunc is a result making function for nuclei

View File

@ -62,7 +62,7 @@ func (r *requestGenerator) Make(baseURL, data string, payloads, dynamicValues ma
if r.options.Interactsh != nil { if r.options.Interactsh != nil {
if r.options.StopAtFirstMatch || r.request.StopAtFirstMatch { if r.options.StopAtFirstMatch || r.request.StopAtFirstMatch {
r.options.Interactsh.SetStopAtFirstMatch(true) r.options.Interactsh.SetStopAtFirstMatch()
} }
data, r.interactshURLs = r.options.Interactsh.ReplaceMarkers(data, r.interactshURLs) data, r.interactshURLs = r.options.Interactsh.ReplaceMarkers(data, r.interactshURLs)

View File

@ -143,7 +143,7 @@ func (request *Request) executeRequestWithPayloads(variables map[string]interfac
if request.options.Interactsh != nil { if request.options.Interactsh != nil {
if request.options.StopAtFirstMatch { if request.options.StopAtFirstMatch {
request.options.Interactsh.SetStopAtFirstMatch(true) request.options.Interactsh.SetStopAtFirstMatch()
} }
var transformedData string var transformedData string
transformedData, interactshURLs = request.options.Interactsh.ReplaceMarkers(string(data), []string{}) transformedData, interactshURLs = request.options.Interactsh.ReplaceMarkers(string(data), []string{})