一些细节的坑点就不展开说了,总之就是各种反射各种 try/catch,我尽了最大的努力来提高其对各种 Tomcat 环境的兼容性,文章最后会将这个成果分享给大家。有了这个比较好用的回显 payload,搭配 K1/K2 来触发反序列化流程,就打造成了 xray 高级版/商业版中 Shiro 反序列化回显检测的核心逻辑,回显效果如下
使用 xray 扫到过 xss 的同学应该都有所体会,xray 扫到的 xss 漏洞不一定可以直接弹框,但相关参数一定存在可控的代码注入,经常会遇到网站存在 waf 但 xray 依然可以识别出 xss 的情况。纵观整个 Shiro 反序列化的流程,步步都是在针尖上跳舞,一步出错便前功尽弃。倘若目标站点部署了 RASP 等主机防护手段,很有可能导致反序列化中断而与 RCE 擦肩而过,有没有什么办法能够像 xss 一样大幅的提高其检测能力的下限呢?和 l1nk3r 师傅交流了一下,他提到一种检测 Shiro Key 的方法很不错,据说原理来自 shiro_tool.jar ,详情可以参考这篇文章一种另类的 shiro 检测方式 ,我这里简单复述一下结论
使用 xray 扫到过 xss 的同学应该都有所体会,xray 扫到的 xss 漏洞不一定可以直接弹框,但相关参数一定存在可控的代码注入,经常会遇到网站存在 waf 但 xray 依然可以识别出 xss 的情况。纵观整个 Shiro 反序列化的流程,步步都是在针尖上跳舞,一步出错便前功尽弃。倘若目标站点部署了 RASP 等主机防护手段,很有可能导致反序列化中断而与 RCE 擦肩而过,有没有什么办法能够像 xss 一样大幅的提高其检测能力的下限呢?和 l1nk3r 师傅交流了一下,他提到一种检测 Shiro Key 的方法很不错,据说原理来自 shiro_tool.jar ,详情可以参考这篇文章一种另类的 shiro 检测方式 ,我这里简单复述一下结论
案例研究
让我们看看将这种方法应用于真实网站时会发生什么。在本节中,我将探讨一系列缓存密钥处理漏洞,这些漏洞来源于有漏洞赏金计划的网站,并分享一些可以与之结合的小工具。
无键查询检测
最常见的缓存键转换是从键中排除整个查询字符串。我确信有些人在我之前就已经认识到并利用了这种行为,但它肯定没有得到充分重视。与直觉相反,它也很难被发现,因为它将动态页面伪装成静态页面。您可以通过更改参数的值并观察响应中的某种差异来轻松识别大多数动态页面
让我们看看将这种方法应用于真实网站时会发生什么。在本节中,我将探讨一系列缓存密钥处理漏洞,这些漏洞来源于有漏洞赏金计划的网站,并分享一些可以与之结合的小工具。
无键查询检测
最常见的缓存键转换是从键中排除整个查询字符串。我确信有些人在我之前就已经认识到并利用了这种行为,但它肯定没有得到充分重视。与直觉相反,它也很难被发现,因为它将动态页面伪装成静态页面。您可以通过更改参数的值并观察响应中的某种差异来轻松识别大多数动态页面
WebLogic coherence UniversalExtractor 反序列化 (CVE-2020-14645) 漏洞分析
该漏洞是针对于CVE-2020-2883的补丁绕过,CVE-2020-2883补丁将MvelExtractor和ReflectionExtractor列入黑名单,因此需要另外寻找一个存在extract且方法内存在恶意操作的类,这里用到的类为com.tangosol.util.extractor.UniversalExtractor,存在于Coherence组件。
其本质上,都是通过ReflectionExtractor调用任意方法,从而实现调用Runtime对象的exec方法执行任意命令,但补丁现在已经将ReflectionExtractor列入黑名单,那么只能使用UniversalExtractor重新构造一条利用链,这里使用poc2的入口即CommonsCollections4链的入口进行构造。
该漏洞是针对于CVE-2020-2883的补丁绕过,CVE-2020-2883补丁将MvelExtractor和ReflectionExtractor列入黑名单,因此需要另外寻找一个存在extract且方法内存在恶意操作的类,这里用到的类为com.tangosol.util.extractor.UniversalExtractor,存在于Coherence组件。
其本质上,都是通过ReflectionExtractor调用任意方法,从而实现调用Runtime对象的exec方法执行任意命令,但补丁现在已经将ReflectionExtractor列入黑名单,那么只能使用UniversalExtractor重新构造一条利用链,这里使用poc2的入口即CommonsCollections4链的入口进行构造。
是在PriorityQueue的构造函数中被赋值的,并且这里可以看到,queue对象数组也是在这里被初始化的。那么结合上述所分析的点,我们需要构造一个长度为2的queue对象数组,才能触发排序,进入siftDown()方法。同时还要选择一个comparator,这里选用ExtractorComparator。继续跟进ExtractorComparator.compare()方法
各种 Linux 权限提升技术,例如内核和服务漏洞、理解 SUID、管理计划任务和导航密码发现。
这些技术和工具,从利用错误配置的 sudo 权限到利用易受攻击的服务,都是渗透测试人员工具包的重要组成部分。您已经学会了如何通过手动方法和自动化工具进行枚举。
一个以明文形式存储的用户名“root”和密码“john@123”。让我们看看是否可以使用找到的密码切换到 sickos 用户。有时密码会在多个服务中重复使用。
将 www-data 用户提升为 sickos 用户。与往常一样,让我们使用该sudo -l 命令检查我们是否有任何 sudo 权限。
以 root 用户身份运行所有命令,因此我们运行sudo su。现在有一个 root shell。
这些技术和工具,从利用错误配置的 sudo 权限到利用易受攻击的服务,都是渗透测试人员工具包的重要组成部分。您已经学会了如何通过手动方法和自动化工具进行枚举。
一个以明文形式存储的用户名“root”和密码“john@123”。让我们看看是否可以使用找到的密码切换到 sickos 用户。有时密码会在多个服务中重复使用。
将 www-data 用户提升为 sickos 用户。与往常一样,让我们使用该sudo -l 命令检查我们是否有任何 sudo 权限。
以 root 用户身份运行所有命令,因此我们运行sudo su。现在有一个 root shell。
查找密码
Linux 特权升级,成为 root 用户的最简单方法之一就是找到密码。这可以提供获得系统访问权限的直接途径。攻击者可能会使用多种方法来查找系统上的密码。
Linux 用户可能会以纯文本形式存储他们的密码;如果这些文件没有得到妥善保护,会访问用户的帐户。
一旦找到密码,就可以使用它来登录到更高权限的帐户或使用它与 sudo 一起以提升的权限运行命令,从而提升权限。
使用VulnHub 的SickOS VM来看一下它是如何工作的 。一旦我们在机器上拥有 shell,就可以搜索密码。可以做的第一件事是查看并使用该 cat /etc/passwd命令查看系统上的其他用户。
另一个名为 sickos 的用户。下一步是搜索以纯文本形式存储的密码。我们可以使用以下命令搜索包含字符串“pass”的 PHP 文件。
find / -maxdepth 4 -name *.php -type f 2>/dev/null | xargs grep -C 3 -i pass
Linux 特权升级,成为 root 用户的最简单方法之一就是找到密码。这可以提供获得系统访问权限的直接途径。攻击者可能会使用多种方法来查找系统上的密码。
Linux 用户可能会以纯文本形式存储他们的密码;如果这些文件没有得到妥善保护,会访问用户的帐户。
一旦找到密码,就可以使用它来登录到更高权限的帐户或使用它与 sudo 一起以提升的权限运行命令,从而提升权限。
使用VulnHub 的SickOS VM来看一下它是如何工作的 。一旦我们在机器上拥有 shell,就可以搜索密码。可以做的第一件事是查看并使用该 cat /etc/passwd命令查看系统上的其他用户。
另一个名为 sickos 的用户。下一步是搜索以纯文本形式存储的密码。我们可以使用以下命令搜索包含字符串“pass”的 PHP 文件。
find / -maxdepth 4 -name *.php -type f 2>/dev/null | xargs grep -C 3 -i pass
使用以下命令运行 pspy:
./pspy64
让 pspy 运行几分钟后,看到一个名为 ftpclient.py 的进程定期运行
查一下这个文件,看看是否可以以某种方式在其上附加一些代码来生成反向 root shell。
没有 ftpclient.py 文件的写入权限,但我们注意到该文件正在导入“ftplib”。也许我们可以将其写入该文件
./pspy64
让 pspy 运行几分钟后,看到一个名为 ftpclient.py 的进程定期运行
查一下这个文件,看看是否可以以某种方式在其上附加一些代码来生成反向 root shell。
没有 ftpclient.py 文件的写入权限,但我们注意到该文件正在导入“ftplib”。也许我们可以将其写入该文件
Sudo 权限
Linux 系统中,sudo 代表“超级用户执行”。该命令允许普通用户以超级用户 (root) 的安全权限运行某些命令。sudo 的主要目的是将 root 权限限制在真正需要时。
可以利用 sudo 规则,该规则允许提升的权限运行某些命令,例如 cat、find 或 python,然后我们可以操纵这些命令来运行任意命令。
使用VulnHub 中的Raven VM进行 shell 转义来利用 sudo 权限 。
通过 SSH 获得 shell 后,可以进行一些枚举来查看拥有哪些权限。
用sudo -l 命令检查我们的 sudo 权限。
从上面的截图中可以看到,用 sudo 权限运行 Python,而无需提供密码。利用这一点来获取 root shell
GTFOBins 是一份精选的 Unix 二进制文件列表,我们可以使用它来绕过本地安全限制。我们可以查看此资源,以了解可以使用 Python 运行哪些命令来成为 root。
Linux 系统中,sudo 代表“超级用户执行”。该命令允许普通用户以超级用户 (root) 的安全权限运行某些命令。sudo 的主要目的是将 root 权限限制在真正需要时。
可以利用 sudo 规则,该规则允许提升的权限运行某些命令,例如 cat、find 或 python,然后我们可以操纵这些命令来运行任意命令。
使用VulnHub 中的Raven VM进行 shell 转义来利用 sudo 权限 。
通过 SSH 获得 shell 后,可以进行一些枚举来查看拥有哪些权限。
用sudo -l 命令检查我们的 sudo 权限。
从上面的截图中可以看到,用 sudo 权限运行 Python,而无需提供密码。利用这一点来获取 root shell
GTFOBins 是一份精选的 Unix 二进制文件列表,我们可以使用它来绕过本地安全限制。我们可以查看此资源,以了解可以使用 Python 运行哪些命令来成为 root。
此处不难理解,如果aoParam不为null且数组长度大于0就会返回null,因此我们调用的方法必须是无参的(因为aoParam必须为null)。接着如果方法名sName不以 () 结尾,则会直接返回方法名。否则会判断方法名是否以 VALUE_EXTRACTOR_BEAN_ACCESSOR_PREFIXES数组中的前缀开头,是的话就会截取掉并返回
Moodle DOM 存储型 XSS 到 RCE
到底 Moodle 是什么?
Moodle 是一个学习平台或课程管理系统 (CMS) - 一个免费的开源软件包,旨在帮助教育工作者根据合理的教学原则创建有效的在线课程。您可以在任何可用的计算机(包括网络主机)上下载和使用它,但它可以从一个教师站点扩展到一个拥有 200,000 名学生的大学。Moodle 拥有庞大而多样化的用户社区,全球注册的站点超过 100,000 个,使用每个国家/地区的 140 多种语言。- Moodle.org
由于当前的 COVID-19,许多大学开始使用 Moodle 来支持他们的电子学习,并向在家学习的学生提供教育内容。我们看到几所伊拉克大学开始使用该平台,这给了我们动力,开始寻找有趣的东西。由于其他黑客可能会利用缺乏监控的机会,在这段时间开始攻击学生和大学,因此,尽自己的一份力量来支持世界度过难关是我们的道德职责之一。看看平台统计数据。
现在我们在系统中有一个存储的XSS!我们可以诱骗管理员访问我们的个人资料并获取XSS!
然而,单调的警告框还不足以满足这次冒险的需要。我们想将其提升到一个新的高度。
从XSS到RCE:超越警告框
由于我们有一个存储的 DOM XSS,因此我们可以窃取 cookie,但Moodle中有一个使用HTTPonly cookie 的选项,因此我们无法获取管理员 cookie。此外,大学将路径 /admin 设置为仅将 IP 地址列入白名单。我们现在要做什么?
在浏览网页时,我发现这个攻击媒介需要管理员用户帐户来执行 PHP 命令并在Moodle实例上上传 shell,所以我们可以创建 CSRF 来执行此操作,对吗?
要上传Moodle插件,它必须符合规则,我们会花一点时间才能进入。
上传插件之前需要经过多个阶段,因此它不是一个简单的 CSRF 页面。我们需要创建一个文件上传 CSRF,并在上传 CSRF 之后执行 2 个步骤来执行我们的 shell。
到底 Moodle 是什么?
Moodle 是一个学习平台或课程管理系统 (CMS) - 一个免费的开源软件包,旨在帮助教育工作者根据合理的教学原则创建有效的在线课程。您可以在任何可用的计算机(包括网络主机)上下载和使用它,但它可以从一个教师站点扩展到一个拥有 200,000 名学生的大学。Moodle 拥有庞大而多样化的用户社区,全球注册的站点超过 100,000 个,使用每个国家/地区的 140 多种语言。- Moodle.org
由于当前的 COVID-19,许多大学开始使用 Moodle 来支持他们的电子学习,并向在家学习的学生提供教育内容。我们看到几所伊拉克大学开始使用该平台,这给了我们动力,开始寻找有趣的东西。由于其他黑客可能会利用缺乏监控的机会,在这段时间开始攻击学生和大学,因此,尽自己的一份力量来支持世界度过难关是我们的道德职责之一。看看平台统计数据。
现在我们在系统中有一个存储的XSS!我们可以诱骗管理员访问我们的个人资料并获取XSS!
然而,单调的警告框还不足以满足这次冒险的需要。我们想将其提升到一个新的高度。
从XSS到RCE:超越警告框
由于我们有一个存储的 DOM XSS,因此我们可以窃取 cookie,但Moodle中有一个使用HTTPonly cookie 的选项,因此我们无法获取管理员 cookie。此外,大学将路径 /admin 设置为仅将 IP 地址列入白名单。我们现在要做什么?
在浏览网页时,我发现这个攻击媒介需要管理员用户帐户来执行 PHP 命令并在Moodle实例上上传 shell,所以我们可以创建 CSRF 来执行此操作,对吗?
要上传Moodle插件,它必须符合规则,我们会花一点时间才能进入。
上传插件之前需要经过多个阶段,因此它不是一个简单的 CSRF 页面。我们需要创建一个文件上传 CSRF,并在上传 CSRF 之后执行 2 个步骤来执行我们的 shell。