
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.2 文件上传漏洞审计
接下来让我们一起来看一下完整的审计过程,首先还是常规方式,通过搜索关键函数定位到主要代码段,发现程序使用了MultipartFile,如图2-41所示。

图2-41 搜索关键字符串发现程序使用了MultipartFile
定位到代码文件,分析程序是否存在文件上传漏洞,整个代码如下:


可以看到,程序从表单获取上传的文件,随后判断文件后缀以及类型是否合法,通过“fileName.substring(fileName.indexOf("."))”获取文件后缀,随后对照黑名单进行判断。在前面我们说到过,这个问题可以直接使用.jpg.jsp进行绕过。关键漏洞代码如图2-42所示。

图2-42 关键漏洞代码
继续往下看可以发现,程序判断了Content-Type,而Content-Type字段我们是可以通过修改POST内容直接进行修改绕过的,这种白名单策略如图2-43所示。
经过上面的代码分析,我们发现利用白名单策略的方式相对较为简单,首先构造一个用于上传的表单。



图2-43 白名单策略
使用BurpSuite拦截后更改其fileName和Content-Type的值,绕过其两个检测将filename设置为1.jpg.jsp,将Content-Type值设置为image/jpg,这样就能绕过代码的检测机制将1.jpg.jsp文件上传到服务器上,上传效果如图2-44所示。

图2-44 上传效果
根据源码中的路径访问我们上传的WebShell,然后执行ls命令,发现命令正常执行,返回了相关信息,说明上传的WebShell可以正常使用,如图2-45所示。

图2-45 WebShell执行效果