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

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

1. 思路🚀

本关的SQL语句为:

# 注册
$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";
# 登录
$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";
# 更新
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
  • 注入类型:字符串型(单引号包裹)、GET操作、POST操作
  • 提示:参数需以'闭合
  • 关键参数:username

本关卡是很有意思的,知识点是二次排序注入(Second-Order SQL Injection),整个过程:注册新用户→登录→修改密码。

1.1. 那什么是二次排序注入?🔍

二次排序注入是一种特殊的 SQL 注入攻击方式,它不像传统注入那样直接在输入时触发漏洞,而是分两步 完成攻击:

  1. 第一步:攻击者提交恶意数据,但数据不会立即执行 SQL 注入,而是被存储到数据库(如注册、评论、修改资料等场景)。
  2. 第二步:当其他功能读取并使用了这些存储的数据时,恶意 SQL 代码被执行,导致攻击成功。

1.2. 二次排序注入 vs. 普通 SQL 注入⭐

对比项普通 SQL 注入二次排序注入
触发方式直接提交恶意输入(如登录、搜索)先存储恶意数据,后续操作触发执行
过滤绕过依赖输入时的过滤存储时可能不严格过滤,执行时才触发漏洞
攻击隐蔽性容易被 WAF 检测更难检测,因为攻击分两步完成
常见场景登录框、搜索框用户注册、评论、资料修改、订单系统

在这里插入图片描述

注:本关卡的文件有很多,不过只需要关注:login_create.php(注册),login.php(登录),pass_change.php(更新)。


2. 攻击注入步骤🎯

以数据库中存在的用户admin为例,那个最后操作的是用户admin的密码,攻击注入的整个流程如下:
在这里插入图片描述

2.1. 攻击者注册恶意用户名⚡

注册 SQL 的执行语句

INSERT INTO users (username, password) VALUES ("admin'#", "123456");

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库存储

usernamepassword
admin'#123456

在这里插入图片描述

关键点

  • 用户名 admin'# 包含 SQL 注入字符 '## 是 MySQL 注释符)。
  • 此时 没有直接触发 SQL 注入,只是存储了恶意数据。

2.2. 攻击者登录⚡

登录 SQL 的执行语句

SELECT * FROM users WHERE username='admin'#' AND password='123456';

在这里插入图片描述


2.3. 攻击者修改密码(触发二次注入)⚡

修改密码 SQL 的执行语句

UPDATE users SET PASSWORD='111111' WHERE username='admin'#' AND password='123456';

在这里插入图片描述
在这里插入图片描述

# 再次注释掉后面的 AND password='123456',实际执行的 SQL:

UPDATE users SET PASSWORD='111111' WHERE username='admin'

结果admin 用户的密码被修改为 111111,而 不是 admin'# 的用户

在这里插入图片描述


3. 攻击成功的原因💥

  1. 注册时未过滤 '#

    • 允许攻击者存储恶意用户名 admin'#
  2. 修改密码时直接拼接 SQL

    • 未对从数据库读取的 username 进行二次过滤,导致 '# 被当作 SQL 代码执行。
  3. 注释符 # 绕过密码验证

    • # 注释掉后续条件,使攻击者能直接修改 admin 的密码。

4. 总结🏁

  • 二次排序注入先存储恶意数据,后续操作触发 SQL 注入 的攻击方式。
  • 危害更大,因为攻击隐蔽,可能绕过传统 WAF 检测。
  • 防御核心
    • 参数化查询(避免拼接 SQL)
    • 输入 & 输出双重过滤
    • 最小权限原则

如果系统涉及 用户注册、评论、订单修改 等功能,务必检查是否存在二次排序注入风险! 🚨


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

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

相关文章:

  • 挑战指针题
  • TCP(2)
  • IP 成长的破局之道:从停滞到突破的核心逻辑
  • MyBatis高效查询:简化JDBC开发实战
  • Python 虚拟环境深入浅出全指南
  • 为流媒体时代而生的云服务:Akamai 推出 Accelerated Compute 加速计算服务
  • 在 Maven 多模块项目中统一管理配置文件
  • 8.4 Java Web(Maven P50-P57)
  • 【web应用】为什么 子模块已经删除,但 Maven 依赖项仍然报错?
  • python采集拍立淘按图搜索API接口,json数据参考
  • maven install和package的区别
  • AI绘图-Stable Diffusion-WebUI的基本用法
  • 安卓开发--ConstraintLayout(约束布局)
  • 5天挑战网络编程 -DAY1(linux版)
  • 二十年代深度立体匹配的进化与前沿综述
  • 咖啡参考基因组
  • 机器学习 入门——决策树分类
  • FreeRTOS源码分析四:时钟中断处理响应流程
  • 倒排索引:Elasticsearch 搜索背后的底层原理
  • 【C#】Blazor基本应用
  • ICCV2025 Tracking相关paper汇总和解读(19篇)
  • Matlab(2)
  • Maven配置,Idea集成Maven_依赖引入,Idea生成单元测试
  • 《AI Agent工程师(初级)》
  • ubuntu24.01安装odoo18
  • gdb print设置技巧,离线查看复杂结构体和数组变量内容,展开多层嵌套的结构体的方法
  • 【Docker安装】Ubuntu 24.04.2 LTS系统下安装Docker环境——指定APT源安装方式
  • C + +
  • 宝塔运维实战:CentOs7启动PHP7.4失败
  • 华为OD机考2025C卷 - 最小矩阵宽度(Java Python JS C++ C )