项目地址:https://github.com/KawaiiSh1zuku/PHP114514Shell
为什么删了?因为我发现我 shell 里的密码不太好泄露

分析

php 中有一个小小的特性:利用 $$abc 对以 $abc 的值为名字的变量进行赋值,可以以此污染变量。

foreach($_POST as $key => $value) $$key = $value;

这段语句就会将 POST 的所有参数设置为变量。
以此为基础可以写出简单的分支对抗语句

foreach($_POST as $key => $value) $$key = $value;
if ($sqlcheck) {
    $checker = new sql_security(); // 注意这个类名
    if(!$checker -> check_sql($sql)) {
        die("杂鱼~杂鱼");
    } else {
        die("SQL is safe");
    }
} else {
    $checker = new sql_checker(); // 注意这个类名 和上面是不是不太一样
    $checker -> __init__($sql, $sha);
}

然后,可以利用 PHP 子类函数覆盖的特性,构造两个类。一个是正常代码一个是恶意代码。
sql_checker 类继承了 sql_security 类,拥有其中的成员函数,在这里构造恶意代码进行执行。
接下来论证了一段恶臭数字

private function randomInt(){
   //此处随意论证数字,只要你能写函数把数字解密出来就ok
}

别以为这是真的 random 嗷,这是用来对付某些只有字符串特征的引擎的。
以生成的数字解密出 system 函数就可以调用了。

最后修改:2024 年 02 月 01 日
如果觉得我的文章对你有用,请随意赞赏