Appearance
宏观java反序列化
- 在Java中,
ObjectOutputStream
类的writeObject()
方法可以实现序列化,将对象转换成字节流,便于保存或输出;而ObjectInputStream
类的readObject()
方法用于反序列化,将字节流还原成对象。
Shiro
替换ldap函数
什么是shiro反序列化
- Shiro反序列化主要是利用Apache Shiro的RememberMe功能。用户登录成功后,生成加密并编码的cookie保存在浏览器中,方便用户的日常使用。服务器处理cookie的流程是:获取浏览器上保存的cookie,然后进行Base64解码,再进行AES解密,再将其反序列化进行校验。漏洞出现在AES加密使用硬编码密钥,如果密钥没有修改或过于简单,攻击者可以重构cookie,先构造恶意代码进行序列化,然后AES加密(使用已被破解的密钥),再进行Base64编码,形成新的cookie。服务器处理时会触发恶意代码。
反序列化原理
- 反序列化是指将字节流恢复成原本的对象。在安全方面,如果反序列化数据中包含恶意代码,且应用程序对反序列化的对象没有进行适当的验证或过滤,攻击者就可以利用这个漏洞在目标系统上执行任意代码。
CC链和CB链的攻击流程
- CC链(Commons Collections链):通过Java反序列化漏洞,攻击者可以利用Commons Collections库中的序列化类执行恶意代码。
- CB链(Commons Beanutils链):类似CC链,利用Beanutils库中的类进行反序列化攻击。
Shiro组件有什么用?
- Shiro是一个强大的Java安全框架,主要用于处理认证、授权、会话管理和加密。
Shiro流量分析,怎么解密,如何识别?
主要通过流量行为进行分析,爆破利用链的行为和命令执行的行为。具体来看,请求头(header)、响应体(body)、响应头(header)都需要详细分析。
简单说:shiro一般存在于java网站的登录验证模块,bp抓个包,看看cookie那里有没有rememberMe字段,登录错误有没有deleteMe字段
详细说: 未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字 段 登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段 不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但 是之后的所有请求中Cookie都不会有rememberMe字段 勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会 有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段
Shiro721和550区别和原理
- 区别:
- Shiro550:使用已知默认密钥,只要有足够的密钥就可以破解,不需要RememberMe Cookie。
- Shiro721:AES加密key为系统随机生成,需要利用登录后的RememberMe去爆破正确的key值;即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造RememberMe Cookie值来实现反序列化漏洞攻击,难度较高。
- 原理:
- Shiro550:命令 => 序列化 => AES加密 => base64编码 => RememberMe Cookie值。在整个漏洞利用过程中,AES加密的密钥非常重要,如果没有修改默认的密钥,那么很容易就能获取密钥。
- Shiro721:默认通过AES-128-CBC模式加密,这种加密方式容易受到Padding Oracle Attack(填充Oracle攻击)。利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造RememberMe Cookie值来实现反序列化漏洞攻击。
- 区别:
Shiro攻击链详解
- Shiro攻击链通常涉及构造恶意序列化数据,通过Shiro的反序列化漏洞执行恶意代码。具体步骤包括生成恶意代码的字节流,进行AES加密和Base64编码,替换Cookie中的RememberMe值,最后通过特定请求触发服务器反序列化并执行恶意代码。
shiro反序列化时遇到深信服edr怎么办
- 遇到深信服EDR时,需要绕过或规避EDR的检测,可以尝试使用不同的payload和加密方式,或者利用EDR未覆盖的漏洞和路径进行攻击。
平常怎么去发现shiro漏洞的?
- 可以通过以下方式发现Shiro漏洞:
- 登录失败时会返回
rememberMe=deleteMe
字段。 - 使用ShiroScan工具进行被动扫描。
- 检查未登录情况下请求包的cookie中是否有
rememberMe
字段,返回包set-Cookie
里是否有deleteMe
字段。
- 登录失败时会返回
- 可以通过以下方式发现Shiro漏洞:
shiro攻击链有哪些不出网怎么打
- 在不出网的情况下,可以利用本地文件读写漏洞进行命令执行,或者利用内网中的其他服务进行攻击,比如通过内网跳板或其他服务器反弹shell。
Weblogic
分类有两种,分别是什么?
- 答:
- 基于漏洞利用的攻击:例如T3协议漏洞、xml反序列化漏洞。
- 基于配置缺陷的攻击:例如弱口令、未授权访问。
- 答:
反序列化流量分析,怎么解密数据包?
- 答:通过捕获并分析流量数据包,识别序列化和反序列化的特征。使用相关工具对捕获的数据包进行解密,重点分析序列化对象中的内容。
Fastjson
漏洞原理
- 答:Fastjson的反序列化漏洞源于其在解析JSON数据时可以执行恶意代码,特别是在开启了
autoType
功能的情况下。
- 答:Fastjson的反序列化漏洞源于其在解析JSON数据时可以执行恶意代码,特别是在开启了
Fastjson的流量特征
- 答:Fastjson漏洞的流量特征通常包含特定的JSON格式数据,漏洞在处理JSON对象时,没有对
@type
字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl
类,而这个类有一个字段是bytecodes
,有部分函数会根据这个bytecodes
生成Java实例,从而达到通过字段传入一个类并执行构造函数的效果。Fastjson的payload存在请求体中为JNDI注入。
- 答:Fastjson漏洞的流量特征通常包含特定的JSON格式数据,漏洞在处理JSON对象时,没有对
怎么查看fastjson版本?
- 答:可以通过以下方法查看Fastjson版本:
- 查看项目的
pom.xml
文件中的Fastjson依赖版本。 - 通过
jar
命令查看Fastjson的jar包中的META-INF/MANIFEST.MF
文件中的版本信息。 - 在代码中使用
JSON.VERSION
获取Fastjson的版本号。
- 查看项目的
- 答:可以通过以下方法查看Fastjson版本:
Fastjson对于getshell高低版本的区别
- 答:高版本的Fastjson引入了更多的安全防护措施,默认关闭了
autoType
功能,而低版本的Fastjson更容易被利用来进行getshell攻击。
- 答:高版本的Fastjson引入了更多的安全防护措施,默认关闭了
Fastjson不出网怎么getshell
- 答:可以利用内网的其他服务进行反弹shell,或者利用本地文件读写漏洞来执行命令。
Fastjson不出网怎么利用
- 答:可以利用
TemplatesImpl
利用链,通过parseObject()
方法触发漏洞。具体步骤包括:- 构造特定格式的JSON数据,其中包含恶意的
TemplatesImpl
类。 - 利用内网的其他服务进行命令执行或数据回传。
- 利用Commons-io写文件或webshell,通过DNSLog外带等方式实现利用。
- 构造特定格式的JSON数据,其中包含恶意的
- 答:可以利用
过程中使用了jndi注入,对jndi注入有了解吗?
- 答:
- 在fastjson利用过程中,主机不出网怎么构造回显
- 答:dns可出网就打dnslog dns不可出网就用一些不出网的利用链:
- 1.TemplatesImpl利用链
版本 1.2.24
苛刻条件:
服务端使用parseObject()时,必须使用如下格式才能触发漏洞: JSON.parseObject(input, Object.class, Feature.SupportNonPublicField); 服务端使用parse()时,需要 JSON.parse(text1,Feature.SupportNonPublicField)
这是因为com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl需要赋值的一些属性为private
属性,要满足private属性的数据。所以比较苛刻,完全凭运气。
2.C3P0二次序列化 ,C3P0是JDBC的一个连接池组件
3.Commons-io 写文件/webshell
但写webshell需要知道网站路径,不然就无法利用 如果为高权限,可尝试写定时任务,免密钥,等等(这些只是在理论情况下的猜想) 低版本限制< fastjson 1.2.68 4.BECL攻击,命令执行/内存马
becl攻击则是利用tomcat的BasicDataSource链 编译poc,将poc的class字节码转化为bcel然后发送payload
https://xz.aliyun.com/t/12492?time__1311=mqmhD5AKYKBKDI5GXEuxIODAE6nN6ex