本文及其建议与我的另一个靶场笔记一同食用

必须知道文件上传到了那里,否则就没有这个漏洞,这是一切的根本

基础知识(必须了解)

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];无法连接上了,需要外面套evalassert 等函数

URL地址 http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/file.jpg&submit=提交查询

密码 1

需要上传的文件

Views: 3

邮箱:zzpqwetvg@gmail.com
最后更新于 2023-10-21