Всем доброго дня. Уважаемые господа, столкнулся с такой проблемой: Для внедрения SQL инъекции необходимо закомментировать хвост запроса. Сам запрос в исходнике: Code: $sql = "UPDATE table SET time='{$now}', what='{$what}', do= '{$do}', task= '{$task}', link= '{$link}', func= '{$func}'" . "\n WHERE userid={$my->id} AND userip='{$myip}'"; В SQL-inj комментирую так: Code: http://site.com/index.php?func=bla'/* на что получаю ошибку синтаксиса, не понятно почему... может это из-за того, что WHERE в запросе идет с новой строки... Подскажите пожалуйста как корректно закомментировать всё WHERE.
Дело не только в коментарии, ошибку, для проведения sql-inj надо не только уметь вызвать, но и нигилировать её последующим корректным запросом, а уж потом комментировать, чтобы анигилировать sql-конструкции, идущие следом
Если я не ошибаюсь, конечная структура запроса у меня получается синтаксически верная. Это конечно при условии, что MySQL не требует строго обособления многострочного комментария с обеих сторон. Т.е. я расчитывал на то, что открывающего указателя многострочного комментария /* будет достаточно для построения синтаксически верного запроса, но что-то чувствую, что MySQL ругается именно на отсутствие закрытия комментария */
вопрос: вы пытаетесь внедрить SQL-код обьединив запросы UPDATE & SELECT или через подзапрос? покажите как вы делаете тогда станет ясней...
для начала просто заккоментировать, а делее через UNION еще раз UPDATE You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' WHERE userid=0 AND userip='255.255.255.255'' at line 2 SQL=UPDATE table SET time='1248287457', what='main', do= '', task= '', link= '/index.php?func=bla%27/*', func= 'bla'/*' WHERE userid=0 AND userip='255.255.255.255'
http://phpclub.ru/mysql/doc/comments.html Пища для мозгов) Code: http://site.com/index.php?func=bla'/*[B]'[/B] может вот так сработает!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*'' WHERE userid=0 AND userip='255.255.255.255'' at line 2 SQL=UPDATE table SET time='1248287457', what='main', do= '', task= '', link= '/index.php?func=%27/*%27', func= 'bla'/*'' WHERE userid=0 AND userip='255.255.255.255'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '255.255.255.255'' at line 1 SQL=UPDATE table SET time='1248292780', what='main', do= '', task= '', link= '/index.php?func=bla%27+--+', func= 'bla' --' WHERE userid=0 AND userip='255.255.255.255'
Вот в этом должен быть еще пробел после -- может Code: http://site.com/index.php?func=bla'+--[тут пробел]
тоже самое обратите особое внимание, что WHERE в запросе идет с новой строки, поэтому строчный комментарий не катит
Ну ради експеримента, раз у тебя есть доступ к сорцам возьми убери символ перевода строки и попробуй.... будем хоть точно знать в чем проблема!
Pashkela взглянул на ссылку и сказал, что инъекцию произвести нельзя, поскольку невозможно повлиять на исходный запрос и что это вовсе не SQL-inj, а просто ошибка запроса, хотя мне так не кажется... Пробую дописать в UPDATE не существующее поле: http://site.com/index.php?func=who',user1='user на что получаю соответствующую ошибку, что поле не существует. меняю имя поля на существующее: http://site.com/index.php?func=who',user='user и всё ок, запрос успешно выполнен, ошибок нет. Проблема осталась, мне надо закомментировать условие WHERE, либо каким-нибудь образом выполнить SELECT или дополнительный UPDATE.
1. Он не пишет "всё ок, запрос успешно выполнен" - зачем ты врешь? 2. Где ты там вообще where увидел??? Там идет insert into lalala (`a`,`b`,`c`) VALUES ('1','who','3'); 3. Ставя кавычку в значение GET-переменной func ты вызываешь ошибку sql-запроса, это есс-но, так запрос превращается в такой: insert into lalala (`a`,`b`,`c`) VALUES ('1','who'','3'); т.е. чисто ошибка синтаксиса sql-запроса, и, при постановке твой конструкции who',user1='user запрос превращается в такой: insert into lalala (`a`,`b`,`c`) VALUES ('1','who', user1='user','3'); и при подстановке who',user='user просходит тоже самое что сразу вызывает уже не синтаксическую ошибку (т.е. с кавычками ты рахобрался), а нарушения между кол-вом вставляемых значений и кол-вом колонок, куда эти значения вставляются, т.к. ты вот таким диким способом сделал уже 4 параметра во вторых скобочках вместо положенных трёх (в данном примере, в реале их там просто побольше) - т.е. уж логическая ошибка, о чем оно тебе там и пишет: Column count doesn't match value count at row 1 В таких условиях, при таком sql-запросе insert into lalala (`a`,`b`,`c`) VALUES ('1','who', '3'); и уязвимом параметре 'who' скуля невозможна, отсекать тут нечего, при любом отсечении будет нарушение логики sql-запроса, единственное, что ты можешь сделать, это вставить своё значение в колонку `b` вместо 'who', но это ничего не даст в итоге, т.к. в реале это идет просто сохранение линка, где сейчас чел находится, т.е. просто статистика, + там magic_qutes=on
Смотрите внимательнее, INSERT идет только тогда, когда для текущего посетителя сессия еще не открыта (точнее не сессия, а запись в БД о текущем местонахождении) Просто обновите страницу и получите UPDATE с WHERE И при update - http://site.com/forum.html?func=who%27,user=%27user ошибок нет, т.е. запрос успешно выполняется