![]() |
Предыдущая статья - ссылочка
Следующая статья: Давайте учиться SQL-инъекциям вместе! Ссылка на задание: SQL injection challenge Продолжаем На этот раз задачка чуть сложнее. https://forum.antichat.xyz/attachmen...0880aa598e.png Подсказка даёт нам понять, что вывести всю таблицу будет глупой идеей. Также в задании теперь экранируются символы (' и "). Объясню что такое экранирование символов, как я понимаю. Экранирование символов - когда вы вводите в запросе символ, который экранируется в нашем случае это символ апострофа и кавычки, а при отправке эти символы удаляются из текста. Что мы знаем: 1. Наша база большая, придётся пользоваться оператором WHERE 2. То что наши символы экранируются, воспользуемся одним из методов обхода(об этом далее) Для начала рассмотрим наш запрос: SELECT * FROM users WHERE id=$text LIMIT 1 Как обычно в переменную $text подставляется наше значение... Если пробовать решить текущую задачу предыдущими способами(речь идёт об union), то MariaDB будет жаловаться на не правильный синтаксис. Всё из-за этой строки id = $text, наш модифицированный запрос будет присваиваться id и из этого получиться каша, поэтому id нужно будет чем-нибудь заглушить. Когда читал статью моего сэнсэя explorer`a union based, заметил там метод заглушки id, нужно просто подставить число, которого точно не будет в столбце id, например: -1 или 999999. Вот что из этого получилось. В ответ нам ничего не вывелось, значит мы удачно заглушили id. https://forum.antichat.xyz/attachmen...ca4d1817a7.png Теперь нам нужно вывести поле с логином = god. Уже можно воспользоваться union или же использовать оператор OR, будет покороче и как по мне правильнее. https://forum.antichat.xyz/attachmen...9f58f1b011.png Придётся показать запрос для лучшего понимания. P.S. Забыл поставить кавычки: 'god'. Но от этого ничего не меняется. Как видим у нас ошибка в которой говорится, что колонка с логином god не найдена. Давайте теперь воспользуемся одним из обходов экранирования символов: нужный нам текст переводим в hex. Воспользуемся онлайн сервисом text to hex. И из слова god получаем такой вот код 67 6f 64, преобразуем его и на выходе у нас получается нечто этакое: 0x676f64 https://forum.antichat.xyz/attachmen...93be558bd5.png QUESTION: Почему запрос: -1 OR login = god был не правильным? |
Цитата:
-1 or login=CHAR(103,111,100)или так -1 union select * from users where login=0x676f64 |
Цитата:
|
Цитата:
Что такое HEX? Шестнадцатеричная система счисления (HEX) – это позиционная система счисления по целочисленному основанию 16. В качестве шестнадцатеричных чисел используются цифры от 0 до 9 и латинские буквы от A до F. Значения чисел от 0 до 9 обычны, как и в десятичной системе, далее, от 10 до 16 используются буквы A-F, т.е. буква F = 16, далее 11 = 17, 12 = 18 и т.д и т.п. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Вот тебе подсказка blind sql injectionГугли, разбирайся. Именно на этом принципе строится решение.
P.S. Это для 8-го таска, сначала 7-й конечно сделай. |
| Время: 16:50 |