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 был не правильным?
Следующая статья: Давайте учиться 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 был не правильным?