




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文件上传漏洞文件上传漏洞可以说是日常渗透测试中用得最多的一个漏洞,用它获得服务器权限最快最直接。在Web程序中,经常需要用到文件上传的功能。如用户或者管理员上传图片,或者其它文件。如果没有限制上传类型或者限制不严格被绕过,就有可能造成文件上传漏洞。如果上传了可执行文件或者网页脚本,就会导致网站被控制甚至服务器沦陷。复杂一点的情况是配合WebServer的解析漏洞来获取控制权或结合文件包含漏洞。前言文件上传漏洞原理文件上传漏洞检测文件上传漏洞防御文件上传漏洞实践文件上传现代的互联网的Web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。在Facebook和Twitter等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。上传头像插入图片上传附件文件上传漏洞一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意动态文件,并能够将这些文件传递给动态解释器,就可以在远程服务器上执行任意动态脚本。文件上传漏洞危害当系统存在文件上传漏洞时攻击者可以将病毒,木马,WebShell,其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。1.上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。2.上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自劢运行;3.上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);4.上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;5.上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。文件上传漏洞成因导致文件上传漏洞的原因较多,主要包括以下几类:服务器配置不当本地文件上传限制被绕过服务端过滤不严格被绕过文件路径截断文件解析漏洞导致文件执行开源编辑器上传漏洞文件上传漏洞利用条件条件首先,上传的文件能够被web容器解释执行。所以文件上传后所在的目录要是web容器所覆盖到的路径。其次,用户能够从web访问这个文件。如果文件上传了,但用户无法通过web访问,或者无法得到web容器解释这个脚本,那么也不能称之为漏洞。最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上的操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限,webshell大多是以动态脚本的形式出现。webshell就是以asp、aspx、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也就是一种网页后门。黑客在入侵了一个网站后,很多人通常会将asp、aspx、php或jsp后门文件与网站web服务器目录下正常的网页文件混在一起,然后就可以使用浏览器来访问该后门文件了,从而得到一个命令执行环境,以达到控制网站服务器的目的。webshellwebshell的功能webshell被站长常常用于网站管理、服务器管理等等,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为Web脚本木马,比较流行的asp或php木马但是这里所说的木马都是些体积“庞大”的木马,也就是黑客中常称呼的"大马"。一句话木马一句话木马就是通过在网站的上传功能中提交一句简短的代码来达到向服务器插入木马并最终获得webshell的方法。对于不同的语言有不同的构造方法,基本构造是首先出现的是脚本开始的标记,后边跟着的eval或者是execute是核心部分,就是获取并执行后边得到的内容,而后边得到的内容,是request或者是$_POST获取的值。如果我们通过客户端向服务器发送,那么就会让服务器执行我们发送的脚本,挂马就实现了。php一句话木马:
<?php@eval($_POST[value]);?>
<?=eval($_POST['shell']);<scriptlanguage=php>system('ls')</script>asp一句话木马:
<%evalrequest("value")%><%execute(request("value"))%>
aspx一句话木马:<%@PageLanguage="javascript"%><%eval(Request.Item["value"])%>一句话木马的表现形式一些不同脚本语言的一句话木马,这些都可以依靠网站的上传功能,上传文件信息交互类似的地方,比如头像(图片马),文件等,绕过前端JS的验证,后端的win解析或者其他漏洞进行绕过。然后通过菜刀进行连接就可以获得一个简单的webshell。图片木马图片木马就是在图片中插入一句话木马代码copy1.jpg/b+demo.php/anew.jpgWebshell管理工具中国菜刀蚁剑冰蝎…中国菜刀(Chinachopper)中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理!在非简体中文环境下使用,自动切换到英文界面。UNICODE方式编译,支持多国语言输入显示。1.中国菜刀支持的服务端脚本:PHP、ASP、;2.主要功能有:文件管理(有足够的权限时候可以管理整个磁盘/文件系统),数据库管理,虚拟终端。3.菜刀的工作原理是:利用上传到服务器的一句话脚本再通过一些添加配置就可以工作了。中国菜刀右键添加地址,输入shell地址,连接密码语言文件格式以及编码后连接中国菜刀可以进行文件管理执行dos命令等中国蚁剑(AntSword)中国蚁剑(AntSword)是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。是一款非常优秀的webshell管理工具。核心功能:Shell代理功能Shell管理文件管理虚拟终端数据库管理插件市场插件开发中国蚁剑(AntSword)中国蚁剑(AntSword)项目地址:/AntSwordProject/antSword加载器地址:/AntSwordProject/AntSword-Loader中国蚁剑(AntSword)右键添加数据,输入shell地址,连接密码语言文件格式以及编码后连接中国蚁剑(AntSword)可以进行文件管理执行dos命令等冰蝎(Behinder)Webshell管理工具,动态二进制加密网站客户端。流量动态加密,攻击特征安全设备(WAF、WebIDS)难以检测。“冰蝎”客户端基于JAVA,所以可以跨平台使用,最新版本为v3.0,兼容性较之前的版本有较大提升。主要功能为:基本信息、命令执行、虚拟终端、文件管理、Socks代理、反弹shell、数据库管理、自定义代码等,功能非常强大。冰蝎(Behinder)右键,新增shell,将冰蝎shell上传至目标服务器,连接目标shell注意:冰蝎需要连接自己的shell,在server目录下冰蝎(Behinder)可以进行文件管理执行dos命令等文件上传漏洞原理文件上传漏洞检测文件上传漏洞防御文件上传漏洞实践文件上传漏洞类型文件上传漏洞检测因为文件上传漏洞的危害性极大,所以通常情况下,开发人员会对用户的上传做一些限制,根据这些限制的不同,通常对文件上传漏洞的检测方式有以下分类:这类检测通常在上传页面里含有专门检测文件上传的Javascript代码,最常见的就是检测扩展名是否合法,有白名单形式也有黑名单形式。例如如下代码:functioncheckFile(){
varfile=document.getElementsByName('upload_file')[0].value; if(file==null||file==""){ alert("请选择要上传的文件!"); returnfalse; }//定义允许上传的文件类型
var
allow_ext=".jpg|.png|.gif";//提取上传文件的类型
var
ext_name=file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传
if(allow_ext.indexOf(ext_name+"|")==-1){
var
errMsg="该文件不允许上传,请上传"+allow_ext+"类型的文件,当前文件类型为:"+ext_name; alert(errMsg); returnfalse; }}前端JavaScript检测MIME的作用:使客户端软件区分不同种类的数据,例如Web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。Web服务器使用MIME来说明发送数据的种类,Web客户端使用MIME来说明希望接收到的数据种类。服务端MIME类型检测超文本标记语言文本.htmltext/html普通文本.txttext/plainPNG图像.pngimage/pngGIF图形.gifimage/gifJPEG图形.jpeg.jpgimage/jpegAU声音文件.auaudio/basicAVI文件.avivideo/x-msvideoGZIP文件.gzapplication/x-gzipTAR文件.tarapplication/x-tar任意的二进制数据application/octet-stream常见MIME类型服务端MIME类型检测后端检测代码为:<?php$allow_content_type=array("image/gif","image/png","image/jpeg");$path="./uploads";$type=$_FILES["myfile"]["type"];if(!in_array($type,$allow_content_type)){ die("Filetypeerror!<br>");}else{ $file=$path.'/'.$_FILES["myfile"]["name"]; if(move_uploaded_file($_FILES["myfile"]["tmp_name"],$file)){ echo'Success!<br>'; }else{ echo'Error!<br>'; }}?>服务端文件内容检测服务端文件内容检测主要分为文件幻数检测和文件相关信息检测。文件幻数通俗点可以理解为文件头,就是为了描述一个文件的一些重要的属性,比如图片的长度、宽度、像素尺寸等,当程序打开文件时读取这些属性对文件进行处理。常见的图片格式文件幻数如下:JPG:FFD8FFE000104A464946GIF:474946383961PNG:89504E47文件相关信息检测一般使用getimagesize()函数获取图片文件的大小,图片文件的尺寸之类的信息。服务端文件内容检测服务端文件内容检测后端代码大致如下:<?php $allow_mime=array("image/gif","image/png","image/jpeg"); $imageinfo=getimagesize($_FILES["myfile"]["tmp_name"]); $path="./uploads"; if(!in_array($imageinfo['mime'],$allow_mime)){ die("Filetypeerror!<br>"); }else{ $file=$path.'/'.$_FILES["myfile"]["name"]; if(move_uploaded_file($_FILES["myfile"]["tmp_name"],$file)){ echo'Success!<br>'; }else{ echo'Error!<br>'; } }?>服务端文件扩展名黑名单检测黑名单检测,定义不允许上传的文件类型,黑名单的安全性比白名单低很多。在服务器端一般会有个专门的blacklist文件,里面会包含常见的危险脚本文件类型,例如:html|htm|php|php2|hph3|php4|php5|asp|aspx|ascx|jsp|cfm|cfc|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|phtm|shtm|inc等。服务端文件扩展名黑名单检测后端代码大致如下:<?php $blacklist=array('php','asp','aspx','jsp'); $path="./uploads"; $type=array_pop(explode('.',$_FILES['myfile']['name'])); if(in_array(strtolower($type),$blacklist)){ die("Filetypeerrer!<br>"); }else{ $file=$path.'/'.$_FILES['myfile']['name']; if(move_uploaded_file($_FILES['myfile']['tmp_name'],$file)){ echo'Success!<br>'; }else{ echo'Error!<br>'; } }?>服务端文件扩展名白名单检测白名单检测,定义仅允许上传的文件类型,比如仅允许上传jpg|gif|doc等类型的文件,其他全部禁止。大致代码如下:<?php $whitelist=array('png','jpg','jpeg','gif'); $path="./uploads"; $type=array_pop(explode('.',$_FILES['myfile']['name'])); if(!in_array(strtolower($type),$whitelist)){ die("Filetypeerrer!<br>"); }else{ $file=$path.'/'.$_FILES['myfile']['name']; if(move_uploaded_file($_FILES['myfile']['tmp_name'],$file)){ echo'Success!<br>'; }else{ echo'Error!<br>'; } }?>文件上传漏洞原理文件上传漏洞检测文件上传漏洞防御文件上传漏洞实践文件上传漏洞防御文件上传的防御措施根据系统的运行阶段分为三个阶段:系统运行阶段的防御系统开发阶段的防御系统维护阶段的防御系统运行阶段的防御1)文件上传的目录设置为不可执行。只要Web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。2)判断文件类型。在判断文件类型时,可以结合使用MIMEType(媒体类型,是一种标准,用来表示文档、文件或字节流的性质和格式)、后缀检查等方式。在文件类型检查中,使用白名单方式。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。3)使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。4)单独设置文件服务器的域名。由于浏览器同源策略的关系,同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来源,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含JavaScript的XSS利用等问题将得到解决。5)使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。系统运行阶段的防御1)系统开发人员应有较强的安全意识,尤其是采用PHP语言开发系统时。在系统开发阶段应充分考虑系统的安全性。2)对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type、上传文件的大小也需要进行检查。系统维护阶段的防御1)系统上线后运维人员应有较强的安全意识,积极使用多个安全检测工具对系统进行安全扫描,及时发现潜在漏洞并修复。2)定时查看系统日志,Web服务器日志以发现入侵痕迹。定时关注系统所使用到的第三方插件的更新情况,如有新版本发布建议及时更新,如果第三方插件被爆有安全漏洞更应立即进行修补。3)对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。除对系统自身的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读,禁止文件写入,可有效避免文件上传漏洞。文件上传漏洞原理文件上传漏洞检测文件上传漏洞防御文件上传漏洞实践客户端绕过利用firebug等工具修改前端js代码禁用浏览器JS解析功能Burpsuite抓包修改后缀黑名单绕过文件上传黑名单:当客户端将文件提交到服务端的时候,服务端根据自己设定的黑名单对客户端提交上来的文件扩展名进行判断,如果上传的文件扩展名是黑名单里面所限制的,则不予上传。黑名单绕过常见黑名单绕过方法:·特殊可解析后缀(php3/php5/php7/phtm/phtml…)·上传.htaccess文件·大小写绕过·点跟空格绕过·::$DATA绕过·双后缀绕过·配合解析漏洞绕过特殊可解析后缀如果黑名单仅仅是对常见的文件后缀(例如php)进行了限制,可以上传其他特殊可解析的文件后缀进行绕过。(例如php3/php5等等)上传.htaccess文件通过.htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,还可以重新重新定义解析规则。例如将jpg后缀文件当做php文件解析<FilesMatch“\.jpg">SetHandler
application/x-httpd-php</FilesMatch>.htaccess攻击利用上传的.htaccess文件重新定义解析规则.user.ini绕过现在大部分网站都是用的fastcgi,这个可以理解成提供web服务器的一种api,而apache/nginx/iis这些服务器都会依靠这种api来运行而在服务器以fastcgi启动运行的时候,.user.ini也是php的一种配置文件,众所周知php.ini是php的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置。但是如果想要把某个文件里面的配置与全局的php.ini不同,则可以在php文件中加上ini_set()来配置特定的配置变量。而.user.ini和.htaccess一样是对当前目录的所以php文件的配置设置,即写了.user.ini和它同目录的文件会优先使用.user.ini中设置的配置属性。但是不是php.ini中的每个变量都能通过ini_set()或者.user.ini和.htaccess来设置,简单的来说每个变量有它所属于的模式。.user.ini比如在PHP_INI_ALL模式下,而不在PHP_INI_PERDIR模式下的配置属性,则不能通过ini_set()来设置,通过上表,看到PHP_INI_USER模式中提到,可以在.user.ini中设定。但实际上,只要不是PHP_INI_SYSTEM模式下的属性,均可以在.user.ini中设置,可以通过该表来查看哪些属性属于哪些模式/manual/zh/ini.list.php.user.ini有2个属性,它们的作用是,auto_append_file在php文件最后用require包含进指定文件,auto_prepend_file则是在php文件代码执行前用require包含进指定的文件它们在.user.ini中的语法十分的简单//.user.iniauto_prepend_file=top.htmlauto_append_file=down.html大小写绕过如果黑名单规则过于简单,仅仅是对我们上传的文件后缀名字符进行过滤,而没有区分大小,就可以利用文件后缀大小写绕过(windows下)点和空格绕过利用windows系统下的特性。当上传文件后缀名后面存在点跟空格时,上传文件被保存在在windows系统下时,后面的点跟空格会默认被去掉,利用这个特点,可以绕过一些黑名单规则。例如:test.php.test.php空格空格绕过通过在文件后缀增加空格绕过点绕过通过在文件后缀增加点绕过php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名点绕过::$DATA绕过php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名双后缀绕过如果存在一些规则,导致删除我们黑名单列表中的字符,这时就可以利用双重后缀绕过常见解析漏洞IIS6.0错误解析漏洞1.目录
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客运市场调研合同
- 各类标准化会议接送合同
- VP气体采购合同
- 陕西机电职业技术学院《英语国家社会与文化(一)》2023-2024学年第一学期期末试卷
- 单位党风廉政建设报告
- 乌金木采购合同标准文本简易版
- 五百万借款合同标准文本
- 我国快递行业发展状况调查
- 体培机构老师合同标准文本
- 业主投资合同标准文本
- 幼儿园传染病疫情报告制度
- 铅锌矿安环部管理制度汇编
- 系统思维与系统决策:系统动力学(中央财经大学)知到智慧树章节答案
- 保安保洁服务方案
- 小学三年级毛笔书法教案含三维目标
- 土木工程毕业论文7篇
- 零星工程施工方案
- 2024年山东省青岛市中考地理试题卷(含答案及解析)
- 隶书完整版本
- 员工招聘、入职、转正、调动、离职管理制度
- 2022年湖北武汉中考满分作文《护他人尊严燃生命之光》
评论
0/150
提交评论