Java 反序列化CC1利用链分析
库介绍Apache Commons Collections 是一个扩展了Java 标准库里的 Collection 结构的第三方基础库,它提供了很多强大的数据结构类型和实现了各种集合工具类。
作为 Apache 开放项目的重要组件,Commons Collections 被广泛的各种 Java 应用的开发,⽽正是因为在⼤量 web 应⽤程序中这些类的实现以及⽅法的调⽤,导致了反序列化⽤漏洞的普遍性和严重性。
Commons Collection 组件的反序列化漏洞也称为 CC 链,自从该链被爆出来之后,就像打开了 Java 安全的新世界大门。在此之后,很多中间件都被爆出了反序列化漏洞。
环境搭建基础环境搭建
CommonsCollections <= 3.2.1
java < 8u71 本环境使用的是 8u65
1234567<dependencies> <dependency> <groupId>commons-collections</groupId> <artifac ...
Java 的反射机制
反射的概念Java 反射(Reflection)是 Java 非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法(Methods)、成员变量(Fields)、构造方法(Constructors)等信息,还可以动态创建 Java 类实例、调用任意的类方法、修改任意的类成员变量值等。Java 反射机制是 Java 语言的动态性的重要体现,也是 Java 的各种框架底层实现的灵魂。
反射技术,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(成员变量、方法、构造器等)
获取 Class 对象反射的第一步:是将字节码加载到内存,我们需要获取到的字节码对象。
以下四种方法可以获取到一个类的字节码文件。
类名.Class
Class.forName("com.qwesec.xxx.Test")
ClassLoader.getSystemClassLoader().loadClass("com.qwesec.xxx.Test")
实例化对象通过 对象.getClass()也可以获得
12345678910111213141 ...
Java 反序列化URLDNS利用链分析
最近在学习关于Java安全相关的内容,之前有做过代码审计以及渗透测试,一直有接触过反序列化利用这块,但是一直没有深入的去分析利用的链条,怎么一步步执行到恶意方法的,借此机会进行学习和记录。
前置知识一个简单的 Demo
123456public class HashCodeTest { public static void main(String[] args) throws MalformedURLException { HashMap<URL, Integer> urlHashMap = new HashMap<>(); urlHashMap.put(new URL("https://7nmsor.dnslog.cn"), 1); }}
执行如上程序,却在 DNSlog 中收到了请求。
原因分析:hashmap.put()方法会触发了 URL类中的 hashcode方法,这个方法会调用 getHostAddress(u)从而发起 DNS 解析请求。
has ...
初识Java的序列化和反序列化
序列化和反序列化概念
Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,如将 Java 对象转为一个 bin 文件或将一个 Java 对象转为一个 JSON 字符串,都是为了保存和不同服务之间对象的传输。
Java 反序列化是指把字节序列恢复为 Java 对象的过程。
序列化的应用场景
序列化是指把一个 Java 对象变成二进制内容,本质上就是一个 byte[]数组。
为什么要把 Java 对象序列化呢?因为序列化后可以把 byte[]保存到文件中,或者把 byte[]通过网络传输到远程,这样,就相当于把 Java对象存储到文件或者通过网络传输出去了。
有序列化,就有反序列化,即把一个二进制内容(也就是 byte[]数组)变回 Java对象。有了反序列化,保存到文件中的 byte[]数组又可以“变回” Java对象,或者从网络上读取 byte[]并把它“变回”Java 对象。
序列化的过程
对象的序列化一个对象要能序列化,必须实现一个特殊 java.io.Serializable接口,该接口是空接口,无需要实现的相应方法,它的定义如下:
12 ...
M1 Pro Phpstorm+PHP-7.0 Debug 代码调试
前言本人的电脑是 M1 Pro ,所使用的 LNMP 环境为集成开发环境 EServer(继 MxSrvs 比较不错的 Mac 下的集成开发环境),下面将演示 PhpStorm 调试 PHP7.4 所需要的配置(其他版本同理,经验证通过该方法配置了 PHP 7.0 和 PHP 5.6)。
EServer 下载链接:https://github.com/xianyunleo/EServer/
环境配置下载合适的 xdebug首先运行 phpinfo 获取 php 的相关信息
在 phpinfo 页面中右键查看页面源代码,将源码全部复制到 xdebug 页面进行分析,推荐兼容的 xdebug 版本:
编译 xdebug点击推荐的版本进行下载,解压之后进入到相关目录:
在该 xdebug 目录下运行 php7.4 版本的 phpize 工具,我这里使用的是 EServer 集成开发环境 phpize 路径为:
1/Applications/EServer/childApp/php/php-7.4/bin/phpize
接下来编译 xdebug 程序,由于我使用的是 ESer ...
Nacos 历史漏洞复现
背景Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
Nacos是阿里巴巴于2018年开源的项目,目前在Github中已获得 39.9k Star,由此可见其的使用广泛程度。
CVE-2021-29441(未授权访问)漏洞简介该漏洞发生在 nacos在进行认证授权操作时,会判断请求的 user-agent是否为 Nacos-Server,如果是的话则不进行任何认证。
漏洞报送原 ISSUE:https://github.com/alibaba/nacos/issues/4593
影响版本
nacos版本号 <= 2.0.0-ALPHA.1
nacos版本号 < 1.4.1
环境搭建使用 docker 基于 vulhub 项目的 nacos 部分进行搭建。
1docker-compose up -d
漏 ...
Tomcat 历史漏洞复现
Tomcat 是一个开源的、轻量级的 Web 应用服务器和 Servlet 容器。它由 Apache 软件基金会下的 Jakarta 项目开发,是目前最流行的 Java Web 服务器之一。
CVE-2025-24813(反序列化代码执行)漏洞描述Apache Tomcat 在处理 HTTP PUT 请求时,存在一个不安全文件上传漏洞(CVE-2025-24813),攻击者可利用该漏洞在服务器上写入恶意文件,并在特定条件下触发反序列化攻击,最终导致远程代码执行(RCE)。
利用条件
应用程序启用了 DefaultServlet 写入功能,该功能默认关闭。
应用支持了 partial PUT 请求,能够将恶意的序列化数据写入到会话文件中,该功能默认开启。
应用使用了 Tomcat 的文件会话持久化并且使用了默认的会话存储位置,需要额外配置。
应用中包含一个存在反序列化漏洞的库,比如存在于类路径下的 commons-collections,此条件取决于业务实现是否依赖存在反序列化利用链的库。
影响版本
Apache Tomcat 11.0.0-M1 to 11.0.2
Apache To ...
Shiro 历史漏洞复现
前言Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro 框架直观、易用,同时也能提供健壮的安全性。
环境搭建采用 vulhub 项目的 Shiro 系列:https://github.com/vulhub/vulhub
指纹信息登录返回的响应包中 set-Cookie 包含 rememberME=deleteMe 字段可判断该网站使用 Apache Shiro 框架。
当然该值只是默认值,研发是可以修改的。
CVE-2020-1957(认证绕过)漏洞描述在 Apache Shiro 1.5.2 以前的版本中,在使用 Spring 动态控制器时,攻击者通过构造..;这样的跳转,可以绕过 Shiro 中对目录的权限限制。利用 Shiro 和 Spring 对 URL 的处理的差异化,越权并成功访问。
漏洞原理
客户端请求URL: /xxxx/..;/admin/
Shrio 内部处理得到校验URL为 /xxxx/.. 校验通过
Springboot 处理 /xxxx/..;/admin/index , 最终请求 /admin/index ...
一文搞懂前端加密和js逆向
学习的必要性在如今科技飞速发展的时代,传统的明文传输已经慢慢退出历史的舞台。更多的是对用户传入的参数进行加密。
甚至有些时候,对用户的响应内容也是加密的。
那么,当我们测试越权、弱口令和 sql 注入的时候,就必须要对传入的参数进行加密。否则大多时都是无功而返。同时针对于前端加密还有一个天然的优势。由于内容都是经过加密的。 自然不会被 WAF 所拦截。
常见的 JS 加密在线解密工具:https://www.ssleye.com/ssltool/
对称加密比如 AES、DES 使用的加密和解密的密钥都是同一个。所以叫做对称加密。
非对称加密比如 RSA 和 ECBSA 使用非对称加密,也就是说,加密和解密使用的是两个密钥,公钥一般在前端,私钥放在后端用于解密。
JS 逆向快速定位到加密处代码示例靶场地址:https://github.com/outlaws-bai/GalaxyDemo
通过字段关键字虽然这里传入的值是经过加密处理的,但是它的 key 是明文的。
因此我们可以直接进行搜索 data:或 data=以及 data =。进行定位。
当然这里我更推荐在 netw ...
春秋云境仿真场景 - Hospital
靶标介绍在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个flag,分布于不同的靶机。
内网渗透
Nacos
Shiro
Fastjson
Decrypt
web01信息收集环境开启之后,拿到公网的 IP 地址,使用 fscan 对目标进行基本的信息收集
1234567891011121314151617181920212223242526272829303132 x1ongsec ~ fscan -h 39.99.141.64┌──────────────────────────────────────────────┐│ ___ _ ││ / _ \ ___ ___ _ __ __ _ ___| | __ ││ / /_\/____/ __|/ __| '__/ _` |/ __| |/ / ││ / /_\\_____\__ \ (__| | | ...










