[7] Давайте учиться SQL-инъекциям вместе!

iBragimoff

Green Team
09.07.2019
83
19
BIT
0
Предыдущая статья - ссылочка
Следующая статья: Давайте учиться SQL-инъекциям вместе!
Ссылка на задание:

Усё, 7й таск решил. Давайте разбираться, что да как.

Screenshot_1.png


Так-с. Что мы имеем. Нам желают удачи и ещё мы знаем, что в столбце login есть подстрока gentoo.
Вдуплял минут 5, что значит подстрока, но потом понял, вот строка: gentoo023, а подстрока в ней gentoo, надеюсь понятно)
И ещё, теперь у нас фильтруются намного больше символов, чем в прошлом задании.

Для начала составим запрос без обхода экранирования символов.

-1 union SELECT * FROM users WHERE login LIKE '%gentoo%'

Давайте разбирать. У нас в запросе новый оператор LIKE, данный оператор позволяет искать текст по шаблону.
LIKE '%gentoo%', знак % значит любое количество символов: 321gentoo421, в данном случае под % попадают числа 321 и 421.
Вроде бы с запросом разобрались, давайте его преобразовывать.

У нас в запросе присутствуют пробелы и в задании они фильтруются, обходим их таким способом: вместо пробела ставим - /**/

-1/**/union/**/SELECT/**/*/**/FROM/**/users/**/WHERE/**/login/**/LIKE/**/'%gentoo%'#

Теперь давайте преобразуем наш "поиск по шаблону", то есть: '%gentoo%', переводим его в hex( )
Внимание: переводим в hex формат без апострофов(одинарных кавычек).

%gentoo% - 25 67 65 6e 74 6f 6f 25 - 0x2567656e746f6f25

Заменим шаблон в запросе:

-1/**/union/**/SELECT/**/*/**/FROM/**/users/**/WHERE/**/login/**/LIKE/**/0x2567656e746f6f25#

Готово. Отправляем запрос и получаем доступ к следующему заданию.

Подсказка для следующего задания от нашего сэнсэя explorer`a: blind sql injection, гуглим, ищем, читаем, учимся.
 
  • Нравится
Реакции: explorer
Поздравляю! Прогресс виден. Видно, что человек учится.
Есть решение покороче:
-1/**/or/**/login/**/like/**/0x2567656e746f6f25#
или так
/*!-1/**/or/**/login/**/like/**/0x2567656e746f6f25*/

Следующий уровень интереснее, и уже сложнее - за один запрос решить не получится.
 
  • Нравится
Реакции: iBragimoff
Поздравляю! Прогресс виден. Видно, что человек учится.
Есть решение покороче:
-1/**/or/**/login/**/like/**/0x2567656e746f6f25#
или так
/*!-1/**/or/**/login/**/like/**/0x2567656e746f6f25*/

Следующий уровень интереснее, и уже сложнее - за один запрос решить не получится.
Спасибо) Даа. Следующий уровень кардинально отличается от других. Пока, что единственный способ, который я вижу это перебор ложью и истинной, пожалуй поищу ещё.
 
SQL-инъекции мне нравятся потому что большой простор для размышлений, всегда можно написать много вариантов во всех случаях.
Вот накидал решение ещё более интересное -1||login/*!like*/0x2567656e746f6f25#
 
/*!*/ это условный комментарий в стиле СИ, никакого отрицания тут нет ) зато есть замена пробелу )
В сообщении выше, я уже давал код с примером этого комментария, посмотри внимательнее.
 
  • Нравится
Реакции: iBragimoff
/*!*/ это условный комментарий в стиле СИ, никакого отрицания тут нет ) зато есть замена пробелу )
В сообщении выше, я уже давал код с примером этого комментария, посмотри внимательнее.
Ааа. Понял. Просто из уроков информатики помню, что знак ! означает отрицание)))
 
Ааа. Понял. Просто из уроков информатики помню, что знак ! означает отрицание)))
Не, в программирование !=это не равно Здесь нет знака равно. В таких комментах Mysql обязательно выполнит код. Кроме замены пробела, можно использовать и как замена # в конце выражения, ибо шарп не всегда работает. Например написать так:
-1||login/*!like*//*!0x2567656e746f6f25*/

Лучше чем официальный ман конечно же ничего нет. Все функции, операторы и т.д. ищи там. Вот страничка про комменты в mysql
 
  • Нравится
Реакции: iBragimoff
Не, в программирование !=это не равно Здесь нет знака равно. В таких комментах Mysql обязательно выполнит код. Кроме замены пробела, можно использовать и как замена # в конце выражения, ибо шарп не всегда работает. Например написать так:
-1||login/*!like*//*!0x2567656e746f6f25*/
Спасибо за объяснение)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!