站点图标 Wankko Ree's Blog

记一次在内网中从OSS微服务打到SSO主服务的操作

前言

这不2月份开学得回学校写毕设了嘛,然后学弟问起来之前学校SSO系统的那个路径穿越导致任意文件读取的漏洞,就顺手重新打了一下。

因为之前是在公网上打的,学校的龟缩策略确实好使,公网IP内网使用是真的无懈可击,这回我都在内网了,看看能不能打出点什么。

开打

其实主要就一个authserver.xxx.xxx的子域名,是个SSO服务的入口,里面的头像功能存在路径穿越,(去年自己把这个洞用php复现到国赛决赛里拿了个创新单项,还行),但是因为只能cat不能ls导致睁眼瞎,打不出啥东西。

自然是先看看/proc/self/cmdline是个啥东西。

有用的信息其实不是很多,也就/minos-fundation-oss/minos-fundation-oss-core-3.5.3.SP2-SNAPSHOT.jar/minos-fundation-oss/library/需要注意一下。

再看看/proc/self/environ

可知有个/minos-fundation-oss/start.sh,那就去看看。

感觉像是docker环境,那去看看pid=1/proc/1/cmdline是啥。

有个/minos-fundation-oss/container.sh,既然1进程是这种,那容器是肯定了。

看看内容。

有个高频路径/opt/settings/,感觉是配置目录,看了下出现的文件名,就deploy.info感觉有点用。

那再看看/proc/self/maps吧,应该能有/minos-fundation-oss/library/目录的东西。

果然,于是写脚本把主程序和这些jar包都给拉下来逆向看看。

脚本不公开,毕竟不难

发现是个spring的东西,但是路由没几个,看来是打到头像文件存储的微服务去了。

那既然是微服务,尝试找找怎么下发配置项的,不论是文件还是在线都肯定有地址。

搜了下刚才那个关键目录,发现确实是下发的。

那个nodeHost.info倒是没啥用,就是本地地址,应该是注册自身用来关联的。

这个路径倒是用了好几回。

不过实际上除了第一个,其他几个文件都是上面出现过了的,所以重点观察第一个。

appName这个应该是appId,跟了一连串调用后发现是读取的jar包配置项。

所以就是minos-oss,文件路径就是/opt/settings/minos-oss.properties,读取下看看。

东西挺多,应该是主配置了。

但是密码大概是加密了,因为base解不出来,而且上面那个system.encrypt.fields几乎已经明示了。

先看看这个文件哪来的吧,因为开头有个日期,应该是配置落地的时候自动带的。

这大大的链接!deployHost应该就是之前deploy.info里面的,构造一下上面的ConfigRequest(appId, localhost, envId)参数访问一下发现可以直接访问,没验证。

内容嘛,自然是上面那个minos-oss.properties咯。

再看看密码解密的逻辑,应该好找,直接找system.encrypt.fields关键字就行。

尝试性地解密了下,发现确实可以。

于是尝试连到配置里面的elasticsearchrabbitmqredis,前者就一些消息通知,后面俩应该是spring附带的,更加没用了。

于是尝试看看其他的服务能不能搞到配置项,先看看jar包里面有没有其他的名字出现。

试了下minos-gateway也能拿到东西。

有个oracle,但是连上去发现也没啥有用的。

然后minos-stata也有配置项。可惜依旧没有啥有用的。

然后推测了下应该有个主服务是minosminos-ssominos-vpnminos-authminos-authserver这类的,试了一下发现minos-authserver可以出来东西。

好家伙,ldap这也太有年代感了吧,现找了个连接工具,然后试了半天怎么连接(这种和域一样的用户名是真头一回见)。

连上去之后,成功拿下sso的数据库。

后记

本来还想通过拿到的lib看看有没有老依赖组件的洞可以打的,结果发现承包公司还挺敬业的,组件都拉到了挺新的版本,所以寄。

然后上面那个oracle因为是普通用户,版本又还行,所以也没啥命令执行的机会。


The End
退出移动版