· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.UNIX —› exploiting challenge

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июн 7, 2004 19:32:41

Забавный challenge для любителей поковыряться в уязвимом коде, с дальнейшим эксплойтингом найденного "бага" ;)
http://bffffab0.info/

PS: вступительный тест(f334g443.c) я решил, жду ответа от dvorin'a.


Дата: Июн 7, 2004 19:47:47

Гм... Ну, тривиально на первый взгляд. Я особо не смотрел, но вот:

x = read (0, buf);
а buf только как char buf[1024]; определен. Переполни его и все :( Правда, немедленно за ним следует char bytes[256]; и еще поинтер. Если компилер их один за другим определит, то переливать надо все.


Дата: Июн 7, 2004 19:50:53

volodya
tam format string bug, a ne buffer overflow
//sorry for translit


Дата: Июн 7, 2004 20:20:06

Черт! Ты прав. Собрал. Набрал во вводе от балды %s%s%s - получил segmentation fault. Балда я ивановна :(
Я так понимаю, туточки баг - fprintf(stdout,buf); Больше-то ему быть негде. :(


Дата: Июн 7, 2004 20:27:11

ugu, imenno tam.
a vot teper' gdb v ruki, issledui i poprobui zaexploitit' etot bug ;)
//sorry for translit


Дата: Июн 7, 2004 20:48:08 · Поправил: volodya

Дык если спецификатор предписывает вывести содержимое по какому-то адресу, а адрес недействительный - то ой-ой-ой будет. С другой стороны, как превратить просто seg fault в нечто более полезное - тут надо подумать...


Дата: Июн 8, 2004 10:17:12

> С другой стороны, как превратить просто seg fault в нечто более полезное - тут надо подумать...
а что здесь думать-то? :) буфер buf() на то и дан в задаче, чтобы туда поместить свой код(хотите назовите его шеллкод).
Вся проблема была в том, как передать в этот буфер управление с помощью спецификаторов.:)

ЗЫ: да, и не забудьте предварительно проXORить свой код с 0xb0.


Дата: Июн 8, 2004 16:02:15

Вся проблема была в том, как передать в этот буфер управление с помощью спецификаторов.:)

<195 байт кода эксплоита>%n


Дата: Июн 8, 2004 17:08:28

Black_mirror wrote:
><195 байт кода эксплоита>%n

и это твоё решение? :) сам бы хоть удосужился проверить обычным тестом..
я понимаю, что проще всего передать управление на адрес в стеке посредством C3(ret).
НО!:
1. Кто тебе разрешит писАть в секцию кода?(запись опкода C3, как ты предлагаешь)
2. Если бы всё было _настолько_ "тривиально", то не было бы этого челенджа,
а тем более с денежным джекпотом!


Дата: Июн 8, 2004 17:16:13

А что такое "эксплойт"?


Дата: Июн 8, 2004 17:23:54

The Svin
В данном конкретном примере под ним "можно" понимать строку
формата, с помощью которой мы можем выполнить нужный нам
код(обычно шеллкод), в контексте данного процесса.


Дата: Июн 8, 2004 23:34:21 · Поправил: Black_mirror

intuit
Нашел ни разу не дзенский вариант:

<код>%%s%11$*d%10$n
То что помечено красным, так и остается, остальное должно быть проксоренно с 0xb0.

<код> - код эксплоита, чего в нем не должно быть, так это символов '%'. Даже после xor'а.
%% - это чтобы на один уменьшить число выводимых символов.
s - данный байт превратится в ret, на который будет передано управление, а с него на начало буфера.
%11$*d - переходим к параметру buf функции bob, который используется как ширина поля вывода.
%10$n - затираем адрес возврата из функции bob, числом выведенных символов. В этом как раз и заключается недостаток данного алгоритма: выводится 1.5 гига!


Дата: Июн 8, 2004 23:37:36

Black_mirror

Прости, что туплю, но как твой буфер получит управление?


Дата: Июн 8, 2004 23:50:56

volodya
Когда будет расшифрован символ 'd', произойдет следующее:
Функция fprintf выведет символы кода эксплоита, число с шириной поля_вывода равной адресу_буфера и символ '%', а затем перезапишет адрес возврата из функции bob количеством выведенных символов, или иначе говоря адресом символа 's', который уже успел превратится в команду ret.
На следующей итерации последний '%' превратится в неизвестно что, поэтому больше адрес перезаписываться не будет. При возврате из функции bob, управление попадет на ret, а он передаст его на начало буфера, так как адрес буфера был первым параметром функции bob.


Дата: Июн 8, 2004 23:55:23

Понял. Спасибо!

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.209