飞道的博客

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

260人阅读  评论(0)

文章目录

写在前面

今天分析的第二篇,当时在网上看到爆了这个漏洞那么就分析一下啦

网上似乎没有人写,那就让本小可爱来吧

分析

漏洞点存在于后台的模板文件查看处

漏洞函数位于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的文件

分析完毕


转载:https://blog.csdn.net/solitudi/article/details/117047070
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场