如果恶意用户上传了可实行的文件或者脚本,就会导致网站被其掌握乃至会使其做事器沦陷,以至于引发恶意的网络安全事宜。
1.2.文件上传漏洞事理文件上传漏洞是指用户通过界面上的上传功能上传了一个可实行的脚本文件,而WEB真个系统并未对其进行检测或者检测的逻辑做的不足好。
通过来说文件上传功能是没有问题的,紧张是做事器如何对上传的文件如何进行处理。
若WEB未对用户上传的文件进行有效的审查,若存在恶意用户对其上传一句话木马,从而实现掌握WEB网站的目的。
1.3.文件上传思路1.3.1.常规类扫描获取上传,会员中央头像上传,后台系统上传,其他路子上传。
1.3.2.cms类已知道的cms源码。
1.3.3.编辑类ckeditor,fckeditor,kindeditor,xxxxeditor。
1.3.4.其他类/CVE代码审计,平台或第三方运用。
1.4.web界面存在的风险点上传头像、上传身份认证、上传文件以及有存在文件上传的地方就可能存在干系的漏洞,但不是有文件上传就一定有漏洞,但有文件上传就能进行测试。
1.5.文件上传实战思路上传文件和文件实行是两个东西
漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)
思路:
如果有一个网站,要从文件上传的方向开始
第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/
如果有,如何找:
字典扫描:扫描会员中央,文件上传的位置
找到后,如何利用:
验证/绕过
2.文件上传绕过分类2.1.JS类防护2.1.1.前端验证 2.1.1.1.基本观点JS防护便是将上传的文件进行一个格式的验证,但是JS类的防护是用户可以掌握的,以是前真个所有验证都是不屈安的。
2.1.1.2.upload-labs第一关通过禁用界面JS处理,然后上传1.php文件,可绕过前端检测。关于如何禁用界面JS,可以通过安装插件进行一键禁用。在火狐的插件市场搜索javascript switcher。
2.2.黑名单
黑名单便是做事端明确不让上传的格式后缀,例如:rar、php、zip等。
2.2.1.分外解析后缀 2.2.1.1.基本观点分外解析后缀绕过是由于黑名单过滤规则不严谨,在某些特定的情形下的后缀也能够被当作php文件进行解析,例如PHP2、php3、php4、phtml、pht等情形。
可以利用phtml、php3、php4、php5,当然条件是apache做事器,同时在配置文件夹中须要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht 这样的一段话前面的注释删除,重启phpstudy让其生效。
2.2.1.2.upload-labs第三关通过源码得知,禁止.asp、.aspx、.php、.jsp类型进行上传。
本关可以通过上传其他文件扩展名进行绕过,实现文件上传。
2.2.2…htaccess解析 2.2.2.1.基本观点
.htaccess文件是Apache做事器中的一个配置文件,它卖力干系目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、许可/阻挡特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
2.2.2.2.upload-labs第四关通过源码得知第三关利用的phtml被限定了,并且设定了更多的分外解析后缀,以是利用分外解析后缀已经无法绕过了,这里就可以利用到 .htaccess进行绕过测试。
条件条件:
Apache开启rewrite模块.apache配置文件为AllowOverride All(默认为None) .htaccess须要利用notepad++创建,不然创建不了,创建 .htaccess代码:<FilesMatch "x.png"> SetHandler application/x-httpd-php</FilesMatch>
x.png是代码将该目录下文件叫x.png的文件以php进行实行。 首先上传.htaccess,其次上传一张名叫x.png的文件,即可实行。
2.2.3.大小写绕过 2.2.3.1.基本观点
后缀大小写是通过做事端未将后缀进行统一的格式转换,导致可以上传PHP的文件,同时由于Windows系统对后缀大小写并不敏感,以是当在写PHP的改成Php就会被当作PHP进行解析。
2.2.3.2.upload-labs第五关通过源码得知,并未对其大小进行限定,且是由于是黑名单,只限定了不可以上传的,那么的我们可以对php后缀进行大小写变形,例如:PHP、Php、pHp等。
2.2.4.点绕过 2.2.4.1.基本观点
点绕过实在便是利用了Windows对文件和文件名的限定,当将点放在结尾的时候,就会触发操作系统的命名规范问题,以是在天生文件的时候,添加在结尾的点就会被去除。
2.2.4.2.upload-labs第七关通过源码创造,本关并未对结尾点进行检测。那么这里就可以通过在后缀加上点进行绕过,这里我利用的是之前大小写的文件,并未修正名称,以是不要太在意,并不是说利用大小写可以绕过。
2.2.4.3.upload-labs第九关
通过源码创造本关之前所有的绕过思路都被过滤了,但是通过源码创造,所有的过滤都是一次的,并未对其进行循环过滤。也便是说源码中提到的删除空格,删除点都是只删除一次,那么可以在数据包中将php后缀添加. .,形成.php. .,由于只验证一次,以是删除一个点和一个空格后就不再删除了。
2.2.5.空格绕过 2.2.5.1.基本观点
实在空格绕过和点绕过是一样的,都是利用操作系统的特性来进行解析绕过。详细可以看点绕过的阐明。
2.2.5.2.upload-labs第六关通过源码创造并未对空格进行限定,那么我们可以在后缀添加一个空格进行绕过,但是在Windows系统中我们无法创建后缀带空格的文件,但是在数据包中不会对后缀的空格进行打消啊,那么我们这里就须要利用到BS进行抓包,对其进行修正,然后再进行上传。
通过修正后上传到对方做事器的时候,做事器会自动对后面的空格打消,就实现了绕过。
2.2.6.::$$DATA绕过 2.2.6.1.基本观点
在window的时候如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的便是不检讨后缀名
2.2.6.2.upload-labs第八关通过源码创造并未对::$DATA进行检测。可以在后面添加::$DATA进行绕过。
2.2.7.合营解析漏洞 2.2.7.1.基本观点
合营解析漏洞便是利用文件上传漏洞和干系的解析漏洞进行结合完成攻击,比如合营iis、nginx、apache、tomcat的解析漏洞得到上传漏洞的实现。详细的看下面提到各种干系的解析漏洞。
2.2.8.双后缀名绕过 2.2.8.1.基本观点做事端可能存在将后缀更换为空的情形,但是这就存在一种可能便是在编辑过滤的时候只过滤了一次,以是就涌现了可以通过双写就绕过的可能。
2.2.8.2.upload-labs第十关通过源码创造,若上传的文件后缀在禁止的列中,那么就将后缀更换为空,而这里又是只过滤一次,那么就可以通过双写进行绕过。
这里由于过滤便是从左到右进行匹配,不要问为什么不从右向左匹配。
例如:pphphp
2.3.白名单
白名单便是做事端明确可以上传的格式后缀,例如:jpg、png、jpeg等。
2.3.1.MIME绕过 2.3.1.1.基本观点做事端MIME类型检测是通过检讨http中包含的Content-Type字段中的值来判断上传文件是否合法的。
利用Burp抓包,将报文中的Content-Type改成许可的类型
Content-Type: image/gif(gif图像)
Content-Type: image/jpg(jpg图像)
Content-Type: image/png(png图像)
2.3.1.2.upload-labs第二关通过源码中第五段剖析得出本关采取了content-type进行后端验证,那么通过利用BS抓包对其进行修正content-type,然后再进行上传。
2.3.2.%00截断 2.3.2.1.基本观点
%00不是代表空格,而是null,一个空字符,当程序实行到%00后,那么后面的数据就会停滞,意思便是误当作结束符,把后面的数据直接忽略了,这就会导致漏洞产生。
在文件上传后,利用%00截断,在文件扩展名验证的时候,就会取文件的扩展名进行验证,但是在末了保存在本地的时候,%00就会截断文件名,只保存%00之前的内容。
%00只能用于php版本低于5.3的。这里我们须要把phpstudy切换一下版本,把magic_quotes_gpc关闭,以phpstudy为例。其他选项菜单—php扩展及设置—参数开关设置—把magic_quotes_gpc关闭。
2.3.2.2.upload-labs第十一关通过源码创造本关是个白名单,但是可以利用%00对路径进行截断。
2.3.2.3.upload-labs第十二关
本关接管值从get变成了post,它俩的差异便是get会自行解码,而post不会解码,以是须要对%00进行解码。
在BS抓包中选中%00右键选择URL其次选择网址解码。
2.4.内容及其他2.4.1.文件头检测 2.4.1.1.基本观点
图片的格式在防护中常日是不会利用后缀进行判断的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。
JPEG (jpg),文件头:FF D8 FF E1
PNG (png),文件头:89 50 4E 47
GIF (gif),文件头:47 49 46 38
2.4.1.2.upload-labs第十三关
制作图片马,可以利用Notepad直接打开图片在后面添加一个PHP代码,不过可能会出错。其次便是利用copy X.png /b + 1.php /a x.png 。
上传图片马,并查找路径。制作好的图片马想要解析出来这个图片,还得有这个包含漏洞。我们看到,他已经说了,网站存在包含漏洞
上传图片马,并查找路径
布局的URL:http://192.168.10.150/upload-labs/include.php?file=upload/2120221024150121.png
2.4.2.二次渲染 2.4.2.1.基本观点
二次渲染便是在我们上传的图片后,网站会对图片进行二次处理,比如对图片的尺寸、格式、以及网站对图片进行定义的一些哀求等进行处理,并且做事器会对里面的内容进行二次更换更新,在处理完后,会天生一个合规的图片在网站上显示出来。
2.4.2.2.upload-labs第十六关这里实在同样也可以利用图片马也便是jpg等格式,但是利用gif图片更好。
利用抓包软件进行拦截,方便查看上传后的文件名称。
从网上找的gif图片马:图片马:
构建的URL:http://192.168.10.150/upload-labs/include.php?file=/upload/18556.gif
2.4.3.条件竞争 2.4.3.1.基本观点
条件竞争便是在源代码中是存在校验的,但是校验是在文件上传后,才开始校验,也便是文件先上传至做事器中,然后做事器会对该文件进行校验,当符合的时候则会对文件进行重命名,当文件不符合哀求的时候就对将文件进行删除。
而我们则须要在做事器对文件删除提高行访问,由于文件在访问过程中,做事器是无法删除的,以是就可以利用这个节点实现条件竞争。
2.4.4.打破gatimagesize 2.4.4.1.基本观点getimagesize函数是用于获取图像大小及干系信息,成功返回一个数组,失落败则返回false产生一条e_warning级的缺点信息。
通过对图片及代码进行合成图片马,这个时候getimagesize函数既可以获取图片信息,文件后缀php也能够被解析成脚本文件,从而绕过getimagesize函数的限定。
2.4.4.2.upload-labs第十四关本关存有getimagesize函数,这个函数的意思是:会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的哀求的。
利用办法和第十三关是一样的,条件都是须要存在干系的漏洞。
2.4.5.打破exif_imagetype 2.4.5.1.基本观点
做事器exit_imagetype()函数检测上传图片类型是否为白名单图片格式来验证上传文件合法性。可以通过制作图片马绕过,再合营文件包含漏洞解析文件来获取做事器配置信息。
2.4.5.2.upload-labs第十五关上传一张图片马,然后利用br抓包软件对其进行抓包,查看上传后的文件名称。
URL:http://192.168.10.150/upload-labs/include.php?file=/upload/4920221126063306.png
3.解析漏洞3.1.解析漏洞阐明
解析漏洞便是指做事器运用程序在解析某些精心布局的后缀文件的时候,会将干系的文件解析成网页的脚本,从而导致实现掌握网站,同时大部分的解析漏洞都是由运用程序产生的。
3.2.IIS解析漏洞3.2.1.IIS5.0/6.0 3.2.1.1.目录解析在以. asp文件名的文件夹下的任何文件都将作为asp文件实行。
也便是当目录为XX.asp的时候,那么当访问下面的图片的时候,如XX.aps/1.jpg就会被当作ASP实行。
3.2.1.2.文件解析如果文件为1.asp;.jpg,由于IIS不解析;后面的内容,利用就会把文件当作1.asp进行解析,同时还存在.asa、.cer、.cdx可以进行解析。
3.2.1.3.修复建议1)限定上传目录的实行权限,不许可实行脚本。
2)不许可创建目录。
3)上传的文件进行重命名。
3.2.2.IIS7.0/IIS7.5 3.2.2.1.IIS7.0/IIS7.5Fast-CGI在Fast-CGI开启的状态下,在类似1.jpg后面加上/1.php,变成/1.jpg/1.php路径会解析成PHP文件。须要进入php.ini里面修正cig.cgi_ pathinfo=1。
将1.txt文本文件中的后门代码写入到1.jpg图片的二进制代码:
copy 1.jpg/b + 1.txt/a 1.jpg
1.txt的文件内容为:
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[password])?>');?>
当在图片文件中写入后门代码,当访问这个图片的时候加上/.php的时候就会在当前目录下天生一句话木马shell.php。
3.2.2.2.修复建议配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序
3.3.apache解析漏洞3.3.1.apache解析漏洞
在apache1.x和apache2.x中存在解析漏洞。
当一个文件为1.php.yy.xx的时候就会被当作php实行,这是由于在apache解析文件的时候有一个原则便是,以.后面的扩展名来解析,当遇见不认识的扩展名的时候,就会向前解析,直到碰着能够解析的后缀名为止。
如:1.php.yy.xx,首先会解析xx,xx无法解析就会去解析yy,yy无法解析就会去解析php,那么php是能够解析了,那么就会结束。
这种办法多用于绕过黑名单的检讨。
3.3.2.修复建议1)更新至最新版本。
2)将上传的文件进行重命名。
3.4.nginx解析漏洞3.4.1.nginx<8.03 3.4.1.1.nginx配置文件缺点由于nginx默认是用cgi解析php的,因此和iis一样可以制作图片马进行上传。
当在图片文件中写入后门代码,当访问这个图片的时候加上/.php的时候就会在当前目录下天生一句话木马shell.php。
3.4.1.2.修复建议1)配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序。
2)或如果须要利用到cgi.fix_pathinfo这个特性(例如:Wordpress),那么可以禁止上传目录的实行脚本权限。 或将上传存储的内容与网站分离,即站库分离。
3)或高版本PHP供应了security.limit_extensions这个配置参数,设置security.limit_extensions = .php
3.4.2.nginx 0.5/0.6/0.7<=0.7.65/0.8<=0.8.37 3.4.2.1.nginx空字节任意代码实行当利用PHP-FastCGI实行PHP时,碰着url里面存在%00空字节时与FastCGI的处理不一致,导致可在非PHP文件中嵌入PHP代码,通过访问url+%00.PHP来实行个中的PHP代码。
比如上传一张图片马1.jpg,那么当访问这个图片马的时在1.jpg后面添加%00.php就会将图片马以php实行。
3.4.2.2.修复建议1)升级nginx版本。
4.编辑器漏洞4.1.先容编辑器也便是在线的web编辑器,比如在搭建博客后须要发布文章,那么用来发布文章的界面便是web编辑器。当然web编辑器有很多,如:UEDITOR(百度)、eWebEdit、FCKeditor、CKEditor(新版fck)、Kindeditor、DotNetTextBox、CuteEditor等等。
4.2.编辑器漏洞编辑器漏洞详解
5.WAF绕过5.1.WAF绕过阐明waf绕过实在便是将数据包截获到,对里面的内容进行解析,比如对文件的后缀名就判断是否在相应的黑名单中,文件内容中是否存在webshell代码。
总的来说文件上传都是在数据包中进行各种操作来进行绕过。
5.2.上传参数名解析Content-Disposition :一样平常可变动
name:表单参数值,不能变动
filename:文件名,可以变动
Content-Type:文件MIME,视情形变动
5.3.绕过办法5.3.1.数据溢出 5.3.1.1.form-data与name之间
在form-data;与name=“upload_file”; filename=“2.php"之间添加大量的垃圾数据,可以边添加边测试直到上传上去,紧张添加的垃圾数据须要在后面添加一个”;"进行结尾。
例如:
form-data;sadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasA; name="upload_file"; filename="2.php"
当然这里不单单可以插入在form-data;与name=“upload_file”; filename="2.php"之间,也可以在name=“upload_file”; 与filename="2.php"之间。但是数据不能乱插入,比如你插在2.php中,那肯定弗成,一样平常情形下,文件名称长度都可能存在限定,并且太长也上传不上去。
例如:
Content-Disposition: form-data; name="upload_file"; sadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasAsadasA; filename="2.php"
5.3.2.符号变异 5.3.2.1.filename符号变异
符号变异也便是将单双引号变换利用,或者单双引号缺失落一部分进行利用,或者不该用单双引号来进行绕过。目前测试彷佛是无法通过了。
Content-Disposition: form-data; name="upload_file"; filename="2.phpContent-Disposition: form-data; name="upload_file"; filename='2.phpContent-Disposition: form-data; name="upload_file"; filename=2.php
Content-Disposition:"form-data"; name=upload_file; filename="2.php"Content-Disposition:'form-data'; name="upload_file"; filename='2.php'
5.3.3.数据截断 5.3.3.1.回车换行
通过换行来实现绕过,但是中间不能有空行。
例如:
Content-Disposition: form-data; name="upload_file"; filename="2.php"
5.3.3.2.分号截断
若WAF匹配文件名到分号截止,则可以绕过。
5.3.4.字段名变换 5.3.4.1.大小写变换
对这三个字段进行大小写进行变换,比如将name换成Name、Content-Disposition换成content-disposition等等。
5.3.4.2.顺序颠倒针对name和filename这两个字段,我们可以考试测验交流name和filename的顺序。(由于有规定Content-Dispositon必须在前面,因此我们不能修正该字段的内容)
5.3.5.重复数据通过设置多个参数进行匹配,避免被匹配到。
Content-Disposition: form-data; name="upload_file";filename="2.jpg";filename="2.jpg";filename="2.jpg";filename="2.jpg";......filename="2.php";
5.4.绕过参考链接
最全的文件上传漏洞之WAF拦截绕过总结
6.安全修复6.1.文件上传修复后端验证:针对后端验证的可以采取通过做事器进行验证。
后缀检测:利用黑白名单进行过滤,当然最好是利用白名单,黑名单有时候总归会存在一些未想到的后缀,而白名单就相对大略一点,只须要想放通哪些后缀即可,而且戒备更好一些。
上传目录:对上传文件到的目录可以设置一个不可实行的权限。
文件名:针对文件名可以自定义一些随机数以及一些其他的内容进行二次修正,从而改变文件的名称。
内容检测:可以利用文件头,完全性检测,最好能够对内容的数据进行判断是否存在一些webxshll类似的代码,若涌现这类代码,直接删除。
当然戒备手段还有很多,有攻有防。