PDA

Просмотр полной версии : [6] Давайте учиться SQL-инъекциям вместе!


iBragimoff
22.08.2019, 21:29
Предыдущая статья - ссылочка (https://forum.antichat.xyz/threads/568854/)
Следующая статья: Давайте учиться SQL-инъекциям вместе! (https://forum.antichat.xyz/threads/568876/)
Ссылка на задание: SQL injection challenge

Продолжаем На этот раз задачка чуть сложнее.

https://forum.antichat.xyz/attachments/4852028/img_0880aa598e.png

Подсказка даёт нам понять, что вывести всю таблицу будет глупой идеей.
Также в задании теперь экранируются символы (' и ").

Объясню что такое экранирование символов, как я понимаю.
Экранирование символов - когда вы вводите в запросе символ, который экранируется
в нашем случае это символ апострофа и кавычки, а при отправке эти символы удаляются из текста.

Что мы знаем:
1. Наша база большая, придётся пользоваться оператором WHERE
2. То что наши символы экранируются, воспользуемся одним из методов обхода(об этом далее)

Для начала рассмотрим наш запрос: SELECT * FROM users WHERE id=$text LIMIT 1
Как обычно в переменную $text подставляется наше значение...
Если пробовать решить текущую задачу предыдущими способами(речь идёт об union), то MariaDB будет жаловаться на не правильный синтаксис.
Всё из-за этой строки id = $text, наш модифицированный запрос будет присваиваться id и из этого получиться каша, поэтому id нужно будет чем-нибудь заглушить.
Когда читал статью моего сэнсэя explorer`a union based (https://forum.antichat.xyz/threads/568720/), заметил там метод заглушки id, нужно просто подставить число, которого точно не будет в столбце id, например: -1 или 999999.

Вот что из этого получилось. В ответ нам ничего не вывелось, значит мы удачно заглушили id.

https://forum.antichat.xyz/attachments/4852028/img_ca4d1817a7.png

Теперь нам нужно вывести поле с логином = god.
Уже можно воспользоваться union или же использовать оператор OR, будет покороче и как по мне правильнее.

https://forum.antichat.xyz/attachments/4852028/img_9f58f1b011.png

Придётся показать запрос для лучшего понимания.

P.S. Забыл поставить кавычки: 'god'. Но от этого ничего не меняется.

Как видим у нас ошибка в которой говорится, что колонка с логином god не найдена.
Давайте теперь воспользуемся одним из обходов экранирования символов: нужный нам текст переводим в hex.
Воспользуемся онлайн сервисом text to hex. И из слова god получаем такой вот код 67 6f 64, преобразуем его и на выходе у нас получается нечто этакое: 0x676f64

https://forum.antichat.xyz/attachments/4852028/img_93be558bd5.png

QUESTION: Почему запрос: -1 OR login = god был не правильным?

explorer
22.08.2019, 22:00
iBragimoff сказал(а):

QUESTION: Почему запрос: -1 OR login = god был не правильным?


Потому что строка должна быть в кавычках, -1 OR login = 'god' но поскольку кавычки фильтруются, то решается или через HEX или через CHAR, вот ещё варианты:
-1 or login=CHAR(103,111,100)или так -1 union select * from users where login=0x676f64

iBragimoff
22.08.2019, 22:06
explorer сказал(а):

Потому что строка должна быть в кавычках, -1 OR login = 'god' но поскольку кавычки фильтруются, то решается или через HEX или через CHAR, вот ещё варианты:
-1 or login=CHAR(103,111,100)или так -1 union select * from users where login=0x676f64

А почему в HEX не нужны кавычки?

explorer
22.08.2019, 22:10
iBragimoff сказал(а):

А почему в HEX не нужны кавычки?


Потому что это уже не строка. Вот выдержка:

Что такое HEX?
Шестнадцатеричная система счисления (HEX) – это позиционная система счисления по целочисленному основанию 16. В качестве шестнадцатеричных чисел используются цифры от 0 до 9 и латинские буквы от A до F. Значения чисел от 0 до 9 обычны, как и в десятичной системе, далее, от 10 до 16 используются буквы A-F, т.е. буква F = 16, далее 11 = 17, 12 = 18 и т.д и т.п.

iBragimoff
22.08.2019, 22:13
explorer сказал(а):

Потому что это уже не строка. Вот выдержка:

Что такое HEX?
Шестнадцатеричная система счисления (HEX) – это позиционная система счисления по целочисленному основанию 16. В качестве шестнадцатеричных чисел используются цифры от 0 до 9 и латинские буквы от A до F. Значения чисел от 0 до 9 обычны, как и в десятичной системе, далее, от 10 до 16 используются буквы A-F, т.е. буква F = 16, далее 11 = 17, 12 = 18 и т.д и т.п.

И ещё один вопрос, как обойти экранирование символа =

explorer
22.08.2019, 22:20
iBragimoff сказал(а):

И ещё один вопрос, как обойти экранирование символа =


А пока не скажу, это в следующей задаче ) Она чуток поинтереснее.

iBragimoff
22.08.2019, 22:21
explorer сказал(а):

А пока не скажу, это в следующей задаче ) Она чуток поинтереснее.


И правильно делаешь) Пойду дальше мучаться xD

explorer
22.08.2019, 22:29
iBragimoff сказал(а):

И правильно делаешь) Пойду дальше мучаться xD


мучаться учиться ) Удачи! Задача не сложная, но первый опыт более существенной фильтрации, чем просто кавычек получишь.

iBragimoff
22.08.2019, 22:31
explorer сказал(а):

мучаться учиться ) Удачи! Задача не сложная, но первый опыт более существенной фильтрации, чем просто кавычек получишь.


Спасибо. Пойду учиться

explorer
22.08.2019, 22:59
Вот тебе подсказка blind sql injectionГугли, разбирайся. Именно на этом принципе строится решение.
P.S. Это для 8-го таска, сначала 7-й конечно сделай.

iBragimoff
22.08.2019, 23:00
explorer сказал(а):

Вот тебе подсказка blind sql injection Гугли, разбирайся. Именно на этом принципе строится решение.
P.S. Это для 8-го таска, сначала 7-й конечно сделай.


Благодарю сэнсэй

Citizen0
23.08.2019, 10:09
iBragimoff сказал(а):

Объясню что такое экранирование символов, как я понимаю.
Экранирование символов - когда вы вводите в запросе символ, который экранируется
в нашем случае это символ апострофа и кавычки, а при отправке эти символы удаляются из текста.


Не верно понимаете. При экранировании перед указанными символами будет стоять backslash.

iBragimoff
23.08.2019, 11:28
Citizen0 сказал(а):

Не верно понимаете. При экранировании перед указанными символами будет стоять backslash.


Хорошо, что исправили, теперь буду иметь ввиду))

explorer
27.08.2019, 19:44
iBragimoff сказал(а):

Также в задании теперь экранируются символы (' и ").





Citizen0 сказал(а):

Не верно понимаете. При экранировании перед указанными символами будет стоять backslash.


В задании написано, что кавычки фильтруются. Это не значит что они экранируются. Вариантов хватает - кроме экранирования бэкслэшем есть например функция преобразования спецсимволов в HTML-сущности.
Чаще всего там просто функция preg_replaceкоторая выполняет поиск и замену по регулярному выражению. Сейчас таск с фильтрацией написал, как раз функцией preg_replace воспользовался. Функция удаляет слова/спецсимволы по чёрному списку, если точнее то заменяет на пустое место, или на что угодно, то что прогер укажет.

Citizen0
28.08.2019, 08:40
explorer сказал(а):

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


Я где-то написал, что кавычки экранируются?
Всего лишь написал, что такое экранирование без привязки к заданию.
Фильтрация и экранирование - разные вещи.

explorer
28.08.2019, 10:38
Citizen0 сказал(а):

Я где-то написал, что кавычки экранируются?
Всего лишь написал, что такое экранирование без привязки к заданию.
Фильтрация и экранирование - разные вещи.


Нет, мой пост для iBragimoff (https://forum.antichat.xyz/members/624445/)который это написал, ибо ответ про экранирование может дать неверное/неполное представление о фильтрации. Чтобы человек понимал, что это не только backslash.