File read/include/download/delete¶
0x01 漏洞描述¶
1.1 文件读取/下载¶
在读取文件内容文件或文件下载处,未严格限制读取/下载文件的路径及文件后缀,导致可利用../
,#
等目录操作字符进行目录穿越、截断等手段,从而读取/下载服务器上任意文件,比如配置文件等。
1.2 文件包含¶
在通过PHP的incluede
、require
等函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入,主要包括本地文件包含和远程文件包含两种形式。
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
”,“..
”,“./
”,“#
”等跳转目录或字符终止符、截断字符的输入 - **合法性判断:**严格过滤用户输入字符的合法性,比如文件类型、文件地址、文件内容等
- **白名单:**白名单限定访问文件的路径、名称及后缀名