对企业内部EHR系统的渗透测试

admin 2022年12月19日12:53:28评论47 views字数 3534阅读11分46秒阅读模式

声明:该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。


文章来源:先知社区(Icepaper)

原文地址:https://xz.aliyun.com/t/11943


0x01 渗透前言

对EHR系统访问时,首先是需要一个登录的,作为企业员工,大部分系统接入了SSO,该EHR系统为了保证安全性也不例外。因此对该系统的渗透测试基础的前提是————在该系统拥有一个可登录的凭据,但是该凭据并未拥有任何权限。

如下所示,正常的企业员工登录该系统时都是没有访问权限的。

对企业内部EHR系统的渗透测试


那么对该类系统对其渗透的第一步必定是打开F12观察JS,发现JS目录下仅有6个JS文件

对企业内部EHR系统的渗透测试


而右击源代码查看的JS里却有几十个chun-xxxxxx.js

对企业内部EHR系统的渗透测试


随便打开了一个chunk-xxxxxx.js,利用插件发现存在一些路径但是在F12里搜不到,也就意味着这么多个chunk我要一个个打开看,才能够测试得比较仔细,如下所示:

对企业内部EHR系统的渗透测试


0x02 packerFuzzer

接口太多了用了,先使用一下packerFuzzer来看看是否有未授权访问

对企业内部EHR系统的渗透测试


很轻松的收获了两枚任意文件上传漏洞,不过其中一个是放到minio下的,直接下载,而且是springboot的任意文件上传,利用相对局限。

对企业内部EHR系统的渗透测试

对企业内部EHR系统的渗透测试


0x03 JS获取

开始对JS进行发现,这么多chunk-xxx.js,直接在首页使用插件来提取了一批路径,但是众所周知,该插件提取的路径其实并是完整的。

对企业内部EHR系统的渗透测试


一个简单的例子如下,这个路径就没被正则匹配到,想要提取完整的还得进入一个个js里查看。

对企业内部EHR系统的渗透测试


用packerFuzzer里存储的db直接拿到所有的JS的路径,当然packerfuzzer也会自动下载文本。

对企业内部EHR系统的渗透测试


只能一个个对chunk-xxx.js文件进行发现,但是js文件又太多了,足足有90多个,因此写了一个简单的python脚本批量提取了一下路径

import jsonimport reimport requestsimport sysimport 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')
效果大概是这样,再稍微处理一下,去除一些重复的和一看就是无用的接口后,直接丢进去Burp里跑一下

对企业内部EHR系统的渗透测试


最后有300多个接口,直接丢到Burp里跑就行了,post请求和get请求,结果绝大部分是服务异常,可能是需要某些参数来触发

对企业内部EHR系统的渗透测试


几个返回大量数据的都是如下的资料,比如公司的职位信息,编号等等,没有敏感的个人讯息相关。
对企业内部EHR系统的渗透测试


之后变换成get请求,发现某些接口直接就返回了大量的数据,如下两个接口,其中一个接口直接返回了当前我自己的信息,而且信息非常的多。

根据个人经验,这种返回persion信息的地方常常都有参数可遍历,而默认情况就是返回自身数据。

对企业内部EHR系统的渗透测试


使用技巧,返回包转请求包

对企业内部EHR系统的渗透测试


最终定位到了persionId参数为影响数据的参数,可以看到我personID=1 就返回异常,而输入我自己的正确的personID就返回正常。
对企业内部EHR系统的渗透测试
对企业内部EHR系统的渗透测试

那么接下来的思路就是寻找这个personId,通过get请求发现某些接口返回的数据和这个personId很像,比如下面的/tree/list 接口里的manager,都是xxx-xxx-xxx格式的,有没有可能这就是同一个数据的不同命名。

对企业内部EHR系统的渗透测试


带上manager的值去访问,一个严重的越权访问就此得到

对企业内部EHR系统的渗透测试


0x04 构造接口

发现了一些GET/POST能够直接返回数据的接口,但是其实绝大部分的接口其实还是返回的服务异常,如果直接忽视掉这些肯定会错过很多漏洞。

比如onBoardTab接口,get、post都是返回服务异常。

对企业内部EHR系统的渗透测试


肯定是缺少了某些参数导致,盲目猜参数是最无效的方法,返回包是json格式,有没有可能我们转为x-www-form-urlencoded解析是存在问题,但是转为json格式就能成功呢?尝试一下

对企业内部EHR系统的渗透测试


直接提示参数了,这就解决了,发现该接口的返回不一般,直接返回了员工的大量个人信息。

对企业内部EHR系统的渗透测试


0x05 运气构造接口

之后通过json格式的数据包又批量跑了一下,发现还是有一部分的接口还是存在问题的,没有返回500,而是返回200空数据,那么有可能这些接口可能还是缺少了参数,但是应该不是同一个人写的代码,这一块有可能是@RequestMapping注解不同所导致的问题。

对企业内部EHR系统的渗透测试

但是我又不想爆破,爆破是最后没办法的办法。于是找了之前的JS想看看是不是JS中有提供一些信息(有时候JS会直接提供参数),可以看到有13个JS文件,一个一个看吧,发现每个JS文件的内容都是不一样的

对企业内部EHR系统的渗透测试

发现大部分的JS都是没有什么提示的

对企业内部EHR系统的渗透测试

但是在一些JS里找到了searchParams字符串,这个字符串非常的可疑,很多JS文件里都有这个字符串,那么我们是不是可以批量提取一下这个字符串,然后将其变成参数呢?

对企业内部EHR系统的渗透测试

匹配的规则就是e.searchParams,"[a-zA-Z_]+",效果如下

对企业内部EHR系统的渗透测试

简单处理下

对企业内部EHR系统的渗透测试

然后再转为json格式,直接返回了数据!!!

对企业内部EHR系统的渗透测试

之后逐个删除,发现决定该接口的是orgId这个参数。


同样的,我们也可以关注"$route.query.xxxxx"这样的字符串,例如下面两图所示,可能是会是获取参数的有效方式之一。

对企业内部EHR系统的渗透测试

对企业内部EHR系统的渗透测试



关注公众号回复“1208”可以领取个人常用高效爆破字典,“0221”2020年酒仙桥文章打包,“1212”杀软对比源码+数据源,“0421”Windows提权工具包。


往期推荐工具

渗透测试常用的数据库综合利用工具

RequestTemplate红队内网渗透工具

Railgun - 一款GUI界面的渗透工具

GoBypass - Golang免杀生成工具

ByPassBehinder冰蝎WebShell免杀工具

SweetBabyScan内网资产探测漏扫工具

掩日 - 适用于红队的综合免杀工具

AuxTools浮鱼渗透辅助工具箱V1.0


POCbomber红队快速打点漏洞检测工具

原文始发于微信公众号(Hack分享吧):对企业内部EHR系统的渗透测试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月19日12:53:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   对企业内部EHR系统的渗透测试http://cn-sec.com/archives/1472517.html

发表评论

匿名网友 填写信息