声明:该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。 |
文章来源:先知社区(Icepaper)
原文地址:https://xz.aliyun.com/t/11943
0x01 渗透前言
0x02 packerFuzzer
很轻松的收获了两枚任意文件上传漏洞,不过其中一个是放到minio下的,直接下载,而且是springboot的任意文件上传,利用相对局限。
0x03 JS获取
只能一个个对chunk-xxx.js文件进行发现,但是js文件又太多了,足足有90多个,因此写了一个简单的python脚本批量提取了一下路径
import json
import re
import requests
import sys
import os
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"}
fileurl=sys.argv[1]
filemkdir=fileurl.split('_')[0]
if not os.path.exists(filemkdir):
os.makedirs(filemkdir)
# 下载chunk.js
# with open (str(fileurl)) as furl:
# url=furl.readlines()
# print(str(url)+"---is---downloading")
# for url in url:
# url=url.strip('n')
# file=url.split('/')[-1]
# resp = requests.get(url)
# html = resp.text
# with open ("./"+filemkdir+"/"+file,"a",encoding="utf-8") as f1:
# f1.write(html)
#get path + 路径名称
paths=[]
for dirpath, dirnames, filenames in os.walk('./'+filemkdir):
for file in filenames:
with open("./"+filemkdir+"/"+file,"r",encoding='gb18030', errors='ignore') as f2:
try:
line=f2.readlines()
for line in line:
line=line.strip('n').strip('t')
#print(line)
p = re.findall('''(['"]/[^][^>< )({}]*?['"])''',line)
#print(p)
if p != None:
#print(p)
for path in p:
path=path.replace(':"',"").replace('"',"")
paths.append(file+"---"+path)
except Exception as e:
print(e)
for var in sorted(set(paths)):
with open (fileurl+'_path.txt',"a+",encoding='gb18030', errors='ignore') as paths:
paths.write(var+'n')
0x04 构造接口
比如onBoardTab接口,get、post都是返回服务异常。
0x05 运气构造接口
之后通过json格式的数据包又批量跑了一下,发现还是有一部分的接口还是存在问题的,没有返回500,而是返回200空数据,那么有可能这些接口可能还是缺少了参数,但是应该不是同一个人写的代码,这一块有可能是@RequestMapping注解不同所导致的问题。
但是我又不想爆破,爆破是最后没办法的办法。于是找了之前的JS想看看是不是JS中有提供一些信息(有时候JS会直接提供参数),可以看到有13个JS文件,一个一个看吧,发现每个JS文件的内容都是不一样的
发现大部分的JS都是没有什么提示的
但是在一些JS里找到了searchParams字符串,这个字符串非常的可疑,很多JS文件里都有这个字符串,那么我们是不是可以批量提取一下这个字符串,然后将其变成参数呢?
匹配的规则就是e.searchParams,"[a-zA-Z_]+",效果如下
简单处理下
然后再转为json格式,直接返回了数据!!!
之后逐个删除,发现决定该接口的是orgId这个参数。
同样的,我们也可以关注"$route.query.xxxxx"这样的字符串,例如下面两图所示,可能是会是获取参数的有效方式之一。
往期推荐工具
原文始发于微信公众号(Hack分享吧):对企业内部EHR系统的渗透测试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论