|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 22, 2004 01:20:35 При написании эксплоита (ограничение на коды: 0x01..0x7F) возникла проблема: 1) Необходимо сделать JMP по заданному адресу: ни ret, ни call, ни jmp в заданные ограничения не вписываются... 2) Как можно узнать адрес выполняемого в данный момент кода... (смещение относительно содержимого esp или какого-нибудь другого регистра высчитать _невозможно_!!!! по условию...) Как я делал, когда можно было использовать почти все комманды (0x01..0xFF): db E8,FF,FF,FF,FF,C3 pop eax ; EAX = EIP (т.е call $+4 (E8 FF FF FF FF) inc ebx (FF C3) pop eax ) Теперь незнаю что и делать... хотел организовать поиск моего кода начиная с ESP по сигнатуре... но не смог организовать цикл (любой переход назад содержит недопустимые символы...) |
|
|
Дата: Май 22, 2004 01:30:29 > Необходимо сделать JMP по заданному адресу: ни ret, ни call, ни jmp в заданные ограничения не вписываются... Условные вписываются, тебе лишь нужно заставить выполнять прыжок по твоему условию.. |
|
|
Дата: Май 22, 2004 01:36:39 Условные вписываются, тебе лишь нужно заставить выполнять прыжок по твоему условию.. Забыл указать: адрес, куда нужно делать переход хранится в регистре... (может я что незаметил, но условные переходы возможны только по относительным или абсолютным адресам... а jne [eax] - не получится... или я торможу?) |
|
|
Дата: Май 22, 2004 02:01:18 Тогда не получиться.. Когда-то на reversing'е обсуждалась тема что-то там написать используя лишь ASCII кода, но у меня сейчас под рукой нет, нужно перезагружаться в другую винду, я потом гляну, если там что-то есть полезное завтра запощу. |
|
|
Дата: Май 22, 2004 02:11:36 Тогда не получиться.. ...если там что-то есть полезное завтра запощу. Буду ждать... Прочитал: Phrack Inc Volume 0x0b, Issue 0x39, Phile #0x0f of 0x12 (Writing ia32 alphanumeric shellcodes), не помогло... им там известен адрес кода... и поэтому сгенерировать какой-нибудь JMP ESP уже можно... |
|
|
Дата: Май 22, 2004 05:44:41 jmp eax |
|
|
Дата: Май 22, 2004 05:50:53 jmp eax это FF E0 соответственно не подходит под условие |
|
|
Дата: Май 22, 2004 05:52:26 Какое условие я не понял? |
|
|
Дата: Май 22, 2004 05:53:49 ограничение на коды: 0x01..0x7F |
|
|
Дата: Май 22, 2004 05:56:19 В смысле опкод должен начинатся с [01...7f] ? |
|
|
Дата: Май 22, 2004 06:00:13 Ну да, видимо, и не только начинаться, вообще любые составляющие байты должны удовлетворять этому условию. |
|
|
Дата: Май 22, 2004 06:25:32 Единственный код который модифицирует EIP <= 7F(т.е. позволит изменить его i.e. перейти на нужный участок) это jcc с знаковым байтом в качестве операнда который расширяется до полного размера заполнением старшего бита и прибавляется к текущему EIP (текущим будет начало инструкции с 7xh + 2 (размер команды)) Это позволяет сделать выводы следующие: 1. Если прыжок будет на расстояние не в пределах -128..+127 то это невозможно. 2. Даже если это в пределах, то вставить пользуясь данными из регистра нужное значение (рассчитать смещение технически возможно) можно будет только если разрешено изменение в странице кода. |
|
|
Дата: Май 22, 2004 06:35:53 А SEH тоже противопоказан? |
|
|
Дата: Май 22, 2004 06:40:32 Quantum Мне интересно как ты будешь оперировать указанными байтами при постановке SEH'а ;-) |
|
|
Дата: Май 22, 2004 07:12:12 Asterix push reg32 ; загоняем адрес обработчика push 1 pop eax dec eax ; это вместо xor eax,eax push DWORD PTR fs:[eax] ; тут есть один 0xFF :-( ; * * * Потом надо вызвать null-pointer exception Трабла вообще с FS. Надо как-то переместить FS в регистр. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048 |