Apache HTTPD 换行解析漏洞(CVE-2017-15715)学习笔记

Apache HTTPD 换行解析漏洞(CVE-2017-15715)学习笔记
漏洞版本:
Apache 2.4.0~2.4.29

源代码:

<?php
if(isset($_FILES['file'])) {                   //检查变量是否设置
    $name = basename($_POST['name']);          //basename:返回路径中文件名部分
    $ext = pathinfo($name,PATHINFO_EXTENSION); //pathinfo:以数组的性式返回文件路径信息
    									   //PATHINFO_EXTENSION:只返回 extension(文件名后缀)
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {  //黑名单检查
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name); 
                                                //tmp_name:文件上传到服务器的临时文件夹
                                                //moce_uploaded_file:将文件上传到指定的目录
} else {
    
?>

漏洞成因:

正则表达式中,$用来屁匹配字符串的结尾位置。菜鸟写道

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

意味着我们在上传的文件后面加上换行符。正则匹配到的是 extension\n 与黑名单的内容(extension)不匹配。所以能够上传成功。但是在文件进行解析的时候,会被正确的解析。这就造成了绕过。

漏洞复现:

可以看到上传失败。

添加0a后上传成功。

posted @ 2021-04-01 23:25  STRChen  阅读(128)  评论(0)    收藏  举报