PHP обман str_replace

Статус: Offline
Реєстрація: 11.06.2009
Повідом.: 424
PHP обман str_replace

В общем есть на серве функция str_replace которая нацелена на удаление символа ' из значения логина, логин прямиком летит в MySQL и надо этот запрос изменить. Вот примеры работы:

Логин: test
sql_query: select log_id from table where login='test'

Логин: test'
sql_query: select log_id from table where login='test'' //ошибка, это нам и надо но.....

Логин: test'; --
sql_query: select log_id from table where login='test\; -- ' //кавычка убита и заменена на слеш

Я в этом не особо шарю, как представить кавычку чтоб обойти функцию? Или какие есть альтернативы в изменении SQL запроса?

ПыСы: я ничего не ломаю, всё идет на лок. компе для учебы;)
 
говорят кодировками как-то обходят.
 
Заюзай вместо стр-репласе функцию mysql_real_escape_string, после чего скажи себе "никуя не получится" и спокойно иди спать :)
 
Заюзай вместо стр-репласе функцию mysql_real_escape_string, после чего скажи себе "никуя не получится" и спокойно иди спать :)

не, исходник серва я менять не могу, ну вот такое условие, так что обойти нужно именно стр-репласе
 
str_replace например \' заменит на \\'
 
Ну если так кавычка нужна, то перед записью в БД меняй ее на символ, например, табуляции, а когда вытаскиваешь из БД - восстанавливай!
 
Ну если так кавычка нужна, то перед записью в БД меняй ее на символ, например, табуляции, а когда вытаскиваешь из БД - восстанавливай!

уу, блин, я не имею доступа ни к базе, ни к пхп скрипту, я представляю из себя хакера который хочет провести SQL-иньекцию через это поле ввода, вопрос в том чтобы закодировать символ так чтобы пхп его не заметил как ' а в БД он раскодировался.
Я решил что кодить уметь это хорошо, но взламывать тож уметь надо чтобы знать возможности хакера;)
 
Если скрипт написан правильно (с очисткой входных данных), то ничего у тебя не выйдет.
Например, это сможешь обойти:
PHP:
function DELX( $str )
{
  return preg_replace( "/[^\x20-\xFF]&^\n/", "" ,@strval($str) );
}

:D
 
там идет str_replace и слеширование, я вот думаю, тупик это или нет?
 
Опять же как скрипт написан:
если сначала этим же str_replace удаляем все слеши, а потом делаем слеширование, то никак
 
Опять же как скрипт написан:
если сначала этим же str_replace удаляем все слеши, а потом делаем слеширование, то никак

судя по результатам работы и моему пониманию того кода, то сначала стр_репласе удаляет кавычку (он только на неё нацелен) а потом слеширование, или наоборот :confused: хотя скорей всего сначала слеширование, а потом удаление только кавычки
 
А это уже magic_quotes сработали, такчто задание выполнено. Где обещанное пиво?

гг, такого результата я и сам добился, мне надо чтобы прошла иньекция, а не обойти одну функцию, я видел статейку где был способ обхождения данной фичи с использованием бага кодировок, но у меня ничего не вышло:(
 
Я в этом не особо шарю, как представить кавычку чтоб обойти функцию? Или какие есть альтернативы в изменении SQL запроса?

ПыСы: я ничего не ломаю, всё идет на лок. компе для учебы;)
Ну так выложил бы скрипт и базу раз на локальном компе ;)
Ато мало инфы, сервер бд на чем mssql, mysql....?

Можно использовать char, или использовать 16-ти битную кодировку, которую sql понимает как строчку.

Создаешь скрипт sql216bit.php:
PHP:
<?
echo('0x'.bin2hex($_GET['str'])); 
?>
Запускаешь так: /sql216bit.php?str=SQL_СТРОКА
 
если просто вставить 16-битку то толку 0, она ведь в ' ' вставляется, вариант с добавлением кавычки в конце просто выбивает ошибку((
На серве MySQL
кодировка cp1251_general_ci
Над строкой работают походу только эти функции: слеширование (так и не могу найти де она, тут черт ногу сломит) и str_replace("'", "", $user_login);
Скрипт выкладывать нет смысла, тут модульная система и хрен толком отследишь что за чем работает(((
 
гг, такого результата я и сам добился, мне надо чтобы прошла иньекция, а не обойти одну функцию, я видел статейку где был способ обхождения данной фичи с использованием бага кодировок, но у меня ничего не вышло:(

в первом посте речь идет об обходе str_replace)

magic_quotes они для того и есть, чтобы инъекции не прокатывали. Если бы это можно было обойти, то зачем они тогда вообще нужны?
 
в первом посте речь идет об обходе str_replace)

magic_quotes они для того и есть, чтобы инъекции не прокатывали. Если бы это можно было обойти, то зачем они тогда вообще нужны?

там не magic_quotes ибо слеширует оно только кавычку ' и всё, да и в коде я не встречал там такую функцию, там какое то дибильное выражение стоит и помечено оно как слеширование, завтра попробую разобраться что это, но чую что это второй str_replace замаскированный
 
там не magic_quotes ибо слеширует оно только кавычку ' и всё, да и в коде я не встречал там такую функцию,
А ты в php.ini посмотри:
Код:
magic_quotes_gpc
magic_quotes_runtime
там какое то дибильное выражение стоит и помечено оно как слеширование, завтра попробую разобраться что это, но чую что это второй str_replace замаскированный
куйней вы страдаете батенька, кавычки фильровать функцией str_replace будет только быдло-кодер.
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
рекомендуется к прочтению.
 
Назад
Зверху Знизу