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

1. 思路🚀

本关的SQL语句为:

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 的执行语句:

sql 复制代码
INSERT INTO users (username, password) VALUES ("admin'#", "123456");



数据库存储:

username password
admin'# 123456

关键点:

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

2.2. 攻击者登录⚡

登录 SQL 的执行语句:

sql 复制代码
SELECT * FROM users WHERE username='admin'#' AND password='123456';

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

修改密码 SQL 的执行语句:

sql 复制代码
UPDATE users SET PASSWORD='111111' WHERE username='admin'#' AND password='123456';


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

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)
    • 输入 & 输出双重过滤
    • 最小权限原则

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


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

相关推荐
hengdonghui10 天前
Writeup 4 CTFHub injection
web·ctf·sql注入·整数型联合查询注入(有回显)
xiancai_xianyu13 天前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
三84422 天前
sql注入
web安全·sql注入
hengdonghui24 天前
Writeup 4 N1BOOK SQL注入-1
ctf·sql注入·union·字符型注入
在猴站学算法1 个月前
(SQL注入学习)无回显的报错注入(Error-Based)
学习·网络安全·sql注入·ctf竞赛
白帽攻防录1 个月前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
2601_962381582 个月前
【转】Python渗透测试工具:sqlmap
python·渗透测试·sql注入·sqlmap·数据库安全
Sagittarius_A*2 个月前
【好靶场】SQL 注入-布尔盲注-2
sql·web安全·网络安全·sql注入
Sagittarius_A*2 个月前
【好靶场】报错注入-sql注入-数字型
数据库·sql·web安全·sql注入
泷泷_2 个月前
CISP-PTE实操题(自写靶场与题类似或变型)
php·文件上传·cisp-pte·cisp·文件包含·sql注入