SQLILABS-详解less-1
字数 1172 2025-08-18 11:35:59
SQL注入实战教学:SQLILABS Less-1 详解
一、靶场环境搭建
1.1 环境要求
- MySQL版本:推荐使用5.x版本(新版本可能导致兼容性问题)
- PHP环境:推荐PHP 5.7版本(配合phpMyAdmin工具使用)
- 搭建工具选择:
- Docker
- XAMPP
- 小皮面板等集成环境
1.2 常见问题解决
- 数据库连接问题:默认root密码为空,若出现问题需修改为自设密码
- 靶场重置:可通过界面"重置靶场"选项恢复初始状态
- 公网访问:可通过服务器映射将靶场发布到互联网
二、Less-1 基础分析
2.1 初始SQL查询
访问Less-1并传递ID参数时,后端执行的SQL语句为:
SELECT * FROM users WHERE id='1' LIMIT 0,1
2.2 SQL语句解析
SELECT *:选择所有列FROM users:从users表中查询WHERE id = '1':筛选ID列值为1的记录LIMIT 0,1:从第0行开始,返回1条记录
三、注入技术详解
3.1 注入点探测
- 单引号测试:在ID参数后添加单引号
',观察是否报错- 示例:
id=1' - 预期:若存在SQL注入漏洞,可能返回数据库错误信息
- 示例:
3.2 确定列数
使用ORDER BY子句确定查询返回的列数:
1' ORDER BY 3--+
- 逐步增加数字测试(如1,2,3,...)
- 当数字超过实际列数时会报错
- 本例中已确认返回3列
3.3 联合查询注入
使用UNION SELECT进行联合查询注入:
-1' UNION SELECT 1,2,3--+
- 关键技巧:
- 使用负值或不存在的ID值(如-1)使前查询不返回结果
- 这样联合查询的结果会直接显示
3.4 数据提取技术
3.4.1 确定显示位
通过联合查询确定页面中显示的是哪些列:
-1' UNION SELECT 1,2,3--+
观察页面显示的数字(如2和3),这些就是可以显示数据的"显示位"
3.4.2 提取数据库信息
-1' UNION SELECT 1,database(),version()--+
database():获取当前数据库名version():获取数据库版本
3.4.3 提取表数据
使用concat_ws函数将用户名和密码连接显示:
-1' UNION SELECT 1,concat_ws(':',username,password),3 FROM users--+
concat_ws(':',A,B):用冒号分隔连接字段A和B- 从users表中提取用户名和密码
3.5 注释技巧
--+:MySQL中的注释符号,用于注释掉原始查询的剩余部分- 也可使用
#作为注释符
四、防御措施(供学习参考)
4.1 安全编码实践
- 使用参数化查询(预处理语句)
- 实施输入验证和过滤
- 采用最小权限原则
4.2 错误处理
- 避免显示详细数据库错误信息
- 使用自定义错误页面
五、总结
Less-1展示了基于错误的字符型SQL注入的基本流程:
- 单引号探测注入点
- ORDER BY确定列数
- UNION SELECT联合查询
- 利用显示位提取数据
- 使用concat_ws等函数格式化输出
通过此练习,可以掌握最基本的SQL注入技术原理和利用方法,为后续更复杂的注入技术学习打下基础。