本文及其建议与我的另一个靶场笔记一同食用
必须知道文件上传到了那里,否则就没有这个漏洞,这是一切的根本
基础知识(必须了解)
1.什么是文件上传漏洞:
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至 是服务器。
2.文件上传漏洞有哪些危害:
网站被控制,对文件增删改查,执行命令,链接数据库
如果服务器长久未更新,可以利用各种手段提权,导致服务器沦陷
同服务器的其他网站沦陷(旁站)
3.存在文件上传漏洞的前提:
有上传文件的功能
且上传到的目录,能够解析脚本语言(否则,405)
能够访问到上传的文件
符合以上三点就有可能存在文件上传漏洞。
4.文件上传漏洞如何查找及判断:
黑盒:使用扫描工具扫描打开网站。
黑盒:测试会员中心,测试后台。
白盒:直接撸源代码。
5.文件上传漏洞有哪些需要注意的地方:
拿到漏洞后要对漏洞类型进行区分,编辑器、第三方应用、常规等。
区分漏洞类型
6.关于文件上传漏洞在实际应用中的说明:
上传后门脚本获取网站权限。
7.什么情况会导致存在文件上传漏洞
1)本地文件上传限制被绕过
前端javascript验证
2)服务端过滤不严格被绕过
MIME类型检测绕过(Content-type检测)
扩展名检测绕过
文件内容检测绕过
文件解析漏洞导致文件执行(iis, apache, nginx)
3)服务端目录路径检测绕过
文件路径截断(0x00)
4)服务器配置不当(iis6.0 put直接写文件)
5)开源编辑器上传漏洞(fckeditor 自定义文件名,文件夹结合iis6.0解析漏洞,杀伤力*****
ewebeditor :可以登录后台,配置允许上传的文件类型.asp)
测试思路
利用
具体可以看我靶场操作
目标:上传一句话木马:<?php eval($_POST['a'])?>
文件上传漏洞——绕过JS检测
客户端使用javascript对上传的文件做了限制,不允许上传以php结尾的文件。在本实验中,可以通过Burp拦截服务器响应包信息,修改限制条件,让.php为后缀的文件能够顺利上传。
1)上传一句话木马 eval.php,弹窗提示限制上传;
2)修改文件后缀为.jpg打开Burp开启拦截,点击上传文件,查看Burp中拦截到服务器的请求信息;
3)将Burp中拦截到的信息中.jpg格式修改为.php;
4)此时即可正常上传eval.php文件;
5)文件上传成功;
文件上传漏洞——绕过MIME类型检测
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。标准的文件上传组件中会自动上传文件的MIME类型,但是由于MIME类型是从客户端传递的,修改也不影响文件正常运行,因此通过BURP拦截和修改MIME类型可以轻易绕过此类检测。
常见的MIME类型:
超文本标记语言文本 .html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
ASP .asp application/x-asap
步骤
1)上传一句话木马 eval.php,提示文件类型不正确,请重新上传! ;
2)浏览器设置代理到BurpSuit,并开启拦截;
3)上传eval.php
4)在拦截的数据包中将application/octet-stream修改为image/jpeg;
文件上传漏洞——过滤不严格被绕过
有一些网站使用了黑名单过滤掉了一些关键的可执行脚本文件后 缀。但黑名单不全或者被绕过,比如服务端过滤掉了后缀为.php的 文件,但是没有过掉.php3等其他可执行的脚本文件后缀,攻击者 就可以上传其他的可执行的脚本文件后缀到服务器上。
比如:禁止了php, asp, jsp,但是没有禁止php3, asa, cer, cdx,jspx等等.
常用的一些可执行的文件脚本后缀:
・ php , php2 , php3 , php5 , phtml
・ asp , cer , asa , cdx
・ aspx , ascx , ashx
・ jsp , jspx
・py
文件上传漏洞——绕过黑名单检测
黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件扩展名,如:php、asp、aspx;
绕过方式:
1.使用大小写绕过(针对对大小写不敏感的系统如windows),如:PhP;
1)上传正常的php文件,无法上传;
2)将文件后缀.php修改为.Php;
3)上传.Php文件,上传成功;
2.不常见后缀绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、 ashx、 cer、 asa、 jsp、 jspx 、cdx)。
1)上传正常的php文件,无法上传;
2)将文件后缀.php修改为黑名单中不存在的后缀
3)文件上传成功;(上传成功了也不一定会执行,需要看服务器是否支持)
3.特殊文件名绕过(后缀加 . 或者空格)修改数据包里的文件名改为test. php.或者test. php (有空格)由于这种命名格式在windows系统里是不允许的。所以在绕过上传之后windows系统会自动去掉点和空格。Unix/Linux系统没有这个特性。
1)上传正常的php文件,无法上传;
2)将文件后缀.php修改为.php. 或者.php ;
3)文件,上传成功;
4.0x00截断绕过文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语 言函数中,处理
字符串的函数中0x00被认为是终止符。
例:
网站上传函数处理xxx. php%00. jpg时,首先后缀名是合法的jpg格式,可以 上传,在保存文件时
遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀 名为xxx. php
在可以控制文件路径的情况下,使用超长的文件路径也有可能会导致文件路径截断.(系统都有对文件名长度有限制)
1)上传正常的php文件,无法上传;
2)将文件后缀.php修改为.php.jpg上传,burp抓包16进制模式php后面添加00;
3)文件,上传成功;
php版本小于5.3.4
php的gpc功能关闭
5. .htaccess文件攻击
通过move_uploaded_file函数把自己写的.htaccess文件覆盖掉服务器上的这样就可以解析定义名单了。
.htaccess文件用处:
通过.htaccess文件调用php解释器去解析一个文件名中只要包含 “aa”这个字符串的任意文件,
无论你文件名是什么样子,只要包 含”aa”这个字符串,都可以被以php的方式来解析。
.htaccess文件内容:
<FilesMatch "aa" >
SetHandler application/x-httpd-php
</FilesMatch>
1)上传正常的php文件,无法上传;
2)将文件修改为文件名带aa的,后缀随便,例:aa123.txt;
3)文件,上传成功;
.htaccess文件内容: 利用sublime 写好一下内容,另存为.htaccess 文件名
<FilesMatch "aa" >
SetHandler application/x-httpd-php
</FilesMatch>
6.解析绕过
1)Apache解析漏洞
一个文件名为test. php. aaa. bbb. ccc的文件,Apache会从ccc的位置往 php的位置开始尝试解析,如果ccc不属于Apache能解析的后缀名,那么 Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的扩展名为止。
存在漏洞的版本: php版本小于5.6
配置文件 : AddType application/x-httpd-php .php 需要开启
创建文件名为: phpinfo.php.aaa.ccc 的文件 放到phpstudy 的 www目录下
2)IIS解析漏洞(一般配备IIS6.0的服务器为Windows server2003)
#1 IIS6.0
@1: 新建一文件名字为:任意文件名.asp;任意文件名.jpg 此文件会当成脚本运行
(1.asa;1.jpg,2.cdx;2.txt)
例子:@1: 新建一文件名字为:任意文件名.asp;任意文件名.jpg 此文件会当成脚本运行(如:aa.asa;1.jpg)
<% response.Write "登录成功"%>
@2: 新建一个文件夹,名字为任意文件名.asp ;
那么在这个文件夹里的内容全部会被当场脚本取运行。
@3:服务器配置错误(put 协议) 抓取请求包,发送到repeater模块 , 修改为PUT协议写入文件
@3:服务器配置错误(put 协议) 利用MOVE协议把上一步的文件tys.txt 移动重命名为 tys.asp, 移动时增加 Destination:http://192.168.3.95/tys.asp 内容为移动后内容
2)IIS解析漏洞
#2 IIS7.0,7.5
正常路径:uploads/1.jpg 把php文件修改后缀为jpg进行上传
黑客思路:uploads/1.jpg/任意文件名.php 访问方式
这个文件就会被当成脚本去执行。
条件是
a. cgi.fix_pathinfo=1
b. 取消仅当请求应设置以下内容时才调用处理程序设置(网站--》双击处理程序映射--》选择phpStudy_FastCGI--》右键编辑--》取消仅当请求应设置以下内容时才调用处理程序设置--》确定--》确定)
3)Nginx解析漏洞(与IIS第二种绕过方式差不多)
#1
正常路径:uploads/1.jpg
黑客思路:uploads/1.jpg/任意文件名.php
3)Nginx解析漏洞
#2 对低版本的Nginx可以在任意文件名后面添加%00.php进行解 析攻击。
•Nginx 0. 5. * Nginx 0. 6. *
•Nginx 0. 7 <= 0. 7. 65 Nginx 0. 8 <= 0. 8. 37
正常路径:uploads/1.jpg
黑客思路:uploads/1.jpg%00.php 当做正常脚本执行
#3
• Nginx 0.8. 41 〜1.4. 3 ; 1. 5 <= 1. 5. 7:
•在linux系统里,以上Nginx容器的版本下
正常路径:uploads/1.jpg
黑客思路:uploads/1.jpg%20%00.php 当做正常脚本执行7)利用::$DATA绕过
在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。
(1)上传正常的php文件,无法上传;
(2)将文件修改为文件名::$DATA
(3)文件,上传成功;
绕过方式:其他方式
某些情况下管理员错误的服务器配置会导致.html ; .xml等静态页面 后缀的文件也可被执行。
多文件上传时,有时服务器只对第一个上传的文件进行了检查,这 时通过上传多个文件并将
恶意文件掺杂进其中也可绕过服务器的过滤。
文件上传漏洞——绕过文件内容检测
上传文件内容检测:对上传的文件内容做检测,是否是一个符合的文件
1.文件幻数检测 jpg(JFIF) gif(GIF89a) png(%PNG)
2.文件相关信息检测(文件头加一些图片信息中间夹杂攻击代码)
3.文件加载检测(调用API或者函数进行文件加载测试 php的 gd库)
文件幻术检测绕过:
主要是检测文件内容开始处的文件幻数,比如图片类型的文件幻数如下:
要绕过jpg文件幻数检测就要在文件开头写上下图的值:
gif文件:GIF89a
png文件:%PNG
上传文件内容检测:对上传的文件内容做检测,是否是一个符合的文件
绕过方式:图片码绕过(必要时结合文件包含)
把代码文件和图片文件进行二进制编码合并形成新的图片,进行上传.
1)上传正常的php文件,无法上传;
2)将合并的文件进行上传;
3)文件,上传成功;
4) 结合文件包含漏洞实现
不常见的后端检测方式及绕过——图片二次渲染绕过
图片二次渲染:根据上传的图片重新生成一个新图片,内部结构会发送改变。
1)上传正常的php文件,无法上传;
2)将合并的图片码进行上传;
3)上传成功,但是图片中嵌入的代码消失;
4) 使用十六进制查看器分析上传前和上传后两张图片未被改变的部分。
5) 以十六方式方式写入代码,保存图片再次上传。
6) 结合文件包含漏洞实现
不常见的后端检测方式及绕过——条件竞争绕过
例如:当后端处理文件的时候是先进行保存上传的文件,然后再判断文件的后缀是否符合规定,不符合则删除。
条件竞争绕过:在文件删除前进行执行文件产生一个新文件。
实现方式:当我发送大量的包时,文件就会先进行保存,而判断可能会存在一定的延迟,此时上传一个php文件里面代码在创建一个包含一句话的php这样就算把上传的文件删除也会存在一个木马文件
1. 上传1.php,抓包,添加参数a=1,发送到intrude模块进行多线程,发送大量数据包
2. 浏览器访问1.php文件,抓包,添加参数a=1,发送到intrude模块进行多线程,发送大量数据包
3. 出现访问1.php文件状态码是200,表示创建shell.php文件成功。可以进行访问木马。
总结
路径/拓展名检绕过
黑名单绕过
1、文件名大小写绕过
2、黑名单列表绕过(cdx)
3、特殊文件名绕过
4、0x00截断绕过
5、.htaccess文件攻击
6、Apache解析漏洞
7、IIS解析漏洞
8、Nginx解析漏洞
9、多文件上传
10、管理员错误配置导致某些其他格式以脚本方式执行(IIS put)
白名单绕过
1、文件名后缀0x00截断绕过
2、PHP文件包含漏洞
3、IIS解析漏洞
4、Nginx解析漏洞
文件上传攻击防护
攻
1、查找上传点,图片,附件,头像等等
2、目录、文件扫描发现 类似upload.php等文件
3、目录、文件扫描 编辑器目录如ewebEditor、fckeditor、kingeditor
防
1. 上传文件的存储目录不给执行权限
2. 隐藏上传文件访问路径
3. 文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)
4. 不能有本地文件包含漏洞(include "dama. jpg")
5. 及时更新web应用软件避免解析漏洞攻击
pikachu靶场
client check
第一种方法
这是在前端通过js脚本对上传文件的后缀名进行验证,通过设置黑、白名单限制用户上传的文件类型
你只需要把你的webshell后缀改成图片格式上传,使用bp抓包,再将后缀更改为PHP等后缀,即可完成上传,再去上传路径中去访问即可完成
他的原理是用JS代码来判断你的文件后缀,会通过是图片后缀的文件,不是则不会进行上传
第二种方法
在火狐的about.config
中把JavaScript.enabled
设置为禁用则可以关闭JS验证
切记一切在前端做的安全措施都是不靠谱的
MIME
首先需要知道MIME type格式验证的是什么东西
MIME会判断你的文件类型,如果你上传的时候是一个图片文件
他会在下面有一行Content-Type: image/jpeg
来表示你上传的是图片格式的文件
我们则可以通过bp抓包,进行对文件后缀的修改,而不改变他的Content-Type: image/jpeg
,则MIME不会报错
pikachu靶场会给你一个文件保存地址方便你进行验证
你则需要访问问价地址就可以了http://127.0.0.1/pikachu/vul/unsafeupload/uploads/file.php
或者你可以将content_type
的值修改为image/jpeg
, 随后放包,而不更改你上传木马的后缀
getimagesize()
需要和文件引用(file include)做一个联动
getimagesize()
函数会通过读取文件头部的几个字符串(即文件头), 来判断是否为正常图片的头部
可通过制作图片木马或再木马文件内容头部添加 GIF89a
(Gif图片文件头), 然后利用文件包含漏洞来解析图片木马
我先建一个文件,里面写上我们的webshell<?php
phpinfo();
再把他的后缀改成文件上传所能接受的后缀上传上去,记好上传到了哪里(如果上传的目录不知道就没办法了)
再去文件包含漏洞中去进行包含文件,为什么可以这么做是因为,文件包含漏洞中的filename,是读取get传参中的所有内容
payloadhttp://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/file.jpg&submit=敕交敥询
使用蚁剑连接
注意,单纯的$_REQUEST[1];
无法连接上了,需要外面套eval
或 assert
等函数
URL地址 http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/file.jpg&submit=æ交æ¥è¯¢
密码 1
需要上传的文件
Views: 3