文件上传漏洞绕过后端内容审核|文件上传漏洞及解析漏洞总结

文件上传漏洞绕过后端内容审核|文件上传漏洞及解析漏洞总结的第1张示图

A. 文件上传漏洞原理是什么

文件上传原理

在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。

文件上传漏洞高危触发点

相册、头像上传

视频、照片分享

附件上传(论坛发帖、邮箱)

文件管理器

存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏洞的高危地带。另外像文件管理器这样的功能也有可能被攻击者所利用值得注意的是,如果移动端也存在类似的操作的话,那么相同的原理,也存在文件上传漏洞的风险。

为了防御文件上传漏洞的产生,需要在服务端做严格的防护,因为浏览器、客户端传回的数据并不可信任。首先是第一道防线,文件类型检测,上传的文件需要经过严格的文件类型检测防止上传的文件是恶意脚本。

上传之后的文件要进行重命名。

如果上传的文件是图片类型,可以选择使用重绘图的方式对图片进行保存,但是这种方式会对服务端性能稍有影响

最后,文件上传的目录不可赋予可执行权限,可以使用BOS这样的云存储服务,当然最方便的还是使用BOS这样现成的云存储服务

B. 什么是文件上传漏洞

文件上传漏洞:允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。任意文件上传漏洞原理:由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向 某个可通过 Web 访问的目录上传任意PHP 文件,并能够将这些文件传递给 PHP 解释器,就 可以在远程服务器上执行任意PHP 脚本。

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

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

D. 渗透测试应该怎么做呢

渗透测试步骤明确目标· 确定范围:测试目标的范围,ip,域名,内外网。· 确定规则:能渗透到什么程度,时间?能否修改上传?能否提权等。· 确定需求:web应用的漏洞、业务逻辑漏洞、人员权限管理漏洞等等。信息收集方式:主动扫描,开放搜索等。开放搜索:利用搜索引擎获得,后台,未授权页面,敏感url等。漏洞探索利用上一步中列出的各种系统,应用等使用相应的漏洞。方法:1.漏扫,awvs,IBM appscan等。2.结合漏洞去exploit-db等位置找利用。3.在网上寻找验证poc。内容:系统漏洞:系统没有及时打补丁Websever漏洞:Websever配置问题Web应用漏洞:Web应用开发问题其它端口服务漏洞:各种21/8080(st2)/7001/22/3389通信安全:明文传输,token在cookie中传送等。漏洞验证将上一步中发现的有可能可以成功利用的全部漏洞都验证一遍,结合实际情况,搭建模拟环境进行试验。成功后再应用于目标中。自动化验证:结合自动化扫描工具提供的结果手工验证,根据公开资源进行验证试验验证:自己搭建模拟环境进行验证登陆猜解:有时可以尝试猜解一下登陆口的账号密码等信息业务漏洞验证:如发现业务漏洞,要进行验证公开资源的利用信息分析为下一步实施渗透做准备:精准打击:准备好上一步探测到的漏洞的exp,用来精准打击绕过防御机制:是否有防火墙等设备,如何绕过定制攻击路径:最佳工具路径,根据薄弱入口,高内网权限位置,最终目标绕过检测机制:是否有检测机制,流量监控,杀毒软件,恶意代码检测等攻击代码:经过试验得来的代码,包括不限于xss代码,sql注入语句等获取所需实施攻击:根据前几步的结果,进行攻击获取内部信息:基础设施进一步渗透:内网入侵,敏感目标持续性存在:一般我们对客户做渗透不需要。rookit,后门,添加管理账号,驻扎手法等清理痕迹:清理相关日志,上传文件等信息整理整理渗透工具:整理渗透过程中用到的代码,poc,exp等整理收集信息:整理渗透过程中收集到的一切信息整理漏洞信息:整理渗透过程中遇到的各种漏洞,各种脆弱位置信息形成报告按需整理:按照之前第一步跟客户确定好的范围,需求来整理资料,并将资料形成报告补充介绍:要对漏洞成因,验证过程和带来危害进行分析修补建议:当然要对所有产生的问题提出合理高效安全的解决办法

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

文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式、如何针对性绕过检测、哪种上传和解析的场景会产生危害等还是比较模糊。本文作一些阐述,然后补充一些除了上传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。

F. 文件上传漏洞

在上网的过程中,经常会将一些如图片、压缩包之类的文件上传到远端服务器进行保存。文件上传攻击指的是恶意攻击者利用一些站点没有对文件的类型做很好的校验,上传了可执行的文件或者脚本,并且通过脚本获得服务器上相应的权利,或者是通过诱导外部用户访问、下载上传的病毒或木马文件,达到攻击的目的。为了防范用户上传恶意的可执行文件和脚本,以及将文件上传服务器当做免费的文件存储服务器使用,我们需要对上传的文件类型进行白名单(非黑名单,这点非常重要)校验,并且限制上传文件的大小,上传的文件需要进行重新命名,使攻击者无法猜测到上传文件的访问路径。对于上传的文件来说,不能简单地通过后缀名称来判断文件的类型,因为恶意攻击可以将可执行文件的后缀名称改成图片或者其他后缀类型,诱导用户执行。因此,判断文件类型需要使用更安全的方式。很多类型的文件,起始的几个字节内容是固定的,因此,根据这几个字节的内容,就可以确定文件类型,这几个字节也被称为魔数( magic number)。

G. 文件上传漏洞及解析漏洞总结

首先搭建phpstudy的安装环境,在phpstudy网站根目录建立php演示文件夹,放入php文件上传代码。

php文件上传漏洞演示代码,代码未限制任何文件属性的上传。

写一个phpinfo.php文件,通过浏览器访问进行上传。

提示上传成功,保存于uploads路径中,可以猜想保存路径为http://10.10.10.1/php/uploads

尝试访问phpinfo.php文件使用刚才猜想的路径,http://10.10.10.1/php/uploads/phpinfo.php,phpinfo函数被执行

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

文件上传漏洞是什么?怎样防御文件上传漏洞攻击?文件上传漏洞是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 文件上传,覆盖掉服务器上的文件,来定义文件类型和执行权限如果做到了这一点,将获得相当大的权限。

I. 文件上传漏洞的类型有哪些

1、 前端检测绕过有的站点只在前端对文件的类型有所限制,我们只需用bp抓包然后修改文件后缀名就能绕过这种检测。2、 文件头检测绕过有的站点使用文件头来检测文件的类型,这种检测可以在shell前加入相应的字节一绕过检测,几种常见的文件类型的头字节如下:3、 后缀检测绕过部分服务器仅根据文件后缀、上传时的信息或者文件头来判断文件类型,此时可以绕过。php由于历史的原因,部分解释器可能支持符合正则/ph(p[2-7]?|t(ml)?)/的后缀,如php/php5/pht/phtml/shtml/pwml/phtm等。如果后端对文件名进行了过滤,可以尝试双写文件名,比如1.pphphp。4、 系统命名绕过在windows系统中,上传不符合windwos命名规则的文件名会被windows系统自动去掉不符合规则符号后面的内容,例如:test.asp.、test.asp(空格)、test.php:1.jpg、test.php:: D A T A 、 t e s t . p h p : : DATA、test.php:: DATA、test.php::DATA…这些文件上传到服务器端之后都会变成test.php在linux系统下,可以尝试上传文件后缀名为大小写混用的Php文件。5、 文件包含绕过在文件包含的时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件,用户可以对变量的值进行控制,而服务器端未对变量进行合理的校验,这样就导致所包含的文件有可能存在恶意代码。比如1.php<?php $file=$_GET[‘file’]; include($file); ?>这个程序就包含了一个文件,我们在1.txt文件中写入<?php phpinfo(); ?>然后将这个文件包含在1.php中1.php?file=1.txt这样<?php phpinfo(); ?>就成功写入1.php这个文件当中,我们访问1.php这个文件的时候就能出现php信息那个页面。利用这个漏洞我们就可以进行文件上传,我们只需包含一个一句话木马内容的txt就能用菜刀连接,这样就成功执行了文件上传。6、 解析漏洞绕过目录解析:在网站中建立名称为*.asp、.asa格式的文件夹时,其文件夹下面的文件都会被当做asp执行。文件解析:当文件名为.asp;1.jpg时,也会被当做asp执行Apache解析漏洞:Apache在解析文件时,是从右往左,如果遇到不认识的扩展名时,就会继续向左判断,例如1.php.rar就会被当做php解析。IIS 7.0/IIS 7.5/Nginx<0.8.3畸形文件解析漏洞,当访问http://xxx.com/1.jpg/1.php时,此时1.php不存在,就会将1.jpg当做php文件去执行,所以如果存在该漏洞,将php木马后缀改成jpg然后访问1.jpg/1.php然后1.jpg就会被当成1.php来执行。.htaccess,该文件里面的代码如下:<FilesMatch “1”>SetHandler application/x-httpd-php这段代码的意思就是文件名包含”1”这个这个字符串就会被当成php文件来处理。但是值得注意的是上传.htaccess必须是网站根路径。7、 文件截断绕过00截断:由于00代表结束符,所以会把00后面的所有字符删除。能利用这个漏洞的前提是,php版本要小于5.3.4,magic_quotes_gpc需要为OFF状态。我们用bp进行拦包之后,需要send to repeater,然后在hex中,在php后面添加008、 竞争条件攻击一些网站上传文件逻辑上是允许上传任意文件的,然后检查上传文件的内容是否包含webshell脚本,如果包含则删除该文件,这里存在的问题是文件上传成功之后和删除文件之间存在一个短的时间差,攻击者就可以利用这个时间差来上传漏洞攻击。攻击者先上传一个webshell脚本1.php内容如下:<?php fputs(fopen(‘../shell.php’,’w’),’<?php @eval($_POST[a]) ?>’); ?>代码内容就是生成一个新的webshell,shell.php,那么当1.php上传成功之后,我们快速访问这个文件,这时就会在服务器端当前目录下自动生成shell.php,这时就利用时间差完成了webshell的上传。

未经允许不得转载:山九号 » 文件上传漏洞绕过后端内容审核|文件上传漏洞及解析漏洞总结

赞 (0)