文件上传漏洞、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-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的主要方式,但并不是唯一途径。
漏洞利用的条件
- Web 服务器要开启文件上传功能,并且上传api(接口)对外"开放”(web 用户可以访问)
- Web 用户对目标目录具有可写权限,甚至具有执行权限,一般情况下,Web目录都有执行权限。
- 要想完美利用文件上传漏洞,就是上传的文件可以执行,也就是web容器可以解析我们上传的脚本,无论脚本以什么样的形式存在。
- 无视以上条件的情况就是服务器配置不当,开启了PUT方法。
PUT方法上传文件
HTTP 请求方法之一,允许向服务器直接写入文件
Apache 开启PUT方法:
测试Apache 是否开启了put方法
使用telnet进行测试:telnet ip port
,打开回显ctrl+]
,回车输入图片所示内容
Apache 开启put方法操作
- 打开httpd.conf文件
开启图中所示模块:
启用模块:
开启文件锁:
按照路径创建DavLock文件
重启Apache服务
- 打开httpd.conf文件
写入文件并查看
漏洞的防御、绕过和利用
文件上传的防御、文件上传的防御绕过还有利用,总是分不开的。为什么这么防?为什么这么攻击(防御绕过)?总是相互纠缠在一起的两个问题,攻防交替。所以,下文也是以这种方式讨论文件上传的问题。
黑白名单策略
黑白名单是最常用的安全策略之一。在计算机安全中,黑白名单类似于一个列表,列表中写了一些条件或规则,如果“客体"在黑名单中,一律“禁止”,如果“客体"在白名单中,一律“允许”。类似于手机号码的黑白名单。
如: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 |
application/pdf |
在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,文件内容如下
<?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容器解析漏洞、编辑器上传漏洞相关推荐
- php黑名单绕过,利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
我在代码审计知识星球里提到了Apache最新的一个解析漏洞(CVE-2017-15715): 除了帖子中说到的利用方法,我们还可以利用这个漏洞来绕过上传黑名单限制. 目标环境 比如,目标存在一个上传的 ...
- 经典Web容器解析漏洞
目录 Apache 文件名解析漏洞(info.php.x 绕过) IIS6.0解析漏洞 文件名解析漏洞(time.asp;1.jpg) 目录解析漏洞(1.asp/time.jpg)
- php黑名单绕过,文件上传漏洞之黑名单检测绕过
0x00 前言 文件上传是一个很常见的功能,文件上传漏洞也比较普遍,原理简单,造成的危害却很大,是一个入门级别的漏洞.这篇文章主要针对文件上传漏洞中的 黑名单检测绕过 这个点,结合upload-lab ...
- 文件上传后端黑名单白名单绕过
大家好! 我是小黄,很高兴又跟大家见面啦 ! 拒绝水文,从我做起 !!!! 未经允许,禁止转载 ,违者必究!!!! 本实验仅适用于学习和测试 ,严禁违法操作 ! ! ! 今天更新的是: 文件上传后端黑 ...
- php webshell原理,php webshell分析和绕过waf原理解析
本文讲述的是php webshell分析和绕过waf的原理解析,旨在服务社会,供安全研究人员学习使用,请勿用于其他非法用途,违者后果自负.WebShell是攻击者使用的恶意脚本,它的用途主要是在攻击后 ...
- 7z apache解析漏洞_解析漏洞(Web漏洞及防御)
概述 Web容器解析漏洞会将其他类型的文件当作脚本语言的文件进行解析! (由于Web容器自身的漏洞,导致一些特殊文件被 IIS.apache.nginx 或其他 Web服务器在某种情况下解释成脚本文件 ...
- [网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)
这是作者的系列网络安全自学教程,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了文件上传漏洞和IIS6.0解析漏洞,包括PHP345文件绕过上传.Win ...
- fckeditor漏洞_三十,文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御
一.编辑器漏洞 1.编辑器 编辑器属于第三方软件,它的作用是方便网站管理员上传或编辑网站上的内容,类似我们电脑上的Word文档. 编辑器通常分为两种情况: (1) 不需要后台验证,可以直接在前台访问且 ...
- 22.WEB漏洞-文件上传之内容逻辑数组绕过与解析漏洞
本文参考: https://www.cnblogs.com/zhengna/p/15624867.html 加上自己的实验笔记 知识点 文件头检测 图像文件信息判断 逻辑安全-二次渲染 逻辑安全-条件 ...
最新文章
- python list去掉引号_python的一些易忘知识点
- MyBatis 中的九种设计模式
- python 多线程入门试验
- nutsdb与mysql_分享下 nutsdb 单机 1 亿、10 亿数据实测
- Lucene 和 Elastic
- Ubuntu 8.04 Hardy LTS 软件源设置
- 编写高可用Eureka Server
- javascript 学习指南--语法
- JavaScript特效——让文字每秒钟进行变色
- HTML学生个人网站作业设计:动漫网站设计——哆啦A梦(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- deficit记忆_背单词:不要让“捷径”欺骗你的记忆
- 阿里云OSS服务开通STS安全令牌
- Filter 过滤器和 Listener 监听器,java面试必问底层
- 判断页面是否在微信或者企业微信环境下
- 如何使用OBS 进行屏幕录制
- java让线程空转_详解Java编程中对线程的中断处理
- 通信行业和互联网行业对比分析
- 从概念到现状,一文读懂边缘计算
- Visual Studio 6.0 安装失败 解决办法
- Python小白的数学建模课-01.新手必读
热门文章
- 在springboot项目中如何设计UrlFilter过滤器
- linux系统如何开启网页是否压缩,Windows或Linux下Apache开启GZIP压缩 | kTWO-个人博客...
- java设计一个查询模块_采用Java实现的汉语拼音查询模块
- Oracle分区表3种重建方法(基础原理、优点、类型、表分区总结)----(实战)
- 负载均衡的三种传输模式
- 玩转ERP:一句话介绍一下SAP CS模块
- yandex地图js学习
- webservice 实现json模式
- c0nima.exe,systemKb.sys,mppds.exe,c0nime.exe这些都是病毒产生的文件
- 360n6手机可以刷鸿蒙系统吗,360手机N6卡刷刷机教程_360手机N6升级更新官方系统包...