欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CVE-2017-15715 复现

程序员文章站 2022-07-15 15:47:25
...

0x00 前言

漏洞这种东西还是复现一遍才行

影响版本

2.4.0~2.4.29

0x01 复现过程

1.环境配置

参考https://github.com/vulhub/vulhub/tree/master/httpd/CVE-2017-15715

按照vulhub操作

docker-compose build
docker-compose up -d

这样操作之后访问http://your-ip:8080,环境就已经搭建好了。

但是你需要自己构造上传的数据包非常不友好,所以自己提供了html页面可以方便练习。

<!DOCTYPE html>
<html>
<head>
	<title>By wdd</title>
</head>
<?php
if(isset($_FILES['file']) && $_POST['name']!="") {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'],"/var/www/html/".$name);
    echo "success";
}else{
	echo "Please check file name!";
}?>

<body>
<form enctype="multipart/form-data" method="post">
                <p>CVE-2017-15715<p>
                <p>File name:<input type="text" name="name"></p>
                <input class="input_file" type="file" name="file"/><br>
                <input class="button" type="submit" name="submit" value="uploda"/>
</form>
</body>
</html>

效果如下图:
CVE-2017-15715 复现
打开docker,首先用docker ps获取一下当前运行的docker image
CVE-2017-15715 复现
然后用如下命令进入docker的命令行

docker exec -it a16a6b4ea869 /bin/bash

本地开启一个python 的http

py2 -m SimpleHTTPServer

docker下到/var/www/html/下用curl进行写入

curl http://127.0.0.1:8000/x.php

2.过程演示

上传一个文件
CVE-2017-15715 复现
然后修改hex
CVE-2017-15715 复现
CVE-2017-15715 复现
发包之后,访问1.php%0a

CVE-2017-15715 复现

0x02 原理

Apache通过FilesMatch的方式来检查后缀以此来判断是否是php,然后进行解析。

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

这里看一下$$的意思就是说如果末尾是一个\n我也是要匹配一下的
CVE-2017-15715 复现

ps

这里使用 $_FILES[‘file’][‘name’] 获取用户名会自动去掉\n

相关标签: web安全