反序列化

WebLogic、JBoss、Fastjson、Apache Shiro、JNDI、Log4j2反序列化漏洞

  • 序列化与反序列化
    序列化:把一个对象类型的数据转换成字符串(字节流)进行传输,把某个对象系列化成JSON格式或XML格式或者其他序列化格式的字符串过程称为序列化。
    反序列化:将字节流或字符串转换为原始的数据结构或对象。

  • JBOSS反序列化漏洞攻击成功如何研判?
    1、在访问JBOSS漏洞页面/invoker/readonly后,返回值为500。
    2、请求体中有llection.map.LazyMap、keyvalue.TiedMapEntry攻击链特征并且有明显的命令执行行为。比如whoami
    3、在返回500堆栈报错页面内容中包含系统返回地内容,比如系统用户:roo

  • shiro反序列化
    shiro-550:shiro < 1.2.5
    主要是因为rememberMe内容。AES密码被硬编码在shiro源码中,导致在cookie中的rememberMe可疑被插入恶意代码造成代码执行。
    shiro-721:shiro > 1.2.5
    shiro使用了随机密码,但是padding oracle attack导致反序列化。

  • shiro形成原因
    1、默认的rememberMe功能:Shiro的REmemberMe功能允许用户通过Cookie在会话关闭后保持登录状态,将用户信息序列化字节流,使用AES加密,Base64编码存储到Cookie的RememberMe字段中。再次访问时,从cookie中读取rememberMe值,解密并反序列化。
    2、反序列化时没有进行严格校验,攻击者能伪造rememberMe值并控制加密密钥,AES密码是硬编码可以通过公开默认密钥或泄密密钥伪造rememberMe Cookie值,构造恶意序列化数据,触发反序列化漏洞。

  • shiro利用链(java)
    1、Commons BeanUtils
    2、Commons Collections

  • 反序列化漏洞修复
    1、升级Shiro版本
    2、修改默认密钥:cipherKey,使用随机生成密钥
    3、禁用rememberMe功能;securityManager.rememberMeManager = null
    4、对反序列化的数据进行严格校验
    5、使用白名单:限制反序列化的类,只允许反序列化可信的类

  • shiro反序列化漏洞特征
    1、cookie中存在rememberMe字段,字段值通常为Base64编码
    2、加密特征AES加密,默认密钥为kPH+bIxk5D2deZiIxcaaaA==
    3、Base64解码后前16字节位IV,后续部分是加密的反序列化JAVA对象
    4、请求包与响应包有remeberMe=deleteMe
    未登录的情况下,请求包的cookie中没有rememberMe字段,返回包set-cookie里面没有deleteMe字段。
    登录失败,不管有没有勾选RememberMe字段,返回包都有rememberMe=deleteMe字段。
    不勾选rememberMe,登录成功返回包set-cookie里面有rememberMe=deleteMe字段,但是之后的所有请求中cookie都不会有RememberMe字段。
    勾选rememberMe,登录成功返回包set-Cookie里面有rememberMe=deleteMe字段,之后所有请求者cookie都会有rememberMe字段。

  • shiro反序列化漏洞执行是否成功,研判特征是什么?
    image
    1、响应包cookie重设或删除,Set-Cookie: rememberMe=delete; Path=/; Max-Age=0。
    2、反弹shell,受害服务器主动向外部IP发起持久TCP连接。
    3、DNS查询:查找受害服务器在攻击后对可疑域名的查询记录
    4、HTTP/HTTPS外联(下载木马/c2):
    5、横向移动:smb爆破、ssh登录尝试、利用其它漏洞。

  • JNDI常见利用的协议
    JNDI:命名和目录服务
    RMI:远程方法调用协议
    LDAP:轻量级目录访问协议
    DNS:域名解析协议

    JNDI注入后台执行代码时,最总执行到lookup函数,lookup函数值可控,lookup支持远程方法调用(RMI)、轻型目录访问协议(LDAP)、域名服务(DNS)。

  • fastjsion反序列化
    反序列化漏洞主要源自自动类型转换机制auto Type(@type)的设计缺陷,攻击者可以精心构造JSON数据实现远程代码执行RCE。

  • fastjsion反序列化研判?
    1、请求头:method:POST concent_type:appliction/json
    2、请求体:data:com.sun.rowset.JdbcRowSetmpl,dataSourceNmae,@type
    3、请求体:包含攻击者C2服务器地址
    4、状态码为400 也可能是500
    5、通过天眼回溯分析:(sip:(失陷服务器IP)OR sip:(攻击者C2IP))AND (dip:(失陷服务器IP)or dip:(攻击者C2IP))
    6、内部服务器主动连接外部可疑IP(非标准端口:1234、4444、53等)
    7、查看DNS服务器解析日志,寻找可疑域名。
    8、进程创建、写入文件、创建或修改文件、异常堆栈跟踪、恶意类加载、cpu异常

  • log4j2反序列化漏洞
    log4j2框架下的lookup查询服务提供里${}字段解析的功能,传进去的值会被直接解析。攻击者在lookup{}里面构造payload,调用JNDI(Ldap)服务,从远程加载并执行恶意类,导致远程代码执行。

  • log4j2反序列化漏洞执行是否成功,研判特征是什么?
    攻击请求中触发JNDI查找,而攻击成功的目标是目标服务器与攻击者控制的恶意服务器进行多层交互并最终执行了代码。
    1、JNDI注入字符串、请求头,请求头中
    2、${jndi:ldap://}、base64编码、字符串拼接混淆
    3、受害服务器向控制的JNDI服务器IP的1389LDAP、1099RMI端口发起出站TCP连接。
    4、恶意类加载:受害服务器向同一个攻击者IP或另一个IP的80/8080/443等HTTP(s)端口发起请求。恶意JNDI服务器返回一个重定向响应,指向一个包含恶意Java类的HTTP URL。
    5、反弹shell、C2通信、内网横向移动、外传数据
    image
    image

  • Struts2反序列化漏洞
    当用户提交表单数据并验证失败后,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后将解析后的结果返回到对应的表单数据中。%{value}值没有进行严格过滤,攻击者构造恶意payload触发OGNL表达式解析造成命令执行。

  • Struts2反序列化漏洞研判?
    1、查看请求头或请求体中是否包含OGNL表达式、(content—Type头、user-agent、referer头、任意表单参数或URL参数中)
    2、查看请求头或请求体中是否存在命令执行类代码
    image
    %{@java.lang.Runtime@getRuntime().exec('whami')}、${}、%{}字符、.class参数、#_memberAccess[]=true、Base64、URL编码、OGNL编码
    3、查看响应体是否返回命令执行结果/etc/passwd文件内容、id、whomai、ipconfig等、异常回显位置:在html页面中、在http头中等。
    image
    4、http状态码:返回200,包含敏感信息如用户名或系统信息等;返回500,但是有成功执行命令回显在响应头中
    image

  • Weblogic反序列化漏洞
    序列化:将内存中的对象转换成一串字节序列的过程。字节可以方便存储到文件或通过网络传输。请求
    反序列化:将字节恢复成内存对象的过程。
    Weblogic服务器在处理来自客户端的序列化数据是,没有进行充分的验证和过滤,攻击者可以通过构造特殊的序列化数据,使用WebLogic在反序列化过程中加载并执行恶意类获取服务器权限等。
    在反序列化过程中,会自动调用被序列化对象readObject()方法重建对象。weblogic提供了多个服务器端口(T3协议:7001端口、IIOP互联网对象请求代理间协议、HTTP)来接收客户端发送的序列化数据。
    weblogic漏洞时绑定对象后主动进行lookup查询,然后后台触发绑定类再触发looup执行恶意payload。

  • 分析weblogic反序列化漏洞执行是否成功,研判特征是什么?
    攻击请求中包含序列化后的恶意对象,而攻击成功的标志是服务器在响应中表现出代码执行后的行为、如命令回显、外联、或特定错误。
    1、T3/IIOP协议,攻击载荷直接封装在协议数据包中。指向weblogic服务器7001端口的T3协议连接。
    2、请求包攻击载荷:java序列化数据头ac ed 00 05。xml中包含java危险类。base64编码、十六进制编码。
    image
    3、命令回显、错误响应包堆栈中包含命令回显、正常响应200,可能执行力下载木马、反弹shell等无回显操作。
    4、恶意外联(c2通信/下载木马)受害IP主动向外部陌生IP发起HTTP、HTTPS或TCP连接,挖矿木马、勒索软件、建立C2信道。
    5、反弹shell、DNS日志中寻找对可疑域名的查询记录。

  • Spring远程命令执行
    原理:不当的反射操作+类加载器操纵
    Spring框架允许HTTP请求参数绑定到对象的任何属性,攻击者可以构造请求参数需修改ClassLoader的属性。通过覆盖ClassLoader的搜索路径,攻击者可以让应用从恶意服务器加载并执行包含攻击代码的JAR包,从而实现远程代码执行。

posted @ 2025-02-12 17:43  予遂计划  阅读(83)  评论(0)    收藏  举报