Wireshark实战:5种常见Web攻击流量特征速查手册(附DVWA靶场案例)
在安全运维和渗透测试的日常工作中,我们常常面对海量的网络流量数据。如何在数以万计的数据包中,像经验丰富的猎人一样,迅速嗅探到攻击者的踪迹?这需要的不仅仅是工具,更是一套精准的“流量指纹”识别方法。Wireshark作为网络分析的瑞士军刀,其强大之处在于过滤和深度解析,但如何构建高效的过滤表达式,并理解不同攻击在协议层面留下的独特“签名”,是区分新手与专家的关键。本文将聚焦五种最常见的Web攻击类型——SQL注入、XSS、文件上传、命令执行和暴力破解,结合经典的DVWA靶场环境,为你呈现一份可直接用于实战的流量特征速查手册。我们不仅会提供“拿来即用”的Wireshark筛选公式,更会深入拆解每个攻击包的关键字段,让你知其然,更知其所以然,最终练就一双从嘈杂流量中瞬间定位威胁的“火眼金睛”。
1. SQL注入攻击:在HTTP请求中寻找数据库的“敲门声”
SQL注入的本质,是攻击者将恶意的SQL语句“拼接”或“注入”到正常的应用程序请求参数中。在流量层面,这表现为HTTP请求的查询字符串、POST数据体或Cookie里,出现了本不该属于用户输入的SQL关键字和特殊符号。识别这类攻击,关键在于理解应用程序正常行为与异常注入之间的语法差异。
一个典型的基于错误的SQL注入,攻击者会尝试使用单引号(')、双引号(")来破坏原有SQL语句结构,并使用UNION、SELECT、FROM、WHERE、OR、AND、SLEEP()、DATABASE()等关键字来探测或提取数据。在Wireshark中,我们无需等待应用层返回错误,直接在请求阶段就能进行拦截判断。
1.1 实战案例:DVWA低安全级别SQL注入流量分析
假设我们的靶场服务器IP是192.168.1.100,攻击者从IP192.168.1.50发起攻击。一个常见的注入Payload可能是:
1' UNION SELECT user, password FROM users #
当这个Payload通过表单提交时,它会被URL编码。在Wireshark中捕获到的原始HTTP请求行或POST数据可能看起来像这样:
GET /dvwa/vulnerabilities/sqli/?id=1%27%20UNION%20SELECT%20user%2C%20password%20FROM%20users%20%23&Submit=Submit HTTP/1.1
核心筛选与特征提取:
首先,我们可以使用一个组合过滤器,将流量范围缩小到目标服务器的HTTP请求:
ip.dst == 192.168.1.100 && http.request
接下来,我们需要在过滤后的数据包中寻找特征。最直接的方法是使用Wireshark的搜索功能(Ctrl+F),在分组详情中搜索字符串,选择“分组字节流”范围,搜索关键词如union、select、from、where、'、#、--等。
然而,更高效的方法是使用显示过滤器配合contains操作符。但注意,contains对大小写敏感,且作用于整个数据包。一个更精准的方法是结合http.request.uri或http.file_data字段:
http.request.uri contains "union" or http.file_data contains "select"
但这种方法在Payload被编码后可能失效。因此,最可靠的策略是结合流量上下文进行人工分析。找到可疑数据包后,右键点击 -> “追踪流” -> “HTTP流”,可以清晰地看到解码后的完整请求。
注意:高级攻击者可能会使用混淆技术,如将
SELECT写成SeLeCt,或使用HTML编码、十六进制编码。因此,过滤器可能需要更灵活,例如使用正则表达式(需借助matches操作符和pcre语法,但Wireshark原生支持有限),或关注异常长的参数值、频繁的数据库错误响应(HTTP 500状态码)等间接特征。
1.2 关键字段速查与特征表
下表总结了SQL注入在Wireshark流量中的核心识别点:
| 特征维度 | 具体表现 | Wireshark中的观察位置 | 示例/说明 |
|---|---|---|---|
| 语法破坏字符 | 单引号(‘), 双引号(“), 分号(;) |
http.request.uri, http.file_data |
id=1'、name=admin“-- |
| SQL关键字 | UNION, SELECT, INSERT, UPDATE, DELETE, DROP, FROM, WHERE, OR, AND | http.request.uri, http.file_data |
注意大小写变种和编码,如 %55NION (U的URL编码) |
| 数据库函数 | SLEEP(), BENCHMARK(), DATABASE(), VERSION(), USER() | http.request.uri, http.file_data |
常用于基于时间的盲注或信息探测。 |
| 注释符 | #, -- (注意有个空格), /* */ |
http.request.uri, http.file_data |

&spm=1001.2101.3001.5002&articleId=153772934&d=1&t=3&u=a3ed260b1ed54fa29bf8537cb87ffa6a)
597

被折叠的 条评论
为什么被折叠?



