Mysql нарушение запроса при отправке в качестве параметра GET - PullRequest
1 голос
/ 04 августа 2020

Я тестирую конечную точку слепой логической SQL инъекции в курсе, и у меня возникают некоторые проблемы с выяснением того, где моя полезная нагрузка работает неправильно.

Я тестировал приведенное ниже в оболочке mysql на поле назначения, и оно работает.

GRANT/**/ALL/**/ON/**/*.*/**/TO/**/root@localhost;

Но когда я отправляю его в параметре q GET, я получаю сообщение об ошибке в приложении.

php?q=off')/**/or/**/GRANT/**/ALL/**/ON/**/*.*/**/TO/**/root@localhost%23

Вместо этого я протестировал логический оператор basi c с '1'='1', и он работает нормально, поэтому я предполагаю, что с моим фактическим запросом в контексте URL-адреса что-то не так.

q=off')/**/or/**/'1'='1'%23

Я также пробовал закодировать URL-адрес полезной нагрузки, но все еще с теми же проблемами.

Есть идеи, что может быть причиной этого?

1 Ответ

1 голос
/ 04 августа 2020

Использование SQL инъекции для объединения частичного выражения, такого как OR '1'='1', как части некоторого другого запроса, работает, потому что есть много способов добавить дополнительный синтаксис выражения к существующему запросу SQL, который уже имеет предложение WHERE.

Например, в приведенном ниже примере легко увидеть, как дополнительное выражение может быть добавлено к первому запросу, и оно по-прежнему является допустимым выражением.

SELECT * FROM mytable WHERE col1 = 'off'
SELECT * FROM mytable WHERE col1 = 'off' OR '1'='1' -- '

Но GRANT - это оператор на его своя. Его нельзя добавить к другому подобному запросу. Невозможно объединить GRANT с оператором SELECT.

SELECT * FROM mytable WHERE col1 = 'off' OR GRANT ALL ON *.* TO ...

Это просто недопустимый запрос SQL. Вы можете изучить онлайн-справочник по синтаксису для SELECT и других типов операторов.

SQL работает, заставляя приложение выполнять один оператор SQL с синтаксисом, отличным от предполагаемого исходного SQL выписка. Но он не может сделать синтаксис недействительным работающим!

...