什么是文件上传漏洞(附件).doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件上传漏洞 web安全?漏洞知识库 允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行 任意文件上传漏洞原理 由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本。 任意文件上传漏洞实例 以下代码会处理上传的文件,并将它们移到 Web 根目录下的一个目录中。 攻击者可以将任意的PHP源文件上传到该程序中,并随后从服务器中请求这些文件,会在远程服务器上执行恶意文件。 ? if(isset($_POST[form])){ $uploadfile = upfiles/.$_FILES[upfile][name]; move_uploaded_file($_FILES[upfile][tmp_name], $uploadfile);//没有检查文件类型就直接上传 print_r($_FILES); die(); } ? 即使程序将上传的文件存储在一个无法通过 Web 访问的目录中,攻击者仍然有可能通过向服务器环境引入恶意内容来发动其他攻击。 如果程序容易出现文件包含漏洞,那么攻击者就可能上传带恶意内容的文件,并利用另一种漏洞促使程序读取或执行该文件,形成“二次攻击”。 任意文件上传漏洞解决方案 检查是否判断了上传文件类型及后缀 定义上传文件类型白名单,即只允许上传的文件类型 文件上传目录禁止脚本解析 上传漏洞是一个非常恐怖的漏洞,如果你的程序里面有这种漏洞,那么恶意攻击者可以直接向你的服务器上传一个 webshell( 又称 ASP 木马、PHP 木马等即利用服务器端的文件操作语句写成的动态网页,可以用来编辑你服务器上的文件 ),从而控制你的网站。 那么,上传漏洞是怎么样一种漏洞呢。 一般对于上传漏洞的概念定义如下:由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。打个比方来说,如果你使用 windows 服务器并且以 asp 作为服务器端的动态网站环境,那么在你的网站的上传功能处,就一定不能让用户上传 asp 类型的文件,否则他上传一个 webshell,你服务器上的文件就可以被他任意更改了。 相对于我前面所谈到的跨站漏洞,不得不承认,上传漏洞对于网站的危害是致命的,那么,上传漏洞是如何产生的呢。 我们知道,在 WEB 中进行文件上传的原理是通过将表单设为 multipart/form-data,同时加入文件域,而后通过 HTTP 协议将文件内容发送到服务器,服务器端读取这个分段 (multipart) 的数据信息,并将其中的文件内容提取出来并保存的。通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名中得出文件的扩展名,而后随机为文件起一个文件名 ( 为了防止重复 ),并且加上原始文件的扩展名来保存到服务器上。 慢着,就在这个扩展名这里就出了问题了,究竟是什么问题呢,我们开启一个新的章节来详细说说,上传漏洞的几种形式和各自的防护方法。 上传漏洞的几种形式及其防护 第一、 完全没有处理。 完全没有处理的情况不用我说,看名字想必大家都能够了解,这种情况是程序员在编写上传处理程序时,没有对客户端上传的文件进行任何的检测,而是直接按照其原始扩展名将其保存在服务器上,这是完全没有安全意识的做法,也是这种漏洞的最低级形式,一般来说这种漏洞很少出现了,程序员或多或少的都会进行一些安全方面的检查。 第二、 将 asp 等字符替换。 我们再看一些程序员进阶的做法,程序员知道 asp 这样的文件名是危险的,因此他写了个函数,对获得的文件扩展名进行过滤,如: Function checkExtName(strExtName) strExtName = lCase(strExtName) 转换为小写 strExtName = Replace(strExtName,asp,) 替换 asp 为空 strExtName = Replace(strExtName,asa,) 替换 asa 为空 checkExtName = strExtName End Function 使用这种方式,程序员本意是将用户提交的文件的扩展名中的“危险字符”替换为空,从而达到安全保存文件的目的。粗一看,按照这种方式,用户提交的 asp 文件因为其扩展名 asp 被替换为空,因而无法保存,但是仔细想想,这种方法并不是完全安全的。 突

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档