DVWA_sql injection(low Medium)

这里主要记录下做题时的思路以及步骤,不查看源码也不对源码进行分析。(我这个dvwa是一个在线靶场,所以我也不确定是否与本地靶场有些许出入)

1、Low

  将难度调为Low级别后,来到如下界面

  首先输入一个数字 1 试试水,我们可以看到如下结果

 

   接下来开始确定是否为数字型注入,我们输入 1 and 1=2 # 来对其进行测试

 

   可以看到这次的执行结果与上次结果相同,这说明 and 1=2 并未发生作用,所以这里应该不是数字型注入,我们来测试一下字符型注入,输入 1' and 1=2 # ,我们可以看到如下结果

 

   这次结果没有返回,说明 and 1=2 成功执行了,这也说明 ' 成功对其进行闭合,这也说明了这里是一个字符型注入,我们可以再构建一个 payload 来验证一下我们的想法,输入 1' and sleep(10) # ,这里图片无法看出来效果,可以自行输入该 payload 进行测试,其结果应该是该页面会在10秒之后才返回,这也说明了使用 ' 进行闭合是正确的

  接下来就可以进行一些信息的获取了,输入 1' order by 5 # 来进行测试,我们会得到如下结果

 

   这说明其查询数目小于5,在这里我们可以使用二分法进行测试,接下来尝试 1' order by 2 #

 

   可以看到这里是正确返回的,说明其查询数目大于等于2,接下来我们测试3,即 1' order by 3 #

 

 

   由此可以判断其其查询数目为2,接下来就可以通过联合查询来查看数据库信息了,我们构建payload为 1' union select database(),version() #

 

   由上图可以看到其数据库名称以及数据库版本信息,得到数据库名称,接下来便可以查询该数据库下的表名了,我们构建payload为 1' union select 1,table_name from information_schema.tables where table_schema='dvwa' #

 

2、Medium

  来到Medium级别,界面跟Low级别略有不同

 

   可以明显看到,Low级别的参数是由我们用户自己输入,而Medium级别则限制了我们的输入,不过我们还是直接提交一个试试水,看看效果

 

   我们再观察一下其URL,看看是否为GET提交方式,我们可以直接修改参数来绕过其输入的限制

 

   很明显,其URL并未提交参数,也就是说其并不是通过GET方式来提交参数,所以我们使用burpsuite来拦截其请求数据包,看看是否为POST提交数据的方式,不过在这之前我们还需要查看其提交的参数名称

 

   可以看到其提交参数应该是 id ,接下来打开burpsuite来查看一下请求包

 

   可以明显看到请求正文里有两个参数,其中一个便是刚才我们看到的参数 id ,由此我们便可以知道Medium级别可以通过burpsuite拦截请求数据包,通过修改请求数据包中的 id 来进行注入,还是同Low级别一样,先来测试其是数字型注入还是字符型注入,payload为 3 and 1=2 #

 

   没有回显,说明 and 1=2被成功执行,说明这里是数字型注入,也可以使用 3 and sleep(10) # 来验证一下,不过这里就不演示了

  知道其是数字型注入之后便可以进行一些操作了,同Low一样,先使用 3 order by 2 # 来测试其查询数目

 

   回显正常,接下来测试 3 order by 3 #

 

   回显失败,说明这里查询数目也是2

  接下来使用联合查询来查询数据库名称以及版本号,payload为 3 union select database(),version() #

 

   得到数据库名称和版本号,接下来便可以查询表名了

  payload为 3 union select 1,table_name from information_schema.tables where table_schema='dvwa' #

  当我们满心欢喜感觉已经成功的时候,会发现该payload会得到如下回显

 

   可以看到其对 ' 进行了过滤,我们传入的 ' 都变成了 \' ,我们传入的 ' 全部都被转义了

  这里我们便要对这个过滤进行绕过,这里我们可以使用十六进制来对其进行绕过,即:将dvwa转为十六进制

  payload便变为了 3 union select 1,table_name from information_schema.tables where table_schema=0x64767761 #

 

   这里便得到了表名的信息,剩下的也是一些重复性的操作,这里也不进行演示了

3、High

  进入High级别,界面跟前两关似乎有点不一样

 

   跟随提示,点击 here to change your ID ,来到如下界面

 

   这次的输入点在新弹出来的对话框里(在新弹出的对话框进行输入可以防止一些普通的sqlmap注入),直接测试是否为字符型注入,payload:1' and 1=2 #

 

   可以看到其没有回显值,说明 and 1=2 被成功执行,也说明这里为字符型注入,余下的操作则与Low级别的相同,这里便不再进行演示了

posted @ 2020-09-08 22:00  mmzkyl  阅读(178)  评论(0)    收藏  举报