3. 中间件安全基础(三)

0x00 前言

前两篇文章我们对六款中间件的基本信息和相关的安全配置做了介绍,这篇文章我们主要就中间件常见的漏洞利用方式及修复方法做出讲解。如果某些地方存在疑问可以对比着前两篇文章阅读,更好地加深理解。

0x01 Apache

解析漏洞是指非程序文件被异常解析为程序文件的漏洞,利用这种漏洞可以绕过一些安全检测从而获取webshell,Apache和IIS的解析漏洞是较为经典的漏洞场景。

Apache

在Apache 1.x和Apache 2.x中存在解析漏洞,它的利用形式如图所示

可以看到图中访问的文件名为为test.php.xxx,正常情况下遇到一个未知的文件名应该是提示下载或者将文件显示出来,但是这里执行了php代码并显示出phpinfo函数的执行结果,这就是Apache解析漏洞。test.php.xxx的内容为:

<?php

phpinfo();

?>

Apache在解析文件时有一个原则:当碰到不认识的拓展名时,将会从后向前解析,直到碰到认识的拓展名为止,如果都不认识则会暴露其源码。那么Apache认识哪些文件名呢?在mime.type文件中有详细的拓展名列表

这个问题本质是一个配置问题,新版本的Apache默认情况下已经不存在这个漏洞,不过人为的修改配置文件依然可以引起解析错误,比如在Apache的配置文件httpd.conf中加入:AddHandler php5-script.php,就可以触发解析漏洞。

另外一种情况:如果在Apache中.htaccess可被应用(Apache的配置文件httpd.conf中对目录的AllowOverride设置为All时,apache会应用目录下.htaccess中的配置 By sfasfas),那可以尝试在.htaccess中写入:

<FilesMatch “shell.jpg”> SetHandler application/x-httpd-php </FilesMatch>

然后上传覆盖原有的.htaccess文件,再上传一个shell.jpg木马文件,这样shell.jpg就可解析为php文件。

IIS

IIS解析漏洞也算是一种比较久远的漏洞,在IIS5和IIS6下有下面这两种方式

目录解析:/xx.asp/xx.jpg

文件解析:xx.asp;.jpg

第一种,在网站下建立文件夹的名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。例如创建目录1.asp,那么/1.asp/mm.jpg将被当作asp文件来执行。假设攻击者可以控制上传路径名,那就可以以任意的后缀名上传文件然后获取shell了。

第二种,在IIS6.0下,分号后面的不被解析,也就是说xx.asp;.jpg会被服务器看成是xx.asp。IIS6.0 默认的可执行文件除了asp还包含这三种asa、cer、cdx。

在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文件路径/xx.jpg后面加上/xx.php会将 /xx.jpg/xx.php 解析为 php 文件。常用利用方法:将一张图和一个写入后门代码的文本文件合并,要使用二进制的写入方式,避免破坏图片文件头和尾,命令如下:

copy xx.jpg/b + yy.txt/a xy.jpg

0x02 逻辑漏洞

IIS写权限漏洞

这也是IIS的一个经典漏洞,他的本质是源于对服务器的WebDAV配置不当,现在IIS默认关闭了这个组件。

如果在IIS管理器开启了这个组件,就会允许直接将文件PUT到服务器上去,从而导致漏洞发生。

利用方式也比较简单,使用桂林老兵IIS写权限利用程序即可

提交数据包后会在服务端生成一个1.txt文件

但是这个txt并不会解析执行,需要再执行一次MOVE操作将txt文件修改为asp可执行文件

然后就可以访问shell

IIS短文件名漏洞

Windows下可以通过~表示短文件名,比如以某CMS生成的数据库备份文件为例

那么它就可以表示为很短的文件名

该短文件名有以下特征:只有前六位字符直接显示且相同,后续字符用~1指代,其中数字1还可以递增,后缀名最长只有3位,多余的被截断。同时在启用.net的IIS下暴力列举短文件名时有以下特性:访问构造的某个存在的短文件名,会返回404;访问构造的某个不存在的短文件名,会返回400。所以,利用这个特性,我们可以暴力破解网站文件。一旦爆破出了其文件名就可以直接访问直接访问

Tomcat 样例目录session操纵漏洞

Apache Tomcat默认安装包含”/examples”目录,里面存着众多的样例,其中session样例(/examples/servlets /servlet/SessionExample)允许用户对session进行操纵。因为session是全局通用的,所以用户可以通过操纵 session获取管理员权限。 示例如下,首先新建一个登陆表单login.jsp

再建一个后台模拟界面(用户登录才可进入)admin.jsp

然后是一个登录验证的代码login2.jsp

如果直接访问/examples/servlets/admin.jsp会跳转到login.jsp,因为没有登录无法访问

这个时候打开/examples/servlets/servlet/SessionExample

然后填入如下数据

提交后显示session已经写入

再次访问admin.jsp即可成功访问

0x03 Getshell

Tomcat后台获取webshell

Tomcat后台管理目录/manager/html中可以直接上传一个war文件(用于远程管理tomcat服务的脚本文件),来自动建立虚拟目录。

因此可以将jsp木马用打包后上传,这里要首先压缩为zip文件,然后将后缀改为war,上传后服务器自动解压,然后就可以访问虚拟目录下的木马。比如上传一个123.war的文件,上传到后台后自动生成一个同名文件夹

文件夹里既是之前的压缩的jsp木马访问即可

Weblogic后台获取webshell

Weblogic后台webshell也是通过部署war包获取的,其操作方法实质就是部署一个web项目,步骤如下。点击“部署”==>“安装”

然后上载文件,文件是一个包含webshell的war包

一直点击下一步,最后完成并在左上角激活更改,然后启动项目

然后shell即可访问

WebSphere后台获取webshell

WebSphere后台获取webshell实质也是部署web程序的过程,将shell.jsp打包到war包中,然后新建应用程序。

一直点击下一步直到安装完成,最后记得保存。

然后将新添加的weShell项目启动

然后访问shell即可

Jboss后台获取webshell

这里的后台指的是jmx-console,如果能够进入Jboss的jmx-console首先可以看到很多敏感信息,比如这些相关链接

进入最后一个链接可以看到服务器的敏感信息

jmx-console也是通过上传war包的形式获取webshell,但是这个上传有些不同。首先在jmx-console的首页找到如下链接

在页面中找到这么一个输入框

在输入框里输入war包的外网路径(需要将war包放到外网的服务器上),点击Invoke,addURL方法会将war下载到本地,然后在页面上方找到如下界面

点击Apply Changes后war包才会部署生效,然后就可以执行shell。

0x04 Java反序列化漏洞

漏洞简介

早在2015年的1月28号,国外研究人员Gabriel Lawrence 、Chris Frohoff 在AppSecCali上给出了一个报告,报告中介绍了Java反序列化漏洞可以利用Apache Commons Collections这个常用的Java库来实现任意代码执行,当时并没有引起太大的关注。后来FoxGlove Security安全团队的breenmachine 发布的一篇博客中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic、WebSphere、JBoss等这些大名鼎鼎的Java应用,实现远程代码执行,在文中博主直指这是2015年最被低估的漏洞。由于Apache Commons Collections这样的基础库有非常多的Java程序在使用,一旦编程人员误用了反序列化这一机制,使得用户输入可以直接被反序列化,就能导致任意代码执行,同时漏洞所造成的影响面也是非常广泛的。

漏洞分析

序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复的样例代码:

问题在于,如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。

在拿到一个Java应用时,需要找到一个接受外部输入的序列化对象的接收点,即反序列化漏洞的触发点。我们可以通过审计源码中对反序列化函数的调用(例如readObject())来寻找,也可以直接通过对应用交互流量进行抓包,查看流量中是否包含java序列化数据来判断,java序列化数据的特征为以标记(ac ed 00 05)开头。确定了反序列化输入点后,再考察应用的Class Path中是否包含Apache Commons Collections库(ysoserial所支持的其他库亦可),如果是,就可以使用ysoserial来生成反序列化的payload,指定库名和想要执行的命令即可:

java -jar ysoserial-0.0.2-SNAPSHOT-all.jar CommonsCollections1 ‘id >> /tmp/redrain‘ > payload.out

其中ysoserial是java反序列化工具,CommonsCollections1 是指定的库名(本例的漏洞就是由于Apache Commons Collections库造成的),whoami就是要执行的命令,生成的payload如图所示

然后通过先前找到的传入对象方式进行对象注入,数据中载入payload,触发受影响应用中ObjectInputStream的反序列化操作,随后通过反射调用Runtime.getRunTime.exec即可完成利用。

Weblogic

Weblogic曾多次被爆出反序列化漏洞,比如 CVE-2016-0638、CVE-2016-3510和CVE-2017-3248等。之所以频繁出现跟他的修复策略有关,Weblogic采用黑名单的方式过滤危险的反序列化类,只要发现可用并且未在黑名单之内的反序列化类,那么之前的防护就会被打破,系统就会遭受攻击。该漏洞影响WebLogic 10.3.6.0, 12.1.3.0,12.2.1.0, 12.2.1.1多个版本。利用程序如下(payload用上文提到的方法生成)

相应的自动化的检测和利用工具在网上已有公开,下图是利用本地搭建的环境进行的测试。

WebSphere

WebSphere的反序列化漏洞编号为CVE-2015-7450,漏洞文件为commons-collections.jar,对应端口为8880。默认情况下WebSphere会开启10个端口用于从不同接口上获取数据,在配置文件

IBM/WebSphere/AppServer/profiles/AppSrv01/properties/wsadmin.properties

中定义了8880端口的作用:用作SOAP协议的端口,用来交换特定的信息。

那么就可以使用如下payload检测,其中的base64编码是java序列化后的对象。

若返回如图所示的内容则证明存在漏洞

想要生成自定义的payload需要执行上文提到的ysoserial命令,最后对生成的数据进行base64编码然后将数据包中的payload替换即可。

Jboss

Jboss的Java反序列化漏洞与Weblogic和WebSphere基本是一致的,也是由于调用了存在漏洞的基础库Apache Commons Collections造成的,但是Jboss相对影响较小,因为要成功利用必须要找到程序接受外部输入的点,而此处的利用需要/invoker/jmx的支持,大部分情况下的实际场景,jboss都删除了jmx,所以让此处的利用大打折扣。在利用方式上与上文提到的WebSphere基本一致,都是直接发送一个序列化的数据包,不过不需要base64编码。漏洞利用时发送如下的报文即可,其中payload替换成自己生成的payload。

也有相对简单的图形界面工具

0x05 其他

Weblogic的SSRF漏洞的CVE编号为CVE-2014-4210,问题出现在UDDI功能上,用户可以在这个界面进行信息搜搜

其中operator参数可以传入一个内网URL于是造成了对内网信息探测或漏洞利用,如下图所示探测IP为10.108.40.45的主机的端口号80,并提示返回提示,说明相应内网主机开启了80端口。

原文地址:https://www.cnblogs.com/bmjoker/p/9332888.html

时间: 2024-10-10 00:30:31

3. 中间件安全基础(三)的相关文章

Django基础三之视图函数

Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

JS基础三

1.delete删除对对象的属性和方法的定义.强制解除对它的引用,将其设置为 undefined delete 运算符不能删除开发者未定义的属性和方法. 2.void 运算符对任何值返回 undefined.该运算符通常用于避免输出不应该输出的值,没有返回值的函数真正返回的都是 undefined. 3.前增量运算符,就是数值上加 1,形式是在变量前放两个加号(++): var iNum = 10; ++iNum; 第二行代码把 iNum 增加到了 11,它实质上等价于: var iNum =

SQL基础三(例子)

-------------------对分组统计的结果进一步筛选(having子句使用)------------------------------ select * from student2010 --1.查询qypt08class表中各院系的人数,只显示人数多于400的记录 select yx,sum(rs) from qypt08class group by yx having sum(rs)>400 --2.统计stucou表中各门课程的选修人数,只显示人数少于30的记录(显示coun

Object Pascal 语法之语言基础(三)

1.6 Object Pascal 的运算符 运算符是程序代码中对各种类型的数据进行计算的符号,通常分为算数运算符.逻辑运算符.比较运算符和按位运算符. 1.算术运算符Object Pascal 语言的算术运算符,如表1-9 所示.表1-9 Object Pascal 语言算术运算符 操作符 操作 操作数据类型 结果类型 + 加 整型.实型 整型.实型 - 减 整型.实型 整型.实型 * 乘 整型.实型 整型.实型 / 除 整型.实型 整型.实型 mod 取余 整型 整型 div 整除 整型 整

色彩及图像基础(三)

色彩及图像基础(三) 学习时间:2014.04.30 学到了-- 1. 图像压缩的基础在于: ①原始图像信息存在着很大的冗余度: ②人眼对图像的亮度信息敏感.对颜色分辨率弱. 2. 数据压缩的两类基本方法: ①无损压缩:将相同的或相似的数据或数据特征归类,使用较少的数据量描述原始数据,达到减少数据量的目的. ②有损压缩:利用人眼的视觉特性有针对性地简化不重要的数据,以减少总的数据量. 3. 图像的编码方法:行程编码.增量调制编码和霍夫曼编码. 行程编码: 1. RLE(Run-Length En

【蓝鸥Unity开发基础三】课时3 Terrain地形系统【未完】

[蓝鸥Unity开发基础三]课时3  Terrain地形系统[未完] 推荐视频讲师博客:http://11165165.blog.51cto.com/ 一.Terrain地形系统 Terrain地形系统 资源包的导入 场景漫游 立方体是:长宽高1m 二.Terrain地形系统 1.Terrain组件:提升地形/沉降地形工具 点击左键-- 提升地形 点击左键+Shift--沉降地形 选择笔刷的形状.笔刷的大小,笔刷的硬度--绘制地形 2.Terrain:平坦地形工具:设置地形目标高度 平滑地形工具

【蓝鸥Unity开发基础三】课时2 游戏对象和基本操作

[蓝鸥Unity开发基础三]课时2 游戏对象和基本操作 一.首先,让我们先看一下下面的图片--金字塔架构 推荐视频讲师博客:http://11165165.blog.51cto.com/ 一个游戏有多个场景组成, 场景是由多个游戏对象组成, 每一个游戏对象身上由多个组件组成的, 每个组件都是为了完成某个特定的功能! 二.创建一个游戏环境--01 1.快捷键--CTRL+S 2.创建的环境会在视图中显示 3.在Create视图中邮件--选3D Object 4.创建一个--Plane 5.创建一个

将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程

授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限. 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限等等. 一.用户权限模型 为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示. 用户信息用 LoginAccount 表示,最简单的用户信息可能只包含用户名 loginName 及密码 password 两个属性.实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息. 用户权限信息用 Role 与 Per