【漏洞分析】用友NC PrintTemplateFileServlet 任意文件读取漏洞

admin 2024年2月28日11:08:01评论70 views字数 986阅读3分17秒阅读模式
声明:该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关

文章前言

【漏洞分析】用友NC PrintTemplateFileServlet 任意文件读取漏洞

       上面的截图是某系统任意文件读取漏洞补丁的截图,本篇我们将根据这张补丁截图来脑补这个漏洞的实现流程。

代码分析

1.在第35行,从HttpServletRequest的对象req中获取获取了参数filePath的值(此时filePath的值可控);

2. 在第41行,参数realPath和filePath的值进行了拼接,并把拼接结果赋值给参数fileAllPath;接着就创建就根据fileAllPath创建了一个File对象file(整个过程filePath是可控的,也就是这里的file可以指向服务器上任意文件);
3.来看第44行的if判断,先来看第一个判断条件,“file.getCanonicalPath() 返回指定文件的规范路径,即解析了所有的符号链接、相对路径等,得到的结果是一个标准的绝对路径”,跟据file.getCanonicalPath()的定义可以看到三个判断条件。
1)第一个判断条件把可操作的目标文件限制到了规定目录中(../../,再怎么跳最后还得跳到我规定的目录中);2)第二个条件我们可控;3)第三个条件要求filePath的值(全部转小写)必须以.pdf结尾;当这三个条件都满足时才会进入到if语句中;

【漏洞分析】用友NC PrintTemplateFileServlet 任意文件读取漏洞

4.这里我们假设if判断的第一个、第三个条件判断都不存在,fileAllPath我们完全可控,这时我们进入到了if语句中;在第50行的时候,程序读取了fileAllPath所指文件的内容;

5.下面的56行、while语句和62行;是将文件内容赋值到response输出流中的实现过程;再经过后边的处理,我们在响应包中就可以看到文件内容了;但需要注意第71行,程序在读完文件后会把原文件给删除掉。

漏洞利用

漏洞POC如下:

/servlet/~uapweb/nc.lfw.billtemplate.servlet.PrintTemplateFileServlet?filePath=filename

         上面就是某系统任意文件读取漏洞的触发流程,是不是很简单!

原文始发于微信公众号(网络运维渗透):【漏洞分析】用友NC PrintTemplateFileServlet 任意文件读取漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月28日11:08:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞分析】用友NC PrintTemplateFileServlet 任意文件读取漏洞https://cn-sec.com/archives/2532681.html

发表评论

匿名网友 填写信息