进入到十七关后发现这关有点不同,上面多了一行提示:密码重新设置,咱也不懂啥意思,在试了写常规注入的方法后,没有发现什么可以利用的点,于是决定去看看代码,虽然我不会php
先看这一部分有sql语句的:
从users表中搜索出uname和psw,条件和psw无关,只看uname
mysql_fetch_array()好像能返回键值对,而且除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。
uname正确的话,再将users表中psw更新,条件等于刚刚输入的uname
假如有报错,则打印报错信息
uname不对则显示一个叫flag1的图片
看到这基本上明白这关是个怎么回事了,输入uname和pwd,先使用输入的uname去users表中搜索出uname和psw,假如不存在则显示flag1图片,如果存在,则将此uname的psw更新为输入的psw,且会返回报错信息,这里返回的报错是update语句的报错,所以在密码框注入,uname必须为正确的,这个页面上已经给出了Dhakkan,uname固定使用这个就好,先尝试下:
uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,database(),0x7e),1)#&submit=Submit
可以发现轻松的获取到了数据库名
uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' limit 0,1),0x7e),1) #&submit=Submit
接着根据库名爆出表名,剩下的爆字段和搜索就不继续了,此关结束