一、漏洞审计
问题出现在admin/filemanager接口的index方法
漏洞条件1、
获取了请求参数的path
漏洞条件2、
在该方法里,可以看到当请求方法为post,而且mode=savefile,needpath与content参数不为空时,就会进入fm.savefile方法里。
漏洞执行、
FileManagerUtils.writeString像是将content里的内容写入到getRealFilePath()里面。
先查看backupfile方法是干什么的。
targetPath路径是由默认系统配置路径和src参数路径组成的
跟进copyfile方法,该方法是将src路径的文件内容复制到target路径的文件内容,如果复制失败,即源文件(src)不存在,会导致FileNotFoundException或者在transferFrom操作时抛出IOException,使方法执行停止。
回到savefile,只要backupfile不报错,就可以执行FileManagerUtils.writeString。
其中getRealFilePath方法获取的路径是系统配置路径+请求参数的path路径。
通过断点可知系统配置路径如图所示。
继续跟进writeString
跟进write,执行了文件写入的操作,即将conten的参数内容写入到路径文件(系统配置路径+path路径)。
漏洞思路整理:
post请求接口的index方法,带上参数mode=savefile,path=系统存在的文件,content=要写入的文件内容,就可以执行文件覆盖漏洞。
二、漏洞复现
查看系统路径有什么默认存在的文件,刚好根目录存在login.jsp文件
构造请求数据包,其中content是url编码后的webshell代码
查看login.jsp,覆盖成功。
先访问试试能否解析,访问文件网站显示404,文件是肯定存在的,但是网站显示404,去代码中查看原因。
找到了filter过滤器文件,这段代码看起来是判断请求url路径是否为jsp,为jsp就报错。
查看isJsp方法,该方法是先判断请求url最后一位是否为x,然后再判断前一位是否为p,再判断前一位是否为s,然后是j,如果满足就return false,网站返回404。
通过;号的方法绕过黑名单限制。看起来是成功解析了
webshell连接成功
原文始发于微信公众号(哈拉少安全小队):【代码审计】某系统存在文件覆盖导致getshell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论