写在前面
今天分析的第二篇,当时在网上看到爆了这个漏洞那么就分析一下啦
网上似乎没有人写,那就让本小可爱来吧
分析
漏洞点存在于后台的模板文件查看处
漏洞函数位于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