Просмотр полной версии : SSS exploit
Zadoxlik
01.01.2007, 23:31
Satanic Socks Server DoS exploit (http://zadoxlik.info/exploit.c)
Кто скажет в чем бага ? :)
P.S. http://www.ibbs.ru/ftpdrmist/sources/sss.c сервер
D=P=CH= MOD=
01.01.2007, 23:46
Я конечно ламер в этой теме...
Могу предположить ...
Нулевой байт?
зы Прозьба без хаха =)
guest3297
01.01.2007, 23:51
Перелолнение буфера?
Бага в gethostbyname.
Или переполнение буфера здесь:
char* _ConnectStruct;
int From;
int To;
char Buff[BUFF_SIZE];
char* Error;
Zadoxlik
02.01.2007, 01:04
НЕТ! =)
Zadoxlik
02.01.2007, 01:06
Это гусю, все остальные не считаются, Ваши ответы не могут быть приняты или не принты, т.к. они не содержат полезной информации =Р
Zadoxlik
02.01.2007, 01:28
НЕТ!
Кто победит получит от всех участников репутации, а кто не выставит из учавствующих репутацию победителю получит минус =)
while(buff_size > 0)
{
bytes = send(s, Buff, buff_size, 0);
или
while(buff_size > 0)
{
bytes = recv(s, Buff, buff_size, 0);
больше не знаю=)
Zadoxlik
02.01.2007, 01:44
Чего ты не знаешь? Что ты сюда код бросил? я тебя в чем уязвимостьс пррашиваю =) Ненадо сюда код бросать и говорить вот там уязвимость :d Это нечестно неинтересно и не засчитывается =)
оки..думаю что ошибка в том что функция while зацикливается из-за этого получается переполнене и происходит падение
Zadoxlik
02.01.2007, 01:49
НЕТ! Надо по-лучше подумать =)
Zadoxlik
02.01.2007, 01:51
http://zadoxlik.antichat.ru/mnogovas.gif
Я вас запомнил, кто не проставит репу победителю получит минусы =))
Zadoxlik
02.01.2007, 02:18
ТАк, сегодня все сдались =d Будем ждать греата, протеуса, нерезуса, таху =) ну и остальных :d
gemaglabin
02.01.2007, 02:58
Решил глянуть над чемже парится весь ачат,и почему это должны сделать только тоха протеус и грейт - увидел код на си и разочаровался.Ну чтож глянем внутрь
if(!connect_to_sss(&s, argv[1], atoi(argv[2]))){
statfinish(FALSE);
return 0;
}
statfinish(TRUE);
statadd("Exploiting the target");
sss_exploit_packet(s)l
Кусок,отвечающий за коннект и посылку эксплоита,дальше поидее мы по спецификации протокола SOCKS отправить специально сформированный пакет с айпи и портом куда мы собствено захотим законекиться
Аналог на дельфи для пятых носков
FProxyBuf:=FProxyBuf+ char(FHostAddr.sin_addr.S_addr)+char(FHostAddr.sin _addr.S_addr shr 8)+
char(FHostAddr.sin_addr.S_addr shr 16)+char(FHostAddr.sin_addr.S_addr shr 24)+#0;
Смотрим код сервера,после того как к нам законектились мы создаем поток вызовом AcceptThread(int s),далее вызывается Socks5GetCmd , в котором мы передаем айпи.Ага,смотрим char ip[4] это я так понимаю ограничитель?Значит задохлик посылает пакет с айпишником больше заданной длины,тем самым вызывая стринг буффер оверлоу.Так,да?
/* какая же гадость эта ваша си */
Странно, что в шеллкоде 4ый байт - 0x05 (AddrType), а в коде сервера в Socks5GetCmd() в switch'e для AddrType прописаны случаи только на 0x01..0x04... Дальше хендшейк должен сорваться
2гема
if(!sread(s, ip, 4))
По ходу он полюбому читает тока 4 байта, так что даже если послать больше ничего не выйдет...
Не ругаццо, если что) Си уже совсем не помню =\
Zadoxlik
02.01.2007, 05:13
Так,да?
Нет конечно =) Гадость это ваш делфи фи. =)
Zadoxlik
02.01.2007, 05:14
Никто не подкрался к истине! Думаем, товарищи, стыдно! =d
P.S. В теме отметился гема =) Значит у победителя сильно прибавится репутации :D
C в топку, Delphi в топку, Ассемблер рулит ;)
А если серьёзно, то ты вроде запретил сокету разрывать соединение(SO_LINGER), пока не получина вся переданная информация, сам то передаёшь только заголовок, сервер отвечает, и переходит в режим ожидания и будет ждать пока соединение не оборвётся, так как таймаута нам не придусмотрено.
Смущает только одно, ведь если ты выключишь свой комп, соединение ведь придётся закрыть, разьве нет?
Странно, что в шеллкоде 4ый байт - 0x05 (AddrType), а в коде сервера в Socks5GetCmd() в switch'e для AddrType прописаны случаи только на 0x01..0x04... Дальше хендшейк должен сорваться
2гема
if(!sread(s, ip, 4))
По ходу он полюбому читает тока 4 байта, так что даже если послать больше ничего не выйдет...
Не ругаццо, если что) Си уже совсем не помню =\
AddrType = TempBuff[3];
Поэтому AddrType будет равен 0x01.
Для работы с сокетами нужно подключить библиотеку ws2_32.lib
Нужно добавить после #include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
По моему ИП-шник преобразованный функцией inet_addr не может равняться $CC09B112, может бага в этом?
Gorn, бред, это можно задать в настройках проекта
Гем, фигня это все.
Вот запрос:
\x05\x01\x00\x05\x01\x00\x01\xCC\x09\xB1\x12\x00\x 51
В нем:
\x05\x01\x00 - это приветствие серверу
\x05\x01\x00\x01\xCC\x09\xB1\x12\x00\x51 - запрос на коннект к IPv4 адресу CC.09.B1.12 на порт 0x51, что в 10-чной системе будет:
204.9.177.18, порт 81
Инфа об этом айпи (http://www.nic.ru/whois/?ip=204.9.177.18)
А если серьёзно, то ты вроде запретил сокету разрывать соединение(SO_LINGER), пока не получина вся переданная информация, сам то передаёшь только заголовок, сервер отвечает, и переходит в режим ожидания и будет ждать пока соединение не оборвётся, так как таймаута нам не придусмотрено.
SSS - многопоточный. этим его в даун не отправишь
Zadoxlik
02.01.2007, 16:04
hidden, НЕТ! Хотя мыслишь =) Хм, вообщем норм мыслишь, развивай! =)
_Great_ все верно, ЗаКо до до этого добежал в первую минуту своего исследования, но только это пока ничего не дает :D Думайте!
Zadoxlik
02.01.2007, 16:08
И обратите наконец внимание на шапку комментария =) может она вас натолкнет на путь истинный =)
У меня, кстати, эксплоит не работает =)
$ gcc sss.c -o sss -lpthread
sss.c: In function `Socks5Accept':
sss.c:423: warning: comparison is always true due to limited range of data type
$ ./sss
(gcc ругнулся на то, что переменная типа char никогда не будет равна 0xFF.. ну и хрен с ним).
сокс сервер запустился нормально.
Ваш сплоент пишет:
Statanic Socks Server (SSS) <= 0.66 remote DoS exploit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~
by Zadoxlik[antichat.ru]
Usage:
#./sssploent.exe host port
[+] Connecting to the server... Success!
[+] Exploiting the target... Success!
[-] Test connection... Failed!
The target is alive. May be it is not Satanic Socks Server, or SSS of newer version
Zadoxlik
02.01.2007, 16:14
Могу записать видео где он работает =) Ну вообще здесь вся загвоздка в ОСи
Zadoxlik
02.01.2007, 16:16
Тут важно не столько что он где-то не работает, а то, что он где-то работает и вопрос - почему так. Ведь практической пользы от DoS эксплоита против сокс сервера маловато =)
Тогда пара вопросов:
- при каких условиях он работает?
- отрубается сокс-сервер или вся тачка?
И на каких системах он работает?
Я тестил на:
$ uname -a
Linux ****** 2.4.29-grsec+w+fhs6b+gr0501+nfs+a32+++p4+sata+c4+gr2b-v6.189 #1 SMP Mon Feb 7 13:23:30 PST 2005 i686 GNU/Linux
Zadoxlik
02.01.2007, 16:33
Так вот тут видео совсем небольшое. В видео учавстивуют две программы (сплоит и ССС), исходные коды которых представлены в первом посте этого топика:
http://zadoxlik.info/vo.rar (500 KB)
Задача - понять - почему так =)
Кстати щас вошел в асю - ЗаКо ответил ВЕРНО! Но однако здесь постить он не будет, так что у вас все шансы получить много репутации =)
Хм.. у тебя фряха, у меня линь.
будем думать
кстати, может быть из-за особенностей создания потоков в FreeBSD?
Zadoxlik
02.01.2007, 17:59
Все сдалсиь? =)
ппц )
неееет, я еще посижу, подумаю )
Zadoxlik
02.01.2007, 19:53
Ну нет, теперь тут любая подсказочка сразу выбьет на правильное решение =d Вот ПротеуС пришел. Подождем немного еще =)
guest3297
02.01.2007, 20:05
Щас я тоже код поковыряю...
>>ПротеуС пришел. Подождем немного еще =)
мммм, немного время неправильно подобрано. голова 2 января совсем не варит по понятным при4инам )))
ЗЫ: жаль 4то я щас на ден4ик иду. подождите до ве4ера плиз, я приду - присоеденюсь...
Zadoxlik
02.01.2007, 20:17
Без проблем!
Блин нормальные логические ответы уже были даны..Уже тупым методом :D
Zadoxlik,
все это к setsockopt()-у никак не относится?=\
Zadoxlik
02.01.2007, 21:12
Моснтр, это подсказка, я ж сказал подсказок больше не будет. Если все сдадутся будет уже решение готовое.
Ребята, работаем! ЗаКо без всяких подсказок и даже без видео :ddd достаточно оперативно нашел верный ответ!
-Concord-
02.01.2007, 21:19
if((hp = gethostbyname(host)) == NULL)
Zadoxlik
02.01.2007, 21:22
И что ты код сюда сунул? Ну говорил уже не суйте код =) А говорите в чем уязвимость
тогда http://www.web-hack.ru/exploit/source/setcock.c - это совсем не относится сюда =\
Zadoxlik
02.01.2007, 21:29
Публичные экслоиты тут точно непричем
guest3297
02.01.2007, 21:45
Некоректная обработка данных переданных в char.
Добавлю свою чушь =)
Некорректная обработка ответа, если сервер отверг запрос на подключение (503 Service unavailable).
Zadoxlik
02.01.2007, 21:54
НЕТ!
Тогда нет там ошибки, ты ему просто говоришь упасть, вот он и падает...
Может послать не connect методом...
(скоро истерика начнется)
Zadoxlik
02.01.2007, 22:14
Может мне деньги на своем даре зарабатывать тогда... =)
blackybr
02.01.2007, 22:35
Ну вообще хз =)))
При беглом осмотре увидел что размер буфера задется в 4-5 строчках.. но вряд ли там наверн (ведь все таки не там?))
ну хм... еще на 301 строчке еще смутило gethostbyname
ЗЫ сильно не бить.. сишник знаю на тройку
Zadoxlik
02.01.2007, 22:37
Если тебя gethostbyname смутил, представляю что с тобой будет если ты посмотришь этот сайтик:
http://atheist4.narod.ru/
blackybr
02.01.2007, 22:46
Я бы сказал кто ты =))))) но здесь дети ))))
Дал знакомому посомтреть - сказал что все отлично работает )))
Хм.. у меня на 2 испробованных серваках не пашет. В коде я ниче плохого не вижу.
Ну почти..
Zadoxlik
02.01.2007, 23:28
=] Да, так и есть на самом деле, и это тоже подсказка
Zadoxlik
02.01.2007, 23:29
Уточню даже что Греат не смог свалить сервер, который у меня валится вообще без накладок =) И это подсказка!
И где тут подсказка... канал у меня нормальный.
Zadoxlik
02.01.2007, 23:37
Это просто факт, и он является подсказкой =)
Zadoxlik
02.01.2007, 23:53
Ну вы меня в повал убили! Чуть-чуть не то что обычно, и уже пасуют все. И так если никто не пройдет завтра утром будет опубликовано решение!!! А все активные участники реверс раздела получат от меня минусы!!!!! =) Я серьезно
Zadoxlik
02.01.2007, 23:55
Абра удали свой пост, я еще раз говорю уязвимость реально существует и с ней можно свалить ЛЮБОЙ юникс сервер, просто иногда надо стараться больше чем в другие разы. Удали пост и больше не флеймим! За флейм тоже минусы!
Еще раз говорю все очень серьезно =))) И стыдно вам спецам должно быть!!!
ЛЮБОЙ юникс сервер
Да ну? Тогда свали
mcsoft.ru 60600
Короче у меня два предложения - создание большого числа потоков или чтение/запись по невалидному (то есть по которому отсутствует память) адресу.
Больше ничего просто быть не может.
Zadoxlik
03.01.2007, 00:04
Первый не понял, поясни почему.
Второй - все я понял что ты имеешь ввиду. Нет не так, хотя звучит сердито
1. сабж НИКАК не относитя к разделу реверсинга (хотя относится к нему больше остального, поэтому идем дальше ;)
2. при просмотре как видео, так и сорцов сплойта появляется мысль, 4то весь топик - фейк, 4то кстате можно подтвердить 2-3 логи4ными доводами
3. за неимением возможности отладки и времени ;) отве4у 4то все это фейк (буду рад если я ошибаюсь и Задохлик приведет хоть один логи4ный довод, 4то это не фейк)
Zadoxlik
03.01.2007, 00:09
1. Исследование программного обеспечения\реверсинг
2. Я уже говорил что нет, какой смысл тут это устраивать, а вообще у тебя же специальность компьютерная безопасность, нельзя так словами бросаться! =)
3. Если ПротеуС сдался, то думаю возможно здесь не появится умных мыслей, утром будет опубликовано решение. Еще раз скажу есть человек который нашел ключ к ответу - это Зако, хотя как выяснилось с моей невольной небольшой подсказки
У меня тоже нет возможности отладки. мало того, я своими глазами еще работу сплоита не видел, хотя тестил на трех (!) машинах (кажется, топикстартер говорил, что любой никс завалить можно... )
Zadoxlik
03.01.2007, 00:13
Все я это не комментирую все написано выше. Еще раз говорю это подсказка. Более того если не сработало на трех смашинах, то вполне вероятно что не сработает ни на одной =)
Люди вы вообще подумать не хотите, да бага несовсем обычная =)
guest3297
03.01.2007, 00:13
хотя как выяснилось с моей невольной небольшой подсказки
Давай и нам тоже что ли....
Zadoxlik
03.01.2007, 00:16
Нет, подсказки закончились, это неинтересно. Скажу одно. Я багу обнаружил только взглянув на код, если у Вас так не выходит, значит стоит обратиться ка какой-нибудь справочной литературы.
Вот все подсказки которые мог дать уже дал, остальные подсказки будут вести сразу к верному овтету непосредственно. Это неинтересно, вся затея теряется
да, Zadoxlik
и вправду. в сорце написано, 4то сабж валит любой никс.
если мы не можем пощупать и ты не даешь логи4еских объяснений по поводу по4ему так, то тут есть только 2 логи4еских объяснения:
1. фейк (в любом виде, т.е. сплойт работает нормально, и не только на твоей машине)
2. сплойт кривой
в любом слу4ае 4тобы ответить на заданый вопрос нужны подробности (хотя бы условия работы етц)
и еще, если сплойт рабо4ий, то
>>Еще раз скажу есть человек который нашел ключ к ответу - это Зако, хотя как >>выяснилось с моей невольной небольшой подсказки
>>__________________
нужно было маленькую подсказку постить всем для баланса сил )
//Интересно, в видео стоит дата 2001 год :)
Вот. Моя версия
Проблема в синхронизации потоков.
В потоке есть вызов
free(PipeStruct->_ConnectStruct);
который уничтожает объект, переданный потоку. Потом этот же объект передается второму потоку. Если потоки будут распланированы так, что любое обращение второго потока к объекту будет после уничтожения объекта, все слетит в чертям.
guest3297
03.01.2007, 00:48
2Macro
все там правильно стоит сиди и думай
Zadoxlik
03.01.2007, 00:53
Great, мне Зако тоже показывал шню с free, говорит что может быть такое что два раза одну переменную freeшат, не знаю, ща посмотрю. Сплоент работает не по этому!
Zadoxlik, перечитай мой пост :)
При чем тут шня с free и многократными освобождениями. Я тебе о другом толкую.
Один поток уничтожает структуру прежде, чем второй завершит с ней работу. => SIGSEGV, sss упадет.
Zadoxlik
03.01.2007, 01:05
да пордон я его не читал, перчитал. Всеравно это неправда, там баги нет =Р
Zadoxlik
03.01.2007, 01:12
Беру слова назад, там есть бага, но падает не из-за нее, из-за нее не успеет упасть
поддержую, при определенных обстоятельствах дос будет
ЗЫ: возможно при4ина основной баги в манипуляции флагом авторизации?
Беру слова назад, там есть бага, но падает не из-за нее, из-за нее не успеет упасть
наша взяла =)
Ок, поищу ещё багов.
Zadoxlik
03.01.2007, 01:21
поддержую, при определенных обстоятельствах дос будет
ЗЫ: возможно при4ина основной баги в манипуляции флагом авторизации?
ДоС не теоретически а очень даже практически возожен. Флаг... Ммм.. Не знаю, представленная уязвимость с ним не связана
Zadoxlik
03.01.2007, 15:23
Сначала хотел сказать кое-что по поводу баги, найденной Greatом. Бага существует, но сервер из-за нее фактически при любой своей нагруженности упасть никогда не сможет. Т.е. будет проще выбить весь сервер из сети чем свалить SSS через эту багу!
А т.к. на видео мы с вами видели вполне недвусмысленное падение сервера от простого дуновения сплоентом, то тут собака порылась где-то совсем не там. Ктому же, если учитывать что в эксплоите идет коннект на 81ый порт, который на сервере, к которому идет коннект (сервер живого журнала), закрыт, то подпрограмма SocksPipe не будет запущена ни в текущем не в новом потоке!
И так!.... *Играют барабаны!* Сейчас все будут смеяться =)! Ни один античатовец (кроме ZaCo, который не считается) не нашел ответа к такой простой загадке!
Если бы кто-то порешил посмотреть у себя с чем валится бедный SSS, оказалось бы что он вылетает с... broken pipe! =) Дело в том что в Юникс системах есть небольшая подлость при работе с вводом/выводом в т.ч. в сокеты. Если попытаться послать данные TCP сокет, который был закрыт (!!!), приложение получит сигнал SIGPIPE и свалится.
Таким образом вся суть экслоита - послать данные и быстро-быстро разорвать соединение, так чтобы при следущем вызове send оно было уже закрыто, вот и вся история.
Универсальное решение - поставить обработчик сигнала SIGPIPE, для Linux и самых свежих FreeBSD можно просто при вызове send выставить флаг MSG_NOSIGNAL, правда, как уже говорил, SIGPEP может вылететь не только при работе с сокетом, так что лучше все же накумекать обработчик сигнала.
Вот и все! =)))
Если не знаешь, то никогда не догадаешься;)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot