Інструкція з використання sqlmap

Читання і запис файлів через SQL-ін'єкцію

У SQL мовою є команда, яка записує вміст, наприклад, осередки на жорсткий диск. При SQL-ін'єкції ми можемо вносити зміни в базу даних, наприклад, створити таблицю з осередком, в яку запишемо файл з нашої системи, а потім за допомогою команди мови SQL скинемо вміст на жорсткий диск цільової системи в файл з будь-якою назвою. Цей процес в sqlmap автоматизований, для запису довільного файлу в вразливу систему використовуються опції --file-write і --file-dest. Після першої опції потрібно вказати файл в локальній системі, який ви хочете записати в віддалену вразливу систему. Після опції --file-dest потрібно вказати точну АБСОЛЮТНИЙ шлях файлу.

Для того, щоб дізнатися абсолютні шляхи на сервері можна скористатися різними прийомами:

  • запустити nmap для визначення версії ОС. У різних ОС сервер має різні директорії за замовчуванням. Наприклад, в Debain (Ubuntu) це / var / www / або / var / www / html /. У Windows це можуть бути каталоги C: \ Apache24 \ htdocs \, C: / xampp / htdocs /, C: / wamp / www /, C: / Inetpub / wwwroot /, C: \ Server \ data \ htdocs \ або інший. Також якщо ви визначили тип вразливою ОС, то можна скористатися папками, які там обов'язково повинні бути, наприклад, C: \ Windows \ temp \ і т.д.
  • пошук помилок в веб-сайтах, які розкривають абсолютні шляхи, наприклад:

Для того, щоб вдалося записати файл на віддалену систему, має скластися відразу багато сприятливих факторів:

  • не повинна бути заблокована команда мови SQL, що виконує запис на диск
  • у SQL сервера повинні бути права на запис
  • потрібно знати абсолютний шлях і мати права на запис у вказану директорію

В цілому, дуже нечасто виконуються всі умови і вдається успішно виконати цю атаку.

Запуск довільних команд операційної системи

Для цього використовуються опції: --os-cmd і --os-shell. Перша відправляє команду для виконання на вразливий сервер, а друга - симулює реальну оболонку, з підтримкою автозавершения по TAB. Необхідно вказати використовуваний на сервері мову програмування (ASP, ASP.NET, JSP або PHP), а також абсолютний шлях до директорії, в яку є права записи. Як і вивантаження файлів, дана атака спрацьовує далеко не завжди.

Зміна даних в БД

Рекомендується вивчити статтю «Вивчення MySQL / MariaDB для початківців». SQL команди потрібно знати як для запитів до баз даних, так і для розуміння суті SQL-ін'єкцій.

Для внесення змін до бази даних є опції --sql-query і --sql-shell. Якщо ви хочете зробити довільний SQL запит до системи управління базами даних використовуючи команду SELECT, то ніяких проблем немає. Але якщо ви хочете використовувати команди на зразок DROP, UPDATE, INSERT, то потрібно знати про stacked query (стек запитів). Простіше кажучи, це можливість виконувати кілька команд за один раз, відокремлюючи їх один від одного крапкою з комою.

У параметр вставляється

Це видалить (DROP) таблицю members відразу після першого SQL запиту.

Про стеці запитів потрібно знати з тієї причини, що далеко не всі технології веб-додатків підтримують його. Наприклад, PHP не підтримує стек запитів, коли СУБД є MySQL, але підтримує його, коли СУБД є PostgreSQL.

Подивіться на наступну таблицю:

Інструкція з використання sqlmap

Як це не сумно, саме зв'язка PHP - MySQL є найпоширенішою. Тобто в більшості випадків ми не зможемо внести зміни в таблиці через стек запитів.

Паролі користувачів баз даних

В СУБД MySQL паролі користувачів, в тому числі root'а, зберігаються прямо в одній з баз даних у вигляді хешу. Це база даних під назвою mysql. таблиця user. Хеш пароля може зберігатися в колонках з різним назвою, наприклад, в authentication_string або Password.

Приклад отримання дампа бази даних mysql:

У цих прикладах ми дампи (отримуємо) окремі поля:

Інструкція з використання sqlmap

Подивимося на рядок:

  • 127.0.0.1 говорить нам про те, що доступ до баз даних можливий тільки з локальної мережі - віддалено підключитися до сервера MySQL не вийде.
  • 263027ECC84AA7B81EA86B0EBECAFE20BC8804FC - це і є хеш, який потрібно зламати, якщо ми хочемо дізнатися пароль.

Для злому в Hashcat звернемося до її довідці, щоб дізнатися номер хешу:

Оскільки варіантів більше ніж один, нам потрібно знати версію сервера MySQL. Для цього в sqlmap є опція -f.

Інструкція з використання sqlmap

Приклади отриманих даних:

Тобто номер нашого хешу 300, складаємо команду hashcat для злому:

Інструкція з використання sqlmap

Результат (дивіться на символи після двокрапки)

Шуканим паролем виявилося слово dojo.

висновок

Як можна переконатися, навіть в лабораторних умовах описані техніки не завжди працездатні. Проте, необхідно робити перевірку на можливість їх експлуатації, оскільки в разі успіху вони дозволяють значно просунутися в тестуванні на проникнення веб-додатків.

Пов'язані статті:

Схожі статті