Apache HTTPD 换行解析漏洞(CVE-2017-15715)

AffettoIris 2023-9-28 2,767 9/28

httpd是Apache超文本传输协议(HTTP)服务器的主程序。它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,ip/1.php%0a将被按照PHP后缀进行解析(效果等同于.php),导致绕过一些服务器的安全策略。其中%0a是URL编码里的换行符

启动靶场环境后,查看网页源码

Apache HTTPD 换行解析漏洞(CVE-2017-15715) Apache HTTPD 换行解析漏洞(CVE-2017-15715)

细细阅读关键代码

if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
}

发现主页接受$_POST['name'],也就是图上的文本框的输入,并分离出其后缀如'evil.php'的‘php’,若后缀是php等字符,则报错'bad file'并结束脚本,反之则将文件以$_POST['name']为名,重命名并存储。

这里解释下为什么要设置文本输入框,明明可以直接提取文件名的,这是题目为了复现漏洞,如果直接提取文件名,会用到$_FILES['file']['name']获取文件名,这会把换行符\x0a自动去除,所以$_FILES['file']['name']这种方式获取文件名就不会造成这个漏洞。

攻击目的

绕过针对文件上传漏洞的过滤.php文件的防护。

攻击

编辑一个1.php,其内容是<?php phpinfo(); ?>,并把文本输入框写上1.php以作为木马在服务器上的存储名,然后上传过程抓包。

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

我们去找第二个'1.php',这才是$_POST['name']即文本输入框的值。'php'的底层十六进制ascii码是'70 68 70','换行符'的底层十六进制ascii码是'0a'

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

找到了,在70 68 70后插入0a并forward,response显示如下,没有报错bad file

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

说明文件存储上了。去访问木马文件。

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

要知道1.php%0a不是严格的.php后缀,理论上不能访问成功才对。但是Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略

- THE END -

AffettoIris

10月16日15:24

最后修改:2023年10月16日
0

共有 0 条评论