Введение в практическую безопасность (2019)/Эксплуатация SQL injection: различия между версиями
Asterite (обсуждение | вклад) (Новая страница: «== Эксплуатация SQL injection == Краткое введение в то что такое SQL injection было в Введение_в_практ…») |
Asterite (обсуждение | вклад) (→UNION SELECT) |
||
Строка 6: | Строка 6: | ||
Очень полезным может быть <code>UNION</code> ([https://ru.wikipedia.org/wiki/Union_(SQL) вики],[https://www.postgresql.org/docs/9.4/typeconv-union-case.html доки postgres],[http://citforum.ru/database/sql_kg/3-4.shtml курс "Основы современных БД"]), который позволяет присоединить к результу одного <code>SELECT</code> запроса результат еще одного. Если инъекция в операторе <code>SELECT</code> (что в реальности довольно часто), с помощью <code>UNION</code> можно добавить в его результат вывод нового, полностью написанного атакующим <code>SELECT</code> - запроса из друой таблицы, с другими колонками, условиями и т. д. | Очень полезным может быть <code>UNION</code> ([https://ru.wikipedia.org/wiki/Union_(SQL) вики],[https://www.postgresql.org/docs/9.4/typeconv-union-case.html доки postgres],[http://citforum.ru/database/sql_kg/3-4.shtml курс "Основы современных БД"]), который позволяет присоединить к результу одного <code>SELECT</code> запроса результат еще одного. Если инъекция в операторе <code>SELECT</code> (что в реальности довольно часто), с помощью <code>UNION</code> можно добавить в его результат вывод нового, полностью написанного атакующим <code>SELECT</code> - запроса из друой таблицы, с другими колонками, условиями и т. д. | ||
− | Чтобы <code>UNION</code> сработал, требуется чтобы количество и типы колонок совпадали. | + | |
+ | Чтобы <code>UNION</code> сработал, требуется чтобы количество и типы колонок совпадали. Помочь с этим может то что в SQL можно писать на месте колонок просто константы (и тогда они просто проставятся на эти места в каждой из строк результата запроса) и то что чаще всего можно использовать вместо любого значения <code>NULL</code>. Если количество колонок в исходном запросе неизвестно, можно просто подбирать его. | ||
+ | |||
+ | Для такого кода | ||
+ | [[Файл:Sqli-code.png|650px]] | ||
+ | если параметр <code>login</code> будет иметь значение <code>admin' UNION SELECT * FROM users WHERE login = 'Kobzon'</code> |
Версия 12:31, 15 марта 2019
Эксплуатация SQL injection
Краткое введение в то что такое SQL injection было в предыдущей статье, теперь о некоторых вещах которые может делать атакующий.
UNION SELECT
Очень полезным может быть UNION
(вики,доки postgres,курс "Основы современных БД"), который позволяет присоединить к результу одного SELECT
запроса результат еще одного. Если инъекция в операторе SELECT
(что в реальности довольно часто), с помощью UNION
можно добавить в его результат вывод нового, полностью написанного атакующим SELECT
- запроса из друой таблицы, с другими колонками, условиями и т. д.
Чтобы UNION
сработал, требуется чтобы количество и типы колонок совпадали. Помочь с этим может то что в SQL можно писать на месте колонок просто константы (и тогда они просто проставятся на эти места в каждой из строк результата запроса) и то что чаще всего можно использовать вместо любого значения NULL
. Если количество колонок в исходном запросе неизвестно, можно просто подбирать его.
Для такого кода
если параметр login
будет иметь значение admin' UNION SELECT * FROM users WHERE login = 'Kobzon'