首页
社区
课程
招聘
[原创]CVE-2012-0158分析
发表于: 2016-2-4 15:03 8290

[原创]CVE-2012-0158分析

2016-2-4 15:03
8290
参考大家对CVE-2012-0158分析,自己跟着走了一遍,记录了详细的操作过程,希望对各位有所帮助,具体参考附件。sample.doc为POC,poc运行后word文档中的值会被修改,运行前先备份,运行完后删除run过的word文档,恢复备份文件。

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (11)
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
谢谢分享。
2016-2-4 19:50
0
雪    币: 893
活跃值: (382)
能力值: ( LV13,RANK:600 )
在线值:
发帖
回帖
粉丝
3
感谢分享~
2016-2-5 01:17
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
这段shellcode最近还很流行啊:)
2016-2-5 09:14
0
雪    币: 191
活跃值: (848)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2016-2-7 13:00
0
雪    币: 166
活跃值: (2526)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
谢谢分享
2016-2-10 20:37
0
雪    币: 1211
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
现在好像有CVE-2012-1856 听说这个比0158强大
2016-2-11 23:51
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
8
这个问题的本质就在于sub_B中新建堆的数据是可控的,sub_A函数中的dwBytes也是可控的。
int __stdcall sub_A(int a1, BSTR bstrString)
{
.......
  int v5;                 //  [bp-14h]
  SIZE_T dwBytes; //[bp-Ch]
  int v7;                  // [bp-8h]
  int v8;                  // [bp-4h]

  v2 = bstrString;
  result = sub_B((int)&v5, bstrString, 0xCu);   (1)
  if ( result >= 0 )
  {
    if ( v5 == 1784835907 && dwBytes >= 8 )
    {
      v4 = sub_B((int)&v7, v2, dwBytes);   (2)
     ....
    }
  }
}
执行(1)复制12个字节,这样可以控制dwBytes, 执行(2)就可以把堆中指定大小的shellcode复制到堆栈.
2016-2-14 23:15
0
雪    币: 799
活跃值: (457)
能力值: ( LV12,RANK:280 )
在线值:
发帖
回帖
粉丝
9
对栈没有必要下写入断点,那样会不断的中断。其实下一个记录断点就可以了
2016-8-11 00:12
0
雪    币: 5049
活跃值: (2161)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢分享,资源拿走!
2016-8-20 18:29
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
请教一下,sxn ‐c "r eip;dd 00121700 l1" sse ,这个指令里面的值是怎么来的?调试的时候不断的断下,F5了几百次了,依然还无法载入poc
2016-12-6 16:31
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
在分析这个漏洞时有一个疑问,
为什么要申请堆空间,从样本拷贝数据到堆,然后再从堆中将数据拷贝到栈中进行溢出?直接从样本拷贝数据到栈上进行溢出不行吗
2017-2-10 16:20
0
游客
登录 | 注册 方可回帖
返回
//