快速定位sql注入http请求包应先用协议+行为组合过滤:http.request.method == "get" && http contains "select" 或 http.request.method == "post" && http contains "union",注意大小写敏感需补全变体,并结合url编码特征如"%27"筛选;人工验证可通过follow tcp stream查看明文参数;sleep(5)出现可锁定mysql时间盲注,需结合响应延迟与语法位置判断;报错型注入则关注200状态码下php/数据库错误信息及堆栈路径;易忽略的底层信号包括tcp窗口突变、http头顺序异常和tls握手扩展缺失。

怎么快速定位SQL注入的HTTP请求包?
别一上来就扫全量包,先用协议+行为组合过滤。Wireshark里最有效的起手式是:http.request.method == "GET" && http contains "select" 或 http.request.method == "POST" && http contains "union"。注意contains对大小写敏感,所以最好补上|| http contains "SELECT" || http contains "Union"避免漏掉。如果攻击用了URL编码(比如%27代替'),单纯搜'会失败——得先在过滤器里用http.request.uri contains "%27"或http.file_data contains "%27"。更稳妥的做法是:先用http过滤出全部Web流量,再右键任意HTTP包 → Follow → TCP Stream,人工看解码后的明文参数值。
为什么看到SLEEP(5)就能断定是MySQL时间盲注?
因为SLEEP()是MySQL特有函数,SQLite、PostgreSQL、SQL Server都不认。Wireshark里一旦在http.request.uri或http.file_data里看到它,基本可锁定数据库类型。但要注意两点:一是它常被URL编码成%285%29(括号)和%27(单引号),二是攻击者可能用BENCHMARK()或WAITFOR DELAY(SQL Server)混淆——这时候得结合响应延迟判断:发完带SLEEP(5)的请求后,Wireshark里下一个TCP ACK间隔是否稳定在5秒左右?如果是,就是时间盲注铁证。另外,SLEEP()几乎总出现在参数值末尾,且前面紧贴'或",这是语义结构的关键锚点。
报错型注入的响应体里藏着什么关键线索?
报错回显不是只看文字,要盯协议层矛盾点。比如DVWA Low级别下,一个id=1'请求触发mysql_fetch_array()错误,Wireshark里能看到HTTP状态码是200 OK,但响应体里却有PHP致命错误。这种“成功状态码+失败内容”的组合本身就是异常信号。更隐蔽的是:错误信息里常带数据库驱动版本,比如mysqli_fetch_array() expects parameter 1 to be mysqli_result说明后端用的是MySQLi扩展;而pg_query(): Query failed则指向PostgreSQL。这些字符串在Wireshark里用http.response.body contains "mysqli"能直接筛出。另外,错误堆栈路径(如/var/www/html/vulnerabilities/sqli/index.php)暴露了服务器目录结构,这在http.file_data字段里清晰可见。
哪些细节容易被当成噪声忽略?
新手常盯着URL和响应体,却漏掉三个底层信号:一是TCP窗口大小突变——连续多个请求后,服务端tcp.window_size从65535骤降到1460,说明数据库连接池被打满或进程卡死;二是HTTP头顺序异常——正常浏览器请求头是Host→User-Agent→Accept,而sqlmap发出的请求常把Cookie插在中间,还带X-Forwarded-For: 127.0.0.1这种伪造头;三是TLS握手扩展字段缺失——HTTPS流量里,如果Client Hello里没有application_layer_protocol_negotiation(ALPN)扩展,却直连443端口,大概率是工具直连而非真实浏览器。这些都不是靠关键词能搜到的,得进TCP或SSL/TLS协议树手动展开看。











