Closed Er1cccc closed 2 years ago
jpress框架在安装好之后默认用户注册登录功能
我们可以随意注册一个用户进入到个人主页
在个人主页有文件上传接口,先尝试上传一个html文件,用bp抓包之后发现上传失败了
再来看看成功的回显,这次把后缀改成jpg,成功时会直接回显图片的路径
来看后端的代码,在io.jpress.web.commons.controller.AttachmentController#upload。首先,在51行调用了getFile,获取我们上传的文件
io.jpress.web.commons.controller.AttachmentController#upload
getFile
跟进getFile,发现这个方法首先获取了上传的文件数组,然后返回第0个元素,说明我们是可以上传多个文件的
在执行完getFile之后,可以看到,我们上传的文件已经被保存到了临时文件目录,也就是attachment目录下。
紧接着,在65行,判断了文件是否合法,不合法就删除
看到这里应该能想到问题。我们可以上传多个文件(都会存储到临时文件目录),但是最后只检查了第一个文件,如果不合法就删除,其他文件是不会受影响的。
于是我们尝试上传多个文件,直接在bp当中改数据包,加多一个文件
发包之后发现,1.html成功上传到了attachment目录,成功绕过了后缀名限制,实现了任意文件上传
新版本已修复。
审计过程
jpress框架在安装好之后默认用户注册登录功能
我们可以随意注册一个用户进入到个人主页
在个人主页有文件上传接口,先尝试上传一个html文件,用bp抓包之后发现上传失败了
再来看看成功的回显,这次把后缀改成jpg,成功时会直接回显图片的路径
来看后端的代码,在
io.jpress.web.commons.controller.AttachmentController#upload
。首先,在51行调用了getFile
,获取我们上传的文件跟进
getFile
,发现这个方法首先获取了上传的文件数组,然后返回第0个元素,说明我们是可以上传多个文件的在执行完
getFile
之后,可以看到,我们上传的文件已经被保存到了临时文件目录,也就是attachment目录下。紧接着,在65行,判断了文件是否合法,不合法就删除
看到这里应该能想到问题。我们可以上传多个文件(都会存储到临时文件目录),但是最后只检查了第一个文件,如果不合法就删除,其他文件是不会受影响的。
于是我们尝试上传多个文件,直接在bp当中改数据包,加多一个文件
发包之后发现,1.html成功上传到了attachment目录,成功绕过了后缀名限制,实现了任意文件上传