一、捕获菜刀流量
payload特征:
PHP: <?php @eval($_POST['caidao']);?> ASP: <%eval request(“caidao”)%> ASP.NET: <%@ Page Language=“Jscript”%><%eval(Request.Item[“caidao”],“unsafe”);%>
数据包流量特征:
1、请求包中:ua头为百度,火狐
2、请求体中存在eavl,base64等特征字符
3、请求体中传递的payload为base64编码,并且存在固定的QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J,解码出来是@ini_set("display_errors","0");@set_time_limit(0);if(PHP_VERSION<'5.3.0'){@set_magic_quotes_runtime(0);};echo("X@Y");
响应文的格式为
X@Y 结果 X@Y
二、分析特征
菜刀的流量由于没有进行加密,所以各类特征非常明显,以下规则均可以将菜刀进行识别
(1)响应里面存在->|作为响应正文的开头,响应的末尾以|<-结束
(2)请求正文部分至少存在@eavl(base64_decode($_POST[z0]));可以用来识别
(3)z0参数是一直存在的核心代码,所以z0的base64解码后的开头的代码:
@ini_set("display_errors", "0");@set_time_limit(0);@set_magic_quotes_runtime(0); ,所以,base64编码后的内容也是一样的
1、识别响应的开头和结束部分
alert http any any <> $HOME_NET 80 (msg:"菜刀-1";http.response_body;content:"|2d 3e 7c|";startswith;content:"|7c 3c 2d|";endwith;classtype:web-shell-attck;sid:5618001;rev:1;)
2、识别非base64部分
alert http any any -> $HOME_NET 80 (msg:"菜刀-2";content:"eval";http_client_body;pcre:"/base64_decode.+POST.+z0=/i";classtype:webshell-attck;sid:5618002;rev:1;)
3、对base64进行识别
alert http any any <> $HOME_NET 80 (msg:"菜刀-3";content:"QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0B";http_client_body;classtype:web-shell-attck;sid:5618003;rev:1;)
其中第2条规则和第3条规则可以合并一下
其他webshell管理工具可以参考下面文章编写相关suricata规则