<
文件操作类漏洞审计
>

没有上一篇咯
下一篇

APP测试之安全机制问题及Bypass

文件操作类漏洞审计

文件上传

定位文件上传代码

  任意文件上传产生的主要原因就是在服务器端没有对用户上传的文件类型做校验或者校验不充分,导致用户可以上传恶意脚本到服务器。所以在审计过程中主要是快速定位相关的文件上传业务,然后进行相关的审计。   因为前端需要在使用包含文件上传控件的表单时,必须使用multipart/form-data这个值,所以可以通过搜索multipart/form-data,定位前端上传页面,然后找到对应的上传接口。或者,针对controller搜索MultipartFile,或在servlet中搜索ServletFileUpload、 FileItem 。

当然也可以通过关键字检索,直接定位到后端的上传代码,以下是常见的关键字:

通过使用ide:ctr+shif+F进行定位查找

image-20210217171847582

​ DiskFileItemFactory

​ @MultipartConfig

​ MultipartFile

​ File

​ upload

​ InputStream

​ write

​ fileName

​ filePath

​ ……

  也可以根据是否引入相关的上传组件/配置进行判断,例如Commons-fileupload、SmartUpload组件,还有以下的SpringMvc配置等:

1)过滤包含“..” 的字符串

如destinationFile.getCanonicalPath() 也就是当前的全文件路径,例如: /etc/s/../passwd ,会变成/etc/passwd ,

2)函数对比两次路径

全文件路径中 开头不包含workDirectory.getCanonicalPath() 的路径,就报错。 例如:/etc/s/ ,而workDirectory是定义的路径。

综上就是路径不能往前跳转。

漏洞原理

针对后缀绕过可能使用的函数:String.IndexOf、startWith(),endWith();当使用String.IndexOf、startWith()判断后缀时.jpg.jsp存在绕过

注:

if(a.startsWith(b))判断字符串a 是不是以字符串b开头

if(a.endsWith(b))//判断字符串a 是不是以字符串b结尾

startsWith方法测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

*语法1 public boolean startsWith(String prefix , int toffset)*

语法2 public boolean startsWith(String prefix)

image-20210103175556934

使用了绝对路径又使用了部分匹配,但传入的路径中带有..*时就存在isValidPath函数被绕过。

间接性文件上传

文件上传处对文件进行了安全校验处理,但在文件重命名时缺乏对文件后缀的判断.

案例

image-20210217172440894

image-20210218102042684

image-20210218102309559

防御

正确使用相关函数getCanonicalPath()

截取文件后缀必须取最后一个“.”之后的后缀(使用String.lastIndexOf后缀),截取文件后缀时需注意起始位置;

大小写统一后再进行比较

字符串比较时使用equal

黑白名单的全面性

任意文件下载

java中00截断

image-20210103180718400

taskid可控存在路径穿越

具体得看java版本小于=7u21,Java1.7 某版本(懒得一个一个去确认哪个版本)以后,在File类中添加了isInvalid(),大量文件操作API都会调用该方法检查路径,避免由于java:String和C/C++:String处理字符串方式不同造成00截断

压缩文件

直接拼接entry.getName,没有对压缩包里的每一个文件名进行校验

如果有必要进行文件大小校验,要避免使用库函数获取解压文件大小

可能出现路径穿越的位置:

1)Unzip

2)savefile

image-20210103182951515

直接拼接entry.getName()的返回值,且未做路径校验。一般存在于java原生库。

在使用apache compress包的ZipArchiveEntry后,实际调用的还是java的原生压缩包类。

image-20210103183257051

参考:

https://mp.weixin.qq.com/s/_YaJtPPnYy-BqWqeFQUfxw

Top
Foot