惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
H
Heimdal Security Blog
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
Webroot Blog
Webroot Blog
小众软件
小众软件
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Cloudbric
Cloudbric
AI
AI
WordPress大学
WordPress大学
博客园 - 聂微东
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
博客园 - Franky
V
V2EX
Schneier on Security
Schneier on Security
G
GRAHAM CLULEY
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
H
Help Net Security
量子位
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recorded Future
Recorded Future
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
C
Cisco Blogs
S
Security Affairs

SumSec's Blog

AI Agent 工程的必然演进:CLI、Skills、Harne… 从安全角度谈Java反射机制--前章 · SUMSEC 从安全角度谈Java反射机制--终章 · SUMSEC 逆向学习fastjson反序列化始 · SUMSEC 2020年研究回顾总结 · SUMSEC Abstract syntax tree classes for … Analyzing data flow in Java · SUM… Annotations in Java · SUMSEC Basic query for Java code · SUMSEC BypassSuper使用介绍说明 · SUMSEC CodeQL Create OpenJdk/Jdk8 Databa… CodeQL library for Java · SUMSEC Navigating the call graph · SUMSEC Overflow-prone comparisons in Jav… Types in Java · SUMSEC Working with source locations · S… Aliases · SUMSEC Expression · SUMSEC Formulas · SUMSEC Javadoc · SUMSEC Modules · SUMSEC Predicates · SUMSEC Queries · SUMSEC Type · SUMSEC Variables · SUMSEC 一道shiro反序列化题目引发的思考 · SUMSEC 修改ysoserial使其支持任意代码执行 · SUMSEC 自定义 ClassLoader 隔离运行不同版本jar包的方式 ·… 2020网鼎杯---Java文件上传wp · SUMSEC CNVD-2020-10487(CVE-2020-1938)tom… JDSRC安全课笔记 · SUMSEC Java反序列化链回显解决方案 · SUMSEC Skipped breakpoint because it hap… Windows Terminal 配置文件 · SUMSEC bypass 学习笔记之绕安全狗bypass safedog · … 一次意外的代码审计----JfinalCMS审计 · SUMSEC 一篇文章读懂Java代码审计之XXE · SUMSEC 从安全角度谈Java反射机制--序章 · SUMSEC 小楼昨夜又春风,你知ysoserial-Gadget-URLDNS… 春眠不觉晓,RCE知多少? · SUMSEC 漫谈Commons-Collections反序列化 · SUMSEC 漫谈Java反序列化 · SUMSEC 白头搔更短,SSTI惹人心! · SUMSEC 记一次面试题 · SUMSEC About Me 关于我 · SUMSEC Apache Flink任意Jar包上传导致远程代码执行 · SU… CVE-2019-1388 UAC提权复现 · SUMSEC CVE-2019-16097 || Harbor任意管理员注册漏洞… Python加密shellcode免杀 · SUMSEC Telegram机器人作为渗透测试框架 · SUMSEC VM虚拟机无法安装vmtools解决|本程序需要您将此虚拟机上安装… 谁能想到,电视遥控器竟成了 Vibe Coding 神器 · SU… 从手改 Skill 到自动进化:评测结果和执行轨迹如何让 Agen… 模型人人都能用,什么才是你能带走的?我的答案是一个可进化的SKIL… 模型人人都能用,什么才是你能带走的?我的答案是一个可进化的Skil… AI 时代 ShiroAttack2 5.x:修改了什么 · SU… 在 AGI 降临前,先给 AI 开一条”脑内弹幕”通道 · SUM… 一篇博文,三种时间:网页幻灯与 Remotion 动效的交付逻辑 … 🔍 别让大模型”想太多”:SKILL开发中的语义陷阱与抗幻觉设计 … 2022 年年度总结 · SUMSEC Java Swing To RCE 漏洞分析 · SUMSEC SpringBoot GatewayEL表达式漏洞分析 · SUM… Sensitive keys in codebases · SUM… 论如何优雅注入 Java 内存马 · SUMSEC SUMSEC 知识点 · SUMSEC VMWare Workspace ONE Access Auth … Spring Framework RCE CVE-2022-229… 相似度算法调研 · SUMSEC CVE-2022-33891 Apache Spark shell… 正则匹配配置不当 · SUMSEC Spring Data MongoDB SpEL CVE-2022… CodeQl Usage Tricks · SUMSEC Spring Boot RCE到内存马探索 · SUMSEC Shiro后渗透拓展面 · SUMSEC shiro反序列化漏洞攻击拓展面–修改key · SUMSEC GitHub Java CodeQL CTF · SUMSEC Hack-Tools 转化成Web · SUMSEC CodeQL与Shiro550碰撞 · SUMSEC CodeQL与AST之间联系 · SUMSEC Java加载动态链接库 · SUMSEC Log4j2 漏洞分析 · SUMSEC Interprocedural-Analysis 过程间分析 · … Data Analysis Foundation 数据分析基础 ·… Data Flow Analysis · SUMSEC Intermediate Representation 中间代表(… PII泄露–用CodeQL识别日志中的PII数据 · SUMSEC CodeQL workshop for Java: Unsafe … 前言 · SUMSEC 漏洞环境的搭建 · SUMSEC Fastjson回显 · SUMSEC Tomcat通用回显学习笔记 · SUMSEC 从Java反序列化漏洞题看CodeQL数据流 · SUMSEC 概述 · SUMSEC 记一次Log4j失败的Gadget挖掘记录 · SUMSEC Ysoserial改造记录 · SUMSEC JNDI注入 · SUMSEC shiro JRMP gadget · SUMSEC Fastjson MySQL gadget复现 · SUMSEC 2021年度总结 · SUMSEC
CodeQL初见Shiro550 · SUMSEC
2023-01-09 · via SumSec's Blog

前言

看到p牛师傅的文章CommonsBeanutils与无commons-collections的Shiro反序列化利用决定好好研究一下CommonsBeanutils反序列化漏洞。p牛将shiro此gadget改造成了无需依赖第三方组件,凭借shiro自带CommonsBeanutls将shiro的反序列化漏洞利用来到了一个新的高点。

本文思路都是基于在p牛原思路的进一步的探索和衍生,本质还是基于p牛提出的想法。

所有源码环境都会上传https://github.com/SummerSec/JavaLearnVulnerability


Shiro550–真的会玩吗?

先抛出一个问题,你已知的shiro550利用方式有哪些?利用思路有哪些?

Shiro550已知利用方式:

  • 有依赖

    • Commons-Collections反序列化组件

    • Commons-Beanutils反序列化组件

      ……..

  • 无依赖
    • 利用Shiro自带Commons-Beantils依赖(P牛)
  • 利用Tomcat或Spring回显结果
  • 注入内存马

在P牛之前发现无依赖利用之前,大家基本上都是使用ysoserial中CommonsCollections、CommonsBeanutils等gadget链。但这也带了一个问题,如果shiro没有添加第三方依赖怎么办?是不是就只能放弃?

个人觉得P牛的思路完全为Shiro550反序列化漏洞利用方式留下浓厚的一笔,但我觉得原不应该不应该局限与此。本文篇幅有限,只讨论无依赖的利用方式。无依赖指的是仅仅使用Shiro本身的所依赖的组件或JDK,而达到触发反序列化漏洞的目的。


CommonsBenutils反序列化漏洞

CommonsBeanutils Gadget分析

首先TemplateImpl类不难发现在Commons-collections4.0版本的反序列化漏洞都用到了这个类,前期大致流程都是差不多,如果不熟悉可以学习笔者之前写的漫谈Commons-Collections反序列化 第二部分。

image-20210609155556389

PriorityQueue调用siftDownUsingComparator方法的669行之后会调用BeanComparator类的Compare方法

image-20210609162051136

这里的property通过反射修改了outputProperties,之后会调用PropertyUtils.getProperty(o1, this.property)

image-20210609162106968

这里首先会得到一个PropertyUtilsBean的实例,然后调用getProperty方法,获取属性。

image-20210609163254880

接下去是调用getNestedProperty方法,然后进行一系列的JavaBean判断之后调用getSimpleProperty方法。

image-20210609163419984

image-20210609163816013

首先还是进行判断之后调用getPropertyDescriptor方法,在这里很明显会获取恶意的TemplatesImpl对象

image-20210609164452646

在方法结束之后返回PropertyDescriptor对象,会获取方法(反射调用)然后最终触发漏洞。

image-20210609164728186


总结

/*
	Gadget chain:
		PriorityQueue.readObject()
			PriorityQueue.heapify()
				PriorityQueue.siftDown()
					PriorityQueue.siftDownUsingComparator()
						BeanComparator.compare()
							PriorityUtilsBean.getProperty()
								PriorityUtilsBean.getNestedProperty()
									PriorityUtilsBean.getSimpleProperty()
										PriorityUtilsBean.getPropertyDescriptor()
										------ 

	Requires:
		commons-beanutils1.9.2
 */

在Commons-Beanutils中BeanComparetor是实现了Serialable接口和Compare接口,在比较方法里面调用PriorityUtilsBean#getProperty方法获取属性,获取的过程中会将Bean对象(TemplatesImpl恶意对象)实例化,在调用getPropertyDescriptor时获取属性的描述触发反序列化漏洞。


Shiro550无依赖利用分析

在文章CommonsBeanutils与无commons-collections的Shiro反序列化利用(下文原文即指此文)给出了无依赖的解决方案,找到一个替代ComparableComparator类,当然这也不是随便找的。P牛给出了替代类所需要的条件:

  • 实现java.util.Comparator接口
  • 实现java.io.Serializable接口
  • Java、shiro或commons-beanutils自带,且兼容性强

在文章中p牛使用IDEA自带的功能去找了,当我去复现的时候发现这种方式其实是有点效率低下,搞不好会遗落或者完全找不到。这里我使用的环境是JavaLearnVulnerability/shiro/shiro-deser/结果大概是有200+,当然不完全都是shiro自带的依赖,当然原文中也有100+。

image-20210613164632858

这种方式满足了第二和第三个条件,无法满足第一个条件。IDEA是支持导出查询结果,我当时想到是找到Comparator接口实现类和Serializable接口实现类,导出结果在去用工具合并对比。当时没有想到工具可以处理,自己写脚本处理?

在这里插入图片描述


CodeQL初见

当时的我抛弃了上面我提出的两种方式,使用CodeQL语言去查询结果 。CodeQL代码,查询的结果如下:

image-20210613165637032

image-20210613170425194


CodeQL简单介绍

CodeQL是一个分析引擎,被开发人员用来自动进行安全检查,也被安全研究人员用来进行变体分析。

在CodeQL中,代码被当作数据处理。安全漏洞、缺陷和其他错误被建模为查询,可以针对从代码中提取的数据库执行。你可以运行由GitHub研究人员和社区贡献者编写的标准CodeQL查询,或编写你自己的查询,用于自定义分析。找到潜在漏洞的查询会直接在源文件中突出显示结果。

上面两段话是GitHub官方对CodeQL的定义。CodeQL采用的是类似于SQL语句方式去查询数据库中代码,将符合的代码显示。在上面就不能发现,CodeQL简单几行代码将之前那么多结果挑选完毕准确无误。这种查询式代码审计真的特别舒服,规则一次性编写多次运行。关键是他开源的,还有很多人在维护,背靠GitHub官方。CodeQL最早提出是在2007年,2019年CodeQL逐渐发展,越来越火。

这里推荐个人开源学习的项目learning-codeql,项目里面收集了大量的资料。


鉴于篇幅不易过长,下篇文章将详细说一下CodeQL在挖掘gadget的实践,提出个人对shiro550漏洞应该怎么玩明白的理解。

未完待续……


参考

https://blog.csdn.net/blueheart20/article/details/80363870

https://www.leavesongs.com/PENETRATION/commons-beanutils-without-commons-collections.html#