I Doc View /doc/upload 文件读取漏洞分析
yecp 发表于 浙江 漏洞分析 1066浏览 · 2024-02-02 08:58

I Doc View /doc/upload分析

鉴权绕过

直接访问/doc/upload,会提示:请先登录,或通过token来访问


传入token参数,会提示:不存在该应用


定位代码,可以发现调用了this.appService.getByToken(token)来获取appPo,其不存在就会提示:不存在该应用


查看this.appService.getByToken方法,其调用了this.appDao.getByToken(token)方法


appDao有2个实现类,AppDaoMySQLImpl和AppDaoImpl


它们的getByToken方法都是从app表中获取根据token值进行查询,一个是mysql、一个是mongodb


在数据库初始化文件中,可以看到app表中存在token值为testtoken的数据


传入?token=testtoken,满足条件了

文件上传?

继续往下看,接受文件上传请求,会调用this.docService.add方法


在this.docService.add方法中会调用this.addDoc方法


this.addDoc方法中会调用FileUtils.writeByteArrayToFile方法写入文件


文件的保存路径是RcUtil.getPath(rid)生成的,rid前面有生成


getPath返回内容


getDirectoryByRid返回内容


getFileNameByRid返回内容


上传请求


不过这个无法getshell,能上传和解析html

文件读取

当不是上传请求时,接受url参数,调用this.docService.addUrl方法


在this.docService.addUrl方法最后,在判断data不为空后,会调用this.add方法


同样的也会保存文件到本地,data就是文件内容


看下data是怎么赋值的,如果传入的url匹配(file:///?)?(\w{1}:.+),那么就会利用url.replaceFirst(localPathRegex, "$2");获取其第二个捕获组的内容作为文件名,读取文件内容


这里就能够读取服务器上的任意文件,比如C:/windows/win.ini


如果传入的url是以//开头的,就是读取网络共享文件的内容


如果传入的url是以ftp开头,就是读取ftp服务上的文件内容


还有就是访问http或https的web服务


data为请求的返回值

0 条评论
某人
表情
可输入 255