[JAVA代码审计]OFCMS路径遍历漏洞

Posted Y4tacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JAVA代码审计]OFCMS路径遍历漏洞相关的知识,希望对你有一定的参考价值。

文章目录

写在前面

今天分析的第二篇,当时在网上看到爆了这个漏洞那么就分析一下啦
在这里插入图片描述
网上似乎没有人写,那就让本小可爱来吧

分析

漏洞点存在于后台的模板文件查看处
在这里插入图片描述
漏洞函数位于com/ofsoft/cms/admin/controller/cms/TemplateController.java下的getTemplates函数,首先是接收这三个参数,当时是get传参方式

//当前目录
 String dirName = getPara("dir","");
 //上级目录
String upDirName = getPara("up_dir","/");
//类型区分
String resPath = getPara("res_path");

接下来这一行不用去管,反正等下我们都是通过目录穿越,这前缀都不重要
在这里插入图片描述
再下面,咋不传参,直接进入else分支分析,主要是懒,能少写一个参数我就少写一个
在这里插入图片描述
我们继续跟踪,只是简单的获取路劲,这里不想多看
在这里插入图片描述
我们回去继续跟踪File函数,由于学过nodejs,这里看着resolve能猜到是把两个参数的路径拼接,那到了这里就很明白啦,并且没有对传入的路径进行过滤,单纯指的是..符号
在这里插入图片描述
接下来的代码也只是遍历目录获取文件名,之类的,并且读取,不偷懒还是来看看吧,这里接收了file_name参数,通过foreach循环遍历f,目的是确认此文件夹下面有这个文件,并赋值给了editFile参数
在这里插入图片描述
接下来我们看到调用了readString方法
在这里插入图片描述
我们能很清楚的看见,这里用了FileInputStream方法读取文件,并把文件内容写入缓存。我觉得这里比较好玩的是这个for循环的第二部分,还算是比较巧妙的方式呢
在这里插入图片描述
最后返回用UTF-8编码的字符串
在这里插入图片描述
返回,再往下对敏感字符进行了替换,当然我也不知道有啥用,第一次分析Java,有知道的师傅麻烦下面评论区告诉我一下
在这里插入图片描述
最后把文件内容通过setAttr转调了this.request.setAttribute(name, value);,该方法可以将 各种数据传递给 View 并在 View 中显示出来。全程无参数过滤
因此我构造参数访问http://url/admin/cms/template/getTemplates.html?file_name=web.xml&dir=../../&dir_name=/,就得到了web.xml的文件
在这里插入图片描述
分析完毕

以上是关于[JAVA代码审计]OFCMS路径遍历漏洞的主要内容,如果未能解决你的问题,请参考以下文章

Java代码审计之路一(OFCMS)

Java代码审计之路一(OFCMS)

[Java审计]OFCMS命令注入漏洞

[Java审计]OFCMS命令注入漏洞

php代码审计9审计反序列化漏洞

OurPHP3.3.1审计与测试