Apache HTTPD 换行解析漏洞(CVE-2017-15715)
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在 一个解析漏洞,在解析PHP时,a.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
可以看到这里获取文件名是需要单独post一个name的,因为如果通过 $FILESFILES
2.影响版本范围
apache :2.4.0~2.4.29版本
3.漏洞复现
在这里我自己搭建了Vulfocus漏洞复现平台
3.1 前提:会使用docker的基本命令(哔站上的教程的挺多的)
3.2 拉取vulfocus镜像:docker pull vulfocus/vulfocus:latest
3.4 访问页面
3.5 开启靶场
自己写个表单,用来向服务器上传webshell
3.7 访问该静态网页,这里上传如下webshell,对流量进行抓包
<?php phpinfo();?>
<?php if(isset($FILES['file'])){ #1.php php $name =basename($POST['name']); $ext = pathinfo($name,PATHINFO_EXTENSION); $array=array('php','php3','php4','php5','phtml','pht'); if(in_array($ext,$array)){ exit('bad file'); } move_uploaded_file($_FILES
后台是通过黑名单方式过滤了php后缀的文件,根据最开始的知识,什么样的文件算是php文件呢?在 有定义,这句话的意思是以php结尾的文件都算php文件,在正则中表示匹配输入字符串的结尾位置。 如果设置了 RegExp对象的 Multiline属性,则也匹配 \n 或 \r 恰好,我们在文件末尾加了0x0a(n),所以被匹配成功了。
a.0x0d \r CR这三者代表是回车,是同一个东西,回车的作用只是移动光标至该行的起始位置
b.0x0a \n CL这三者代表换行,是同一个东西,换行至下一行行首起始位置;
ctrl+F 查找flag
1.升级到最新版本
2.或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行
5.闲谈