1 分析样本数据

1.1 概览样本数据流

分析:

可以观察到样本已经提取得很精炼并没有多少个包,协议只有http、tcp 所以我们不用协议分层、会话、端点等分析,直接流追踪就行

1.2 tcp流追踪

分析:

从上面得图中可以发现以下流程:

分析:

服务端第二次返回了一个html文档,里面包含了这样得内容:


分析:

此html文档包含了一个js 脚本 和一个<span>标签,在span标签里面有一个<iframe src = "/...gif"> ,并且在这个<iframe>加载的时候给了一个动作函数 "WisgEgTNEfaONekEqaMyAUALLMYW(event)" 将当前动作事件以参数的形式传递进去,目前这个函数可以猜测是上面的脚本来的。

但是上面的脚本里面没有这个函数,所系分析脚本:

脚本是根据当前请求链接上的第一个参数作为密钥,解密了这个数组内容,并且使用window["eval"].(Script)的方法执行了这个内容

那就能解释了,这个解密后是脚本,并且有WisgEgTNEfaONekEqaMyAUALLMYW(event)这个函数。

1.3 提取脚本并调试获取解密脚本

这里我用chrome浏览器调试,我在解密后执行前下一个断点,如下:

分析:

此时的 NqxAXnnXiILOBMwVnKoqnbp 即保存的是 解密后的脚本,我们通过chrome 的数据窗口保存数据到本地:

1.4 查看并分析解密后脚本


分析:

我们看到的确在这里面有 WisgEgTNEfaONekEqaMyAUALLMYW() 函数,概览了分析了一下整个脚本(详情请查看上面的注释)。总结如下:

1. gGyfqFvCYPRmXbnUWzBrulnwZVAJpUifKDiAZEKOqNHrfziGDtUOBqjYCtATBhClJkXjezUcmxBlfEX()

此函数填充了 0xd0000个栈溢出跳转地址和堆空间空间150个滑板指令+shellcode

lTneQKOeMgwvXaqCPyQAaDDYAkd

2. 创建了全局的变量事件触发event副本

<span>标签vhQYFCtoDnOzUOuxAflDSzVMIHYhjJojAOCHNZtQdlxSPFUeEthCGdRtiIY

的内容置空

3. 设置一个定时器,发作间隔为50ms,发作响应函数为nayjNuSncnxGnhZDJrEXatSDkpo

这个函数是将全局对象的空间填充为"\u0c0f\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d...“,并访问了这个已经置空的lTneQKOeMgwvXaqCPyQAaDDYAkd.srcElement,即<iframe>触发事件对象,猜想这里应该就是触发了崩溃,因为已经置空了还在去访问。

2 分析奔溃点

2.1 获取崩溃点

使用windbg 附加ie 6.0 的进程,然后访问本地搭建的服务器(这里使用phpsudy搭建,根目录下放我们前面提取出的html文档),链接使用 xxx.html?rFfWELUjLJHpP,xxx为你存储的html文档名

分析:

如前面分析脚本中的验证,根据栈回溯分析,是mshtml!CEventObj::get_srcElement导致的崩溃,即脚本中的 lTneQKOeMgwvXaqCPyQAaDDYAkd.srcElement。

2.2 分析上下文 查看奔溃点的来源

> u mshtml!CEventObj::get_srcElement

> u mshtml!CEventObj::GenericGetElement l0x100

> u mshtml!CElement::GetDocPtr

崩溃点环境:

分析:

  1. 我们可以看到ecx是0x 00000054 所以产生了异常。

  2. 我往上找(上面第二张贴图)发现 在mshtml!CEventObj::GenericGetElement 中 ecx 源于 ebx,ebx 来源于.......可以追溯到 当前的局部变量 [ebp-0x8] 中。

  3. 简单的浏览观察到没有哪里有赋值[ebp-0x8],所以开始展开分析。

2.3 展开分析追溯崩溃源

展开 mshtml!CEventObj::GenericGetElement 函数 查看 局部变量 [ebp-8]


分析:

我们可以从上面找到如下语句:

可以看出,调用了GetParam函数,ebp-8是存储的参数

分析 mshtml!CEventObj::GetParam函数:


分析:

可以看出使用ecx调用数据,这大概是一个thiscall类型,ecx存储着一个对象指针。我门回到上面查看调用mshtml!CEventObj::GetParam之前ecx是什么。

可以看到是 mshtml!CEventObj::GenericGetElement 函数的 局部变量 [ebp-0ch]

可以看到 是 mshtml!CEventObj::GenericGetElement() 的 ecx 也就是 同一个对象参数。

2.4 查阅分析相关类和结构体

CEventObj 是一个event对象,但是并没有与event直接相关的属性。event直接相关的属性在 EVENTPARAM 结构中,一般来说 event 会有一个源元素(触发这个事件的元素节点),在eventsrcElment 属性中即是对象,当调用CreateEventObject()创建事件event副本的时候,没有增加Element的引用计数,所以当释放原Element之后,事件副本eventcopy.CTreeNode是一个悬空指针,其下的Element元素内存已经被释放了。

使用查看相关IDA符号:

2.5 漏洞成因

综合上面的分析可以得出以下结论:

createEventObject创建了event的副本,但是此函数中EVENTPARAM::EVENTPARAM() 复制EVENTPARAM结构时并没有增加CTreeNode中srcElement即原对象的访问计数。所以在原Element被清空的时候,也对该内存进行了释放,造成了event副本中的EVENTPARAM.CtreeNode成了悬空指针。当使用的时候,会依次调用mshtml!CEventObj::get_srcElement()、mshtml!CEventObj::GenericGetElement()、mshtml!CElement::GetDocPtr(),会使得访问已经释放的内存(我们可以有意使用这块内存触发堆喷条件)

3 OD动态分析 验证

3.1 当释放Element的情况

在mshtml!CEventObj::get_srcElement()、mshtml!CEventObj::GenericGetElement()、mshtml!CElement::GetDocPtr()这三个函数下断点

分析:

我们一路跟下来可以看到此时 ecx = ebx = 0x0c0d0c0d是我们的滑板指令了。继续跟进去验证:

分析:

如我们预计的一样,此时已经来到了我们的滑板了

3.2 当没有释放Element的情况

在脚本中注释掉,释放对象的语句:

运行:

分析:

我们可以观察到这里CTreeNode的ECX和EBX恢复了正常

4 EXP实现后台远程连接

4.1 CShellCode 和 UnicodeShellCode的的转换

注意: 此脚本使用python2的环境,因为python3中没有 .encode('hex')


4.2 shellcode的编写

这里使用的是vs2017 -32- release,写完后直接放xdbg里面扣取shellcode


4.3 自定义js脚本,触发并实现堆喷


4.4 验证远程连接反弹shell

使用OD附加IE并使用IE 访问服务器 ip/test.html:

到达触发点:

来到堆喷滑板指令:

验证shellcode:

f9 继续运行,并使用物理机telnet虚拟机,成功反弹shell,并且在shellcode中使用exitprocess,增强隐蔽性:



极光行动_流量分析_漏洞复现相关推荐

  1. 流量分析_安恒八月月赛

    前言: 流量分析很有意思,之前忙于考试,暂时没有学习了,考试结束了就来总结一下一些CTF下常见的流量分析的题型. 0x00:流量包修复 使用wireshark打开流量包发现报错,可以使用在线pacp包 ...

  2. msf win10漏洞_【CVE20200796】漏洞复现

    一.漏洞简介 该漏洞是服务器消息块3.1.1(SMBv3)协议中处理压缩消息时,对数据没有经过安全检查,直接使用会引发内存破坏,成功利用针对此漏洞的攻击者可以获得在目标服务器或客户端上执行代码的能力. ...

  3. 网络安全漏洞分析与漏洞复现

    前言 4月6日和5月18日,VMware官方发布的两则安全公告中显示,关乎旗下产品的CVE漏洞多达10个,其中不乏有CVSSv3评分9.8的高危漏洞!如此高频的出洞速率,吸引了笔者注意.笔者将对CVE ...

  4. 栈溢出脚本_污点分析挖掘漏洞演示——如何在8小时内从零发现cve20120158(word溢出漏洞)...

    更多全球网络安全资讯尽在邑安全 www.eansec.com 简介 最近一直在研究漏洞挖掘的东西. 网上能看到的漏洞挖掘的方法,大概就两种,一种是fuzzing,一种是静态分析和动态调试结合,人工审查 ...

  5. 电影推荐_亲和性分析_规则提取(数据挖掘入门与实践-实验6)

    #数据导入 import os import pandas as pdall_ratings=pd.read_csv("ml-100k/u.data", delimiter=&qu ...

  6. [Vulhub] Weblogic 漏洞复现

    文章目录 Weblogic 常规渗透测试环境 0x00 测试环境 0x01 弱口令 0x02 任意文件读取漏洞的利用 0x03 后台上传webshell Weblogic WLS Core Compo ...

  7. 帝国cms7.5漏洞复现

    EmpireCMS v7.5后台任意代码执行分析 目录 一.漏洞简介 二.漏洞复现 三.原理分析 一.漏洞简介 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修 ...

  8. android 动画 最顶层_【Android编程实战】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗...

    0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android平台上发现了一个高危漏洞 该漏洞允许攻击者冒充任意合法应用,诱导受害者授予恶意应用 ...

  9. 网络安全模型_基于数据驱动的网络安全流量分析总结

    导读 网络和社交流量分析是检测和防御网络攻击的基础.随着数据集的日益剧增,手工定义规则的传统方法逐渐被机器学习(ML)方法替代,这是因为ML有更好的工作性能.在数据驱动的研究背景下,通过研究社交流量和 ...

最新文章

  1. SSH整合框架+mysql简单的实现
  2. WinCE驱动编写小结(转载)
  3. 虚拟机登服务器,用虚拟机登录云服务器
  4. Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识
  5. 【计蒜客 - 2019南昌邀请赛网络赛 - M】Subsequence(字典树,dp预处理)
  6. hdu 5312 数学
  7. 维基百科上—数据仓库、数据挖掘、OLAP三者之间的区别
  8. 【原创】一款符合当前主流审美的Swing外观(Look and Feel)_测试版发布
  9. Kafka分区与消费者的关系
  10. mysql数据库自动添加编号_mysql数据库自动添加编号
  11. Java试题库(含答案)
  12. Go语言反射(reflect)
  13. Linux root用户及权限管理
  14. 控制进度-监控管理过程组
  15. The Fun Of Algorithm - Day4 - 百钱百鸡问题
  16. 2.4G有源智能电子学生卡SI24R1 SI24R2E
  17. 【步兵 cocos2dx】热更新(下)
  18. CSS 中的 HSL 和 HSLA 与 RGB 和 RGBA
  19. TPAMI 2022 | 寻找属于你的影子,港中文等提出实例阴影检测任务
  20. 全力以赴地完成书稿中

热门文章

  1. 大学生体质测试管理系统
  2. Unity ECS(四)ECS组成概念
  3. 代码实现raft共识算法,并进行Demo展示
  4. 客户成功,一定要看懂 8 个指标
  5. css的文本省略号(单行和多行)
  6. 威伦TK6070iQ触摸屏的使用
  7. JavaScript 习题及面试题 2
  8. java 生成证书 pkcs12_PKCS12 证书的生成及验证
  9. 虚拟服务器网址怎样查看,虚拟主机的ip地址怎么查
  10. lyapunov函数 matlab,Lyapunov、Sylvester和Riccati方程的Matlab求解