Add recon upload hunter and admin surface probing for owned-target scans.
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Extend web crawl with multipart/drag-drop/JS upload ranking and probe common admin paths for 200 vs 401/403 signals in scan JSON.
This commit is contained in:
@@ -19,13 +19,23 @@ func collectUploadFromPage(pageURL string, fileInputs, multipart []FormFinding)
|
||||
if !f.HasFile {
|
||||
continue
|
||||
}
|
||||
out = append(out, UploadHunterFinding{PageURL: pageURL, Target: resolveUploadTarget(pageURL, f.Action), Source: "file_input", Method: f.Method})
|
||||
out = append(out, UploadHunterFinding{
|
||||
PageURL: pageURL,
|
||||
Target: resolveUploadTarget(pageURL, f.Action),
|
||||
Source: "file_input",
|
||||
Method: f.Method,
|
||||
})
|
||||
}
|
||||
for _, f := range multipart {
|
||||
if !f.Multipart {
|
||||
continue
|
||||
}
|
||||
out = append(out, UploadHunterFinding{PageURL: pageURL, Target: resolveUploadTarget(pageURL, f.Action), Source: "multipart", Method: f.Method})
|
||||
out = append(out, UploadHunterFinding{
|
||||
PageURL: pageURL,
|
||||
Target: resolveUploadTarget(pageURL, f.Action),
|
||||
Source: "multipart",
|
||||
Method: f.Method,
|
||||
})
|
||||
}
|
||||
return out
|
||||
}
|
||||
@@ -41,12 +51,17 @@ func detectDragDropZones(pageURL, body string) []UploadHunterFinding {
|
||||
if n.tag != "" {
|
||||
cls := strings.ToLower(n.attr("class"))
|
||||
id := strings.ToLower(n.attr("id"))
|
||||
if dragDropClassRe.MatchString(cls) || dragDropClassRe.MatchString(id) || n.attr("data-dropzone") != "" {
|
||||
dropAttr := strings.ToLower(n.attr("data-dropzone"))
|
||||
if dragDropClassRe.MatchString(cls) || dragDropClassRe.MatchString(id) || dropAttr != "" {
|
||||
target := n.attr("data-upload-url")
|
||||
if target == "" {
|
||||
target = n.attr("action")
|
||||
}
|
||||
out = append(out, UploadHunterFinding{PageURL: pageURL, Target: resolveUploadTarget(pageURL, target), Source: "drag_drop"})
|
||||
out = append(out, UploadHunterFinding{
|
||||
PageURL: pageURL,
|
||||
Target: resolveUploadTarget(pageURL, target),
|
||||
Source: "drag_drop",
|
||||
})
|
||||
}
|
||||
}
|
||||
for _, c := range n.children {
|
||||
@@ -62,10 +77,16 @@ func detectDragDropZones(pageURL, body string) []UploadHunterFinding {
|
||||
|
||||
func detectDragDropFromText(pageURL, body string) []UploadHunterFinding {
|
||||
lower := strings.ToLower(body)
|
||||
if (!strings.Contains(lower, "dropzone") && !strings.Contains(lower, "drag")) || (!strings.Contains(lower, "upload") && !strings.Contains(lower, "file")) {
|
||||
if !strings.Contains(lower, "dropzone") && !strings.Contains(lower, "drag") {
|
||||
return nil
|
||||
}
|
||||
return []UploadHunterFinding{{PageURL: pageURL, Source: "drag_drop"}}
|
||||
if !strings.Contains(lower, "upload") && !strings.Contains(lower, "file") {
|
||||
return nil
|
||||
}
|
||||
return []UploadHunterFinding{{
|
||||
PageURL: pageURL,
|
||||
Source: "drag_drop",
|
||||
}}
|
||||
}
|
||||
|
||||
func extractScriptSrc(pageURL, body string) []string {
|
||||
@@ -98,7 +119,11 @@ func scanJSForUpload(jsURL, body string) []UploadHunterFinding {
|
||||
if m := openUploadPathRe.FindString(body); m != "" {
|
||||
target = m
|
||||
}
|
||||
return []UploadHunterFinding{{PageURL: jsURL, Target: target, Source: "js"}}
|
||||
return []UploadHunterFinding{{
|
||||
PageURL: jsURL,
|
||||
Target: target,
|
||||
Source: "js",
|
||||
}}
|
||||
}
|
||||
|
||||
func isScriptAsset(ref string) bool {
|
||||
|
||||
Reference in New Issue
Block a user