如何定位溢出点位置
程序:
#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.exe0x01 kali自帶
msf-pattern_create -l 100創建長度為100的字符串
運行我們的程序:
一直下一步,直到需要填入參數:
這個時候程序報錯了,表示有溢出了
我們來看看eip的值,0Ab1,表示溢出使返回的地址是這個
使用命令,查看在哪里溢出了
32位,我們可以修改從32位開始的數據,讓程序跳轉到我們指定的地址執行
0x02 peda
pattern create 100生成長度為100字符串
使用命令r,讓程序繼續執行,復制我們生成的字符串,注意單引號不要復制
溢出了,查看現在的EIP,A)AA
使用命令查看溢出位置
32位
0x03 pwndbg插件
cyclic 100生成長度為100的字符串,按照上面的順序,得到溢出eip的值為iaaa
查找溢出位置:
32位
總結
- 上一篇: 一个简单的pwn例子---read函数
- 下一篇: 二级建造师挂靠多少钱啊?