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):

    • 原理: 人类点击网页的频率是随机且低频的。

    • 应用:

      1. 突发高频: 当黑客在蚁剑/冰蝎中点击“文件管理-根目录”时,工具会自动发送数十个请求来遍历目录和读取文件属性,形成瞬间的请求毛刺。

      2. 固定频率(心跳/Beacon): 某些高级木马为了维持存活或等待指令,会每隔精准的时间(如固定的 5.00 秒,或带有特定抖动率的 5-7 秒)向外发送极小的数据包。这种机器行为在频率分析图上极易暴露。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐