该漏洞与上一篇文章是同一个系统,因为时间不充裕一直没写,该漏洞主要是黑名单文件上传绕过,审计难度较为简单。
一、漏洞挖掘
挖掘流程:先黑盒找到文件上传功能,直接上传jsp文件。
保存后显示文件上传成功,但并没有回显文件上传返回的路径,为空,判断八成是后端有过滤。
根据文件上传的接口去代码寻找对应的逻辑。
二、漏洞审计
根据接口找到对应代码
跟进去getFile方法
不断跟进,最后跟到了wrapMultipartRequest方法。
该方法就是执行了文件上传操作:multipartRequest = new com.oreilly.servlet.MultipartRequest(request, uploadPath, maxPostSize, encoding, fileRenamePolicy);
其中isSafeFile就是检验了文件后缀
isSafeFile是黑名单检验
这段代码是先上传,再检验的,而且文件名没有重写,存在目录穿越漏洞,还可能存在文件上传条件竞争漏洞,而且是黑名单检验,在windows中可以通过::$DATA继续黑名单绕过。
三、漏洞复现
在上传的文件名后缀添加::$DATA进行绕过
根据断点调试获取文件上传的路径。
查看文件上传路径,文件是成功上传的
访问url:http://xxxx/xxxx/upload/xxx/bbs/tmp/22.jsp;
jsp文件成功解析执行(jsp后加;是绕过访问URL黑名单后缀检测,具体原因可以看上一篇文章有讲解)
原文始发于微信公众号(有恒安全):【代码审计】某系统存在文件上传漏洞