允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行
任意文件上传漏洞原理
由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本。
任意文件上传漏洞实例
以下代码会处理上传的文件,并将它们移到 Web 根目录下的一个目录中。
攻击者可以将任意的PHP源文件上传到该程序中,并随后从服务器中请求这些文件,会在远程服务器上执行恶意文件。
1.<?
2.if(isset($_POST["form"])){
3. $uploadfile = "upfiles/".$_FILES['upfile']['name'];
4. move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile);//没有检查文件类型就直接上传
5. print_r($_FILES);
6. die();
7. }
8.?>
即使程序将上传的文件存储在一个无法通过 Web 访问的目录中,攻击者仍然有可能通过向服务器环境引入恶意内容来发动其他攻击。 如果程序容易出现文件包含漏洞,那么攻击者就可能上传带恶意内容的文件,并利用另一种漏洞促使程序读取或执行该文件,形成“二次攻击”。
任意文件上传漏洞解决方案
##检查是否判断了上传文件类型及后缀
##定义上传文件类型白名单,即只允许上传的文件类型
##文件上传目录禁止脚本解析
下一篇:浅析路径遍历漏洞