SQLMap和SQLi注入防御
字数 1970 2025-08-15 21:31:29

SQLMap与SQL注入防御技术详解

第一部分:SQLMap工具使用指南

1.1 SQLMap简介

SQLMap是一款开源的渗透测试工具,专门用于自动检测和利用SQL注入漏洞,主要特点包括:

  • 支持多种数据库:MySQL、Oracle、PostgreSQL、SQL Server、Access、DB2、SQLite、Firebird、Sybase和SAP MAXDB
  • 支持多种注入技术:
    • UNION联合查询注入
    • 报错型注入(Error-based)
    • 布尔型盲注(Boolean-based blind)
    • 基于时间延迟的盲注(Time-based blind)
    • 多语句查询注入(Stacked queries)
  • 官方网站:sqlmap.org

1.2 SQLMap安装与环境配置

安装步骤:

  1. 安装Python环境

    • 下载Python 2.7.x版本(兼容性最佳)
    • 安装路径避免中文,建议如:C:\Users\Administrator\python
    • 将Python添加到系统环境变量
  2. 安装SQLMap

    • 下载SQLMap并安装到指定目录,如:C:\Users\Administrator\sqlmap
  3. 环境验证

    • 测试Python:python命令应进入Python交互环境
    • 测试SQLMap:sqlmap.py -h应显示帮助信息

1.3 SQLMap常用参数详解

数据库信息获取:

  • --dbs:获取所有数据库
  • --dbms:指定数据库类型
  • --current-db:获取当前数据库
  • --banner:获取数据库标识
  • --users:获取数据库用户
  • --passwords:尝试获取密码(需权限)
  • --is-dba:检查当前用户是否为管理员
  • --privileges:查看用户权限

数据提取:

  • -D database_name --tables:获取指定数据库的表
  • -D database_name -T table_name --columns:获取指定表的列
  • -D database_name -T table_name -C column_1,column_2 --dump:提取指定列的数据
  • --dump-all:导出所有数据
  • --start/--stop:限制导出数据范围

其他实用参数:

  • --technique:指定注入技术类型
  • --prefix/--suffix:指定payload前后缀
  • --proxy:设置代理
  • --batch:自动模式(无需交互)
  • --sql-shell:获取SQL交互shell
  • --file-write/--file-dest:文件写入操作

1.4 SQLMap实战示例

基本使用流程:

  1. 获取所有数据库:

    python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --dbs --dbms=mysql --batch
    
  2. 获取当前数据库:

    python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current-db --batch
    
  3. 获取指定数据库的表:

    python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security --tables --batch
    
  4. 获取表的列结构:

    python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users --columns --batch
    
  5. 提取数据:

    python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users -C username,password --dump --batch
    

第二部分:WAF绕过技术

2.1 常见过滤与绕过方法

过滤类型及对应绕过技术:

  1. 过滤注释符

    • 原使用:--+#/* */
    • 绕过方法:使用or '1'='1等方式闭合语句
  2. 过滤AND/OR

    • 大小写变形:AndOr
    • 十六进制/URL编码
    • 符号替换:&&代替AND||代替OR
    • 内联注释:a/**/ndo/*xxx*/r
    • 双写绕过:oORr
  3. 过滤空格

    • 使用%0a%09等代替空格
    • 使用注释分割:union/**/select
  4. 过滤SELECT/UNION等关键词

    • 大小写混合:SeLeCt
    • 内联注释:s/*!12345elect*/
    • 编码绕过:URL编码、十六进制

2.2 绕过实验示例

  1. 过滤注释符绕过

    ?id=-1' union select 1,database(),'1
    
  2. 过滤AND/OR绕过

    • 使用&&||
    • 使用ananddoorr
  3. 过滤空格绕过

    ?id=1'%0aunion%0aselect%0a1,2,3%0aor%0a'1'='1
    

第三部分:SQL注入防御方案

3.1 综合防御措施

  1. 基础防护

    • 关闭错误提示:php.ini中设置display_errors=Off
    • 启用魔术引号:magic_quotes_gpc=On(自动转义特殊字符)
  2. 输入过滤

    • 黑名单过滤:过滤andorunionselect等关键词
    • 白名单验证:对特定输入只允许预期字符
  3. 权限控制

    • 最小权限原则:数据库用户只授予必要权限
    • 避免使用root/admin等高权限账户
  4. 编码实践

    • 预处理语句(Prepared Statements)
    • 参数化查询(PDO)
    $stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
    $stmt->execute(['id' => $id]);
    
  5. 硬件防护

    • 部署WAF(Web应用防火墙)
    • 入侵检测/防御系统(IDS/IPS)
  6. 其他措施

    • 定期安全审计
    • 敏感数据加密存储
    • 框架安全机制(如ORM)

通过综合应用以上技术和方法,可以构建多层次的SQL注入防御体系,有效保护Web应用安全。

SQLMap与SQL注入防御技术详解 第一部分:SQLMap工具使用指南 1.1 SQLMap简介 SQLMap是一款开源的渗透测试工具,专门用于自动检测和利用SQL注入漏洞,主要特点包括: 支持多种数据库:MySQL、Oracle、PostgreSQL、SQL Server、Access、DB2、SQLite、Firebird、Sybase和SAP MAXDB 支持多种注入技术: UNION联合查询注入 报错型注入(Error-based) 布尔型盲注(Boolean-based blind) 基于时间延迟的盲注(Time-based blind) 多语句查询注入(Stacked queries) 官方网站:sqlmap.org 1.2 SQLMap安装与环境配置 安装步骤: 安装Python环境 : 下载Python 2.7.x版本(兼容性最佳) 安装路径避免中文,建议如: C:\Users\Administrator\python 将Python添加到系统环境变量 安装SQLMap : 下载SQLMap并安装到指定目录,如: C:\Users\Administrator\sqlmap 环境验证 : 测试Python: python 命令应进入Python交互环境 测试SQLMap: sqlmap.py -h 应显示帮助信息 1.3 SQLMap常用参数详解 数据库信息获取: --dbs :获取所有数据库 --dbms :指定数据库类型 --current-db :获取当前数据库 --banner :获取数据库标识 --users :获取数据库用户 --passwords :尝试获取密码(需权限) --is-dba :检查当前用户是否为管理员 --privileges :查看用户权限 数据提取: -D database_name --tables :获取指定数据库的表 -D database_name -T table_name --columns :获取指定表的列 -D database_name -T table_name -C column_1,column_2 --dump :提取指定列的数据 --dump-all :导出所有数据 --start/--stop :限制导出数据范围 其他实用参数: --technique :指定注入技术类型 --prefix/--suffix :指定payload前后缀 --proxy :设置代理 --batch :自动模式(无需交互) --sql-shell :获取SQL交互shell --file-write/--file-dest :文件写入操作 1.4 SQLMap实战示例 基本使用流程: 获取所有数据库: 获取当前数据库: 获取指定数据库的表: 获取表的列结构: 提取数据: 第二部分:WAF绕过技术 2.1 常见过滤与绕过方法 过滤类型及对应绕过技术: 过滤注释符 : 原使用: --+ 、 # 、 /* */ 绕过方法:使用 or '1'='1 等方式闭合语句 过滤AND/OR : 大小写变形: And 、 Or 十六进制/URL编码 符号替换: && 代替 AND , || 代替 OR 内联注释: a/**/nd 、 o/*xxx*/r 双写绕过: oORr 过滤空格 : 使用 %0a 、 %09 等代替空格 使用注释分割: union/**/select 过滤SELECT/UNION等关键词 : 大小写混合: SeLeCt 内联注释: s/*!12345elect*/ 编码绕过:URL编码、十六进制 2.2 绕过实验示例 过滤注释符绕过 : 过滤AND/OR绕过 : 使用 && 和 || 使用 anandd 和 oorr 过滤空格绕过 : 第三部分:SQL注入防御方案 3.1 综合防御措施 基础防护 : 关闭错误提示: php.ini 中设置 display_errors=Off 启用魔术引号: magic_quotes_gpc=On (自动转义特殊字符) 输入过滤 : 黑名单过滤:过滤 and 、 or 、 union 、 select 等关键词 白名单验证:对特定输入只允许预期字符 权限控制 : 最小权限原则:数据库用户只授予必要权限 避免使用root/admin等高权限账户 编码实践 : 预处理语句(Prepared Statements) 参数化查询(PDO) 硬件防护 : 部署WAF(Web应用防火墙) 入侵检测/防御系统(IDS/IPS) 其他措施 : 定期安全审计 敏感数据加密存储 框架安全机制(如ORM) 通过综合应用以上技术和方法,可以构建多层次的SQL注入防御体系,有效保护Web应用安全。