PDA

Просмотр полной версии : обход фильтров


qaz
24.01.2011, 20:34
Как обойти функцию mysql_escape_string?

je0n
25.01.2011, 16:07
Как обойти функцию mysql_escape_string?


если в скуль-запрос передается текстовый параметр, обработанный этой функцией, то никак (насколько я знаю). Если же целочисленный - то и обходить не надо просто юзай инъекцию без использвания кавычек внутри запроса. Текстовые значения для запроса в этому случае можно передавать как CHAR(...).

Вообще эта функция экранирует кавычки для скуль-запроса и еще что-то незначительное.

P.S. некоторые кодеры, без знания дела, и целочисленные значения фильтруют этой функцией, что НЕДОПУСТИМО. Я сам из таких кодеров был

qaz
25.01.2011, 16:22
я просто в гугле читал што ета функция пропускает какуюто кодировку и которая понятна для mysql только вот где што и как нигде не обьясняется

je0n
26.01.2011, 07:23
я просто в гугле читал што ета функция пропускает какуюто кодировку и которая понятна для mysql только вот где што и как нигде не обьясняется


можно линк?

Redwood
26.01.2011, 08:24
http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/

je0n
26.01.2011, 13:28
http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/


это очень круто, хоть и легкие дровишки можно собрать только в азии, как я понял.

Баги для указанных функций доступны и в php последних версий?

Redwood
26.01.2011, 17:20
mysql_escape_string (PHP 4 >= 4.0.3, PHP 5)

addslashes (PHP 4, PHP 5)

Seravin
26.01.2011, 17:29
если в скуль-запрос передается текстовый параметр, обработанный этой функцией, то никак (насколько я знаю). Если же целочисленный - то и обходить не надо
просто юзай инъекцию без использвания кавычек внутри запроса. Текстовые значения для запроса в этому случае можно передавать как CHAR(...).
Вообще эта функция экранирует кавычки для скуль-запроса и еще что-то незначительное.
P.S. некоторые кодеры, без знания дела, и целочисленные значения фильтруют этой функцией, что НЕДОПУСТИМО. Я сам из таких кодеров был


эм... хотелось бы поинтересоваться почему недопустимо?

qaz
26.01.2011, 18:27
http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/


я вот только чёт не понял





ничего не происходит, почему? разор в своём блоге от фонаря всё штоли пишет?

Seravin
26.01.2011, 19:28
уязвимость в мультибайтовых кодировках BIG5, EUC-JP, EUC-KR, GB2312 и SHIFT_JIS и др. utf-8 хоть и мультибайтовый, но под данную уязвимость не попадает (c)

~d0s~
26.01.2011, 19:52
эм... хотелось бы поинтересоваться почему недопустимо?


Думаю он имел ввиду,что если знаешь что должно быть число,то легче юзать преобразование типов: (int),intval,settype или например проверять is_numeric,etc...

qaz

Перечитай статью,ты ничего не понял.

Seravin
26.01.2011, 20:47
ну я например делаю так


"SELECT * FROM table WHERE id = '".mysql_real_escape_string($_GET['id'])."' and name = '".mysql_real_escape_string($_GET['name'])."'";

id число

name строка

qaz
26.01.2011, 23:59
Думаю он имел ввиду,что если знаешь что должно быть число,то легче юзать преобразование типов: (int),intval,settype или например проверять is_numeric,etc...
qaz
Перечитай статью,ты ничего не понял.


я уже раз 20 перечитал, серовно чёт не плучается, што я не понял?, хелп

je0n
28.01.2011, 08:39
ну я например делаю так

"SELECT * FROM table WHERE id = '".mysql_real_escape_string($_GET['id'])."' and name = '".mysql_real_escape_string($_GET['name'])."'";

id число
name строка


а кто-то делает так:


"select * from table where id=".mysql_escape_string($_GET['id']);



qaz

походу БД должна быть в любой кодировке, совместимой с asci, а на сайте использоваться одна из перечисленных в статье.

Если я правильно все это понимаю, то в таком несоответствии возможна инъекция...