700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 文件上传漏洞 WebShell 防御及绕过利用 Web容器解析漏洞 编辑器上传漏洞

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

时间:2018-11-01 02:59:51

相关推荐

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

文章目录

文件上传漏洞漏洞概述漏洞成因漏洞危害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--4547)常见编辑器上传漏洞ewebeditorfckeditor变量覆盖漏洞:原因是使用了$$定义变量

文件上传漏洞

漏洞概述

文件上传是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")%>

<%@ Page Language="Jscript"%> <%eval(Request.Item["cmd"],"unsafe");%>

PHP:<?php @eval($_REQUEST["cmd"])?>

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

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

文件管理

虚拟终端

数据库管理

首先得连接数据库

然后就可以执行SQL语句 ,管理数据库了

GetShell

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

漏洞利用的条件

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

PUT方法上传文件

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

Apache 开启PUT方法:

测试Apache 是否开启了put方法

使用telnet进行测试:telnet ip port,打开回显ctrl+],回车输入图片所示内容

Apache 开启put方法操作

打开httpd.conf文件

开启图中所示模块:

启用模块:

开启文件锁:

按照路径创建DavLock文件

重启Apache服务

写入文件并查看

漏洞的防御、绕过和利用

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

黑白名单策略

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

如:Chrome浏览器的黑白名单策略。

安装upload-labs

github项目地址:/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类型(根据浏览器不同会变)如下:

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

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

方法:上传php文件,使用BP抓包,更改Content-Type类型

上传成功

由于服务器在检测Content-Type类型的时候,取得的变量来自于用户,所以可以用Burp抓包,修改这个字段,使其合法,即可绕过限制上传任意文件。

服务端检测—文件内容

除了检测上传文件的Content-Type类型,为了保持安全性,服务器端还会检测文件内容。

PHP中有一个函数getimagesize(),这个函数本意是检查图片的大小,但是在检查之前,该函数会判断目标文件是否是一张图片。因此,可以用该函数来检测文件的内容。

Pass14为例:

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

制作图片木马

文件幻术

所有各类图片文件的头部都是相同的,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

上传,成功:

使用文件包含漏洞打开我们上传的文件:

点击文件包含漏洞会跳转到含有这个漏洞的页面,我们就在这里进行测试我们上传的图片木马

传入参数:注意文件路径

命令行方法:通过命令将图片和木马文件合二为一

上传,成功:成功之后会自动重命名

注意:这里我把它合并为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,文件内容如下

<?phpphpinfo();?>

当我们访问该文件时,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 解析漏洞

win里的版本就是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 环境

搭建环境 :win+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--4547)

使用vulhub一键搭建环境:

然后访问:http://your-ip:8080/,发现一个上传页面

这个环境是黑名单验证,无法上传.php文件,我们上传文件时使用BP抓包

我们更改后缀名为.png+空格,进行上传:

上传成功之后复制url进入repeater模块:

在请求路径后面加上空格..php

打开十六进制模块,将第一个点改为00进行截断

然后转发,进入render模块发现解析成功

常见编辑器上传漏洞

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

ewebeditor

先安装环境:

源码之家/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:

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。