首页
社区
课程
招聘
[原创]Windbg和IDA脚本辅助分析
发表于: 2016-4-23 23:00 7902

[原创]Windbg和IDA脚本辅助分析

2016-4-23 23:00
7902

本文尝试解决另个问题:内核漏洞快速定位漏洞触发点 && Windbg执行流在IDA中高亮标示
内核漏洞快速定位漏洞触发点:
拿到一个内核漏洞的POC,首先我们需要定位触发漏洞,提权的地方。直接看反汇编代码往往不容易看出来

内核漏洞常见的目标是提权,一般会替换本进程的token为System的token,这种办法简单粗暴,成功率极高,所以往往为各黑客所爱。

既然要提权token,那么必须要对token所在的地址有写入操作,本文的思路就是对token所在地址下写入断点,一但触发,便是来到替换token,也就是提权的地方,再栈回溯,就能找到触发漏洞的函数了。下面我们来演示一下,我写了个windbg脚本:

$$注意一:凡是寄存器操作需加上r
$$注意二:打印字符串用%ma
$$此脚本用到了一个硬编码token偏移 0xf8,请根据你的实际系统修正它。

r @$t0=@$proc;
r @$t1=@$proc;

.while(1)
{
  
  .if ((poi(@$t1+0xb8)-0xb8) != @$t0 ) 
  {
    
    $$比较是否为test进程
    .if ( poi(@$t1+0x16c)==0x74736574 )   
    {
      .printf "进程名:%ma\t",@$t1+0x16c;
      .printf "进程EPROCESS:%x\t",@$t1;
      .printf "进程TOKEN:%x\n",poi(@$t1+0xf8);
      .printf "请输入:\n";
      .printf "ba w1 %x+f8 \".if (wo(%x+f8+2)!=0x%x){} .else{gc;}\"",@$t1,@$t1,wo(@$t1+0xf8+2);
    }
    r @$t1=poi(@$t1+0xb8)-0xb8;
  }
  .else
  {
    .break;
  }
}
ChildEBP RetAddr  Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
99a80a24 96d094f3 fffffffb 000001ed 0192fac4 test+0x186d
99a80a64 96d095c5 fffffffb 000001ed 0192fac4 win32k!xxxSendMessageTimeout+0x1ac
99a80a8c 96d892fb fffffffb 000001ed 0192fac4 win32k!xxxSendMessage+0x28
99a80aec 96d88c1f 99a80b0c 00000000 0192fac4 win32k!xxxHandleMenuMessages+0x582
99a80b38 96d8f8f1 ffb89bb0 96e6f580 00000000 win32k!xxxMNLoop+0x2c6
99a80ba0 96d8f9dc 0000001c 00000000 ffffd8f0 win32k!xxxTrackPopupMenuEx+0x5cd
99a80c14 83e501ea 0009017d 00000000 ffffd8f0 win32k!NtUserTrackPopupMenuEx+0xc3
99a80c14 772570b4 0009017d 00000000 ffffd8f0 nt!KiFastCallEntry+0x12a
0192fad8 76b6483e 76b52243 0009017d 00000000 ntdll!KiFastSystemCallRet
0192fadc 76b52243 0009017d 00000000 ffffd8f0 USER32!NtUserTrackPopupMenuEx+0xc
0192fafc 013c1604 0009017d 00000000 ffffd8f0 USER32!TrackPopupMenu+0x1b
0192fb8c 75d93c45 00000000 0192fbd8 772737f5 test+0x1604
0192fb98 772737f5 00000000 76bae6a7 00000000 kernel32!BaseThreadInitThunk+0xe
0192fbd8 772737c8 013c1526 00000000 00000000 ntdll!__RtlUserThreadStart+0x70
0192fbf0 00000000 013c1526 00000000 00000000 ntdll!_RtlUserThreadStart+0x1b

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

上传的附件:
收藏
免费 3
支持
分享
最新回复 (5)
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个跟我分析缓冲区溢出的时候的思路一样。。。
2016-4-24 03:25
0
雪    币: 3840
活跃值: (1920)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
学习了,我还有好多路要走啊.T-T
2016-4-24 11:36
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了,感觉好多问题需要解决
2016-4-24 12:46
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
超赞。顶起。
2016-4-25 08:20
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了,非常有用!
2016-6-25 08:33
0
游客
登录 | 注册 方可回帖
返回
//