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{ ``, `">`, `'>`, ``, `javascript:alert(1)`, `">`, } var pathTraversalProbes = []string{ `../`, `../../`, `../../../etc/passwd`, `..\..\..\windows\win.ini`, `%2e%2e%2f`, `....//....//etc/passwd`, }