Apache HTTPD 换行解析(CVE-2017-15715)
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
- 总体上而言,只要取
,在以后的其他某些漏洞可以还有利用到的地方。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~