Tools
July 15

Ronin - большой набор инструментов для тестирования

Описание

ronin-rb - набор различных модулей, написанных на Ruby, предназначенные для разработки, тестирования, поиска уязвимостей и не только. Функционал у данного инструментария очень широкий, перечислим небольшую его часть:

  • Кодирование/декодирование строк.
  • Работа с хексами.
  • Netcat.
  • Обработка файлов (grep, strings и т.п.).
  • База данных для хранения информации.
  • Работа с веб-запросами.
  • Сканер уязвимостей и эксплоитов.
  • Сканер портов.
  • И многое другое...
Данная статья представлена исключительно в образовательных целях. Red Team сообщество "GISCYBERTEAM" не несёт ответственности за любые последствия ее использования третьими лицами.

Установка

Установить основные модули можно следующей командой:

curl -o ronin-install.sh https://raw.githubusercontent.com/ronin-rb/scripts/main/ronin-install.sh && bash ronin-install.sh

Также дополнительно можно установить модули nmap и recon:

sudo gem install ronin-nmap --pre
sudo gem install ronin-recon --pre

После этого должны появится следующие модули:

Обзор возможностей

Разберем основной функционал данного инструментария и начнем с разведки и сканирования портов.

Для разведки используется модуль ronin-recon. Он поддерживает следующие функции:

$ ronin-recon workers
  dns/lookup
  dns/mailservers
  dns/nameservers
  dns/reverse_lookup
  dns/srv_enum
  dns/subdomain_enum
  dns/suffix_enum
  net/cert_enum
  net/cert_grab
  net/cert_sh
  net/ip_range_enum
  net/port_scan
  net/service_id
  web/dir_enum
  web/email_addresses
  web/spider

Если мы хотим запустить сразу все модули разведки, достаточно написать:

$ ronin-recon run ya.ru

Либо же мы можем запускать отдельные модули следующим образом:

$ ronin-recon run ya.ru -w dns/lookup                   
>>> Found new IP address 77.88.44.242 for domain ya.ru
>>> Found new IP address 5.255.255.242 for domain ya.ru
>>> Found new IP address 77.88.55.242 for domain ya.ru

Для сканирования портов используется модуль ronin-nmap:

$ ronin-nmap scan 192.168.0.109/30 --import
>>> Running nmap 192.168.0.109/30 ...
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-10 17:11 MSK
Initiating Ping Scan at 17:11
Scanning 4 hosts [2 ports/host]
Completed Ping Scan at 17:11, 1.20s elapsed (4 total hosts)
Initiating Parallel DNS resolution of 1 host. at 17:11
Completed Parallel DNS resolution of 1 host. at 17:11, 0.00s elapsed
Nmap scan report for 192.168.0.108 [host down]
Nmap scan report for 192.168.0.110 [host down]
Nmap scan report for 192.168.0.111 [host down]
Initiating Connect Scan at 17:11
Scanning rudnic (192.168.0.109) [1000 ports]
Discovered open port 80/tcp on 192.168.0.109
Completed Connect Scan at 17:11, 0.01s elapsed (1000 total ports)
Nmap scan report for rudnic (192.168.0.109)
Host is up (0.000043s latency).
Not shown: 999 closed tcp ports (conn-refused)
PORT   STATE SERVICE
80/tcp open  http

Read data files from: /usr/bin/../share/nmap
Nmap done: 4 IP addresses (1 host up) scanned in 1.24 seconds
>>> Importing scan XML ...
>>> Imported IP: 192.168.0.109
>>> Imported host: rudnic
>>> Imported port: 80/tcp
>>> Imported service: http
>>> Imported open port: 192.168.0.109 80/tcp (http)

ronin-nmap использует обычный nmap для скана, а с помощью флага --import парсит полученный результат и заносит в базу данных, с которой можно взаимодействовать с помощью модуля ronin-db.

Теперь из базы данных мы можем выгружать список адресов, а также фильтровать их по портам:

$ ronin-db ips --with-port 80
192.168.0.109

Также можно вручную заносить данные в базу с помощью флага --add, а также использовать внешнюю БД для командной работы. Модуль поддерживает следующие типы данных:

    certs
    creds
    emails
    hosts
    ips
    open-ports
    oses
    passwords
    people
    phone-numbers
    ports
    services
    software
    street-addresses
    urls
    web-vulns

С помощью модуля web, можно собрать ссылки на странице:

$ ronin-web spider --site http://192.168.0.109/ -H 'Cookie: PHPSESSID=s34acv3t3qs3ubiamvtr2j79u1' 
http://192.168.0.109/ 
http://192.168.0.109/instructions.php 
http://192.168.0.109/setup.php 
http://192.168.0.109/vulnerabilities/brute/ 
http://192.168.0.109/vulnerabilities/exec/ 
http://192.168.0.109/vulnerabilities/csrf/ 
http://192.168.0.109/vulnerabilities/fi/?page=include.php 
http://192.168.0.109/vulnerabilities/upload/ 
http://192.168.0.109/vulnerabilities/captcha/ 
http://192.168.0.109/vulnerabilities/sqli/ 
http://192.168.0.109/vulnerabilities/sqli_blind/ 
http://192.168.0.109/vulnerabilities/weak_id/ 
http://192.168.0.109/vulnerabilities/xss_d/ 
http://192.168.0.109/vulnerabilities/xss_r/ 
http://192.168.0.109/vulnerabilities/xss_s/ 
http://192.168.0.109/vulnerabilities/csp/ 
http://192.168.0.109/vulnerabilities/javascript/ 
http://192.168.0.109/security.php 
http://192.168.0.109/phpinfo.php 
http://192.168.0.109/about.php 
http://192.168.0.109/logout.php 
http://192.168.0.109/dvwa/css/main.css 
http://192.168.0.109/favicon.ico 
http://192.168.0.109/dvwa/js/dvwaPage.js 
http://192.168.0.109/dvwa/js/add_event_listeners.js 
http://192.168.0.109/instructions.php?doc=readme 
http://192.168.0.109/instructions.php?doc=PDF 
http://192.168.0.109/instructions.php?doc=changelog 
http://192.168.0.109/instructions.php?doc=copying 
http://192.168.0.109/instructions.php?doc=PHPIDS-license 
http://192.168.0.109/vulnerabilities/fi/?page=file1.php 
http://192.168.0.109/vulnerabilities/fi/?page=file2.php 
http://192.168.0.109/vulnerabilities/fi/?page=file3.php 
http://192.168.0.109/security.php?phpids=on 
http://192.168.0.109/security.php?test=%22%3E%3Cscript%3Eeval(window.name)%3C/script%3E 
http://192.168.0.109/ids_log.php 
http://192.168.0.109/docs/DVWA_v1.3.pdf 
http://192.168.0.109/login.php 
http://192.168.0.109/dvwa/css/login.css

С помощью модуля web к примеру можно провести проверку на простейшие уязвимости:

$ ronin-vulns lfi 'http://192.168.0.109/vulnerabilities/fi/?page=file1.php' -C 'PHPSESSID=s34acv3t3qs3ubiamvtr2j79u1' -C 'security=low'   
>>> Found LFI on http://192.168.0.109/vulnerabilities/fi/?page=file1.php via query param 'page'!

Также ronin отлично подходит для разработки своих простых эксплоитов для проектов. Для этого используется модуль ronin-exploit. Можно писать эксплоиты на Ruby, добавлять их в БД, а затем запускать. Пример эксплоита можно посмотреть в репозитории разработчика.

Для того, чтобы использовать этот эксплоит, необходимо добавить репозиторий:

$ ronin-repos install https://github.com/ronin-rb/example-exploits.git

После этого у нас в списке должен появится новый эксплоит:

$ ronin-exploits list
  CVE-2023-27350

Мы можем посмотреть всю информацию об эксплоите:

$ ronin-exploits show CVE-2023-27350
[ CVE-2023-27350 ]

  Type:              Custom
  Quality:           poc
  Released:          2023-06-09
  Disclosed:         2023-04-20
  Software:          PaperCut MF/NG
  Software Versions: 8.0.0 - 22.0.5
  Payload Type:      Command
  Summary:           PaperCut NG/MF Authentication Bypass and Code/Command Execution
  Advisories:

    * CVE-2023-27350 (https://nvd.nist.gov/vuln/detail/CVE-2023-27350)

  Authors:

    * postmodern <[email protected]>

  Description:

    PaperCut MG and NF versions 8.0.0 - 22.0.5 are vulnerable to an
    authentication bypass that allows an attacker to execute arbitrary
    JavaScript via PaperCut's bundled RhinoJS engine, and then achieve
    command execution by calling `java.lang.Runtime.getRuntime().exec(...)`.

  References:

    * https://www.papercut.com/kb/Main/PO-1216-and-PO-1219
    * https://www.horizon3.ai/papercut-cve-2023-27350-deep-dive-and-indicators-of-compromise/
    * https://github.com/horizon3ai/CVE-2023-27350#readme

Params:

  ┌────────────────┬────────┬──────────┬─────────┬───────────────────────────────────────┐
  │      Name      │  Type  │ Required │ Default │              Description              │
  ├────────────────┼────────┼──────────┼─────────┼───────────────────────────────────────┤
  │ base_url       │ URI    │ Yes      │         │ The base URL of the target            │
  │ http_proxy     │ String │ No       │         │ The HTTP proxy to use                 │
  │ http_user      │ String │ No       │         │ The HTTP Basic-Auth user              │
  │ http_password  │ String │ No       │         │ The HTTP Basic-Auth password          │
  │ user_agent     │ Enum   │ No       │         │ The HTTP User-Agent to select         │
  │ raw_user_agent │ String │ No       │         │ The raw HTTP User-Agent string to use │
  │ http_cookie    │ String │ No       │         │ The raw HTTP Cookie to use            │
  └────────────────┴────────┴──────────┴─────────┴───────────────────────────────────────┘

Запускаются эксплоиты следующей командой:

$ ronin-exploits run <NAME> --payload <payload> --param name=value

Все доступные модули проекта ronin можно найти на странице разработчика.

Заключение

Сегодня мы рассмотрели инструментарий ronin с огромным количеством возможностей и функций, ознакомиться с которыми можно на странице GitHub разработчика. Мы уверены, что каждый сможет найти что-то полезное в этом наборе инструментов для пентеста или участия в CTF-мероприятиях.