sqli-labs(七)——登陆处sql注入
第十三关:
这关也是一个登陆口,和上关所说的一样,先使用'"试一下,让程序报错然后判断后台的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!!