SQL Injection Tool 4

Відразу скажу що з'явилося одна зміна, місце куди будуть вставлятися запити відзначається {SQLINJ}, тобто якщо вразливий параметр getid, то в урл пишемо

http://localhost/test.php?getid=1{SQLINJ}
а якщо це текстовий параметр то урл буде такою

http://localhost/test.php?getid=1'{SQLINJ}
ну все інше схоже, власне хто захоче розбереться.

Програма може визначаться анівірусамі такими як наприклад Kaspersky Antivirus 7.0 як HackTool
Звіт про виявлення: шкідлива програма HackTool.Win32.SQLInject.i 4 Файл: s-tool.exe


software.gif
SQL Injection Tool 4
sipt4.rar [2437КБ]

Мануал до SQL Injection TooL 3

1. Введення.
Вообщем ось нарешті то руки дійшли до того щоб написати мануал до моєї проге. Так що на 95% питань по проге ви знайдете відповідь тут.

2.Начінаем юзати.

Перше що треба ввести в рядок URL шлях до уразливому скрипту, порт HTTP сервера, налаштувати прогу на роботу з проксі сервером на вкладці SETTINGS -> MAIN, встановити таймаут відповіді сервера на вкладці SETTINGS -> MAIN в мілісекундах і вибрати метод атаки п. 2.1.

2.1.1 Метод GET
Метод використовується коли ін'єкція присутній в GET параметрі.
Код: Приклад: http://www.target.ru/vulnscript.php?id=1
Якщо вразливий параметр id, запит на сервер приймає вид
Код: http://www.target.ru/vulnscript.php?id=1{SQL}

2.1.2 Метод GET (With Cookie)
Метод використовується коли ін'єкція присутній в кукісів, але використовується GET
Код: Приклад: http://www.target.ru/vulnscript.php?id=1
Якщо вразливий параметр VulnCook в кукис, запит на сервер приймає вид

Код: GET /vulnscript.php?id=1 HTTP / 1.0
Host: www.target.ru
Cookie: VulnCook = {SQL}
Connection: Close

Варто відзначити, що якщо використовуються кілька параметрів кукисов, то все невразливі параметри вводяться в таблицю, яка з'являється після натиснення кнопки Cookie parameters, а вразливий параметр вводиться в поле Vulnerable parameter, а його звичайне значення вводиться в поле Value, власне той же принцип використовується для POST параметрів.

2.1.3 Метод Cookie (GET)
Метод використовується коли ін'єкція присутній в GET параметрі, але на сервер треба відправляти в заголовку певний кукис (NeedCook), наприклад для авторизації
Код: Приклад: http://www.target.ru/vulnscript.php?id=1{SQL}
Якщо вразливий параметр id, запит на сервер приймає вид

Код: GET /vulnscript.php?id=1{SQL} HTTP / 1.0
Host: www.target.ru
Cookie: NeedCook = phpsession
Connection: Close

2.1.4 Метод POST
Метод використовується коли ін'єкція присутній в POST параметрі.
Код: Приклад: http://www.target.ru/vulnscript.php
Якщо вразливий параметр id, запит на сервер приймає вид

Код: POST /vulnscript.php?id=1 HTTP / 1.0
Host : www.target.ru
Connection: Close

Id = {SQL}

2.1.5 Метод POST (With Cookie) -дуже рідкісний випадок
Метод використовується коли ін'єкція присутній в кукісів, але використовується POST
Код: Приклад: http://www.target.ru/vulnscript.php
Якщо вразливий параметр VulnCook в кукис, запит на сервер приймає вид

Код: POST /vulnscript.php HTTP / 1.0
Host: www.target.ru
Cookie: VulnCook = {SQL}
Connection: Close

2.1.6 Метод Cookie (POST)
Метод використовується коли ін'єкція присутній в POST параметрі, але на сервер треба відправляти в заголовку певний кукис (NeedCook), наприклад для авторизації
Код: Приклад: http://www.target.ru/vulnscript.php
Якщо вразливий параметр id, запит на сервер приймає вид

Код: POST /vulnscript.php?id=1{SQL} HTTP / 1.0
Host: www.target.ru
Cookie: NeedCook = phpsession
Connection: Close

id = 1 {SQL}

2.2 Ключове слово або фраза (Текстове поле String)

Сюди вводиться слово яке ми можемо знайти таким способом.

Приклад для методу GET,
cначала дивимося
Код: http://www.target.ru/vulnscript.php?id=1
потім дивимося
Код: http://www.target.ru/vulnscript.php?id=2
знаходимо то що є тут
Код: http://www.target.ru/vulnscript.php?id=1
чого немає тут (порівнюємо так сказати)
Код: http://www.target.ru/vulnscript.php?id=2
Поруч є поле в якому є значення FOUND і NOT FOUND, він як раз і потрібен для того щоб вибирати метод пошуку,

FOUND - Цей шматочок коду, або фрази береться за основу правильності (позитивного висновку про те, що ін'єкція зроблена правильно)

NOT FOUND - Цей шматочок коду, або фрази береться за основу НЕ правильності
(Теж позитивного висновку про те, що ін'єкція зроблена правильно)

TIP: Для автоматизації пошуку можна використовувати кнопку AUTO DETERMINE, але варто відзначити що тут може бути помилкове визначення або помилкове не визначення, коли шматок ключове слово знаходиться всередині тегів.

2.3 Галочка Use Basic Authorization і текстові поля Login і Password служать для того щоб проходити авторизацію для входу в певні місця сайту або для доступу до файлів.

3.1 Далі треба визначити кількість полів які використовуються в запиті до БД, це можна зробити натиснувши на кнопку «LET KNOW QUANTITY»

Тут є кілька варіантів для прорахунку:

3.1.1 Меню, що випадає «USE METHOD»
Тут можна визначити яким методом виробляти прорахунок
- UNION SELECT
- ORDER BY
- GROUP BY
Взагалі найчастішим методом є ORDER BY і UNION SELECT
Але найкращим методом для програми є UNION SELECT, так як цей метод відразу визначає і поля виведення (текстове поле FIELD SUPPORTS PRINTING), необхідні для декількох функцій програми.

Варто відзначити те що якщо ви визначали кількість полів запиту методами ORDER BY і GROUP BY, і успішно визначили, то варто вказати стартове кількість полів для пошуку і кінцеве рівним знайденому кол-ву і вибрати метод UNION SELECT для визначення полів з висновком, і натиснути кнопку «LET KNOW QUANTITY» ще раз.

3.1.2 Галочка Determine suppots printing fields using LIMIT
Вона потрібна як альтернативний спосіб пошуку полів з висновком.

NOTE: можна так само замінити значення уразливого параметра на неіснуюче значення, щоб визначити поля з висновком, знову ж комбінуючи це з галочкою 3.1.2

Після вдалого підбору кількості полів, якщо ви використовуєте метод GET, у вас з'явиться рядок в поле Work URL, натиснувши кнопку «Show in Browser» у вас відкриється цей запит в браузері.

4.1 Ідентифікація БД (SQL Injections -> Identifying DB)
4.1.1 Type of DB - В даний момент програма може визначити два типи БД, це MySQL і MSSQL

4.1.2 USER () - ім'я користувача бази даних від імені якого здійснюється підключення до БД

Є 3 варіанти визначення.

UNION - найприйнятніший спосіб визначення, сервера при цьому посилається 1 запит для визначення всього значення відразу.

TAKE ONE SYMBOL - посимвольного визначення, Брут по одному символу.
Причому інтервал можна вказати на закладці налаштувань.
BRUTE -посімвольное визначення, Брут всю стоку.

Обидва варіанти, для використання в MySQL 3, або прі не можливості визначення стандартними способами. Ну або для камікадзе.

4.1.3 DATABASE () - ім'я бази даних до якої підключається скрипт для виконання запиту.
Спосіб роботи аналогічний USER () п.4.1.2

4.1.4 VERSION () - версія бази даних до якої підключається скрипт для виконання запиту.
Спосіб роботи аналогічний USER () п.4.1.2

4.1.5 меню, що випадає CONVERT може допомогти при визначенні, значень використовуючи UNION, коли база використовує одне кодування, а значення USER (), DATABASE (), VERSION () використовують іншу.

5.1 Брут назв таблиць і полів полів.
(SQL Injections -> Identifying DB -> MySQL / MSSQL)

Використовується для перебору назв, як сказано вище. +
Для успішного перебору у вас має бути підібрано кількість полів за описом в п.3.1.1

Тут зазначу що при переборі використовуються слова із зовнішніх текстових словників, тому їх перед початком роботи треба підключити на вкладці SETTINGS -> DICTIONARY.
Словники мають 4 типи
- Словник таблиць (Table dictionary)
- Словник полів (Field dictionary)
- Словник префіксів (Prefix dictionary)
- Словник суфіксів (Suffix dictionary)

NOTE: На тій же вкладці їх можна відредагувати
.
Для використання словників префіксів і суфіксів ви повинні відзначити відповідні галочки на вкладці (SQL Injections -> Identifying DB -> MySQL / MSSQL)

«Use prefix from file when bruteforce tables and fields »
«Use suffix from file when bruteforce tables and fields »

Для постійного використання одного префікса або суфікса, ви можете їх вписати в поля Prefix і Suffix. Тоді вони не будуть братися з словників.

Далі натискаємо «GET TABLE NAMES»

При цьому якщо у вас все слова зі словника виявляються в цьому списку, то настройки програми не вірні.

Після успішного перебору, у вас виведеться існуючі таблиці в атакується базі, вам треба вибрати потрібну вам таблицю так щоб вгорі в сірому полі з'явилося її назву і продовжити сканувати таблицю на предмет знаходження назв полів, натиснувши кнопку «GET FIELD NAMES»

NOTE: до назв полів можна додавати префікси і суфікси зі словників, програма у вас це запитає коли ви натиснете кнопку «GET FIELD NAMES».

6.1 Отримання назв таблиць і полів використовуючи таблицю INFORMATION_SCHEMA.
(SQL Injections -> Identifying DB -> DUMP INF_SCH)
Актуально для MySQL5 і MSSQL

Функція буде працювати якщо у вас є хоча б одне поле виводу, і визначено кількість полів.

Є 2 варіанти.
- Table names only - отримання тільки назв таблиць
- Table and column names - отримання назв таблиць і колонок в них.

Так само є обмежувач отримання даних, верхній рівень (FROM) за замовчуванням встановлений 16, так як перших 15 таблиць стандартні і не несуть великий інформації.

Кнопка «GO DUMP», запускає процес отримання даних.
Отримані дані можна зберегти в файл, натиснувши кнопку «SAVE TO FILE»

Є меню, що випадає «Convert», суть меню і його робота ідентична п.4.1.5

7.1 посимвольного брут довільних даних
(SQL Injections -> OneChar BruteForce)
Актуально MySQL починаючи з версії 4.1 і MSSQL.
Використовується для посимвольного Брута даних з таблиці

Інтервал Брута береться з вкладки SETTINGS -> MAIN.

Можна використовувати запити типу, SELECT id FROM news

Кнопка «Preview SQL query» показує попередній запит до сервера

Кнопка «GET RESULT» запускає процес Брута.

8.1 Отримання даних з БД. (SQL Injections -> Data BruteForce)
Актуально для MySQL 4 і MSSQL

Функція буде працювати якщо у вас є хоча б одне поле виводу, і визначено кількість полів.

Для початку треба заповнити поле Table назвою потрібної таблиці.
Далі треба додати в список назви потрібних полів, вписуючи ці назви в поле знизу від списку, і натискаючи кнопку «ADD FIELD».

Назви полів можна отримати використовуючи вкладки 5.1 і 6.1.

NOTE: видалити непотрібні поля зі списку можна кнопкою «REMOVE FIELD»

Далі налаштовується стартова і кінцева позиція рядка. Для того щоб перевірити правильність налаштувань можна натиснути кнопку «TEST», якщо все ок, то у вас повинно буде з'явиться значення обраних полів розділених двокрапкою ":" в списку відповідних першому рядку в БД в поле зліва від кнопки «TEST»

Якщо значення з'явилося можна приступати до отримання даних, для цього натисніть кнопку «GET IT».

Отримані дані можна зберегти в файл, натиснувши кнопку «SAVE TO FILE»

9.1 Back connect from MSSQL
Використовується для того щоб зробити бекконнект з БД. При цьому використовується процедура БД MSSQL master..xp_cmdshell, для здійснення бекконекта, треба перевірити IP-адресу в рядку і встановити шлях до NetCat на вкладці SETTINGS -> MAIN.

При вдалій експлуатації у вас з'явиться командна консоль в якій буде відкрито з'єднання з сервером.
10.1 Робота з файлами

10.1.1 MySQL
Використовується для роботи з файлами через SQL - ін'єкцію

10.1.1.1 Читання файлу

Функція буде працювати якщо у вас є хоча б одне поле виводу, і визначено кількість полів.

Вам необхідно прописати абсолютний шлях до файлу на сервері в поле нижнього фрейма.

Приклад: /home/user/public_hmtl/index.php

І натиснути кнопку «READ». У разі вдалого читання, файл з'явиться на екрані у вікні редактора, де ви можете зберегти цей файл, скориставшись пунктом меню «SAVE FILE»

10.1.1.2 Завантаження файлу на сервер

Функція буде працювати якщо:
1) у вас є хоча б одне поле виводу,
2) визначено кількість полів.
3) У конфігурації СЕРВЕРА НЕ ПОВИННІ екранувати лапки !!


Знову ж треба прописати абсолютний шлях до створюваного файлу на сервері в поле верхнього фрейма.

Тут є 2 варіанти заливки файлу.
- UNION - використовується INTO OUTFILE (стандартний варіант)
- ENCLOSED BY - використовується в MySQL починаючи з версії 3 (Бажано використовувати коли не працює 1 варіант)

Текст файлу для заливки на сервер вводяться в текстове поле знизу.

10.1.2 MSSQL
Все робиться за аналогією з п.10.1.1

11.1 Термінал (Terminal)
Використовується для посилки довільних пакетів на сервер, а також для перегляду відповіді сервера (заголовка і тіла відповіді). Є функція пошуку в тілі.

Запит пишеться в «HTTP REQUEST»
Тема відповіді пишеться «ANSWER: HTTP HEADER»
Тіло відповіді пишеться «ANSWER: HTTP BODY»

Посилка запиту здійснюється після натискання кнопки «SEND REQUEST»

12.1 Історія (History)
Тут відображаються всі запити до сервера, і додаткова інформація.
Її можна зберегти, скориставшись пунктом меню «HISTORY -> SAVE LOG», або очистити її натиснувши там же «HISTORY -> CLEAR LOG»

13.1 Налаштування (Settings)
13.1.1 Загальні (Main)
Переклад інтерфейсу (Path to language file).
Шлях для NetCat (Path to NetCat) - використовується в п.9.1
налаштування проксі
- Чудова ідея
- IP-адреса
- Порт
Символьний інтервал (BruteForce symbol code interval) - використовується в 4.1.2-4.1.5 і 7.1

Меню 1. Закривати SQL вираз (Close SQL) - використовується для того щоб відрубати оригінальний запит, що б не з'являлася помилка.
Для кожної бази використовуються різні «закривашка»
- MySQL = / *
- MSSQL = -

Меню 2. Змінити лапки на аналог (Change quotes to)
Використовується щоб обійти фільтрацію з скриптах.

Меню 3. Змінити пробіл на аналог (Change space to)
Використовується щоб обійти фільтрацію з скриптах

Інші можливості:

Головне меню.

Double Tools - збільшується вікно програми, можна довільно компонувати вкладки програми, для зручності, наприклад будь-яке вікно з терміналом або історією, кодерам і декодерами

Default Settings - скидаються всі налаштування програми.

STOP - зупиняє роботу програми.

Розділ утиліт (Tools)

Містить різноманітні кодери і декодери рядків, таких як HEX, BASE64, URL-LIKE, PHP CHR


Ваш SQLHack.