java代码审计-文件上传

文件安全-上传&下载&读取&写入等

1、搜索类别:业务关键字&相关操作类&封装关键字

2、功能点也适用,直接找文件操作功能进行代码追溯

newFile(

String path

String fileName

newFileInputStream(

newFileOutputStream(

newFileReader

response.setContentType(“application/octet-stream;

file.delete();

FileUtils.

newZipEntity(

file.getName(

.unzip(

.mkdirs(

stream.write(

save2File(

fos、fis.close()

MultipartFile(

file.getOriginalFilename(

IOUtil

FileUtil

download

fileName

filePath

write

getFile

getPath

getWriter

上传 // 搜注释

下载 // 搜注释

……..

文件上传-Inxedu

功能点->前台上传->ImageUploadController.class->gok4->fileType->jspx

/image/gok4?&param=temp&fileType=jspx,jpg,gif,png,jpeg

修改配置

先上后台随便找个用户,登陆

上传头像

抓包,提取上传数据包

http://127.0.0.1:8282/image/gok4?&param=temp&fileType=jpg,gif,png,jpeg

搜上面的路径信息,没找到相关类,猜测被封装到jar包中,找配置文件看jar被打包到哪里

找到路由路径

判断大小和判断文件上传类型fileType=jpg,gif,png,jpeg,将前端改为fileType=jspx,jpg,gif,png,jpeg

getSuffix跟进去发现该函数是获取文件名最后一个.之后的后缀,再回到之前代码,判断后缀名,不为jsp才执行接下来的流程

思路直接上传jspx后门,上哥斯拉

后台配置环境时记得修改上传权限

配合过滤器上传-Tmall

1、搜newFile(->filePath->fileName->extension->originalFileName->file

2、AdminPermissionFilter.java->doFilter->contains(“/admin/login”)

/admin/login/../../tmall/admin/uploadAdminHeadImage

文件上传

搜关键字

跟进去发现后端文件没有过滤

前端有过滤,抓个包修改后缀绕过就行。

鉴权漏洞

这里代码有逻辑鉴权漏洞,只要url包含/admin/login就不鉴权了

/admin/login/../../tmall/admin/uploadAdminHeadImage

这样就可以配合前面的上传漏洞

文件下载-Ruoyi

搜FileInputStream->writeBytes->resourceDownload->resource

common/download/resource?resource=/profile/../RuoYi-v4.5.0/ruoyi-admin/src/main/resources/application-druid.yml

如果不确定路径变量名是什么可以打印看一下

文件读取-Oasys

搜索new FileInputStream(->image->f.getPath()->path->startpath

/image///image..//image..//image..//image..//image..//image..//IDEA.txt

把上面地址都输出打印确定一下,打印出来位置,确定和想要读取的文件位置之前的关系,进行绕过

总结:

鉴权

1、过滤器:看逻辑

2、自定义代码:看逻辑

3、shiro框架:找版本漏洞