burterm/internal/payload/smart.go
2026-09-14 10:55:07 +03:00

65 lines
2.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package payload
import "strings"
// SmartSuggest возвращает имена заготовок (см. Preset), отсортированные
// по релевантности для параметра с именем paramName. Это эвристика по
// подстрокам в имени — тот же принцип, что и "умная" генерация в Burp:
// там это тоже не ИИ, а сопоставление по имени/типу параметра, просто
// более развитое. Если контекст не распознан, возвращает разведочный
// набор общего назначения вместо пустого списка — так вызывающему коду
// не нужно отдельно обрабатывать случай "ничего не найдено".
func SmartSuggest(paramName string) []string {
name := strings.ToLower(paramName)
var suggestions []string
add := func(names ...string) {
suggestions = append(suggestions, names...)
}
if containsAny(name, "id", "num", "count", "page", "offset", "limit") {
add("numbers-small", "numbers-large")
}
if containsAny(name, "user", "login", "account") {
add("common-usernames")
}
if containsAny(name, "pass", "pwd", "secret") {
add("common-passwords")
}
if containsAny(name, "search", "query", "comment", "message", "name", "text") {
add("xss-probes", "sqli-probes")
}
if containsAny(name, "file", "path", "dir", "folder", "template", "include") {
add("path-traversal")
}
if containsAny(name, "token", "session", "key", "code") {
add("alnum")
}
if len(suggestions) == 0 {
add("sqli-probes", "xss-probes", "numbers-small")
}
return dedupe(suggestions)
}
func containsAny(s string, subs ...string) bool {
for _, sub := range subs {
if strings.Contains(s, sub) {
return true
}
}
return false
}
func dedupe(in []string) []string {
seen := make(map[string]bool, len(in))
out := make([]string, 0, len(in))
for _, s := range in {
if !seen[s] {
seen[s] = true
out = append(out, s)
}
}
return out
}