文件名解析漏洞|文件上传漏洞攻击方法有什么

文件名解析漏洞|文件上传漏洞攻击方法有什么的第1张示图

㈠ 文件上传漏洞攻击方法有什么

文件上传漏洞是什么?怎样防御文件上传漏洞攻击?文件上传漏洞是web安全中经常利用到的一种漏洞形式。这种类型的攻击从大的类型上来说,是攻击 数据与代码分离原则 的一种攻击。一些web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以上传的地方将恶意代码植入到服务器中,再通过url去访问以执行代码造成文件上传漏洞的原因是对于上传文件的后缀名(扩展名)没有做较为严格的限制对于上传文件的MIMETYPE 没有做检查权限上没有对于上传的文件的文件权限,(尤其是对于shebang类型的文件)对于web server对于上传文件或者指定目录的行为没有做限制下面就闲话一些文件上传漏洞的防御方式和攻击者的绕过方式1.前端限制function check(){var filename=document.getElementById("file");var str=filename.value.split(".");var ext=str[str.length-1];if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif'){return true;}else{alert("这不是图片!")return false;}return false;}在表单中使用onsumbit=check()调用js函数来检查上传文件的扩展名。这种限制实际上没有任何用处,任何攻击者都可以轻而易举的破解。只能用于对于用户完全信任的情况下,很难称之为一种安全措施只能称之是一种防止用户误操作上传的措施,反制:随便的编辑一下页面/用burpsuite/写个小脚本就可以突破之,无须多言2.检查扩展名顾名思义,就是在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传在这里,还有一点是值得一提的,在检查扩展名是否合法的时候,有两种策略黑名单策略,文件扩展名在黑名单中的为不合法,示例代码$postfix = end(explode('.','$_POST['filename']);if($postfix=='php'||$postfix=='asp'||$postfix=='sh'){echo "invalid file type";return;}白名单策略,文件扩展名不在白名单中的均为不合法$postfix = end(explode('.','$_POST['filename']);if($postfix=='jpg'||$postfix=='png'||$postfix=='gif'){//save the file and do something next} else {echo "invalid file type";return;}白名单策略是更加安全的,通过限制上传类型为只有我们接受的类型,可以较好的保证安全,因为黑名单我们可以使用各种方法来进行注入和突破反制在一些 webserver 中,存在解析漏洞1.老版本的IIS中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析2.老板本的IIS中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如 a.asp;jpg3.旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行4.nginx空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行5.apache的解析漏洞,上传如a.php.rar a.php.gif 类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的3.检查HTTP Header中的Content-TypeHTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改,不过加上一层防护也是可以有一定效果的反制使用各种各样的工具(如burpsuite)强行篡改Header就可以,太容易将header中的Content-Type: application/php或者其他类型改为Content-Type: image/jpgContent-Type: image/pngContent-Type: text/plain等这些web程序允许的泪洗改附上常用的MIMETYPE表text/plain(纯文本)text/html(HTML文档)text/javascript(js代码)application/xhtml+xml(XHTML文档)image/gif(GIF图像)image/jpeg(JPEG图像)image/png(PNG图像)video/mpeg(MPEG动画)application/octet-stream(二进制数据)application/pdf(PDF文档)application/(编程语言) 该种语言的代码application/msword(Microsoft Word文件)message/rfc822(RFC 822形式)multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)application/x-www-form-urlencoded(POST方法提交的表单)multipart/form-data(POST提交时伴随文件上传的表单)4.分析文件头内容来检查文件类型与方法2不同,还有一种检查类型的方式是使用对于文件内容的验证机制,这种方法利用的是每一个特定类型的文件都会有不太一样的开头或者标志位。可以通过比如php的exif_imagetype()函数,一个通过这种方法来过滤的示例代码如下:if (! exif_imagetype($_FILES['uploadedfile']['tmp_name'])) {echo "File is not an image"; return;}也可以自己编写函数来进行识别,图片文件通常有称作幻数的头字节,我们来看一下几种图片文件的幻数:(注意!下面是二进制而不是文本格式的数据)JPGFF D8 FF E0 00 10 4A 46 49 46GIF47 49 46 38 39 61(相当于文本的GIF89a)PNG89 50 4E 47通过检查头几位字节,可以分辨是否是图片文件如果是其他类型的二进制文件,也有响应的头字节,如下表反制给上传脚本加上相应的幻数头字节就可以,php引擎会将(一般不限制图片文件格式的时候使用GIF的头比较方便,因为全都是文本可打印字符。)GIF89ado_something();?>如果是其他类型的二进制文件,也有响应的头字节,如下表格式文件头TIFF (tif)49492A00Windows Bitmap (bmp)424DCAD (dwg)41433130Adobe Photoshop (psd)38425053Rich Text Format (rtf)7B5C727466MS Word/Excel (xls.or.doc)D0CF11E0MS Access (mdb)5374616E64617264204AZIP Archive (zip),504B0304RAR Archive (rar),7221Wave (wav),57415645AVI (avi),41564920Real Media (rm),2E524D46MPEG (mpg),000001BAMPEG (mpg),000001B3Quicktime (mov),6D6F6F76Adobe Acrobat (pdf),255044462D312EWindows Media (asf),3026B2758E66CF11MIDI (mid),4D5468645.限制Web Server对于特定类型文件的行为导致文件上传漏洞的根本原因在于服务把用户上传的本应是数据的内容当作了代码,一般来说,用户上传的内容都会被存储到特定的一个文件夹下,比如我们很多人习惯于放在 ./upload/ 下面要防止数据被当作代码执行,我们可以限制web server对于特定文件夹的行为。大多数服务端软件都可以支持用户对于特定类型文件的行为的自定义,以Apache为例:在默认情况下,对与 .php文件Apache会当作代码来执行,对于 html,css,js文件,则会直接由HTTP Response交给客户端程序对于一些资源文件,比如txt,doc,rar等等,则也会以文件下载的方式传送的客户端。我们希望用户上传的东西仅仅当作资源和数据而不能当作代码因此可以使用服务器程序的接口来进行限制以Apache为例,我们可以利用 .htaccess 文件机制来对web server行为进行限制在这里插一句,如果不是专门的文件下载目录,请务必关掉文件夹浏览的权限,以防止嗅探和可能的越权,也是使用.htaccess文件,在其中加上一句Options All -Indexes即可。禁止脚本执行有多种方式可以实现,而且分别有不同的效果,我们分别来看一下1.指定特定扩展名的文件的处理方式,原理是指定Response的Content-Type可以加上如下几行AddType text/plain .pl .py .php这种情况下,以上几种脚本文件会被当作纯文本来显示出来,你也可以换成其他的Content-Type2.如果要完全禁止特定扩展名的文件被访问,用下面的几行Options -ExecCGIAddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi识别在这种情况下,以上几种类型的文件被访问的时候,会返回403 Forbidden的错误3.也可以强制web服务器对于特定文件类型的处理,与第一条不同的是, 下面的方法直接强行让apache将文件识别为你指定的类型,而第一种是让浏览器ForceType text/plain看代码就可以很明白的知道,符合上面正则的全部被认为是纯文本,也可以继续往里面加入其他类型。4.只允许访问特定类型的文件order deny,allowdeny from all在一个上传图片的文件夹下面,就可以加上这段代码,使得该文件夹里面只有图片扩展名的文件才可以被访问,其他类型都是拒绝访问。这又是一个白名单的处理方案永远记得,白名单是最有保障的安全措施可以通过 move_uploaded_file 函数把自己写的.htaccess 文件上传,覆盖掉服务器上的文件,来定义文件类型和执行权限如果做到了这一点,将获得相当大的权限。

㈡ 怎么判断网站存在iis解析漏洞

在 Windows 2003 IIS 6.0 下有两个漏洞,微软一直没有给出补丁。漏洞1:在网站下建立文件夹的名字为 *.asp、*.asa 的文件夹,其目录内的任何扩展名的文件都被 IIS 当作 asp 文件来解析并执行。例如创建目录 vin.asp,那么 /vin.asp/1.jpg 将被当作 asp 文件来执行。那么我们来测试一下,在网站下创建一个目录“vin.asp”,并在目录下创建一个文件名为“1.jpg”的文件(假设是用户作为头像上传上来的), 用记事本打开“1.jpg”文件,输入:Now is: <%=Now()%>如图所示,如果其中的 asp 脚本能被执行,那么恭喜您:漏洞存在。打开浏览器,输入地址,执行效果如下:漏洞2:网站上传图片的时候,将网页木马文件的名字改成“*.asp;.jpg”,也同样会被 IIS 当作 asp 文件来解析并执行。例如上传一个图片文件,名字叫“vin.asp;.jpg”的木马文件,该文件可以被当作 asp 文件解析并执行。在网站目录下创建文件“vin.asp;.jpg”,代码内容与上面 1.jpg 相同,打开浏览器,输入地址,执行效果如下 :这两个漏洞实在太可怕了,足以让每一个站长望而崩溃,更让站长崩溃的是微软至今没有发布补丁!如何避免“IIS解析漏洞”? 在我写这篇文章的时候,微软依然没有发布任何补丁。这个漏洞已经使得无数网站遭受攻击。程序开发者应该如何避免该漏洞被利用?1,必须在写程序的时候特别注意,上传图片后一定要用随机的数字或英文来重命名,文件名中最好不要含有其他字符,更不能让用户定义图片文件的名字。2,对于网盘系统来说,如果支持目录创建并允许用户自定义目录名,且在真实的物理磁盘上创建了这个目录的话,必须注意:目录名必须要严格检查,最好是只允许输入英文和数字。但最好是用数据库记录文件夹的层次结构,不要让用户知道真实的磁盘地址对应。我们不能坐以待毙,不能等待程序开发者升级程序或者期望微软给出补丁(至少大半年过去了,微软依然没有补丁发布)。解决办法总是有的:“微盾™非法信息拦截专家”为你提供终极解决方案,无需等待程序开发者的修补,也不指望微软发布补丁。简单的 两个步骤即可修补漏洞。“微盾™非法信息拦截专家”关于“IIS解析漏洞”的解决方案 第一步:从微盾网站下载最新版本的“微盾™非法信息拦截专家”,下载地址是:http://rd.vin.net/?5002第二步:配置拦截参数,打开“微盾™非法信息拦截专家”配置工具 » 设置 » 拦截 » SQL注入拦截,如下图:要添加的内容就是红圈里圈定的 4 条配置,分别是:*.asp/**.asa/**.asp;**.asa;* 输入配置后,点“保存”按钮即可,如果未能及时生效,请重启 IIS。让我们来看看安装“微盾™非法信息拦截专家”后的效果。即使服务器未修补漏洞,访问一下试试:

㈢ 文件上传漏洞有哪些挖掘思路

文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式、如何针对性绕过检测、哪种上传和解析的场景会产生危害等还是比较模糊。本文作一些阐述,然后补充一些除了上传webshell的其他非常规挖掘姿势,包括XSS、重定向、Dos、CSRF等等。1、基础知识:要深入了解文件上传,必须了解上传属性、常见文件的结构、图形处理函数等内容。1) 报文特点:观察文件上传报文的特点:Header中Content-Type特征有二:1.multipart/form-data(form表单的enctype属性,规定为二进制数据)2.boundary字符串(作用为分隔符,以区分POST数据)POST内容特征有五:1.Content-Disposition:form-data2. name:input表单名3.filename:文件名4.Content-Type:定义文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件;5.boundary:Content-Type的值前面加了两个—2) 常见校验规则现存常用的上传校验规则无非下面几类:1.客户端javascript校验(后缀名)2.文件头content-type字段校验(image/gif):附带参数4.后缀名黑/白名单校验:扩展名5.文件内容头校验:GIF89a6.文件内容校验:文件信息,二次渲染7.自定义正则校验3)一个澄清文件上传和文件解析是两个过程,即使我们上传的是php文件,但解析为图片,访问php文件会显示“图片无法显示”;或者我们上传的是jpg文件,但里面混有shell脚本,若被解析为php文件也会执行;又或者上传处没法绕过检测,只能上传jpg文件,但在其他功能处存在文件包含等功能,仍可执行成功。还是回到安全的本质,上传是“输入”,那文件解析就是“输出”,任何漏洞挖掘都需要结合输入+输出。2、绕过技巧:这里汇总一些实战中较常用的绕过技巧:1)后缀名黑名单以下替换后缀也可以解析为shell:php:.phtml,.phpt,.php3,.php3pasp:.aspx,asmx,ashx,web.configperl:.pl,.pm,.cgi,.libjsp:.jspx,.jsw,.jsv,.jspfColdfusion:.cfm,.cfml,.cfc,.dbm另外可以配合操作系统的文件命名规则:.php.,.php空格,.php:1.jpg,.php::$DATA等这些后缀的文件会被windows系统自动去掉不符合规则符号后面的内容,从而只留下.php。2)后缀名白名单除了结合各种服务器解析特性,较常用的是Null Byte Injection空字节注入,插入空字节值的原因是某些应用程序服务器脚本语言使用c/c++库来检查文件名和内容。在C/C ++中,一行以/00结尾或称为NullByte。因此,只要解释器在字符串的末尾看到一个空字节,就会停止读取,认为它已经到达字符串的末尾。如,我们将要上传的Happy.jpg的名称更改为Happy.phpA.jpg,然后上传文件,在Burp中捕获请求,切换到Hex视图。在字符串视图中找到文件名。查看相应的Hex表,并将41('A')替换为00(为空字节)。结果字符串变为Happy.php(空).jpeg。由于php解释器在内部使用C语言库,它将停止读取Happy.php后的文件名,文件将保存为Happy.php。另一种绕过白名单的方法是使用双后缀:shell.php.jpg。

㈣ 哪些服务器曾被发现文件解析漏洞

服务器解析漏洞总结1、Apache1.x 2.x解析漏洞Apache服务器解析文件时,从后向前遍历后缀名,直到遇到第一个可以被识别的后缀名,则按该种后缀方式进行文件解析。这样造成一个危害是:如果应用限制了php等敏感后缀,我们可以通过上传x.php.jpg这种未被拦截的后缀的木马上传,访问时,Apache会因为无法识别jgp,而向前寻找,找到php,按照php文件进行正常解析。木马被执行。2、IIS6.0解析漏洞(1)如果目录名包含.asp .asa .cer这种字样,则该目录下所有文件都被当做asp来进行解析(2)如果文件名中包含.asp;、.asa;、.cer;这种字样,也会被优先按照asp来进行解析3、Nginx(1)0.8.37以下的版本,可以上传一个不被过滤后缀名的木马,如:shell.jpg,可以通过请求shell.jpg.php来进行正常解析(2)0.8.41 – 1.5.6间的版本,可以上传一个不被过滤后缀名的木马,如:shell.jpg,可以通过请求shell.jpg%20.php来进行解析4、PHP CGI文件解析漏洞(1)Nginx小于0.8.3以下的版本,且当默认php配置文件cgi.fix_pathinfo=1时,可以上传一个不被过滤后缀名的木马,如:shell.jpg,通过请求shell.phhp/shell.jpg,可以使得shell.jpg被当做php来解析(2)IIS7.0/7.5之间的版本,如果存在多个Content-Disposition,则IIS会取第一个作为接受参数,同时,如果waf只取第二个进行检测的话,则有可能被绕过过滤。

㈤ 目录路径检测解析绕过上传漏洞 什么意思

Web应用程序通常会有文件上传的功能, 例如在 BBS发布图片 , 在个人网站发布ZIP 压缩 包, 在办公平台发布DOC文件等 , 只要 Web应用程序允许上传文件, 就有可能存在文件上传漏 洞.什么样的网站会有文件上传漏洞?大部分文件上传漏洞的产生是因为Web应用程序没有对上传文件的格式进行严格过滤 , 还有一部分是攻击者通过 Web服务器的解析漏洞来突破Web应用程序的防护, 后面我们会讲 到一些常见的解析漏洞, 最后还有一些不常见的其他漏洞, 如 IIS PUT 漏洞等 .

㈥ 文件解析漏洞是什么

文件解析漏洞,是指中间件(Apache、nginx、iis等)在解析文件时出现了漏洞,从而,黑客可以利用该漏洞实现非法文件的解析。需要注意的是解析漏洞与上传漏洞是两码事,文件解析漏洞是基于文件上传之后而言的。比如,Apache中间件,是c、c++混合写成的,当Apache中间件出现了解析漏洞,即:c、c++编程出现了漏洞,无论我们php代码层面如何的安全,都没办法抵挡黑客的攻击,因为现在的漏洞已经与php代码层无关了,已经是底层的安全问题了,文件解析漏洞就是因为Apache中间件c、c++编程出现了漏洞,导致黑客可以利用该漏洞解析非法文件。所以,底层安全比任何安全都要重要,至少我们从现在起,要开始重视底层安全了。程序开发者应该如何避免该漏洞被利用?1,必须在写程序的时候特别注意,上传图片后一定要用随机的数字或英文来重命名,文件名中最好不要含有其他字符,更不能让用户定义图片文件的名字。2,对于网盘系统来说,如果支持目录创建并允许用户自定义目录名,且在真实的物理磁盘上创建了这个目录的话,必须注意:目录名必须要严格检查,最好是只允许输入英文和数字。但最好是用数据库记录文件夹的层次结构,不要让用户知道真实的磁盘地址对应。我们不能坐以待毙,不能等待程序开发者升级程序或者期望微软给出补丁(至少大半年过去了,微软依然没有补丁发布)。

㈦ asp;gif这样的文件名去上传非法文件利用的是哪个iis版本的解析漏洞

6.0

未经允许不得转载:山九号 » 文件名解析漏洞|文件上传漏洞攻击方法有什么

赞 (0)