[GXYCTF2019]BabyUpload

打开界面是一个文件上传
在这里插入图片描述
尝试一下
首先上传的是php文件
但是显示

后缀名不能有ph!

emmm,看来是对php文件做了限制
随后习惯性上传png
返回

上传类型也太露骨了吧!

emmm,随后又尝试了.htaccess和.user.ini文件都与上方显示相同
正当我一筹莫展之际
发现了题目页面的网址
在这里插入图片描述
我突然觉得我有希望了!
在这里插入图片描述
随后果然发现了题目的源码

<?php
session_start();
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> 
<title>Upload</title>
<form action=\"\" method=\"post\" enctype=\"multipart/form-data\">
上传文件<input type=\"file\" name=\"uploaded\" />
<input type=\"submit\" name=\"submit\" value=\"上传\" />
</form>";
error_reporting(0);
if(!isset($_SESSION['user'])){
    $_SESSION['user'] = md5((string)time() . (string)rand(100, 1000));
}
if(isset($_FILES['uploaded'])) {
    $target_path  = getcwd() . "/upload/" . md5($_SESSION['user']);
    $t_path = $target_path . "/" . basename($_FILES['uploaded']['name']);
    $uploaded_name = $_FILES['uploaded']['name'];
    $uploaded_ext  = substr($uploaded_name, strrpos($uploaded_name,'.') + 1);
    $uploaded_size = $_FILES['uploaded']['size'];
    $uploaded_tmp  = $_FILES['uploaded']['tmp_name'];
 
    if(preg_match("/ph/i", strtolower($uploaded_ext))){
        die("后缀名不能有ph!");
    }
    else{
        if ((($_FILES["uploaded"]["type"] == "
            ") || ($_FILES["uploaded"]["type"] == "image/jpeg") || ($_FILES["uploaded"]["type"] == "image/pjpeg")) && ($_FILES["uploaded"]["size"] < 2048)){
            $content = file_get_contents($uploaded_tmp);
            if(preg_match("/\<\?/i", $content)){
                die("诶,别蒙我啊,这标志明显还是php啊");
            }
            else{
                mkdir(iconv("UTF-8", "GBK", $target_path), 0777, true);
                move_uploaded_file($uploaded_tmp, $t_path);
                echo "{$t_path} succesfully uploaded!";
            }
        }
        else{
            die("上传类型也太露骨了吧!");
        }
    }
}
?>

代码并不难
可以看到只允许image/jpeg和image/pjpeg的文件上传
然后,把.htaccess文件改名为.jpeg,内容为

AddType application/x-httpd-php .jpeg

这一句的意思是将.jpeg文件解析为php文件
随后burp抓包,果然
在这里插入图片描述
成功来的如此轻易
在这里插入图片描述
随后上传一个.jpeg文件
因为在源代码中有一个过滤

 if(preg_match("/\<\?/i", $content)){
                die("诶,别蒙我啊,这标志明显还是php啊");
            }

所以使用js写一个php
内容为
在这里插入图片描述
上传成功
在这里插入图片描述
随后使用蚁剑连接
在根目录下找到了flag
在这里插入图片描述

在这里插入图片描述
完结,撒花


版权声明:本文为weixin_43152809原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。