- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
任意文件上传
摘 要:通过本节介绍,让学生了解文件上传漏洞的原理、危害、绕过手法以及防御手段。
关键词:文件上传
一、文件上传漏洞简介
文件上传漏洞(File Upload Attack)是由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意 PHP 文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意 PHP 脚本,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。
二、文件上传漏洞原理
网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。
三、文件上传漏洞危害
恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件等。
四、上传点和绕过形式
文件上传常见点:
图 SEQ 图 \* ARABIC 1 文件上传常见点
绕过类型:
图 SEQ 图 \* ARABIC 2 文件上传绕过类型
常用绕过方式:
前端验证绕过
此种验证形式在很多网站、CMS都有使用,只在前端利用JS来做效验,采用禁用JS上传、抓包上传都可以绕过此处限制。
.htaccess规则文件绕过
? 什么是.htaccess规则文件?.htaccess文件(或者分布式配置文件),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。
概述来说,.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
? 在一些启用了.htaccess文件的网站上就可以使用此文件类型来绕过限制较全面的黑名单过滤。
先上传一个.htaccess文件,内容为:AddType application/x-httpd-php .aaa。然后再上传文件后缀为.aaa的文件,让其解析为php类型文件。上传成功后访问此上传文件就可以连接后台。
文件名后缀大小写混合绕过
在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过形式。
%00截断绕过
以上问题被绕过的根本原因是采用了一些有缺陷的黑名单限制,一般采用白名单的限制会减少相当多的绕过问题产生,但是并不意味着一定安全,在某些没有处理严格的程序上,仍然可以采用截断绕过的形式。
$is_upload = false;$msg = null;
$is_upload = false;
$msg = null;
if(isset($_POST[submit])){
$ext_arr = array(jpg,png,gif);
$file_ext = substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],.)+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES[upload_file][tmp_name];
$img_path = $_POST[save_path]./.rand(10, 99).date(YmdHis)...$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = 上传失败;
}
} else {
$msg = 只允许上传.jpg|.png|.gif类型文件!;
}
}
可以看出代码采用的白名单校验,只允许上传图片格式,理论上这个上传是不好绕过的。但是后面采用保存文件的时候,是路径拼接的形式,而路径又是从前端获取,所以我们可以采用在路径上截断。如下上传,显示文件路径中有个空格,这并不是真正意义上的空格,而是%00截断后显示成的空格。
图 SEQ 图 \* ARABIC 3 采用%00截断
图 SEQ 图
文档评论(0)