DVWA—SQL Injection(Blind)实例
预备知识
在SQL注入中会有回显注入和盲注入的形式,在前面的文章中展示了回显注入的情况,而盲注入就是当我输入查询语句的时候数据并不会直接显示在页面中而是以程序员规定的输出格式来进行显示,所以盲注的思路与回显注入类似。查阅相关内容,盲注首先需要看看是否有注入,注入类型是属于布尔类型还是时间类型。然后就是获取数据库库名、表名、列表名的一系列操作,当然由于我们并不知道每一个具体字符我们还需要对各个库名的长度、名称进行一一破解,思路之一是参照ASCII码表对每个字符进行判断,运用二分查找的方式但是时间消耗太高我们选择kali虚拟机中的sqlmap工具进行注入。
并且在上述的盲注实例中是基于回显注入的页面内容即它们各个等级的限制都是一样的。
当然我们可以简易的获取当前数据库的有关信息
1’ and length(database())>1 # 判断数据库库名的长度
1’ and ascii(substr(database(),1,1))>1 # 二分法猜测数据库名称字符
1’ and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>1 # 获取表名长度
使用sqlmap工具我们可以使用sqlmap的在线获取功能,自己输入地址以及相关指令来完成操作;也可以先使用burpsuites工具对数据包进行存储然后再使用sqlmap工具进行操作。在这里我使用存储数据包的形式来对其进行SQL注入操作。
1. low等级
sqlmap -r /home/kali/Desktop/1.txt -dbs
sqlmap -r /home/kali/Desktop/1.txt -D dvwa -dump-all
2. medium等级
medium等级中是关于sleep函数的使用即是一个时间注入类的漏洞
我们依然使用
sqlmap -r /home/kali/Desktop/2.txt -dbs
指令来对其进行数据库库名的获取
获取之后就是low等级一样的指令获取数据,也是可以获取得到
3. high等级
但是在high等级中不能使用前面的指令来完成对于数据库库名的获取,去查找其他博主解释是由于页面跳转,防止了自动化sql注入,目前版本的sqlmap应该无法成功注入。
4. impossible等级
在impossible等级中,代码使用了预编译,不再拼接sql语句,而是替换并使用了PDO函数输出内容检测、检查了token、判断了数据类型是否仅为数字等安全性操作使其SQL注入可能性减到最低。