sqli-labs

Posted 京亟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqli-labs相关的知识,希望对你有一定的参考价值。

 

 

第十三关:

这关也是一个登陆口,和上关所说的一样,先使用\'"试一下,让程序报错然后判断后台的sql语句

可以看到后台sql大概是 where name = (\'$name\')...  这样的

post信息中输入uname=1\') or \'1\'=\'1\' #&passwd=1&submit=Submit  可以成功进入

但是没有显示账号密码之类的,所以不能使用上一关的联表查询。尝试使用上关的报错查询试试,输入

uname=1&passwd=1\') and extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata  limit 0,1))) #&submit=Submit

能成功报错出数据库名!但是这里显示不全,可以不使用group_concat这个函数,利用limit一行一行的查询

其实这关主要考察的是双查询注入(floor的报错查询),但是这里可以使用extractvalue进行报错,那他的我就不继续下去了。

 

第十四关:

这关和第十三关是类似的,只是将\')变成了"而已,至于是怎么判断的还是使用的\'"。

这里还补充一句,登录框的地方很多时候都没有报错信息,那么怎么判断后台的sql拼凑方式呢? 目前我的办法是将这些比如1\' or \'1\'=\'1\' #  ;          1" or "1"="1" # ;        1\') or \'1\'=\'1\' #  ; 1")or "1"="1" # 等等做成一个字典,然后进行fuzz。

 

第十五关:

好吧,上面刚说面没有报错的情况下应该怎么办,这关就遇到了!(说实话,我写上面那段话的时候是真的没有看这关的内容)

我刚看到这题的时候还是直接输入的\'",结果发现没有报错信息,这个时候就无法通过报错直接判断后台的拼接方式了。

使用上面fuzz的方式是可以判断的,但是这里我就直接看后台的实现吧

发现后台是直接用的单引符号,这里也不会登陆成功后的账号密码,所以只能使用盲注了。

我记得我之前在第十一关的时候就尝试了盲注的,当时没成功,这里的情况实际上是和第十一关一模一样的,后台网上查了下才发现,盲注时应该是

or (ascii(substr((select database()) ,1,1))) >64
而不能是 or ascii(substr((select database()) ,1,1)) >64

post 输入uname=1\' or  (ascii(substr((user()),1,1)))>64 #&passwd=1&submit=Submit  能登陆成功

输入uname=1\' or  (ascii(substr((user()),1,1)))>200 #&passwd=1&submit=Submit

登陆失败,后面的就不继续了,利用二分法一个字符一个字符的判断即可。

 

 

第十六关:

和第十五关类似,只是将单引符号改为了双引符号进行拼凑。怎么判断后台的拼凑方式? fuzz!!

以上是关于sqli-labs的主要内容,如果未能解决你的问题,请参考以下文章

sqli-labs lesson 23

sqli-labs 页面显示sql语句

基于docker的sqli-labs搭建

(sql injection)sqli-lab 15: where 子句中的不可理解的行为

sqli-labs:Less-22

Sqli-Labs less23-24