极光行动(英语:Operation Aurora)或欧若拉行动是2009年12月中旬可能源自中国的一场网络攻击,其名称“Aurora”(意为极光、欧若拉)来自攻击者电脑上恶意文件所在路径的一部分。遭受攻击的除了Google外,还有20多家公司:其中包括Adobe Systems、Juniper Networks、Rackspace、雅虎、赛门铁克、诺斯洛普·格鲁门和陶氏化工。这场攻击过后,Google提出了它的新计划:它将“在必要的法律范围内”,于中国运营一个完全不受过滤的搜索引擎;同时Google也承认,如果该计划不可实现,它将可能离开中国并关闭它在中国的办事处
以下是百度百科的详情介绍:
靶机:windows xp sp3 ,Ie6.0(版本6.0.2900.5512)
放置网页的机器:windows 2003,iis6.0
windbg , OllyDbg, notepad++
提取出来的样本,并不是每次都能完美的执行
在windows 2003下搭建iis6.0的环境,此处不多赘述。
将以下代码,放入index.html里面
如下图:
在靶机中,在IE6.0中访问html文件(注:加参数[?rFfWELUjLJHpP])
如下:
因为该样本并不是每次都能完美进行堆喷射,所以在经过多次尝试后,终于找到了关键信息(IE崩溃)
如下图:
我们将windbg设置为即时调试器,然后重新访问该网页
再次等待程序崩溃,最终程序报出异常,windbg断在下面位置
程序断在此处,由上图可知,此时的ecx=00000006,该处内存并没有分配
那ecx来源与那里呢?我们来对ecx进行溯源
由该处汇编指令的上下文,我们可以得知 此处为一个函数,由某个函数调用产生异常
我们将 mshtml.dll拖入IDA 并跟随到 地址0x7e278c83
看到有交叉引用,直接查看。
*,真多
没办法,我只能进行栈回溯了,
在windbg中查看当前堆栈
u 7e44c4c0
由图,我们得知 ecx,又来源于ebx,继续回溯
这次我们可以继续用IDA分析了,在IDA中转到 0x7e44c4c0
我们发现,之前有多种情况跳转到该位置
我们以红色部分为情况来逐步进行回溯
ecx=ebx
ebx=[esi]
esi=[eax]
eax=[ebp+var8]=[ebp-8]
最终的值 来自于句柄变量
最总公式如下
ecx=[[[[ebp-8]]]]
然而在我们发生异常的位置,下面是这样几行代码
最终 call dword ptr [eax+34h]
可以表达为 call dword ptr[[[[[[ebp-8]]]]]+34h]
也就是说 最后call的地址 可以由局部变量 ebp-8确定
那么我们就可以利用 堆喷射,进行漏洞利用(堆喷射技术与原理在此不多做阐述,有兴趣参考书籍 0day2)
我们先找到是那个函数的局部变量调用了该函数,在IDA中,往上翻找到函数头部
我们发现,该函数上次调用 来自于一个对象中的 2 个函数,
可是我们看我们的html里面,虽然有个img的图标,但是并没有调用函数,这是为什么呢?
在上述分析中,我们有提到,该网页要加参数
该脚本最重要地方是这行代码,将解密后的代码通过正则表达式进行转换,并作为代码执行
然后我们真正要执行的代码,也就是处理之后的代码是下面的
我们将这段代码替换原来index.html里面 script 标签的内容
替换整体代码如下:
我们来分析一下这段代码
不是很懂js,但是根据开发经验,我猜测的执行顺序应该是如下(忽略堆喷代码的构建)
到这里我们应该就能联系到一块了
因为我们在的模块最终的上层调用为
然 js脚本里面最终执行的也是
在上面分析中,我们忽略了 堆喷射 代码的构建
我们看一下 该函数
假设"\u9090\u9090\u9090\u9090\u9090\u9090\u9090\u9090\u9090\u9090\u9090\u9090\u9090"
为我们的shellcode
我们做出如下修改即可
用od打开ie浏览器,并在 0x7E44C4C3 下条件断点 ecx==0x0c0d0c0d
F9跑起来,访问我们的html
程序断到下图位置:
F7步进,发下ecx指向的区域基本全为0x0c0d0c0d(这块区域为滑板指令)
继续F7,发下call的地址也是 0x0c0d0c0d
继续F7跟进跟进call,到这里,滑板指令往下就是我们正在的shellcode了
我们CTRL+B 搜索二进制字符串 90 90 90 90 90,并下断
F9执行,成功断到此处
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!