Apache HTTPD 换行解析漏洞(CVE-2017-15715)与拓展

之前就看了这个漏洞,但是当时没有认真思考叫因为只是一个%0a绕过就OK
没有理解原理,现在来填坑

环境启动与版本漏洞
1.在apache2.40~2.4.29版本中存在这个漏洞
2.这么我使用的是vulhub环境搭建
进入目录编译及运行漏洞环境:
docker-compose build
docker-compose up -d
启动后Apache运行在http://your-ip:8080**

漏洞原理
在该版本的配置中

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

该部分内容就是只有匹配上面的正则表达式就可以进行绕过
使用我们在看一看正则表达式中$的意思

匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 $。

所以如果设置RegExp 对象的 Multiline 属性的条件下,$还会匹配到字符串结尾的换行符(也就是%0a)

实验
上传一个名为1.php的文件,被拦截:

在1.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A),不再拦截:

访问刚才上传的/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:

总结:
其实主要是$的漏洞
下面是自己出的一个题目

<?php
//by Firebasky
show_source(__FILE__);
//error_reporting(0);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}
?>

参考
https://vulhub.org/#/environments/httpd/CVE-2017-15715/
https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html

posted @   Firebasky  阅读(664)  评论(0编辑  收藏  举报
编辑推荐:
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
阅读排行:
· 如何开发 MCP 服务?保姆级教程!
· 1.net core 工作流WorkFlow流程(介绍)
· 瞧瞧别人家的限流,那叫一个优雅!
· C# 工业视觉开发必刷20道 Halcon 面试题
· 从零散笔记到结构化知识库:我的文档网站建设之路
点击右上角即可分享
微信分享提示