首页
社区
课程
招聘
[求助]R3无驱动进入R0
发表于: 2012-7-24 13:43 14849

[求助]R3无驱动进入R0

2012-7-24 13:43
14849
求一份通过 \Device\PhysicalMemory修改NtVdmControl入口,跳转到Ring0Code
//调用R3下的NtVdmControl函数
来实现R3无驱动进入R0的测试代码,网上这类代码大多没弄明白也编译通不过。。

无安全软件的环境,只要实现过程就行了
类似这个http://www.cnblogs.com/Jesses/articles/1980363.html

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (25)
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
http://bbs.pediy.com/showthread.php?t=68729
2012-7-24 18:03
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
看不到效果,opensection就失败了
另外我纳闷的就是我发个链接,你再给我一样的连接。。。我要的是自己测试出来的代码,不是网上一搜一大堆那种
2012-7-24 21:34
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
// 以可读写ACL权限打开PhysicalMemory
status = ZwOpenSection(&hSection, READ_CONTROL | WRITE_DAC, &oa);

这个地方失败了。。
大牛们说的以管理员方式启动再XPSP3下怎么个情况啊? 内核是ntkrnlpa,开了PAE的单核,能实现么
2012-7-24 22:09
0
雪    币: 692
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
ring3可以无驱进入ring0么?我觉得理论上应该是不可以的啊,如果可以那不是相当于提权漏洞了么?
2012-7-24 22:31
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
这个在无安全软件hook NtVdmControl的情况下是可以实现了。。
但是我在WRK中找不到NtVdmControl的作用,反正根据网上的文章都是操作NtVdmControl,
不过我觉得通过\\Device\\PhysicalMemory可以HOOK任何函数。。。

求NtVdmControl的作用。。
2012-7-24 22:44
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
无语了,居然执行完了 status=NtVdmControl(0x4000,buffer);

lkd> u nt!NtVdmControl
nt!NtVdmControl:
805f25bc e953eae07f      jmp     00401014
确实可以HOOK内核的服务函数,然后jmp 00401014,问题是00401014是我用户空间的
Ring0Code的函数,调用了NtVdmControl确实执行Ring0Code实现进程隐藏,XT在UNHOOK检测到NtVdmControl被hook了,同时执行了Ring0Code检测到隐藏进程

现在的问题是为什么内核代码可以JMP到用户空间。。。这个最疑惑的地方。。

NtVdmControl利用这个函数我怀疑就是他永远不会调用,以防在HOOK后还没来得及unhook有别的线程切换导致蓝。。

例外一个设想。。可以调用R3的shellcode,那么应该可以在内核区域分配一块分配一块内存来进行JMP来jmp去。这个分配R0区域在R3层怎么实现呢?。或者利用飞地可能不用分配就是实现JMP来来回回。
2012-7-24 23:28
0
雪    币: 692
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
lz确定么?即使在没有安全软件hook的前提下,在用户态可以操作内核态的数据和代码,已经违背了ring0/3的设计原则,相当于是提权漏洞了啊。话说执行这个代码需要admin权限么?求lz发一份可以编译通过的代码我测试一下
2012-7-25 00:15
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
http://bbs.pediy.com/showthread.php?t=68729 自己测试下把。XPSP2。3  单核。。
2012-7-25 08:47
0
雪    币: 692
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
貌似确实是需要管理员权限的,这样的话不能算提权漏洞的范畴。不过确实是很牛逼的思路,学习到了。如果使用读写物理内存的方法,真的能够实现hook任意内核函数的话,确实很有用
2012-7-25 08:57
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这位仁兄有点孤陋寡闻。。。。。。
2012-7-25 09:02
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
能不能解释下我之前的疑问
2012-7-25 09:11
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
你的系统或CPU不支持DEP才有用,你保证吗?
2012-7-25 09:38
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
http://bbs.pediy.com/showthread.php?t=68729
貌似没用到提权代码,你在看雪里搜下NtOpenSection和ZwOpenSection,就会找到提权代码了。
2012-7-25 09:53
0
雪    币: 225
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
别想了,微软在sp3后就封了这个漏洞,所有只能sp2上成功
2012-7-25 09:56
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
我发现我机器上存了份这提权代码:
EXPLICIT_ACCESS Access;
  PACL OldDacl=NULL, NewDacl=NULL;
  PVOID security;
  HANDLE Section;
  INIT_UNICODE_STRING(name,L"\\Device\\PhysicalMemory");
  OBJECT_ATTRIBUTES oa ={sizeof(oa),0,&name,0,0,0};  

  memset(&Access, 0, sizeof(EXPLICIT_ACCESS));
  NtOpenSection(&Section, WRITE_DAC | READ_CONTROL, &oa);     
  GetSecurityInfo(Section, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &OldDacl,NULL, &security);
  
  Access.grfAccessPermissions = SECTION_ALL_ACCESS;
  Access.grfAccessMode        = GRANT_ACCESS;
  Access.grfInheritance       = NO_INHERITANCE;
  Access.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
  Access.Trustee.TrusteeForm  = TRUSTEE_IS_NAME;
  Access.Trustee.TrusteeType  = TRUSTEE_IS_USER;
  Access.Trustee.ptstrName = "CURRENT_USER";  

  SetEntriesInAcl(1, &Access, OldDacl, &NewDacl);
  SetSecurityInfo(Section, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION,NULL, NULL, NewDacl, NULL);
  CloseHandle(Section);
2012-7-25 10:01
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
17
那你别研究了,现在都是WIN7你什么都找不到了。。好了大家都别学了是吧?
2012-7-25 10:24
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
18
我已经实验成功了,现在的问题不是权限的问题,是JMP的问题。。我没弄白
2012-7-25 10:27
0
雪    币: 225
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
进入RING0 关键是通过 \Device\PhysicalMemory 映射内核空间内存,然后跳转,在SP3以前在RING3下是可以通过 \Device\PhysicalMemory 对象读写物理内存,SP3后只能读,所以权限不够。
2012-7-27 11:50
0
雪    币: 225
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
突破的方法也有,很复杂,老外有一篇文章以前看过,找找
2012-7-27 11:52
0
雪    币: 225
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Detailed description
In Windows Server 2003 SP1, user-mode access to the \Device\PhysicalMemory object is not permitted. All forms of access (read, write) are refused when the \Device\PhysicalMemory object is accessed from a user-mode application. Access to the \Device\PhysicalMemory object is refused regardless of the user context (Administrators, Users, Local System, etc.) the application is running in.

Kernel-mode (driver) access to the \Device\PhysicalMemory object is unchanged for Windows Server 2003 SP1.

There are no means to revert this changed behavior in Windows Server 2003 SP1.

Why is this change important? What threats does it help mitigate?
This change was made to help prevent security exploits that might leverage the functionality of the \Device\PhysicalMemory object from user-mode.

In previous versions of Windows, access to the \Device\PhsyicalMemory object was protected by an access control list (ACL). However, the ACL may be inadvertently changed. Refusing all access to the \Device\PhysicalMemory object from user-mode ensures this scenario cannot occur.

微软的说明 http://technet.microsoft.com/en-us/library/cc787565(v=ws.10)

XP SP3 , 2K3 SP1以后 改的
2012-7-27 12:25
0
雪    币: 1485
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
认同rock,sp3后的系统。r3要进入r0只有一个途径就是构建调用门,中断门来提权。
2018-1-31 17:46
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
mark
2018-1-31 19:03
0
雪    币: 914
活跃值: (2478)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
24
上面两位洛阳铲
2018-2-1 09:03
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
我写了个很小的驱动,应用程序可以将汇编代码发到驱动中执行并返回执行结果。
2018-2-2 22:11
0
游客
登录 | 注册 方可回帖
返回
//