![]() |
Переполнение буфера
Решил попрактиковаться в переполнении буфера. Накатал быстренько уязвимую программу. При передаче такого аргумента `perl -e 'print "A"x100'` в отладчике gdb выдаёт:
Цитата:
Цитата:
В чём проблема? Уязвимая программа: Код:
#include <stdio.h>Компилятор gcc 4.3.2 |
1. 0x8048407 <- что за адрес? включается ли он в образ проги в памяти
2. В студии (я как бэ виндовс секурити изучаю) по умолчанию включена проверка на переполненные буферы и по умолчанию будет отслеженна такая ситуация и прога будет по тихому прибита. Есть ли в gcc такая шняга я не знаю ... 3. В таких ситуациях надо вручную смотреть как происходит переполнение в отладчике иначе трудно чтолибо говорить. |
>>. В студии (я как бэ виндовс секурити изучаю) по умолчанию включена проверка на переполненные буферы
ничего там не включено.только отвратительые ворнинги со словами юзайте _s или пишите CRT_SECURE_NO_DEPRECATE 2 ТС запусти отладчик? |
2desTiny
я не про depricated говорил вообщето Код:
/GS [-]PHP код:
|
2desTiny
я ведь выложил листинг с gdb. Ведь поидее после передачи 200 символов в 10-символьный буфер адрес возврата стопроцентно должен перезаписаться. А у меня вместо 0x41414141 в eip 0x8048407. А, кстати, может ли это быть защита со стороны ОС или компилятора? Никакие патчи не ставил. |
2InFlame
В отладчике пошагово выполни прогу и смотри что у тебя в стеке и какие левые операции компилятор вставил в твою функцию + документацию по gcc найди |
Цитата:
Код:
int main(){ |
ага, в дебаг версии оно тебе скажет конечно про переполнение. Только, что ты этим хотем показать?
|
да, видимо криво сказал. оно компилится, запускается и с самой чистой совестью затирает адрес возврата
|
2desTiny
млин, ты бы хоть в вышеприведенный дизасм код посмотрел. Естественно затрется адрес возврата, НО защита не даст выйти из функции (и как результат, выполнить переход на шеллкод) и тихо убьёт процесс ExitProcess`ом. Так что креша приложения по исключению ты не наблюдал скорее всего (хотя опять же не помню с какой версии компилится с /GS по умолчанию, посмотри настройки проекта, чтото типа stack protection), а приложение тихо сдохло (это для релиз версии приминительно, насколько помню в дебаг версии там ещё перед убийством процесса окошко выдаёт, что буфер переполнился с минимальной инфой). |
| Время: 12:52 |