首先关于这个方面的知识点,可以分为下面三种检测的,即WAF、入侵检测平台、威胁感知平台。检测的技术可以分为正则匹配、机器语言、行为分析。一般那种开源的就是用的正则匹配,或者说一些比较垃圾的项目,因为用正则匹配的话比较容易绕过,使用加密、编码、分段等操作即可绕过。这个分段就是把一些特征流量分段发送,比如他检测POST这个东西,你可以中间加点,然后分成几个去表示。而行为分析则不看你过滤的函数,而是看这个代码的最终行为是什么,然后进行分析,如果过探测到行为比较危险就会拦截,而这个机器语言也是比较高级的东西,小迪也没解释清。一般商业的都是行为分析和机器语言去检测,开源的是正则。最终的发展方向呢也是往机器语言和行为分析发展。 蚁剑就不用多做解释了,bug太多,容易被检测
像哥斯拉,冰蝎这种webshell工具,普通开源waf产品检测不到(因为这些产品很大部分是由正则匹配进行过滤),我们需要商业产品才能拦截并检测出来,如态势感知天眼
1 菜刀-流量&绕过&特征&检测
小迪在演示的时候,把 POST改成了_POST改成了POST改成了_REQUEST 就绕过waf了,我也不知道使用的是那个版本,但这个菜刀不是重点,知道就好了
这里主要说一下,我们把后门上传上去之后,用菜刀去连的话会被WAF拦截,那我们怎么修改流量特征去绕过拦截呢。首先我们用菜刀去连接后门的时候不是在浏览器弄的,而是在菜刀这个工具去执行这个操作的,所以我们就需要利用全局代理proxifier,把代理端口设置成本机的8888端口,然后在代理规则那里把菜刀这个exe添加进去。然后把burp的代理端口也设置成本机的8888,那么菜刀的流量就会由proxofoer转发到burp,然后我们就可以抓到包了,就可以把流量特征修改了。
php数据包流量特征:
1,请求包中:ua头为百度爬虫
如:ozilla/5.0(compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
2,请求体中存在eval,base64等特征字符
3,请求体中传递的payload为base64编码,并且存在固定的QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J
4,特定的数据包前缀
每个请求中的前缀都是一样的
QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J
解码后为
@ini_set("display_errors","0");@set_time_limit(0);if(PHP_VERSION<'5.3.0'){@set_magic_quotes_runtime(0);};echo("X@Y");
这种判断方式最为可靠,一般有这个前缀的数据报就可以判断这个数据报是菜刀连接后门的数据报
5,返回的数据报中有X@Y的字样 请求包中的UA头为百度爬虫UA头,这个很容易理解,我们上一节刚说过,为了防止他检测UA头,所以设置成百度的UA头。 请求体里面由特征字符eval,base64,这个也是十分明显 最后就是请求体中有固定base64编码,这个要看版本的,可能不一样的版本固定编码不太一样
jsp数据包流量特征:
该流量是WebShell链接流量的第一段链接流量,其中特征主要在i=A&z0=GB2312,菜刀链接JSP木马时,第一个参数定义操作,其中参数值为A-Q,如i=A,第二个参数指定编码,其参数值为编码,如z0=GB2312,有时候z0后面还会接着又z1=参数用来加入攻击载荷.
ASP数据包流量特征:
body解码
其中特征点有如下三部分:
第一:“Execute”,Execute函数用于执行传递的攻击payload,这是必不可少的,这个等同于php类中eval函数;
第二:**OnError ResumeNext,**这部分是大部分ASP客户端中必有的流量,能保证不管前面出任何错,继续执行以下代码.
第三:Response.Write和Response.End是必有的,是来完善整个操作的.
这种流量主要识别这几部分特征,在正常流量中基本没有.
注:OnError Resume Next这个特征在大部分流量中存在,极少数情况没有.
中国菜刀2016版本各语言WebShell链接流量特征
2 冰蝎-流量&绕过&特征&检测
菜刀
客户端发送-服务器解析执行(有部分解码编码操作)-返回
冰蝎
客户端发送key-服务端key存储session-返回客户端-发送基于key AES加密操作的数据包(文件管理点击打开)-服务端解密数据包-客户端接收并解密-展示工具
以代码Key为密匙的AES加密解密过程
数据包流量特征:
0、User-agent:代码中定义
1、Pragma: no-cache
2、Content-Type:application/x-www-form-urlencoded
3、Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
4、Accept-Encoding: gzip, deflate, br
5、Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
冰蝎是采用AES加密的,而我们想要解密的话是需要密钥和偏移量的,并且这个加密不仅发送数据到服务端的时候加密,返回来的时候还是加密的,这就确保了如果对方防火墙的入站没有检测到,而出站的时候又有检测。这个宝塔的WAF比较拉跨,所以说拦不住,因为宝塔的WAF是通过正则匹配来检测的,数据经过加密之后,宝塔的WAF解密不了,就只能放过去了,此时比如说我们这个数据包是进行文件管理操作的话,如果返回的数据包没有经过加密的话,返回的数据是目标的目录结构,那可能就会被WAF检测到。所以这里不仅发送的数据经过加密,返回的数据也经过了加密。
3 哥斯拉-流量&绕过&特征&检测
1、User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
2、Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
3、Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
4、Cookie: PHPSESSID=rut2a51prso470jvfe2q502o44; cookie最后面存在一个";"。
5、响应体特征
响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位
4 蚁剑-流量&绕过&特征&检测
响应体特征
PHP流量特征:
1.有ini_set()相关关键字
其中流量最中明显的特征为@ini_set("display_errors","0");这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码,但是有的客户端会将这段编码或者加密,而蚁剑是明文,所以较好发现
2.UA头特征 UA头中有AntSword关键字
3.参数名大多以“_0x......=”这种形式
ASP流量特征:
我们可以看出蚁剑针对ASP类的WebShell流量与菜刀的流量很像,其中特征也是相同,如OnError ResumeNext、Response.End、Response.Write,其中execute在蚁剑中被打断混淆了,变成了拼接形式Ex"&cHr(101)&"cute,同时该流量中也使用了eval参数,可以被认为明显特征。