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

iBragimoff

Green Team
09.07.2019
83
19
BIT
0
Предыдущая статья - ссылочка
Основной сайт:
Ссылка на задание:

Давайте решим вторую задачу. С ней у меня вроде получилось, но очень криво. Давайте приступим.

Screenshot_2.png


Она схожа с предыдущей, но в этом случае текст из поля ввода подставляется в переменную $text.
Как видите на картинке, я пытался закрыть кавычки, после вывести все пароли из таблицы users, а остальное закомментировать двумя тире.
Но выдаёт ошибку. Попрошу тех кто разбирается объяснить почему команда не правильная.
Я решил задачу по другому: ' OR 1=1 -- ', только она выдаёт весь список, а нам нужен 9 ID.
Как подчеркнул в предыдущей статье explorer, данный способ не корректный, потому что в базе могут быть тысячу и больше ID.

Заметил, что предыдущую публикацию поддержали трое, но лишь один написал в комментариях. Если вы хотите чему то научиться, а не просто копировать и вставлять ответы ради баллов пустышек, то начните дискуссировать с нами и возможно мы придём к правильному решению
 
  • Нравится
Реакции: dustver и submarine1

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
Опять одни и те же грабли - запрос плохой, очевидно же, что так выведется ВСЁ, а всего может быть тысячи строк.
Вот решение:
' union SELECT pass,2,3 FROM users WHERE id=9 -- -
В задании написано - Поля: id, login, pass
Тут уже очевидная подсказка - полей 3 штуки. Значит нужно использовать union для объединения, опять же указывая условие. Таким образом получится вывести в одну строку ответ.
 

iBragimoff

Green Team
09.07.2019
83
19
BIT
0
Опять одни и те же грабли - запрос плохой, очевидно же, что так выведется ВСЁ, а всего может быть тысячи строк.
Вот решение:
' union SELECT pass,2,3 FROM users WHERE id=9 -- -
В задании написано - Поля: id, login, pass
Тут уже очевидная подсказка - полей 3 штуки. Значит нужно использовать union для объединения, опять же указывая условие. Таким образом получится вывести в одну строку ответ.
Спасибо! А почему в конце три тире?
 

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
третий дефис как бы не нужен, достаточно пробела
В статье об этом написано После двух дефисов обязательно должен идти пробел и потом можно писать любой комментарий.
Пробел не очевиден, поэтому чтобы его не упустить и добавляют третий дефис, или просто + вместо пробела, дело привычки.
 
  • Нравится
Реакции: dustver

mrOkey

Well-known member
14.11.2017
967
975
BIT
0
В статье об этом написано После двух дефисов обязательно должен идти пробел и потом можно писать любой комментарий.
Пробел не очевиден, поэтому чтобы его не упустить и добавляют третий дефис, или просто + вместо пробела, дело привычки.
я знаю, кстати возвращаесь к моему коммментарию, если поставить хэштег\шарп\диез можно не ставить после пробел
 

HebiNeco

Green Team
31.08.2019
124
35
BIT
0
Здравствуйте. Разве переменной $text не присваивается значение запроса? Т.е. почему не сработает $text= SELECT login FROM users WHERE id=9;
Т.е. запрос должен выглядеть следующим образом:
SELECT * FROM users WHERE id=2 OR login='somelogin (Ответ на запрос)' -- -'.
Почему тогда запрос выглядит так? Подставленное значение переменной выходит за кавычки условия.
SELECT * FROM users WHERE id=2 OR login='' UNION SELECT * FROM users WHERE id=9 -- -'
 

HebiNeco

Green Team
31.08.2019
124
35
BIT
0
Здравствуйте. Разве переменной $text не присваивается значение запроса? Т.е. почему не сработает $text= SELECT login FROM users WHERE id=9;
Т.е. запрос должен выглядеть следующим образом:
SELECT * FROM users WHERE id=2 OR login='somelogin (Ответ на запрос)' -- -'.
Почему тогда запрос выглядит так? Подставленное значение переменной выходит за кавычки условия.
SELECT * FROM users WHERE id=2 OR login='' UNION SELECT * FROM users WHERE id=9 -- -'
Разобрался. Закрываем поле login=' первой кавычкой в запросе переменной, после чего идет другой запрос, поставленный через UNION, а вторую кавычку login='' отбрасываем комментарием. Таким образом запрос преобретает вид:
SELECT * FROM users WHERE id=2 OR login='' UNION SELECT * FROM users WHERE id = 9 -- -
Не гнобите, все мы учимся) А свой вопрос с ответом оставлю для таких же внимательных)
 
  • Нравится
Реакции: iBragimoff

iBragimoff

Green Team
09.07.2019
83
19
BIT
0
Разобрался. Закрываем поле login=' первой кавычкой в запросе переменной, после чего идет другой запрос, поставленный через UNION, а вторую кавычку login='' отбрасываем комментарием. Таким образом запрос преобретает вид:
SELECT * FROM users WHERE id=2 OR login='' UNION SELECT * FROM users WHERE id = 9 -- -
Не гнобите, все мы учимся) А свой вопрос с ответом оставлю для таких же внимательных)
Никто никогда не будет гнобить того кто стремится к знаниям)
 
Мы в соцсетях:

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