通过wireshark分析各种webshell工具的流量特征
1.蚁剑
在自己的云服务器/var/www/html/目录下放入1.php文件
蚁剑连接,wireshark抓包,终端输入指令

抓包数据流

1.ua头特征明显,但是实战别人会改
2.url解码后发现echo("0f013"); 和 echo("44aed"),蓝色区域(响应包)的第一行看到了 0f013,最后一行看到了 44aed。蚁剑在每次发包时,都会随机生成两个字符串,用来精准包裹中间返回的目录列表。


3.&cmd=@ini_set("display_errors", "0");@set_time_limit(0);蚁剑在执行任何命令前,都会先发这两句。第一句是为了关闭 PHP 的报错提示(防止暴露服务器绝对路径),第二句是为了防止执行耗时命令导致脚本超时报错。
4.base64_decode($_POST["0xcdf019c62f3a2"]
0xcdf019c62f3a2=L3Zhci93d3cvaHRtbC8%3D
base64解密后发现是文件目录

5.$F=@opendir($D);if($F==NULL){echo("ERROR:// Path Not Found Or No Permission!");
在执行文件遍历
6.弱特征:变量一般以0x开头
拦截
将蚁剑特征转化为 WAF 规则
1. 针对弱特征的拦截(User-Agent)
虽然红队很容易改 UA,但在 HW 初期,封堵默认 UA 能有效拦截掉大批自动化扫描器和脚本小子的盲打。
WAF 配置逻辑:
匹配位置(Target):
HTTP.REQ.HEADER("User-Agent")匹配方式(Operator): 包含(Contains)或 正则匹配(Regex)
匹配内容(Pattern):
antSword/v2\.执行动作(Action): 阻断(Block)并记录日志。
2. 针对强特征的拦截(核心函数调用)
这是高价值的防护规则。就算攻击者伪装了 UA,甚至对一部分参数做了简单的拼接,只要核心执行逻辑没变,就会被抓出来。
我们在抓包时定位到了
@ini_set("display_errors", "0")以及它的 URL 编码形式%40ini_set(%22display_errors%22%2C%20%220%22)。
WAF 配置逻辑:
匹配位置(Target):
HTTP.REQ.BODY(POST 请求体)匹配方式(Operator): 正则匹配(Regex)
匹配内容(Pattern):
(@|%40)ini_set\(("|%22)display_errors("|%22)解读: 兼容了明文和 URL 编码两种状态。无论黑客发的是
@ini_set还是%40ini_set,都会被瞬间匹配命中。执行动作(Action): 直接阻断(Block)并封禁源 IP。
3. 针对行为模式的拦截(长串随机参数名)
你之前敏锐发现的
0x开头的特征,在 WAF 中通常作为“组合条件”使用,以降低误报率。
WAF 配置逻辑(组合策略):
条件 A:
HTTP.REQ.BODY正则匹配0x[a-fA-F0-9]{8,}=(匹配类似 0x185b4d9f4d043= 这样的参数名)。条件 B:
HTTP.REQ.BODY包含base64_decode关键字。逻辑关系:
Condition A AND Condition B。执行动作(Action): 阻断(Block)。
2.冰蝎
在本地冰蝎客户端目录下,找到 server 文件夹里的shell.php上传到云服务器的 /var/www/html/ 目录下然后建议连接

content-type:application/x-www-form-urlencoded
请求头声明了是表单数据,但请求体却是一大块不含参数名的字符串(或纯二进制)
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
和最终服务器返回body不一致,实际在密文传输
user-Agent
冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用。
特定的长连接行为
Connection: Keep-Alive Keep-Alive: timeout=5, max=100
但是这些特征都是弱特征,都是可以修改的
-
冰蝎 v3(动态密钥协商):
-
特征: 强依赖密钥协商过程。连接初期,客户端会向 Webshell 发送 GET 请求,服务器生成一个 16 位的随机字符串(AES 密钥)并通过明文返回给客户端,并将该密钥写入 Session。
-
后续流量: 拿到密钥后,后续全部转为 POST 请求,且请求体和响应体均为 AES-128 加密的密文。
-
-
冰蝎 v4(预共享密钥,无协商):
-
特征: 彻底移除了 GET 请求的密钥协商环节。默认使用密码的 MD5 散列值作为 AES 密钥(例如默认密码
rebeyond的 MD5 值)。 -
流量表现: 直接就是大流量的 POST 请求,全程无明文交互。防守方无法通过抓取握手包提取密钥,只能依赖特征库(如默认的 Accept 头,若未修改的话)或基于行为的异常检测。
-
3.哥斯拉

Cookie: PHPSESSID=ubkud1ka8aergqp1c20f2eucd0;Cookie中最后会有个分号
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 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
试图伪装成一个正常的浏览器在请求网页,但它发出的 POST 请求体 却是一个长达上千字节的加密代码块。正常的 Web 页面交互极少有这种行为。
响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串(密码和密钥组合,计算出一个 32 位的 MD5 值)按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
请求包中通常带有pass=payload的结构,我的密码是cmd所以是cmd=
基于统计学的异常检测
当红队修改了弱特征(UA、Accept)和强特征(更换加密算法、去特征版工具)时,基于正则匹配的 WAF 就会失效。此时,蓝队态势感知设备(如全流量分析设备 NDR)会使用数学统计和行为模型来抓黑客。
请求体的信息熵极高 (Information Entropy):
原理: 信息熵是衡量数据混乱程度(随机性)的指标。正常的 HTTP 业务请求(如 JSON、HTML、中英文文本)是有规律的,信息熵通常较低(一般在 4-5 左右)。
应用: 冰蝎和哥斯拉的请求体是经过 AES 强加密或极度混淆的,数据看起来像纯粹的随机乱码。这种密文的特征就是字符分布极其均匀,信息熵极高(通常逼近最大值 8)。安全设备检测到某个 POST 请求的 Body 熵值大于 7.5,就会直接告警为疑似加密 Webshell 流量。
长连接状态异常 (Keep-Alive Behavior):
原理: 正常用户访问网页,获取完 HTML/CSS/JS 等静态资源后,连接很快就会被复用或释放。
应用: 当黑客使用冰蝎/哥斯拉执行内网代理(SOCKS 隧道)或反弹 Shell 时,会利用 HTTP 长连接(Keep-Alive)在客户端和服务器之间建立一条持续不断开的通道。如果设备发现某个单 IP 对单一 PHP/JSP 文件的连接持续时间异常长,且有持续的微小数据包交互(心跳包),这就是明显的 Webshell 维持通道。
请求频率异常 (Request Frequency & Beaconing):
原理: 人类点击网页的频率是随机且低频的。
应用:
突发高频: 当黑客在蚁剑/冰蝎中点击“文件管理-根目录”时,工具会自动发送数十个请求来遍历目录和读取文件属性,形成瞬间的请求毛刺。
固定频率(心跳/Beacon): 某些高级木马为了维持存活或等待指令,会每隔精准的时间(如固定的 5.00 秒,或带有特定抖动率的 5-7 秒)向外发送极小的数据包。这种机器行为在频率分析图上极易暴露。
更多推荐



所有评论(0)