程序:
#include <stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[20];read(0,str,50);printf("the str is:%s\n",str);
}
int main()
{func();return 0;
}
關掉保護機制:
gcc -no-pie -fno-stack-protector -z execstack -m32 -o 3.exe 3.c
檢查一下:
checksec 3.exe
0x01 kali自帶
msf-pattern_create -l 100
創建長度為100的字符串
運行我們的程序:
start
一直下一步,直到需要填入參數:
這個時候程序報錯了,表示有溢出了
我們來看看eip的值,0Ab1,表示溢出使返回的地址是這個
使用命令,查看在哪里溢出了
msf-pattern_offset -q 0Ab1
32位,我們可以修改從32位開始的數據,讓程序跳轉到我們指定的地址執行
0x02 peda
pattern create 100
生成長度為100字符串
使用命令r,讓程序繼續執行,復制我們生成的字符串,注意單引號不要復制
溢出了,查看現在的EIP,A)AA
使用命令查看溢出位置
pattern offset A)AA
32位
0x03 pwndbg插件
cyclic 100
生成長度為100的字符串,按照上面的順序,得到溢出eip的值為iaaa
查找溢出位置:
cyclic -l iaaa
32位