-
-
[旧帖]
[求助]为什么进程可以访问在0x0处申请的虚拟内存
0.00雪花
-
发表于:
2013-3-12 18:23
1545
-
[旧帖] [求助]为什么进程可以访问在0x0处申请的虚拟内存
0.00雪花
《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 ;
}
这样代码却是错的,请大家帮我分析一下我哪里理解错了,总感觉有些地方没搞懂。
[课程]Android-CTF解题方法汇总!