編寫并調(diào)試一個(gè)堆棧溢出的程序
編寫存在棧溢出漏洞的 c++ 程序:
stack_overflow.cpp
#include <iostream>
using namespace std;
void hello(){
char name[8];
scanf("%s",name);
printf("hello,%s!\n",name);
}
void stack_overflow(){
printf("Aha,suprise!\n");
}
int main(){
hello();
return 0;
}
對(duì)于 GCC 編譯器,可以嘗試使用 -fno-stack-protector
? 選項(xiàng)來禁用堆棧保護(hù)。
使用 -g
?使其可調(diào)試
編譯命令:g++ stack_overflow.cpp -o stack_overflow -g -fno-stack-protector
?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-843386.html
使用 gdb 查看 stack_overflow 函數(shù)的地址:0x000055555555520e
命令是 info addr stack_overflow
?
查看ASCLL碼表可知:0x0e 對(duì)應(yīng)的字符是 SO
?
在終端中,你可以直接輸入 SO 字符的 ASCII 碼,即按下 Ctrl+V,然后輸入 Ctrl+N(對(duì)應(yīng) ASCII 碼的 0x0E),這樣就能夠輸入 SO 字符。
所以該地址的 ASCLL 編碼為:^NRUUUU (小端序)
??
??
前面用 16 個(gè)'a'用來覆蓋 name 緩沖區(qū)和棧上的 EBP,后面用 ^NRUUUU 覆蓋棧上的 EIP
??
如此即可篡改返回地址,執(zhí)行 shellcode
??文章來源:http://www.zghlxwxcb.cn/news/detail-843386.html
?
到了這里,關(guān)于編寫并調(diào)試一個(gè)堆棧溢出的程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!