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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php mysql 删除语句怎么写_php mysql 删除语句是什么

php mysql删除语句是Delete&#xff0c;DELETE语句用于从数据库表中删除行&#xff0c;其语法是“DELETE FROM table_name WHERE some_column some_value”。PHP MySQL DeleteDELETE 语句用于从数据库表中删除行。删除数据库中的数据DELETE FROM 语句用于从数据库表中删除记录…

JS-几类函数

JS-几类函数 命名函数、匿名函数、自调用函数、回调函数&#xff1b;函数声明、函数表达式 函数声明 function foo() {}//函数声明&#xff1a;function functionName (){ } 对于函数声明&#xff0c;函数的名称是必须的 解析器在向执行环境中加载数据时&#xff0c;解析器会率…

PHP Warning: date() [function.date]解决方案

PHP Warning: date() [function.date]: It is not safe是什么问题在用PHP5.3以上的PHP版本时&#xff0c;只要是涉及时间的会报一个"PHP Warning: date() [function.date]: It is not safe to rely on the systems timezone settings. You are *required* to use the date…

mysql数据排序指令_MySQL 排序 | 菜鸟教程

MySQL 排序我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。如果我们需要对读取的数据进行排序&#xff0c;我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序&#xff0c;再返回搜索结果。语法以下是 SQL SELECT 语句使用 ORDER BY 子句将…

Total commander 之F3 图片

使用TC 一段时间了&#xff0c;用F3快速查看图片&#xff0c;总是打开二进制数据 开始一直懒&#xff0c;没有管&#xff0c;今天决定揪出懒虫 其实很简单&#xff0c;google几下就出来了 原来要下载个SGViewer 插件 另外还有个高级技巧&#xff0c;暂时没搞&#xff0c;先记在…

mysql配置环境变量(win 10)_mysql配置环境变量(win 10)

1、安装完mysql后就需要配置环境变量 (win 10)选择“我的电脑”&#xff0c;单击右键&#xff0c;选择“属性->高级->环境变量中的系统变量&#xff0c;对 MYSQL_HOME、Path 这 2 个系统变量分别设置如下相应的值(设置原则&#xff1a;如果存在相应的变量&#xff0c;直接…

017-通过govendor管理依赖包

1&#xff1a;安装 go get -u github.com/kardianos/govendor 2&#xff1a;配置环境变量 需要把 $GOPATH/bin/ 加到 PATH 中 D:\my_workspace\go_ws\bin 3&#xff1a;在$GOPATH/src目录下新建测试工程go_test,然后再此目录下新建src目录 4&#xff1a;在go_test目录执行&…

Difference between CGLIB JDK Dynamic Proxies

As we know, create proxy in runtime, we can use two different techniques, CGLIB or JDK dynamic proxies, whats different between them? when should we use CGLIB? and when should we use JDK proxies? here we have short view about it.JDK dynamic proxiseIf th…

mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare

sql server和mysql都是我们经常用到的数据库系统&#xff0c;下面就为您介绍sql server和mysql变量赋值的区别&#xff0c;希望对您能有所启迪。sql server中变量要先申明后赋值&#xff1a;局部变量用一个标识&#xff0c;全局变量用两个(常用的全局变量一般都是已经定义好的)…

《鸟哥的Linux基础》

硬件设备 LINUX历史 主机规划与磁盘分配 man , info 文件权限与目录配置 SUID: 二进制程序的执行者可以获取root的权限SGID: 目录或文件的执行者可以获取改程序群组的权限SBIT: 目录下创建的文件或目录只有创建者有权限删除r&#xff1a; 文件: 可读目录: 可获取文件列表w:…

[JavaScript]return false;和e.preventDefault();的区别

function() {return false; }// IS EQUAL TOfunction(e) {e.preventDefault();e.stopPropagation(); }参考&#xff1a; 1.The difference between ‘return false;’ and ‘e.preventDefault();’ 2.Event order

pythontuple([1、2、3)_Python 语句\nprint(tuple([1,2,3]))\n的运行结果是

在5%之的阶段化率城市发展间的阶段加速是城市化&#xff0c;语句运行表明展的各国共同规律化发城市世界。结果礼仪又叫距离距离私人。语句运行作高尔奠基会主义现义的基的是社实主。表述下列对此的是错误&#xff0c;号文年中出央一件提&#xff0c;品价重要制和制度革完格形农…

图解物联网pdf

下载地址&#xff1a;网盘下载 本书图例丰富&#xff0c;从设备、传感器及传输协议等构成IoT的技术要素讲起&#xff0c;逐步深入讲解如何灵活运用IoT。内容包括用于实现IoT的架构、传感器的种类及能从传感器获取的信息等&#xff0c;并介绍了传感设备原型设计必需的Arduino等平…

Silverlight实例教程 - Out of Browser的自定义应用

在上两篇教程中&#xff0c;讲述了Silverlight的Out of Browser理论知识和基础实践。本节将讲述如何创建自定义的Out of Browser应用以及如何调试Silverlight的Out of Browser应用。Silverlight Out of Browser的自定义化从Silverlight 4开始,OOB应用支持信任权限设置和窗口自定…

第二十四天

2018-07-22 今天就只能写昨天的内容了&#xff0c; 昨晚早上依旧还是我来到图书馆进行读书 你在宿舍里面 下午&#xff0c;我也待在宿舍看了一个下午的电影 中午&#xff0c;睡到了三点 最近的状态都是如此&#xff0c; 把时间浪费在睡觉上面 你本可以做你想要做的任何事情 可你…

python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能

怎么在Python3.5 中利用OpenCV实现一个手势识别功能发布时间&#xff1a;2020-12-22 11:56:32来源&#xff1a;亿速云阅读&#xff1a;67作者&#xff1a;Leah怎么在Python3.5 中利用OpenCV实现一个手势识别功能&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本…

上班玩手机被辞退

今天下班回来&#xff0c;看到脉脉上的一则信息&#xff0c;有一位同学从事IOS开发&#xff0c;但是因为公司没有项目做&#xff0c;然后就只能闲着没事干。公司想辞退这位同学&#xff0c;但是又想不出好的办法&#xff0c;因为他确实没有做什么违反纪律的事。然后猛生一记&am…

CSP 1.0 语言规范

为什么80%的码农都做不了架构师&#xff1f;>>> 点击在线查看wiki版本&#xff1a;CSP1.0语言规范 点击下载PDF版本&#xff1a;CSP1.0语言规范 转载于:https://my.oschina.net/akee/blog/6020

python进阶之装饰器之3如何利用装饰器强制函数上的类型检查

先占坑转载于:https://www.cnblogs.com/max520liuhu/p/9349358.html

有源蜂鸣器和无源蜂鸣器的区别_电磁式蜂鸣器和压电式蜂鸣器的区别以及驱动方法...

蜂鸣器是设计电子产品时比较常用的发声元器件&#xff0c;根据工作原理的不同&#xff0c;可以分为电磁式蜂鸣器和压电式蜂鸣器。在开发板、实验板上常用的蜂鸣器为电磁式蜂鸣器。这两者最大的区别在于工作原理。下面详细介绍其工作原理。1 电磁式蜂鸣器的工作原理电磁式蜂鸣器…