Skip to content

宏观java反序列化

  • 在Java中,ObjectOutputStream类的writeObject()方法可以实现序列化,将对象转换成字节流,便于保存或输出;而ObjectInputStream类的readObject()方法用于反序列化,将字节流还原成对象。

Shiro

  1. 替换ldap函数

  2. 什么是shiro反序列化

    • Shiro反序列化主要是利用Apache Shiro的RememberMe功能。用户登录成功后,生成加密并编码的cookie保存在浏览器中,方便用户的日常使用。服务器处理cookie的流程是:获取浏览器上保存的cookie,然后进行Base64解码,再进行AES解密,再将其反序列化进行校验。漏洞出现在AES加密使用硬编码密钥,如果密钥没有修改或过于简单,攻击者可以重构cookie,先构造恶意代码进行序列化,然后AES加密(使用已被破解的密钥),再进行Base64编码,形成新的cookie。服务器处理时会触发恶意代码。
  3. 反序列化原理

    • 反序列化是指将字节流恢复成原本的对象。在安全方面,如果反序列化数据中包含恶意代码,且应用程序对反序列化的对象没有进行适当的验证或过滤,攻击者就可以利用这个漏洞在目标系统上执行任意代码。
  4. CC链和CB链的攻击流程

    • CC链(Commons Collections链):通过Java反序列化漏洞,攻击者可以利用Commons Collections库中的序列化类执行恶意代码。
    • CB链(Commons Beanutils链):类似CC链,利用Beanutils库中的类进行反序列化攻击。
  5. Shiro组件有什么用?

    • Shiro是一个强大的Java安全框架,主要用于处理认证、授权、会话管理和加密。
  6. 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字段

  7. 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值来实现反序列化漏洞攻击。
  8. Shiro攻击链详解

    • Shiro攻击链通常涉及构造恶意序列化数据,通过Shiro的反序列化漏洞执行恶意代码。具体步骤包括生成恶意代码的字节流,进行AES加密和Base64编码,替换Cookie中的RememberMe值,最后通过特定请求触发服务器反序列化并执行恶意代码。
  9. shiro反序列化时遇到深信服edr怎么办

    • 遇到深信服EDR时,需要绕过或规避EDR的检测,可以尝试使用不同的payload和加密方式,或者利用EDR未覆盖的漏洞和路径进行攻击。
  10. 平常怎么去发现shiro漏洞的?

    • 可以通过以下方式发现Shiro漏洞:
      • 登录失败时会返回rememberMe=deleteMe字段。
      • 使用ShiroScan工具进行被动扫描。
      • 检查未登录情况下请求包的cookie中是否有rememberMe字段,返回包set-Cookie里是否有deleteMe字段。
  11. shiro攻击链有哪些不出网怎么打

    • 在不出网的情况下,可以利用本地文件读写漏洞进行命令执行,或者利用内网中的其他服务进行攻击,比如通过内网跳板或其他服务器反弹shell。

Weblogic

  1. 分类有两种,分别是什么?

      • 基于漏洞利用的攻击:例如T3协议漏洞、xml反序列化漏洞。
      • 基于配置缺陷的攻击:例如弱口令、未授权访问。
  2. 反序列化流量分析,怎么解密数据包?

    • :通过捕获并分析流量数据包,识别序列化和反序列化的特征。使用相关工具对捕获的数据包进行解密,重点分析序列化对象中的内容。

Fastjson

  1. 漏洞原理

    • :Fastjson的反序列化漏洞源于其在解析JSON数据时可以执行恶意代码,特别是在开启了autoType功能的情况下。
  2. Fastjson的流量特征

    • :Fastjson漏洞的流量特征通常包含特定的JSON格式数据,漏洞在处理JSON对象时,没有对@type字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl类,而这个类有一个字段是bytecodes,有部分函数会根据这个bytecodes生成Java实例,从而达到通过字段传入一个类并执行构造函数的效果。Fastjson的payload存在请求体中为JNDI注入。
  3. 怎么查看fastjson版本?

    • :可以通过以下方法查看Fastjson版本:
      • 查看项目的pom.xml文件中的Fastjson依赖版本。
      • 通过jar命令查看Fastjson的jar包中的META-INF/MANIFEST.MF文件中的版本信息。
      • 在代码中使用JSON.VERSION获取Fastjson的版本号。
  4. Fastjson对于getshell高低版本的区别

    • :高版本的Fastjson引入了更多的安全防护措施,默认关闭了autoType功能,而低版本的Fastjson更容易被利用来进行getshell攻击。
  5. Fastjson不出网怎么getshell

    • :可以利用内网的其他服务进行反弹shell,或者利用本地文件读写漏洞来执行命令。
  6. Fastjson不出网怎么利用

    • :可以利用TemplatesImpl利用链,通过parseObject()方法触发漏洞。具体步骤包括:
      • 构造特定格式的JSON数据,其中包含恶意的TemplatesImpl类。
      • 利用内网的其他服务进行命令执行或数据回传。
      • 利用Commons-io写文件或webshell,通过DNSLog外带等方式实现利用。
  7. 过程中使用了jndi注入,对jndi注入有了解吗?

  1. 在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