Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: Пред. 1 ... 7 8 9 10 11 След.
RSS
Microsoft Windows XP Workstation Service Remote Exploit (MS03-049)
 
2 r00t: Отличие мультибайтовой строки и unicode. Спасибо, этого я не знал....

Вообщем мои выводы:

переполнение происходит где-то между 4000 и 5000 байтами в unicode строке (еще точно не выяснял) .... наверно 2044*2 и есть..
Насчет таргетов я понимаю и я использую правильный. Но причина не в этом. И не в 89, 80 ... Причина в multibyte, которую SP1 принимает как-то по дебильному, заменяя некоторые символы на x00 ! Поэтому если взять тот же с этой темы и попробовать против SP1 с правильным джампом то будет dos с offset 0000000 ----> Потому что sp1 разбрасывает свои 0x00 по buff (exp_buf), причем в основном в конец, где и находится REt адресс ----> ret становиться кривым (уж точно не jpmesp ((  .....) отсюда и offset.
Если даже взять и заполнить буффер не jmp+shellcode а просто символом (0x38 < x80) и послать то резуьтат будет такой же = offset 00000 ... хотя должно быть 38383838... То есть причина не в 89 80 81 а в multibyte. Хочу попробовать другие функции ANSI -> UNICODE.... swnpritom или как было в пред. exploite:

memset(unicode, 0x00, sizeof(unicode));
for (x = 0, i = 0; i <= sizeof(unicode); x++, i+=2)                  unicode [I] = exp_buf[x];         
хотя автор называл это crapom )...
 
И еще...
если проблема не в shellcode то и ninja не поможет ...

r00t:
~~~ угу идею нинжа с пакетштрма и передрал. шеллкод
~~~ универсальный

Очень интересно какая функция перегоняет в unicode ЭТОТ 'шеллкод универсальный' ? multibyte?
Я прикрутил ninja shellcode (не с паркетсек) - 100% рабочий (с lsas работает на ура да и с sp0). В декодере все символы < x80, но даже он не доходит ...

Так что меня стали терзать смутные сомнения .)
 
Если у меня работает стабильный универсальный сплоит(масштабные полевые испытания прошли успешны ;)), а у тебя нет, это значит, что ты что-то делаешь не так.

> Очень интересно какая функция перегоняет в unicode ЭТОТ
>'шеллкод универсальный' ? multibyte?
Да только то что я называл multibyte - на самом деле называется не мультибайт а WideChar String(WCS). MBS - это другое.

UNICODE=WCS=(USHORT)ASCII в случае ASCII-строки с кодам <= 0x80:

...
mbstowcs(unicode,exp_buf,sizeof(unicode)/sizeof(unicode[0]));
...

>  В декодере все символы < x80, но даже он не доходит ...

Вопрос - ты дебажил ситуевину переполнения службы на атакуемой тестовой машине и видел это переполнение?
Я дебужил и видел где вышибает. Когда нормальный шеллкод с нормальным таргетом отказался работать я начал снова смотреть что не так - отправил строку состоящую из байтов 0x01-0xFF и посмотрел что строка в буфере искажается(0x89 и еще какие-то коды).
Для того, чтобы узнать по какому смещению лежит сохранненый на стеке EIP отослал строку состоящую из "00010004000800120016..."

for(i=0;i<5000;i+4)
{
 sprintf(&exp_buf[ i ],"%04d",i);
}

Отловил деграбером access violation с ASCI представлением смещения в EIP.
Затем прицепил нинзя декодер с кодированным BASE64 пофиксенным универсальным шеллкодом.
И все заработало как надо на обоих осях.

Суть переполнения в том, что шеллкод написаный в ANSI кодировке преобразуется в двубайтовое WCS или UNICODE представление(в случае кодов <0x80) результат будет один WCS=UNICODE.
На удаленной машине в службе WORKSTATION при преобразовании полученной UNICODE/WCS строки в ANSI происходит переполнение. Дак вот разница между SP0 И SP1 - в том, что используются разные функции преобразования в одной преобразуется из уникода в ANSI а в другой из WCS в ANSI.
 
Понятно что я делаю что-то не так ) ...

Да, дебажил и EIP 0000000 и остаток стэка 000000.... наверно из-за WCS ...
Тогда я тоже отправлял такое:
//buffer - ANSI [4104]
//expl - WCS    [(4084+4+16)*2]

memset(expl,0x00,sizeof(expl));

memset(buffer,0x41,4084);
memset(buffer+4084,0x38,4);
memset(buffer+4088,0x41,16);

mbstowcs(expl,buffer,sizeof(expl));
 
если вывести через wprintf(L"\n%s",expl);
то все как надо AAAAAAA... до 4084, потом 8888 и AAA.. завершают.... отправил все это (ожидая что смещение где EIP будет либо 41414141 либо 38383838 Но как всегда 00000 ... поэтому я и думал что проблема в multibyte и в неправильной раскодировки sp1...

A зачем было тогда декодер делать если сразу знал что разница в обработке unicode и wcs? взять shell ниже 80 и прицепить.... (моя логика каменного века )))
 
Дак не знал я сразу ниче )) Был еще прикол там - против незалогиненой SP1 срабатывает против залогиненой - DoS.Пришлось поиметься, пока не дошло что да как.

Кстати по поводу причин проблемы с SP1 и идеи шеллкода с кодом <= 0x80, аналогичного ninja-шеллкоду я высказался на одном канале и хотел замутить уже что-то свое, пока через день на пакетшторме  не увидел сплоит с нинзя шеллкодом )) Смысла воплощать свою громоздкую идею уже не было.
Кстати там же просветил народ о найденном хитром универсальные оффсете(содержащем обычно недопустимый в сплоитах коде 0x0) в своем универсальном сплоите для DCOM )) и через примерно неделю в паблике появился сплоит с универсальными таргетами. Может быть зря рассказал... ))

ЗЫ
Сейчас проверил против SP1

     char exp_buf[2046+4+16+892];
     WCHAR unicode[2046+4+16+892];
...

// DEBUG
    memset(exp_buf,'A',sizeof(exp_buf)-1 );
     exp_buf[sizeof(exp_buf)]='\0';

     memset(unicode, 0x00, sizeof(unicode));

     mbstowcs(unicode,exp_buf,sizeo f(unicode)/sizeof(unicode[0]));

Вышибает на EIP=0x41414141. EBP=0x41414141, EDI указывают на строку "AAAAA" в ANSI. Попробуй побаловаться с размером отправляемого буфера.

Если хочешь, то регайся, кину исходником этого сплоя в приват - все равно он уже раритетное барахло ))
 
Ну все хоть не Guest Group )

вообщем наврал я злостно насчет 00000 в eip .... я походу с другими своими испытаниями перепутал ) c ms043

щас проверил все это опять

memset(expl,0x00,sizeof(expl));
memset(buffer,0x41,4084);
memset(buffer+4084,0x38,4);
memset(buffer+4088,0x41,16);
mbstowcs(expl,buffer,sizeof(expl));

у меня служба грохается (причем втихоря) ... и все, а посмотреть то состояние регистров нечем было (после долгих мучений подружить старый softice с xp). Поэтому я и не мог точно определить нужный адресс eip. Сидел и увеличивал размер буфера в ручную (по 10 )))). Пришел к выводу что он 4084 + 4 байта возврата.

А на рабочий конечно посмотреть хочется...

А вот насчет барахла не знаю .... из 10 машин - 9 уязвимы, при том что lsas и более популярные (среди народа)) вещи на этих же машинах уже пропатчены ...

А ninja все-таки злая весч ... я с ним ms03-043 переделал на w2k sp4 )... хотя там и 00 в seh
 
У тебя бага с вот этим:

mbstowcs(expl,buffer,sizeof(expl));

У тебя происходит переполнение самого эксплоита )))

size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );
Parameters
wcstr
The address of a sequence of wide characters
mbstr
The address of a sequence of multibyte characters
count
The number of multibyte characters to convert


count - количество символов, а не байтов, поэтому

mbstowcs(expl,buffer,sizeof(expl)/sizeof(expl[0]));
или
mbstowcs(expl,buffer,sizeof(expl)/sizeof(wchar_t));

Цитата
fuckOff пишет:
и все, а посмотреть то состояние регистров нечем было (после долгих мучений подружить старый softice с xp)

Cофтайс нормально дружит с W2k/XP, но нужно использовать или SoftICE из DriverSuite или патченый SoftICE 4.x(погугли на тему nticeWinXP_patch.zip или softice+xp). Есть проблемы SoftICE + VMware, но они тоже решаемы настройкой конфига VMware - решение в KnowledgeBase на vmware.com или на сайте нумеги.
А вообще, все эксперименты лучше проводить на виртуальной сети VMware - мало того, что переполнение системных служб возникает не в своей хост системе, не нужна вторая машина для экспериментов, так еще и есть мощная фича - снапшот состояния машины, очень удобно при отладке случаев переполнения в критических системных службах. Можно всегда вернуться на зафиксированное состояние виртуальной машины. У меня вирт. сеть порядка в VMware, 14 машин: FreeBSD 4.x 5.x,Linux RH 7.2 Gentoo 2004.2, WinNT 4.0, WinW2k SP3 SP4, WinXP SP0 SP1, WinME, Win2003, Solaris 9 x86 - широкий полигон для испытаний ;)
Для дебага в виндах в VMware я использую OlliDbg, отчасти потому, что решение проблемы с SoftICE нашел не сразу, да и более удобный и информативный ODNG IMHO, - там можно сделать attach к PID-у сервиса, к той же workstation, после аттача делается снапшот состояния и можно анализировать ситуацию переполнения даже в критических службах сколь угодно долго - полное восстановление состояния виртуальной системы на момент до переполнения происходит за несколько секунд. VMware ownz.
 
ГЫ ... и впрямь из-за "count - количество символов, а не байтов" Я даже description не читал. Аналог увидел и пошел юЗать. Думал последний аргумент длина буфера )))
А насчет переполнения самого сплойта то это звучит пугающе )))
В принципе ничего такого не происходит, просто буфер записывается по другому... memset(expl,0x00,sizeof(expl)) + неправильное mbstowcs....
поэтому я 0000 в esp и eip получал )))

А насчет SoftICE из DriverSuite (4.2) я знаю... я говорил про 4.05, там не все так просто (у меня с моей видео картой))). А DriverSuite качать возможности не было (.

Вообщем сейчас все здорово - вышыбает по тем адресам по которым надо ) За сплоит спасибо (живой пример). Времени протестировать не было но скоро доберусь...
 
2root:
прочитал весь тред (уффф, ну я герой :)) и, честно говоря, разочарован. нет бы поделиться информацией, так ты сидишь и всем объясняешь какой ты молодец, как у тебя все замечательно работает. нет, я не скрипткидди. нет, я не гуру. я программер, просто программер. но, перепробовав десяток способов побороть NetAddAlternateComputerName, я так ни к чему и не пришел. и, судя по треду, проблема с этой функцией - единственная серьезная проблема, волнующая умы всех сидящих здесь как гуру, так и скрипт-киддисов.
выслушаю конструктивную критику и с радостью приму информацию по NetAddAlternateComputerName на icq#279767230 или divide_by_zero@mail.ru
 
вдогонку, чтобы предупредить непонимание: проблема с функцией возникла в Win2k =)
 
Используя это, вы можете ИЗМЕНИТЬ вашу жизнь!
Это изменило мою жизнь… Я наткнулась на это на одном форуме и решила попробовать. Бродя как обычно по разного - рода форумам я нахожу эту статью, в которой говорится что можно сделать тысячи долларов за пару недель при вложении всего 6$. Ну да… подумала я, это должно быть очередной фишкой для лохов, но решилa всё-таки ДОЧИТАТЬ и УЗНАТЬ что там предлагают … Дальше там говорилось что надо перевести по 1WMZ на 6 кошельков. После того, как перечислите деньги, исключите из списка самый первый номер, а в конце списка напишите свой и закинуть на 200 разных форумов. Никаких уловок… Ну я поразмышляла и подумала что я ничего не теряю кроме 6 WMZ и решила попробовать… И угадайте что!!! Через 4 дня у меня начал пополняться кошелек. Я была в шоке!!! Но сразу же подумала что на этом всё и закончится… Но не тут то было! В первую неделю я сделала 18 WMZ, дальше к концу второй недели уже больше 800 WMZ...к середине 3-й недели 6580 WMZ...!!!.Уже 4-я неделя и я уже насчитала 15 000 WMZ и сумма растет очень быстро. И это все только за цену в 6 WMZ !!! Я была в очень плохом экономическом положении до того как наткнулась на эту статью. Я не поверила что это работает пока не начала получать деньги… Я купила все что мне надо… и это очень кстати, согласитесь?!...А теперь я расскажу Вам как это работает и самое главное ПОЧЕМУ…! Я вам обещаю что если вы будете в точности соблюдать ниже перечисленные инструкции, то вы НАЧНЁТЕ ПОЛУЧАТЬ намного больше денег чем вы думали, не прилагая к этому особых усилий. Предложение: Прочтите это пару раз!!! Следуйте инструкциям и ДЕНЬГИ НАЧНУТ ПОСТУПАТЬ в ваши кошельки. Согласитесь это просто!!! Это легально. И ваш вклад составляет всего 6 WMZ... ВАЖНО: Это не обман и это не незаконно при этом вы ничем не рискуете, но это работает!!! ЗАМЕТЬТЕ: Следуйте инструкциям в ТОЧНОСТИ и 50 000 WMZ и больше будут вашими в течении от 20 до 60 дней. ВСЁ ЭТО УДАЧНО РАБОТАЕТ ТОЛЬКО БЛАГОДАРЯ ЧЕСТНОСТИ УЧАСТНИКОВ!.
1.Если Вы заинтересовались, вот список кошельков в системе WebMoney, на которые нужно переслать по 1 WMZ :
Z275135063178
Z280077491057
Z774316928731
Z170066927174
Z428297156592
Z664726711662
2. После того, как перечислите деньги, исключите из списка самый первый номер, а в конце списка напишите свой. Теперь остается только разместить информацию на форумах и получать прибыль.Разместите эту статью на не менее чем 200 форумах. ЗАПОМНИТЕ , чем больше вы разместите тем выше будет ваш доход и этот доход будет на прямую зависеть от вас . Этот бизнес продолжает существовать и процветать только благодаря честности и серьезности участников. Итак когда вы достигнeте первой позиции вы будeте иметь тысячи долларов просто как создатель списка людей. Это стоит 6 WMZ и совсем пустяковой работы!!!Займитесь этим сейчас – не откладывая на завтра…!!! Время деньги! А теперь я вам расскажу почему вы в любом случае ничего не теряете, а ТОЛЬКО ВЫИГРЫВАЕТЕ ! Скажем из 200 размещений я получу только 5 ответов (очень низкая цифра). Значит я сделаю 5 WMZ находясь на 6 позиции в списке . Теперь эти 5 людей делают опять же МИНИМУМ 200 размещений с моим именем на 5 позиции, и только 5 людей отвечают тем первым 5 – это уже 25 WMZ. Дальше эти 25 людей делают по 200 размещений с моим именем на 4 строчке и только 5 отвечают – мой доход 125 WMZ. Теперь эти 125 людей разместив и получив только по 5 ответов дают мне 625 WMZ прибыли(я на 3 позиции). Дальше смешнее: эти 625 делают по минимум 200 размещений со мною на 2 строчке и только 5 людей отвечают – это 3125 WMZ. Самое интересное это то что эти 3125 людей сделают еще по 200 размещений, ну а если им ответят только 5 людей то я уже получаю 15625 WMZ. Не так ли внушительная цифра? И это всё за первоначальный вклад в 6 WMZ. Когда вас в списке уже нет вы просто высылаете 6 WMZ тем людям из списка и ставите свое имя и адрес на 6 позицию и опять размещаете. Вы себе можете представить что тысячи людей со всего мира присоединяются к Интернету и читают эти статьи каждый день . Так же как и вы сейчас читаете эту !!! Так что?Потратите ли вы 6 WMZ что бы узнать работает ли это? Это строка для пессимистов : А если этот бизнес рухнет и никто мне денег не пришлет?Ну и что !!! Каждый день в Интернете появляются от 20000 до 50000 новых пользователей, какие шансы что они все-таки захотят попробовать себя в чем-то новом Ну и последнее: Это действительно великая аксиома – чтобы получить что- то надо дать что-то , а что бы получить еще больше надо дать еще больше!Убедитесь в этом сами… Удачи всем!!! Спасибо заранее.
 
to r00t:
Надолго я задержался... )
Да, все работает... Но иногда зависит от - залогинен пользователь или нет. И от fs тоже какая-то зависимость есть.

to dbz!by:
Информация по NetAddAlternateComputerName :
http://yandex.ru/yandsearch?stype=&nl=0&text=NetAddAlternate ComputerName

Мне это сильно помогло ).... Да и вроде проблем то с ней нету...

P.S: а исходник то для паблика был? или для себя так старался ?
 
dbz!by
Вроде бы в этом же треде было разжевано насчет этой "проблемы" с NetAddAlternateComputerName.
Говоришь программист? А вот этот код ни о чем не говорит?

     hinstLib = LoadLibrary("netapi32.dll");
...
     if (hinstLib != NULL) {
           ProcAddr = (MYPROC) GetProcAddress(hinstLib,"NetAddAlternateComputerName");
           if (NULL != ProcAddr) {
...
                }
           } else {
                printf("procaddr  null\n");
           }

Разве не видно, что GetProcAddress возвращает NULL только если не может найти функцию в библиотеке? А функцию он не может найти в netapi32.dll потому, что ее там нет. Эта функция появилась в Win2k3 и XP, отсюда вывод - или запускай сплоит на W2k3/XP или вместо NetAddAlternateComputerName генерируй пакеты сам - тогда будет работать и на любом *nix-е если выкинуть WS-специфики.

fuck0ff
Не должно быть никакой зависимости от FS - это не та же самая бага в wkssvc, что и в Win2k, где сплоит срабатывает только против w2k, стоящих на FAT32, т.к. FAT не поддерживает ACL и уязвимая функция, пишущая в логи не ловит permission denied не дойдя до переполнения.
А по поводу залогинен люзер или нет нет, так в моем сплоите это не имеет значения(или ты говорил про паблик сплоит?). Имеет значение только локализация винды и ее тип HE/Pro, т.к. таргеты разные.
 
Цитата
Svetlana пишет:
... и решила попробовать… И угадайте что!!!
Попробовала и тебе понравилось?! ;]
 
rm
 
2r00t:
вся проблема была в том, что я упорно пытался заставить работать эту хрень на win2k =)  уж чего я только не перепробовал... даже рассказывать не буду :)
а вся эта фигня с GetProcAddress совершенно излишня. все делается гораздо проще
в общем, я, конечно же, разобрался, и, конечно же, запустил на winXP. работает =))) но не везде :(

2fuckOff: молодой человек... =)
 
коль уж тема про vmware + softice проскочила, то поделитесь пожалуйста как. Какая версия? или где почитать можно про это ?
 
Цитата
r00t пишет:
...
Cофтайс нормально дружит с W2k/XP, но нужно использовать или SoftICE из DriverSuite или патченый SoftICE 4.x(погугли на тему nticeWinXP_patch.zip или softice+xp). Есть проблемы SoftICE + VMware, но они тоже решаемы настройкой конфига VMware - решение в KnowledgeBase на vmware.com или на сайте нумеги.

http://forum.sources.ru/index.php?showtopic=48982
 
драйвер студио 3.1 работает на vmware (пришлось качать
70 метров) а вот заставить softice 2.7 или 4.05 с
заплаткой не получилось (((
Да и еще никто не замечал такое:
Когда загружен driverstudio переполнение не происходит (
Где то читал что подгружаются модули с айсом из studio
3.1 exploiting proteciton...
Как быть с debuggerom.... нужно что-нить чем можно
состояние регистров посмотреть в момент переполнения
 
OlliDbg -> Attach PID [pidof wkssvc]
Страницы: Пред. 1 ... 7 8 9 10 11 След.
Читают тему (гостей: 19)