文章目录

  • 文件上传漏洞
    • 漏洞概述
    • 漏洞成因
    • 漏洞危害
    • WebShell
      • 大马
      • 小马
      • GetShell
    • 漏洞利用的条件
      • PUT方法上传文件
    • 漏洞的防御、绕过和利用
      • 黑白名单策略
    • 安装upload-labs
      • 前端限制与绕过
      • 服务器端检测---MIME类型
      • 服务端检测---文件内容
        • 制作图片木马
      • 服务端检测---后缀名
      • 00截断
      • .htaccess 攻击
        • 将.png文件当作PHP文件解析
        • 文件名中包含php关键字
        • 匹配文件名
    • Web容器解析漏洞
      • Apache 解析漏洞
      • IIS6.0 解析漏洞
      • PHP CGI解析漏洞
        • IIS7.0/7.5+PHP 环境
        • Nginx +PHP 环境(Nginx解析漏洞)
      • Nginx 文件名逻辑漏洞(CVE-2013-4547)
    • 常见编辑器上传漏洞
      • ewebeditor
      • fckeditor
    • 变量覆盖漏洞:原因是使用了$$定义变量

文件上传漏洞

漏洞概述

文件上传是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浏览器的黑白名单策略。

策略 说明
URLBlackList 1.禁止用户访问您已阻止的网址。不过,用户可以访问黑名单之外的所有网址。2.不设置此政策:用户将可以自由访问所有网址。
URLWhiteList 1.将此政策与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
.js application/x-javascript
.html text/html
.jpg image/jpeg
.png image/png
.pdf application/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:

这样就会造成变量覆盖的现象,而且参数是用户可控的!

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

  1. php黑名单绕过,利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

    我在代码审计知识星球里提到了Apache最新的一个解析漏洞(CVE-2017-15715): 除了帖子中说到的利用方法,我们还可以利用这个漏洞来绕过上传黑名单限制. 目标环境 比如,目标存在一个上传的 ...

  2. 经典Web容器解析漏洞

    目录 Apache 文件名解析漏洞(info.php.x 绕过) IIS6.0解析漏洞 文件名解析漏洞(time.asp;1.jpg) 目录解析漏洞(1.asp/time.jpg)

  3. php黑名单绕过,文件上传漏洞之黑名单检测绕过

    0x00 前言 文件上传是一个很常见的功能,文件上传漏洞也比较普遍,原理简单,造成的危害却很大,是一个入门级别的漏洞.这篇文章主要针对文件上传漏洞中的 黑名单检测绕过 这个点,结合upload-lab ...

  4. 文件上传后端黑名单白名单绕过

    大家好! 我是小黄,很高兴又跟大家见面啦 ! 拒绝水文,从我做起 !!!! 未经允许,禁止转载 ,违者必究!!!! 本实验仅适用于学习和测试 ,严禁违法操作 ! ! ! 今天更新的是: 文件上传后端黑 ...

  5. php webshell原理,php webshell分析和绕过waf原理解析

    本文讲述的是php webshell分析和绕过waf的原理解析,旨在服务社会,供安全研究人员学习使用,请勿用于其他非法用途,违者后果自负.WebShell是攻击者使用的恶意脚本,它的用途主要是在攻击后 ...

  6. 7z apache解析漏洞_解析漏洞(Web漏洞及防御)

    概述 Web容器解析漏洞会将其他类型的文件当作脚本语言的文件进行解析! (由于Web容器自身的漏洞,导致一些特殊文件被 IIS.apache.nginx 或其他 Web服务器在某种情况下解释成脚本文件 ...

  7. [网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)

    这是作者的系列网络安全自学教程,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了文件上传漏洞和IIS6.0解析漏洞,包括PHP345文件绕过上传.Win ...

  8. fckeditor漏洞_三十,文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御

    一.编辑器漏洞 1.编辑器 编辑器属于第三方软件,它的作用是方便网站管理员上传或编辑网站上的内容,类似我们电脑上的Word文档. 编辑器通常分为两种情况: (1) 不需要后台验证,可以直接在前台访问且 ...

  9. 22.WEB漏洞-文件上传之内容逻辑数组绕过与解析漏洞

    本文参考: https://www.cnblogs.com/zhengna/p/15624867.html 加上自己的实验笔记 知识点 文件头检测 图像文件信息判断 逻辑安全-二次渲染 逻辑安全-条件 ...

最新文章

  1. python list去掉引号_python的一些易忘知识点
  2. MyBatis 中的九种设计模式
  3. python 多线程入门试验
  4. nutsdb与mysql_分享下 nutsdb 单机 1 亿、10 亿数据实测
  5. Lucene 和 Elastic
  6. Ubuntu 8.04 Hardy LTS 软件源设置
  7. 编写高可用Eureka Server
  8. javascript 学习指南--语法
  9. JavaScript特效——让文字每秒钟进行变色
  10. HTML学生个人网站作业设计:动漫网站设计——哆啦A梦(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  11. deficit记忆_背单词:不要让“捷径”欺骗你的记忆
  12. 阿里云OSS服务开通STS安全令牌
  13. Filter 过滤器和 Listener 监听器,java面试必问底层
  14. 判断页面是否在微信或者企业微信环境下
  15. 如何使用OBS 进行屏幕录制
  16. java让线程空转_详解Java编程中对线程的中断处理
  17. 通信行业和互联网行业对比分析
  18. 从概念到现状,一文读懂边缘计算
  19. Visual Studio 6.0 安装失败 解决办法
  20. Python小白的数学建模课-01.新手必读

热门文章

  1. 在springboot项目中如何设计UrlFilter过滤器
  2. linux系统如何开启网页是否压缩,Windows或Linux下Apache开启GZIP压缩 | kTWO-个人博客...
  3. java设计一个查询模块_采用Java实现的汉语拼音查询模块
  4. Oracle分区表3种重建方法(基础原理、优点、类型、表分区总结)----(实战)
  5. 负载均衡的三种传输模式
  6. 玩转ERP:一句话介绍一下SAP CS模块
  7. yandex地图js学习
  8. webservice 实现json模式
  9. c0nima.exe,systemKb.sys,mppds.exe,c0nime.exe这些都是病毒产生的文件
  10. 360n6手机可以刷鸿蒙系统吗,360手机N6卡刷刷机教程_360手机N6升级更新官方系统包...