前言
这不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
关键字就行。
尝试性地解密了下,发现确实可以。
于是尝试连到配置里面的elasticsearch
、rabbitmq
、redis
,前者就一些消息通知,后面俩应该是spring
附带的,更加没用了。
于是尝试看看其他的服务能不能搞到配置项,先看看jar包里面有没有其他的名字出现。
试了下minos-gateway
也能拿到东西。
有个oracle
,但是连上去发现也没啥有用的。
然后minos-stata
也有配置项。可惜依旧没有啥有用的。
然后推测了下应该有个主服务是minos
、minos-sso
、minos-vpn
、minos-auth
、minos-authserver
这类的,试了一下发现minos-authserver
可以出来东西。
好家伙,ldap
这也太有年代感了吧,现找了个连接工具,然后试了半天怎么连接(这种和域一样的用户名是真头一回见)。
连上去之后,成功拿下sso
的数据库。
后记
本来还想通过拿到的lib
看看有没有老依赖组件的洞可以打的,结果发现承包公司还挺敬业的,组件都拉到了挺新的版本,所以寄。
然后上面那个oracle
因为是普通用户,版本又还行,所以也没啥命令执行的机会。
Comments 1 条评论
博主 notalking
这是一条私密评论