一、实验环境:
一台装有Windows10操作系统的计算机,用来进行安全脆弱性鉴定的DVWA。软件Burpsuite。
二、实验内容和步骤:
1.Low级别手工注入
(1)首先设置安全级别为low,点击SQLinjection进入SQL注入练习页面,在框里随便输入一个ID号,发现能返回用户信息。同时URL中出现了提交的参数信息,说明该页面的提交方式为GET。
(2)在文本框中输入 2‘,发现页面报错,说明单引号被执行,存在 SQL 注入漏洞,并从报错信息中得知该站点的数据库为 MySQL,
(3)在文本框中输入 1 and 1=1 和 1 and 1=2,都能返回数据,说明可能注入漏洞不是数字型。
(4)在文本框输入 1' and 1=1#,可以返回数据,输入 1' and 1=2#,没有数据返回,说明注入成功,确认漏洞为字符型。
(5)在文本框输入 1' order by 1 和 1' order by 2,有数据返回,输入 1' order by 3,页面报错,说明本页面只查询了 2 个字段。
(6)在文本框输入 1' and 1=2 union select 1,2#,确认页面中 First name 处显示的是记录集中第一个字段,Surname 处显示的是记录集中第二个字段。
(7)在文本框输入 1' and 1=2 union select database(),2#,原第一个字段处显示当前数据库名称为 dvwa。
(8)在文本框输入 1' and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#,原第二个字段处显示 users 表中的所有字段名。其中发现 user 和 password 字段,极有可能是用户名和密码字段。
(9)在文本框输入 1' and 1=2 union select user,password from users#,原第一个字段和第二个字段处分别显示表中的用户名和密码。
(10)在 http://www.cmd5.com 破解 MD5 加密的密码,即可得到密码明文。这里我们以第三个密文为例,得到的密码为charley
2.Medium级别SQL手工注入
(1)安全级别设置为 Medium 后,再次进入 SQL 注入模块,发现没有了文本框,随便选择一个 ID 后,可以返回数据,且 URL 上没有显示任何参数,说明该页面为 POST 提交方式。由于页面中没有提供输入信息的接口,所以需要使用 Burpsuite社区版等工具来构造 POST 包。
(2)运行 Burpsuite,并设置好浏览器代理。
(3)再次到 SQL 注入页面随便选择一个 ID 值,点击提交,该数据包会被 Burpsuite 拦截并显示。
(4)在 ID 值后加入 ' 单引号,并点击 Forward 按钮,浏览器报错,发现同样存在 SQL 注入漏洞。
(5)再次随意选择 ID 值,在 Burpsuite 拦截的包中 id= 后加上 and 1=1,可以返回数据,加上 and 1=2,没有数据返回,确认 SQL 注入点为数字型。
(6)再次拦截数据包,加入 and 1=2 union select 1,2,确认页面中 First name 处显示的是记录集中第一个字段,Surname 处显示的是记录集中第二个字段。
(7)查询数据库名、表名方法与 Low 级别思路一致,只不过不需要单引号和 # 来闭合语法。
(8)拦截数据包,加入 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users' 来查询字段名时,发现页面报错。
(9)点击“intercept is on”先暂时关掉 Burpsuite 的代理功能,在SQL注入页面中点击 View Source,查看当前源码,发现对提交的 ID 值添加了 mysql_real_escape_string 函数,该函数会对单引号进行转义,从而导致 SQL 语句构造不成功。
(10)对表名 users 进行 16 进制 HEX 编码,就可以无需使用单引号。users HEX 编码后为 0x7573657273。重新开启 Burpsuite 的代理功能后,在拦截的包中加入 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273,可以成功查询出字段名。
(11)拦截数据包,加入 and 1=2 union select user,password from users,可得到密文,再使用md5解密可以成功查询出用户名和密码的内容。这里以第一个密文为例,得到的明文为password。