|
|
| Посл.отвђт | Сообщен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 Понял. Спасибо! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.209 |