PDA

Просмотр полной версии : Комментарии к статье "Переполнение стека. Часть 1" by KEZ


trancer
18.12.2005, 18:26
Заранее приношу извинения администрации сайта за выбранный метод комментирования, но
а) я так и не понял как можно добавить комментарий к статье
б) данный комментарий слишком длинный

посему решил создать тему на форуме(надеюсь что раздел правильно выбрал...)

>>MOV EAX, EBXM
правильно: MOV EAX, EBX

>>В интернете я встречал только одну статью, которую друг у друга украли тысячи сайтов.
можно ссылку? или хотя бы кусок текста из статьи для гугля? Лично я встречал просто море статей про переполнение
буфера, так что пребываю в состоянии весьма сильного удивления от вышеприведенной фразы...

>>Win32 - cmd.exe, command.com, Linux - /bin/bash, /bin/sh и др.
Имхо правильней WinNT - cmd.exe, Win9x - command.com, ибо обычно под Win32 понимают всю линейку Вин

>>проблема пока отпадает, ведь адрес fl() – 0x00401090, а запишем мы 0x90104000
Поскольку 0x00401090 и 0x90104000 Совершенно РАЗНЫЕ числа то лучше было бы не вводить никого
в заблуждение и написать так: проблема пока отпадает, ведь адрес fl() – 0x00401090, а РЕАЛНО ЗАПИШЕТСЯ 90 10 40 00

>>Открываем сервер отладчиком (я использую OllyDBG) и находим ее адрес.
имхо тут одно из ... либо обьясняем на пальцах как находили адрес, либо отсылаем на какой-нибудь cracklab.ru за
доками, либо обьясняем как трейсить прогу, и как обойти start-up код VC++ уповая на то что потом и сами разберуться,
либо сервак пишем используя только WinApi, отключив библиотечный код и start-up код(впринципе второе входит
в первое, но не суть важно) чтобы трейсить и находить нужные ф-ции было проще

>>Эти последнии четыре будут содержать "перевернутый" адрес 00401090.
>>Почему "перевернутый" - я говорил, что специфика стека такова, что данные должны
>>записываться наоборот, т.к. они и извлекаются оттуда наоборот. Это просто логика.
шЫдевр!!! автор браво!!! Это не специфика стека а специфика хранения двордов в памяти присущая IA-32 архитектуре
процессоров(младший байт хранится по младшему адресу). Со стеком это НИКАК не связано.

>>Я делаю так - в EIP пишу адрес команды (точнее набора байтов,
>>т.к. реально эти байты не для выполнения) JMP ESP в какой-нибудь
>>системной библиотеке. Например, найдем в ntdll.dll.
А можно рецепт зелья которое помогает посредством мысли находить нужные байты в файле?
Я это к тому что неплохо бы обьяснить как найти нужные байты... ну например хиевом,
а то так и предвкушаю поток вопросов как же их все-таки находить...

>>ESP указывает на 109-байты-нашей строки
Гы-гы откуда в строке char buffer[100]; 109-й байт?
правильнее так: ESP указывает на 109 байт от начала нашей строки в стеке

>>Используется в нем архитектура SEH - завершения.
>>Существуют ещё PROCESS и THREAD. Код в OllyDBG выглядит так:
И после этого код для получения второй части шелкода, а где же код
с "SEH - завершением" ;)

>>0012FAD6 E8 B55B9671 CALL WS2_32.recv >>>>>>>> ВЫЗОВ <<<<<<<<
это что, калл по hardcoded адресу ф-ции WS2_32.recv? Ну ну... во первых call address
зависим от текущего EIP,а пара push address / ret - нет(это к тому что а вдруг в атакуемой системе стек расположится
совсем по другому адресу - 3.14дец сплоиту! ... в недостатках метода - в стек еще нужно занести верный eip для
возврата, но это не сложно(hint: google->virii vx delta offset)), во вторых в эксплоите придется таскать помимо
адреса JMP ESP в ntdll.dll еще и адреса recv в WS2_32.

для лучшей переносимости лучше call по этому адресу:
004014C0 $-FF25 34634200 JMP DWORD PTR DS:[<&WSOCK32.#16>] ; WSOCK32.recv
Т.к. в данном случае адрес для калла зависит не от версии ОС, а от версии проги.
а нужный адрес система и сама подставит в таблицу импорта(точнее в IAT) при загрузке сервера.

>>http://int3.net
Прикол с бывшим в оригинале(см. архив) http://int13.net меня просто доконал %))))))))

А вообще как долго писалась эта статья? Интересуюсь т.к. int3.net не поднимается по-моему уже не меньше полугода...
Имхо Для начинающих лучше советовать те же cracklab.ru / xtin.km.ru.

И еще, не следует путать RE с Cracking'ом которому и был посвящен проэкт int3.net в свои лучшие дни.

----
В общем и целом же статья неплоха, расчитана на уже хоть немного, но подготовленного читателя,
а также выгодно отличается от кучи статей с тестовыми самописными прогами хотябы наличием кода для bindshell'a

P.S. надеюсь автор не обидится за столь придирчивое отношение к статье, как уже говорилось все это ИМХО
P.P.S. к шеллкодам в архиве не приглядывался, смотрел только статью
P.P.P.S. Надеюсь что все доступно обьяснил, что непонятно - спрашивайте

ZaCo
18.12.2005, 22:53
комменты и критика это всегда хорошо... но к сожалению в асме не силен))
---
пиши свою статью

trancer
19.12.2005, 05:28
ZaCo
>>пиши свою статью
а) хронически нет времени
б) все уже написано до нас, где-то хуже, где-то лучше, но уже написано... так что имхо, это бесперспективное
занятие... Лучше писать сами эксплоиты... Ну или статью аля "как я нашел уязвимость в распространенной проге",
и уже там описывать все подробно... Но для этого эту уязвимость нужно еще и найти ;)

З.Ы. Как, все-таки, к статьям добавлять комментарии?

Zadoxlik
19.12.2005, 18:21
З.Ы. Как, все-таки, к статьям добавлять комментарии?
Пока никак

Tikson
20.12.2005, 15:08
trancer
дай ссылки на статьи по которым ты обучался........

trancer
21.12.2005, 12:12
Tikson
>>дай ссылки на статьи по которым ты обучался........

Хорошая постановка вопроса =)
Ответ на него: х.з.
А если составлять список, то времени не останется ни на что, кроме как ползанья по винту / гуглу
в поисках прочитанный документов / книг / статей, что весьма не радует как перспектива :))))


Если же вас просто интересует как выучить ассемблер, то я бы посоветовал Купить какую-нибудь
книгу(Зубков / Юров / etc), а также пройтись по сайтам:
kalashnikoff.ru - есть архив рассылки по асму
wasm.ru - просто ЛУЧШИЙ ресурс по асму в рунете
cracklab.ru - ну куда нам юзать дебугеры, если не в помощь себе, любимым :)

Для начала, должно хватить.
А после посещения вышеприведенных ресурсов читать, читать, читать... и еще раз читать :))


Надеюсь ответил на заданный вопрос, если не так - переформулируй


P.S. все-таки хотелось бы узнать мнение KEZ насчет комментариев(или он в раб. дни офлайн?).

ProTeuS
21.12.2005, 18:45
trancer, репсект тебе за все высказанные мысли и заме4ания - они имхо действительно дельные! В первой статье-конкурсе было много нето4ностей, надеемся 4то во второй уже не будет (или будет поменьше)

>>все-таки хотелось бы узнать мнение KEZ насчет >>комментариев(или он в раб. дни офлайн?).
походу невидно его давно уже =(

ЗЫ: рад видеть на а4ате реверсера, их у нас немного
ЗЫЫ: поделись линками на свеЖую музы4ку (я ведь не оШибся, ты тоже слуШаешь trance?)

trancer
22.12.2005, 17:01
>>ЗЫЫ: поделись линками на свеЖую музы4ку (я ведь не оШибся, ты тоже слуШаешь trance?)
ГЫЫ... Идешь в ближайший магазин торгующий пиратскими дисками и берешь все что приглянулось :)
Ну или заказываешь в онлайн шопе(сам составляешь плейлист)
А потом слушаешь, слушаешь, слушаешь... дни напролет ;)

А насчет транса - бывает психеделик или прогрессив слушаю, а вообще человек с широкими муз взглядами.
Вот напр. в посл. время группа Пятница нравится(регга на современный лад)

З.Ы. сейчас вот в миксе слушаю "CRW - I FEEL LOVE" ничего так, нравится.
Правда не могу определиться что это прогр. транс? этакий ненавязчивый хаус? но вот нотки техно
начала-середины 90-х прослеживаются эт. точно

З.З.Ы. Ну и наофтопил я тут (c:

ProTeuS
22.12.2005, 17:44
хехе, в магазинах и на рынке всякое фуфло сродли мелодик-транс и остальной комерЦии ;)

реального хард-транса и прогрессивы особо и в онлайн-шопах не ска4аешь (да и деньги не охота тратить), плюс ко всему и рин.ру закрылся походу - уж0с! обидно....приходится слушать онлайн-радио и записывать стрим оттуда =(

ЗЫ: ссори за устроеный оффтоп - мы не хотели ;) если 4то - можно переименовать тему в "обсуждение трасн-музЫки" =)

trancer
03.01.2006, 12:44
Возвращаемся к нашим баранам... точнее к статьям по переполнению буфера...

вот например хорошая статья:
"Stack Overflows in Action" by buLLet/UINC, публиковалась в езине "RING0, ISSUE #1" взять можно на вебхаке
В общем и целом все грамотно и легко читается(мне ;) ) немного неряшливо выглядят цепочки из
buf[100]=0x3f;
buf[101]=0x01;
buf[102]=0xed;
buf[103]=0xff;
вместо простого
buff[] = ".......\x3f\x01\xed\xff.......";
расположенного вне какой-либо ф-ции

да и размер кода эксплоита это увеличит(первоначальный вариант то есть), но это кому как приятней и удобней :)

плюс если сплоит локальный то вместо забитых адресов апи можно их получать с помощью GetProcAddress,
а потом - в шеллкод. То же самое можно и к "jmp esp" сделать(поиск в пределах промапенного kernel32.dll)

ну и шеллкод хоть и самим автором писался(а это плюс) расчитан только на запуск локального cmd.exe
(ну эт понятно - сделано только ради примера)