SQLmap 通关 sqli-labs 系列(三):POST、UPDATE 与 HTTP 头注入

发布时间:2026/6/25 13:05:45
SQLmap 通关 sqli-labs 系列(三):POST、UPDATE 与 HTTP 头注入 摘要上一篇我们拿下了 GET 型注入的各种变体。现实世界的登录、搜索、用户中心几乎都使用 POST 方法传递数据注入点还经常藏在 Cookie、User-Agent、Referer 等 HTTP 头中。本篇将用 SQLmap 彻底解决 Less-11 到 Less-22涵盖 POST 报错注入、双注入、盲注、UPDATE 注入、User-Agent/Referer 注入、Cookie 注入以及 Base64 编码的 Cookie。我们将重点学习--data、-r请求文件、--level、--risk、--tamperbase64encode等核心参数让任何位置的注入点都无所遁形。一、新场景当注入点不在 URL 中手工注入时我们需要用 Burp Suite 抓包修改 POST 数据或者头字段。SQLmap 同样需要知道完整的请求信息。它提供了两种方式--data直接指定 POST 数据字符串。-r读取一个完整的 HTTP 请求文件。二、POST 注入核心关卡Less-11 到 Less-172.1 准备工作抓取请求文件首先在浏览器中访问 sqli-labs打开 Less-11 登录页面。用 Burp Suite 拦截登录请求用户名 admin密码 admin提交将截获的完整请求包含 Host、Cookie、Content-Type 和 POST body复制保存为less.txt。内容大致如下这就是我们日后反复使用的“模板”。每个关卡只需修改 URL 路径和请求体中的参数即可。2.2 Less-11POST 报错注入sqlmap -r less.txt --batch --dbsSQLmap 会测试uname和passwd最终输出选择uname作为注入点然后继续枚举表、列、数据sqlmap -r less.txt -D security --tables --batch sqlmap -r less.txt -D security -T users --columns --batch sqlmap -r less.txt -D security -T users --dump --batch2.3 Less-12POST 括号双引号抓取 Less-12 的登录请求修改less.txt。命令不变sqlmap -r less.txt --batch --dbsSQLmap 自动用)闭合无需人工干预。2.4 Less-13 和 Less-14POST 双注入Less-13 为单引号括号双注入Less-14 为双引号。同样使用-r文件sqlmap -r less.txt --batch --dbs皆可秒破。2.5 Less-15 和 Less-16POST 盲注sqlmap -r less.txt --technique B --batch --dbs //布尔盲注sqlmap -r less.txt --technique T --time-sec 2 --batch --dbs //时间盲注可指定盲注过程稍长耐心等待即可。2.6 Less-17UPDATE 注入密码修改这一关是修改密码的表单后台执行UPDATE users SET password... WHERE username...注入点在用户名处。抓取修改密码的请求提供新密码保存为less.txt然后sqlmap -r less.txt --batch --dbsSQLmap 会发现uname参数存在注入。注意这里因为执行的是 UPDATE可能存在数据变更风险但 sqli-labs 可随时重置。三、HTTP 头注入Less-18 和 Less-193.1 升级探测等级--level与--riskSQLmap 默认只测试 GET 和 POST 参数--level 1。要测试其他位置必须提高 level--level 2增加Cookie测试。--level 3增加User-Agent和Referer测试。--level 4-5测试更多 Header。--risk是风险等级值越高Payload 越激进如使用 OR、SLEEP 等在 sqli-labs 中我们可放心使用--risk 2或 3。3.2 Less-18User-Agent 注入关卡行为登录成功后页面会将你的 User-Agent 和 IP 插入数据库。注入点在User-Agent头。sqlmap -r less.txt --level 3 --risk 2 --batch --dbsSQLmap 在测试User-Agent参数时会输出避坑指南如果没测出多半是 Cookie 已过期导致登录状态失效页面没有执行 INSERT 操作。务必使用刚登录后的有效请求。3.3 Less-19Referer 注入与 Less-18 几乎一样只是注入点换成了Referer头。抓取任意包含 Referer 的请求保存为less.txt然后用同样命令sqlmap -r less.txt --level 3 --risk 2 --batch --dbs四、Cookie 注入Less-20、Less-21、Less-224.1 Less-20明文 Cookie 注入登录后Less-20 将用户名存入 Cookieunameadmin并在查询时拼接。在--level 2下Cookie 会被测试。直接用--cookie参数sqlmap -u http://192.168.137.1/sqli-labs/Less-20/ --cookieunameadmin --level 2 --batch --dbs4.2 Less-21Cookie Base64 编码注入后台逻辑base64_decode($_COOKIE[uname])后拼入 SQL。直接送 or 11#会因编码失效。我们需要使用 Tamper 脚本base64encode它在 Payload 发送前先进行 Base64 编码。sqlmap -u http://192.168.137.1/sqli-labs/Less-21/ --cookieunameadmin --tamperbase64encode --level 2 --batch --dbs你会看到提示加载了base64encode模块随后注入成功。4.3 Less-22Cookie Base64 双引号闭合方式不同但方法完全一样sqlmap -u http://192.168.137.1/sqli-labs/Less-22/ --cookieunameadmin --tamperbase64encode --level 2 --batch --dbs五、总结通过本文你将 POST 注入、UPDATE 注入、HTTP 头注入、Cookie 注入尽数掌握。核心要点回顾用-r文件保存完整请求可复用 Cookie 和所有 Header。灵活运用--level和--risk扩大测试范围。遇到 Base64 编码用--tamperbase64encode一键适配。真正的强大在于知道工具背后发生了什么。当你看着 Tamper 脚本变形 Payload 时请回想手工注入的奇技淫巧它们本是一脉相承。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。