Заранее приношу извинения администрации сайта за выбранный метод комментирования, но а) я так и не понял как можно добавить комментарий к статье б) данный комментарий слишком длинный посему решил создать тему на форуме(надеюсь что раздел правильно выбрал...) >>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 >>пиши свою статью а) хронически нет времени б) все уже написано до нас, где-то хуже, где-то лучше, но уже написано... так что имхо, это бесперспективное занятие... Лучше писать сами эксплоиты... Ну или статью аля "как я нашел уязвимость в распространенной проге", и уже там описывать все подробно... Но для этого эту уязвимость нужно еще и найти З.Ы. Как, все-таки, к статьям добавлять комментарии?
Tikson >>дай ссылки на статьи по которым ты обучался........ Хорошая постановка вопроса =) Ответ на него: х.з. А если составлять список, то времени не останется ни на что, кроме как ползанья по винту / гуглу в поисках прочитанный документов / книг / статей, что весьма не радует как перспектива ))) Если же вас просто интересует как выучить ассемблер, то я бы посоветовал Купить какую-нибудь книгу(Зубков / Юров / etc), а также пройтись по сайтам: kalashnikoff.ru - есть архив рассылки по асму wasm.ru - просто ЛУЧШИЙ ресурс по асму в рунете cracklab.ru - ну куда нам юзать дебугеры, если не в помощь себе, любимым Для начала, должно хватить. А после посещения вышеприведенных ресурсов читать, читать, читать... и еще раз читать ) Надеюсь ответил на заданный вопрос, если не так - переформулируй P.S. все-таки хотелось бы узнать мнение KEZ насчет комментариев(или он в раб. дни офлайн?).
trancer, репсект тебе за все высказанные мысли и заме4ания - они имхо действительно дельные! В первой статье-конкурсе было много нето4ностей, надеемся 4то во второй уже не будет (или будет поменьше) >>все-таки хотелось бы узнать мнение KEZ насчет >>комментариев(или он в раб. дни офлайн?). походу невидно его давно уже =( ЗЫ: рад видеть на а4ате реверсера, их у нас немного ЗЫЫ: поделись линками на свеЖую музы4ку (я ведь не оШибся, ты тоже слуШаешь trance?)
>>ЗЫЫ: поделись линками на свеЖую музы4ку (я ведь не оШибся, ты тоже слуШаешь trance?) ГЫЫ... Идешь в ближайший магазин торгующий пиратскими дисками и берешь все что приглянулось Ну или заказываешь в онлайн шопе(сам составляешь плейлист) А потом слушаешь, слушаешь, слушаешь... дни напролет А насчет транса - бывает психеделик или прогрессив слушаю, а вообще человек с широкими муз взглядами. Вот напр. в посл. время группа Пятница нравится(регга на современный лад) З.Ы. сейчас вот в миксе слушаю "CRW - I FEEL LOVE" ничего так, нравится. Правда не могу определиться что это прогр. транс? этакий ненавязчивый хаус? но вот нотки техно начала-середины 90-х прослеживаются эт. точно З.З.Ы. Ну и наофтопил я тут (c:
хехе, в магазинах и на рынке всякое фуфло сродли мелодик-транс и остальной комерЦии реального хард-транса и прогрессивы особо и в онлайн-шопах не ска4аешь (да и деньги не охота тратить), плюс ко всему и рин.ру закрылся походу - уж0с! обидно....приходится слушать онлайн-радио и записывать стрим оттуда =( ЗЫ: ссори за устроеный оффтоп - мы не хотели если 4то - можно переименовать тему в "обсуждение трасн-музЫки" =)
Возвращаемся к нашим баранам... точнее к статьям по переполнению буфера... вот например хорошая статья: "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 (ну эт понятно - сделано только ради примера)