httpd是Apache超文本传输协议(HTTP)服务器的主程序。Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。httpd和apache关系,简单理解就是apache2以上版本改称为httpd。
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29
版本中存在一个解析漏洞,在解析PHP时,1.php\x0A
将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
复现过程
环境启动后,我们通过虚拟机地址访问
抓包,上传一句话马,直接上传发现被拦截了
在php名称后面添加%0a
,然后选中%0a
右键选择Convert selection ---> URL ---> URL-decode,将%0a
url编码后再上传
浏览器访问刚刚上传的文件,后缀名要加上%0a
使用蚁剑连接成功
原理
参考:利用Apache解析漏洞(CVE-2017-15715)绕过文件上传限制getshell
在ubuntu下,Apache的配置文件在etc/apache2/apache2.conf
,查看一下这个文件,发现包含了conf-enabled下的所有.conf配置文件
conf-enabled下都是conf-available中文件的链接,所以真正的配置文件在conf-available
该conf-available目录下的docker-php.conf配置不当造成未知后缀解析漏洞
$
匹配输入字符串的结尾位置。这个解析漏洞的根本原因就是这个$
。我们知道$
在正则表达式中用来匹配字符串结尾位置。
$
是可以匹配到字符串结尾的换行符,也就是说,如果我们此时有个文件后缀名为:.php\n,Apache是会将其作为php文件进行解析的。
修复方案
- 修改正则
- 升级版本
- 重命名上传文件
- 将上传文件与服务器分离
总结
这个漏洞利用的条件如下:
- 获取文件名时不能用
$_FILES['file']['name']
,因为他会自动把换行去掉,这一点有点鸡肋 - Apache版本为2.4.0到2.4.29
- 服务器必须是linux系统,因为windows环境下不支持后缀名带有换行符\x0a
- 总体上而言,只要取$FILES['file']['name']作为文件名,就可以无视该解析漏洞,所以该漏洞总体来说实际用处不大,但是由于根本成因在于$,在以后的其他某些漏洞可以还有利用到的地方。