禅道11.6注入分析
(需要用户权限)
第一眼看到这种传参方式,我心里是懵逼的,利用到的文件都看不出来,所以先研究一下他的URL是怎么写的。
PS:使用禅道前要将本地的apache服务和mysql服务关闭,否则会发生冲突
PS:由于环境限制,没办法搭建调试环境,所以文章中若是有错误内容还请师傅们务必斧正!!!∑(゚Д゚ノ)ノ
URL地址格式分析
应用名为:pms,根路径为index.php路径的上级路径,应用类名为router。
这里最后返回了一个实例化的类,将app名字与根路径作为参数传入。由于这里创建了一个新对象,先去router类中看一下是否有__construct()函数,没有找到就去他的父类baseRouter里找,果然在baseRouter中发现了__construct()函数
(需要用户权限)
第一眼看到这种传参方式,我心里是懵逼的,利用到的文件都看不出来,所以先研究一下他的URL是怎么写的。
PS:使用禅道前要将本地的apache服务和mysql服务关闭,否则会发生冲突
PS:由于环境限制,没办法搭建调试环境,所以文章中若是有错误内容还请师傅们务必斧正!!!∑(゚Д゚ノ)ノ
URL地址格式分析
应用名为:pms,根路径为index.php路径的上级路径,应用类名为router。
这里最后返回了一个实例化的类,将app名字与根路径作为参数传入。由于这里创建了一个新对象,先去router类中看一下是否有__construct()函数,没有找到就去他的父类baseRouter里找,果然在baseRouter中发现了__construct()函数
Web 缓存纠缠:导致中毒的新途径
缓存遍布整个网络的网站,在用户之间谨慎地处理数据,但很少对其进行深入研究。在本文中,我将向您展示如何远程探测缓存的内部工作原理以发现细微的不一致之处,并将其与小工具结合起来构建宏伟的漏洞利用链。
这些缺陷遍及缓存的所有层面 - 从庞大的 CDN,到缓存 Web 服务器和框架,一直到片段级内部模板缓存。基于我之前的缓存中毒研究,我将展示如何利用误导性转换、幼稚的规范化和乐观的假设来执行大量攻击,包括持续毒害在线报纸的每一页、破坏国防部内部情报网站的管理界面以及在全球范围内禁用 Firefox 更新。
超越先前的研究
2018 年,我发表了《实用 Web 缓存投毒》一书,其中展示了如何使用非标准 HTTP 标头(例如X-Forwarded-Host和X-Original-URL)来投毒缓存并入侵网站。这是一种利用缓存设计缺陷的直接方法,因此对所有缓存的影响相同。
在本文中,我将针对几乎总是包含在缓存键中的两个请求组件 - Host 标头和请求行。如果将这些组件直接放入缓存键中,则不可能将它们用于缓存投毒。然而,仔细检查后,我们会发现这些值经常被解析、转换和规范化,从而引入了漏洞,我们可以利用这些漏洞。这些漏洞源于危险但故意为之的功能,一直到解析错误和简单的转义问题,这些问题让我们使完全不同的请求发生冲突。
缓存遍布整个网络的网站,在用户之间谨慎地处理数据,但很少对其进行深入研究。在本文中,我将向您展示如何远程探测缓存的内部工作原理以发现细微的不一致之处,并将其与小工具结合起来构建宏伟的漏洞利用链。
这些缺陷遍及缓存的所有层面 - 从庞大的 CDN,到缓存 Web 服务器和框架,一直到片段级内部模板缓存。基于我之前的缓存中毒研究,我将展示如何利用误导性转换、幼稚的规范化和乐观的假设来执行大量攻击,包括持续毒害在线报纸的每一页、破坏国防部内部情报网站的管理界面以及在全球范围内禁用 Firefox 更新。
超越先前的研究
2018 年,我发表了《实用 Web 缓存投毒》一书,其中展示了如何使用非标准 HTTP 标头(例如X-Forwarded-Host和X-Original-URL)来投毒缓存并入侵网站。这是一种利用缓存设计缺陷的直接方法,因此对所有缓存的影响相同。
在本文中,我将针对几乎总是包含在缓存键中的两个请求组件 - Host 标头和请求行。如果将这些组件直接放入缓存键中,则不可能将它们用于缓存投毒。然而,仔细检查后,我们会发现这些值经常被解析、转换和规范化,从而引入了漏洞,我们可以利用这些漏洞。这些漏洞源于危险但故意为之的功能,一直到解析错误和简单的转义问题,这些问题让我们使完全不同的请求发生冲突。
我们找到了一个名为FBSharedFramework的 Mach-O 64 位共享库二进制文件。我们将使用Hopper Disassembler打开该二进制文件,由于该文件较大,因此需要一些时间才能完全反汇编该二进制文件。
一个好的开始是使用应用程序上显示的警报错误进行搜索。因此,我们将尝试找到导致OpenSSL 证书验证错误的分支。
我们必须将b.ne(“不相等时分支”的缩写)指令反转为b.eq(“不相等时分支”的缩写)指令,前者当且仅当零标志清零时才会分支或“跳转”到指定的地址,后者当且仅当零标志清零时才会分支或“跳转”到指定的地址。因此,它不会进入导致 OpenSSL 证书验证错误的loc_1491b4分支,而是进入有效分支。
一个好的开始是使用应用程序上显示的警报错误进行搜索。因此,我们将尝试找到导致OpenSSL 证书验证错误的分支。
我们必须将b.ne(“不相等时分支”的缩写)指令反转为b.eq(“不相等时分支”的缩写)指令,前者当且仅当零标志清零时才会分支或“跳转”到指定的地址,后者当且仅当零标志清零时才会分支或“跳转”到指定的地址。因此,它不会进入导致 OpenSSL 证书验证错误的loc_1491b4分支,而是进入有效分支。
Weblogic 远程命令执行漏洞(CVE-2020-14645)分析
漏洞复现
漏洞利用 POC,以下的分析也是基于该 POC 进行分析
漏洞分析
了解过 JDNI 注入的都知道漏洞在 lookup() 触发,这里在 JdbcRowSetImpl.class 中 326 行 lookup() 函数处设置断点,以下为漏洞利用的简要调用链条
我们从头分析,我们都知道反序列化的根本是对象反序列化的时候,我们从 IO 流里面读出数据的时候再以这种规则把对象还原回来。我们在 in.readObject() 处打断点,跟进查看 PriorityQueue.readObject() 方法
漏洞复现
漏洞利用 POC,以下的分析也是基于该 POC 进行分析
漏洞分析
了解过 JDNI 注入的都知道漏洞在 lookup() 触发,这里在 JdbcRowSetImpl.class 中 326 行 lookup() 函数处设置断点,以下为漏洞利用的简要调用链条
我们从头分析,我们都知道反序列化的根本是对象反序列化的时候,我们从 IO 流里面读出数据的时候再以这种规则把对象还原回来。我们在 in.readObject() 处打断点,跟进查看 PriorityQueue.readObject() 方法
Merlin后渗透利用框架
为了更好的理解Merlin Agent远控木马的功能,我们先简单使用Merlin后渗透利用框架复现木马上线的过程:
● Merlin Server:运行后默认监听本地的50051端口
●Merlin CLI:运行后默认连接本地的50051端口(Merlin Server)
●Merlin CLI:使用命令开启HTTPS端口监听,默认443端口
●Merlin CLI:远程控制
为了更好的理解Merlin Agent远控木马的功能,我们先简单使用Merlin后渗透利用框架复现木马上线的过程:
● Merlin Server:运行后默认监听本地的50051端口
●Merlin CLI:运行后默认连接本地的50051端口(Merlin Server)
●Merlin CLI:使用命令开启HTTPS端口监听,默认443端口
●Merlin CLI:远程控制
golang字符串
通过分析,发现在IDA中可看到大量golang库字符串信息,导出函数,通过分析,发现样本存在多个导出函数,尝试查看说明文档及源代码,梳理导出函数信息
配置信息
通过分析,发现样本在进入main_run函数中执行代码时,将从自身样本中提取配置信息,配置信息中包含了内置外联地址、UserAgent、加解密算法等。
远控功能
通过分析,发现样本具备大量远控功能
通过分析,发现在IDA中可看到大量golang库字符串信息,导出函数,通过分析,发现样本存在多个导出函数,尝试查看说明文档及源代码,梳理导出函数信息
配置信息
通过分析,发现样本在进入main_run函数中执行代码时,将从自身样本中提取配置信息,配置信息中包含了内置外联地址、UserAgent、加解密算法等。
远控功能
通过分析,发现样本具备大量远控功能
自动化提取Merlin Agent样本配置信息
由于Merlin Agent样本是开源样本,因此,当我们对其进行样本分析时,只需要尝试提取此样本的特有行为即可。
结合前述分析,我们知道攻击者的自定义行为均存放于配置信息中。
由于此样本是由golang编译的,因此,逻辑上存放于样本中的字符串是无序的,我们可能需要采用上述提取配置信息的方法,基于IDA并定位函数再提取配置信息。
由于Merlin Agent样本是开源样本,因此,当我们对其进行样本分析时,只需要尝试提取此样本的特有行为即可。
结合前述分析,我们知道攻击者的自定义行为均存放于配置信息中。
由于此样本是由golang编译的,因此,逻辑上存放于样本中的字符串是无序的,我们可能需要采用上述提取配置信息的方法,基于IDA并定位函数再提取配置信息。