1.5.1 任意格式文件上传(File Upload)

0x01 漏洞描述

应用系统在文件上传功能处对用户上传文件类型、格式、内容等做合法性校验,导致攻击者可以上传Webshell(.php、.jsp、asp等)恶意脚本文件或者非期望格式的文件比如:HTML文件、SHTML文件等,同时可利用目录跳转等字符或者控制上传目录,直接上传文件到Web目录或任意目录下,从而可能导致在远程服务器上执行任意恶意脚本文件,从而直接获取应用系统权限。

0x02 常见应用场景

文件上传漏洞通常发生在业务系统需要进行上传文件等功能处,比如上传图片、视频、文档;发表文章、评论;意见反馈;个人信息中的头像,照片,附件等。

0x03 漏洞危害

  1. 上传恶意脚本文件到服务器中,通过访问该恶意文件从而执行文件中的恶意代码;
  2. 攻击者可利用目录跳转上传php、config等文件,覆盖原有的系统文件,到达篡改系统文件、甚至获取系统权限的目的;
  3. 攻击者可上传html、shtm等文件,并写入非法博彩、赌博等恶意SEO页面或者写入恶意js文件进行钓鱼来非法获取用户信息等;

0x04 修复建议

4.1 代码层面

  • 服务端采用白名单方式校验文件后缀,不建议采用黑名单方式校验后缀,黑名单方式校验可能导致攻击者利用文件特性、系统特性、黑名单不全等方式进行绕过攻击;
  • 服务端对上传文件进行重命名,防止利用目录跳转等方式控制上传目录;
  • 服务端使用系统函数来判断文件类型及文件内容是否合法,比如PHP中的getimagesize;
  • 对上传的文件回显相对路径或者不显示路径;

4.2 其他层面

  • 建议使用OSS静态存储服务器来存储用户上传的文件;
  • 设置目录权限限制,禁止上传目录的执行权限;
  • 保证使用的Nginx、Apache、IIS等容器版本不存在解析漏洞;
  • 保证使用的第三方处理软件的版本比如FFmpeg、ImageMagick等不存在已知漏洞

1.5.2 任意文件读取/包含/删除(File read/include/download/delete)

0x01 漏洞描述

1.1 文件读取/下载

在读取文件内容文件或文件下载处,未严格限制读取/下载文件的路径及文件后缀,导致可利用../#等目录操作字符进行目录穿越、截断等手段,从而读取/下载服务器上任意文件,比如配置文件等。

1.2 文件包含

在通过PHP的incluederequire等函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入,主要包括本地文件包含和远程文件包含两种形式。

1.3 文件删除

应用程序在删除文件前,未对所要删除的文件内容、类型、文件名、文件目录做合法性校验,导致可删除服务器上任意文件,比如删除安装目录中锁文件,直接进行重装应用系统。

0x02 常见应用场景

2.1 文件读取/下载

读取/下载图片、文件内容;下载附件;预览文档;导出文档;修改、保存文档等

2.2 文件包含

比如包含了某个图片、附件、远程URL、从远程获取资源文件等

2.3 文件删除

删除文件、附件、图片、替换、配置等

0x03 漏洞危害

文件读取/下载: 如果系统未对读取/下载文件的文件目录做限制,攻击者利用此漏洞可直接读取web目录下任意文件,比如配置文件、数据库文件等,甚至直接获取服务器上任意文件内容。

文件包含: 攻击者利用此漏洞通过包含含有任意恶意代码的任意格式文件,比如图片文件、log文件等,可直接获取应用系统权限,如果开启了allow_url_fopen/allow_url_include等配置,可直接包含远程任意格式文件。

文件删除: 攻击者利用此漏洞可直接删除web目录甚至服务器上任意格式文件,直接导致业务系统中断、崩溃。

0x04 修复建议

  • 配置文件: 在配置文件中限制访问的文件目录,比如PHP中php.ini配置open_basedir
  • 特殊字符过滤: 检查用户输入,过滤或转义含有“../”、“..\”、“%00”,“..”,“./”,“#”等跳转目录或字符终止符、截断字符的输入
  • 合法性判断: 严格过滤用户输入字符的合法性,比如文件类型、文件地址、文件内容等
  • 白名单: 白名单限定访问文件的路径、名称及后缀名
最后修改:2021 年 06 月 23 日 11 : 15 PM
如果觉得我的文章对你有用,请随意赞赏