一、学习目的:
通过本次学习,了解文件上传漏洞的原理,及其检测方法; 通过本次学习,了解文件上传漏洞的危害及其存在位置;
二、文件上传漏洞原理:
- 在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。
- 文件上传漏洞对Web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。
三、文件上传漏洞高危触发点
- 存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏阔的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。
- 值得注意的是,如果移动端也存在类似的操作的话,那么相同的原理,也存在文件上传漏洞的风险。
四、前端检测:
??主要是通过javascript代码 进行检测,非常容易进行绕过。
1.?原理:
??Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。
点击进入:【文件上传绕过】——前端检测_前端js验证漏洞
2.?如何判断当前页面使用前端is的验证方式:
??前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不成功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求。
3.?绕过方法:
- 删除或者禁用js:
火狐浏览器-->about:config-->JavaScriptenable-false (ajax) - 使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。
3.1?删除js绕过:
直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可:
或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行修改,本地提交即可。
3.2?禁用js绕过:
点击进入:禁用js绕过文章
五、后端检测_后缀名检测漏洞:
1.?原理:
??通常是针对文件的扩展名后缀进行检测,主要是通过黑白名单进行过滤检测,如果不符全过滤规则则不允许上传。
2.?黑名单:
2.1?原理:
??黑名单检测:一般有个专门的 blacklist 文件 ,里面会包含常见的危险脚本文件。 例如: fckeditor 2.4.3 或之前版本的黑名单:
2.2?绕过方法:
解析漏洞
.htaccess 文件解析漏洞- apache解析漏洞
- IIS7.0 | IIS7.5 | Nginx的解析漏洞
- IIS6.0解析漏洞
截断上传
- 截断类型:PHP%00截断
- 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断
- 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
大小写绕过
比如:aSp 和pHp 之类。
黑名单扩展名的漏网之鱼
比如: asa 和cer 之类 asp: asa cer aspx jsp: jspx jspf php: php php3 php4 php5 phtml pht exe: exee
利用Windows的命名机制
shell.php. ?? shell.php空格 ??shell.php:1.jpg ?? shell. php::$DATA ?? shell.php:1.jpg 在windows中,后缀名后面的点和空格都会被删除掉。
双写绕过
??有时候在检测时,后台会把敏感字符替换成空格,这个时候,我们可以使用双写进行绕过。比如:pphphp
3.?白名单:
3.1?原理:
??白名单检测:一般有个专门的 whitelist 文件 ,里面会包含的正常文件: ??Jpg png GIF
3.2?绕过方法:
解析漏洞
- .htaccess文件解析漏洞
- apache解析漏洞
- IIS7.0 | IIS7.5 | Nginx的解析漏洞
- IIS6.0解析漏洞
截断上传
- 截断类型:PHP%00截断
- 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断
- 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
文件包含
点击进入:文件包含漏洞详解
六、后端检测_00截断:
点击进入: 【文件上传绕过】——后端检测_文件名检测00截断绕过
1.?原理:
??虽然web应用做了校验,但是由于文件上传后的路径用户可以控制 ,攻击者可以利用手动添加字符串标识符0X00 的方式来将后面的拼接的内容进行截断 ,导致后面的内容无效,而且后面的内容又可以帮助我们绕过黑白名单的检测。
2.?绕过思路:
??在C语言 中,空字符 有一个特殊含义,代表字符串的拼接结束。 ??这里我们使用的是php语言 ,属于高级语言,底层靠C语言 来实现的,也就是说空字符 的字符串拼接结束功能在PHP 中也能实现。但是我们在URL中不能直接使用空 ,这样会造成无法识别;我们通过查看ASCII对照表 ,发现ASCII对照表 第一个就空字符 ,它对应的16进制是00 ,这里我们就可以用16进制的00 来代替空字符 ,让它截断 后面的内容。
使用burpsuite 进行抓包,因为这里是通过URL 进行传递的文件上传后存储路径,所以需要对16进制 的00 进行URL编码 ,编码的结果就是%00 ,通过这种方式,就可以%00 截断后面的内容,让拼接的文件名不再进行生效:
七、后端检测_MIME检测:
1.?什么是MIME:
??MIME(Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
绕过上传限制-服务端绕过MIME检测:
2.?常见的MIME类型:
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文档)
3.?检测方式:
??在文件上传过程中,服务端会针对我们的上传的文件生成一个数组,这个数组其中有一项就是这个文件的类型file_type ;服务端对文件进行检测时,就是通过检测脚本中的黑白名单和这个数组中的file_type 进行对比,如果符合要求就允许上传这个文件。
4.?MIME绕过的原理:
??部分Web应用系统判定文件类型是通过content-type字段 ,黑客可以通过抓包,将content-type字段 改为常见的图片类型 ,如image/gif ,从而绕过校验。
八、后端检测_文件头检测漏洞:
1.?原理:
??在每一个文件(包括图片,视频或其他的非ASCII文件)的开头(十六进制表示)实际上都有一片区域来显示这个文件的实际用法,这就是文件头标志。我们可以通过16进制编辑器打开文件,添加服务器允许的文件头以绕过检测。
2.?常见的文件头:
注意:下面的文件头的格式是16进制 的格式: GIF:47 49 46 38 39 61 png:89 50 4E 47 0D 0A 1A 0A JPG:FF D8 FF E0 00 10 4A 46 49 46 在进行文件头绕过 时,我们可以把上面的文件头 添加到我们的一句话木马内容最前面,达到绕过文件头检测的目的。
九、后端检测_内容检测图片马绕过:
1.?漏洞原理:
??一般文件内容验证使用getimagesize函数 检测,会判断文件是否是一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。 ??本实验就是将一句话木马插入到一个[合法]的图片文件当中,然后用webshell管理工具进行远程连接。
2.?图片马制作:
准备一张图片,这里为a.png ,和一个一句话木马,通过以下命令合成一个图片马3.php : a.php 内容:
<?php phpinfo(); ?>
命令:
copy a.png /b + a.php /a 3.php
/b:指定以二进制格式复制、合并文件,用于图像或者声音类文件
/a:指定以ascii格式复制、合并文件用于txt等文本类文件
注:这条命令的意思是:通过copy命令 ,把a.png 图片文件,以二进制文件形式添加到a.php 文件中,以ASCII文本文件 形式输出为3.php 文件。
3.?解析图片马:
??一般解析图片马需要结合解析漏洞 或者文件包含 才能解析图片马;
十、解析漏洞:
1.?.htaccess 文件解析漏洞:
1.1?漏洞利用前提::
??web具体应用没有禁止.htaccess文件的上传,同时web服务器提供商允许用户上传自定义的.htaccess文件 。
1.2?原理:
??.htaccess文件(或者"分布式配置文件") ,全称是Hypertext Access(超文本入口) 。提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
1.3?利用方式:
??上传覆盖.htaccess文件 ,重写解析规则 ,将上传的带有脚本马的图片以脚本方式解析。
1.4?.htaccess文件 内容:
??.htaccess文件 解析规则的增加,是可以按照组合的方式去做的,不过具体得自己多测试。
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>
2.?Apache 解析漏洞:
2.1?漏洞原理:
??Apache 解析文件的规则是从右到左 开始判断解析,如果后缀名 为不可识别 文件解析,就再往左判断。比如test.php.a.b 的“.a ”和“.b ”这两种后缀是apache 不可识别解析,apache 就会把test.php.a.b 解析成test.php 。
2.2?影响版本:
apache 1.x apache 2.2.x
3.? IIS6.0 解析漏洞:
IIS6.0 解析漏洞分两种 : 1、目录解析: 以xx.asp 命名的文件夹 里的文件都将会被当成ASP文件 执行。 2、文件解析: xx.asp;.jpg 像这种畸形文件名在; 后面的直接被忽略,也就是说当成xx.asp 文件执行。 IIS6.0 默认的可执行文件除了asp 还包含这三种 .asa .cer .cdx 。
4.?IIS7.0 | IIS7.5 | Nginx的解析漏洞:
4.1?原理:
??Nginx 拿到文件路径(更专业的说法是URI )/test.jpg/test.php 后,一看后缀是.php ,便认为该文件是php文件 ,转交给php 去处理。php 一看/test.jpg/test.php 不存在,便删去最后的/test.php ,又看/test.jpg 存在,便把/test.jpg 当成要执行的文件了,又因为后缀为.jpg ,php 认为这不是php文件 ,于是返回Access denied 。 ??这其中涉及到php 的一个选项:cgi.fix_pathinfo ,该值默认为1 ,表示开启。开启这一选项PHP 可以对文件路径进行修理 。 ??举个例子,当php 遇到文件路径/1.jpg/2.txt/3.php 时,若/1.jpg/2.txt/3.php 不存在,则会去掉最后的/3.php ,然后判断/1.jpg/2.txt 是否存在,若存在,则把/1.jpg/2.txt 当做文件/1.jpg/2.txt/3.php ,若/1.jpg/2.txt 仍不存在,则继续去掉/2.txt ,以此类推。
4.2?漏洞形式:
www.xxxxx.com/UploadFiles/image/1.jpg/1.php
4.3?另外两种解析漏洞:
www.xxxxx.com/UploadFiles/image/1.jpg%00.php www.xxxxx.com/UploadFiles/image/1.jpg/%20\0.php
十一、条件竞争漏洞:
??条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。 ??上传文件源代码里没有校验上传的文件,文件直接上传,上传成功后才进行判断:如果文件格式符合要求,则重命名,如果文件格式不符合要求,将文件删除。 ??由于服务器并发处理(同时)多个请求,假如a用户 上传了木马文件,由于代码执行需要时间,在此过程中b用户 访问了a用户 上传的文件,会有以下三种情况: ??1.访问时间点在上传成功之前,没有此文件。 ??2.访问时间点在刚上传成功但还没有进行判断,该文件存在。 ??3.访问时间点在判断之后,文件被删除,没有此文件。`
十二、条件竞争漏洞:
1.?二次渲染原理:
? ? 在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
2.?绕过:
1、配合文件包含漏洞: ??将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。 2、可以配合条件竞争: ??这里二次渲染的逻辑存在漏洞,先将文件上传,之后再判断,符合就保存,不符合删除,可利用条件竞争来进行爆破上传 ??点我进入条件竞争漏洞
3.?如何判断图片是否进行了二次处理?
??对比要上传图片与上传后的图片大小,使用16进制编辑器 打开图片查看上传后保留了哪些数据,查看那些数据被改变。
|