java反序列化–CC2前置介绍CC2的环境与前面学习的CC1 CC3 CC6环境有一点不一样
之前我们都是在是Commons-Collections=3.2.1下的攻击
而这个CC2则是在Commons-Collections=4.0下的攻击
Apache Commons Collections是⼀个著名的辅助开发库,包含了⼀些Java中没有的数据结构和和辅助 方法,不过随着Java 9以后的版本中原生库功能的丰富,以及反序列化漏洞的影响,它也在逐渐被升级或替代。
在2015年底commons-collections反序列化利用链被提出时,Apache Commons Collections有以下两个分支版本:
commons-collections:commons-collections
org.apache.commons:commons-collections4
可见,groupId和artifactId都变了。前者是Commons Collections老的版本包,当时版本号是3.2.1;后者是官方在2013年推出的4版本,当时版本号是4.0。
官方认为旧的com ...
java反序列化–CC1前置介绍
Apache Commons Collections是Apache软件基金会的一个项目,它提供了一组扩展了Java标准库中Collection结构的类和方法。这些类和方法被广泛用于各种Java应用的开发中。
CC1链是Apache Commons Collections库中反序列化漏洞的利用链的简称。反序列化是将字节序列恢复成对象的过程,如果在这个过程中输入了不可信的数据,就有可能触发包含在序列化参数中的恶意代码。
所以
Apache Commons Collections它提供了很多强大的数据结构类型和实现了各种集合工具类。作为Apache开放项目的重要组件,Commons Collections被广泛的各种Java应用的开发,而正是因为在⼤量web应⽤程序中这些类的实现以及⽅法的调⽤,导致了反序列化⽤漏洞的普遍性和严重性。。
commons-collections组件反序列化漏洞的反射链也称为CC链,自从apache commons-collections组件爆出第一个java反序列化漏洞后,就像打开了java安全的新世界大门一样,之后很多jav ...
ISCC 2024wp是真的多
MISC练武题FunZip给了附件:
VTFSS2MyUldhM2xsUkZaaFVqRlZORmxXWXpWbGJWSkpVMjE0V2xaNlFYSlJNbU01VUZGVTFSS2MyUldhM2xsUkVaaFVqRlZORmw2VGxObFYwWllUbGMxVVZveU9EbEVVUXVTFSS2MyUldhM2xsUkVaaFVqRlZORmRVVGs5TlIwNTBZa2hXWVdWcVVreEVWcIVTFSS2MyUldhM2xsUkVaaFVqRlZORmRVVGs5TlJuWklZa2hhVVZveU9EbEVVUWVTFSS1UySkdjSFJpU0ZaaFZUQktNRmRXYUc5a1ZXeEZZWHBXVUZWWE9EbEVaQvVVRKak9WQlJNY0V2tab1QyTkhTblJaTW1ScFlsVmFNVmRzYUU5a01XeFlWRzE0U2xORk5IZFhhMUo2VTNjeNVVRKak9WQlJNTmVjFSS2IyRkhUbkJWYlhCYVZtNVNNRmRXYUc5a1ZtaFdaREprV2 ...
JAVA反序列化–URLDNS学习java反序列化,先从URLDNS开始
前置我们先来了解一些java反序列化的通识知识
readObject 和 writeObject首当其冲的就是我之前提到的readObject 和 writeObject
这是java反序列化中最重要的两个函数
这里在阐述一下:
在Java的序列化(serialization)和反序列化(deserialization)过程中,readObject 和 writeObject 方法起着特殊的作用,允许开发者自定义序列化和反序列化的行为。这两个方法并不是Serializable接口的一部分,但它们是在java.io.Serializable接口的实现类中经常被重写的两个私有方法。
writeObject 方法:
writeObject 方法用于在序列化过程中向输出流(通常是ObjectOutputStream)写入自定义数据。当你重写这个方法时,你可以在序列化过程中添加额外的数据,或者改变字段的序列化顺序。通常,你会首先调用s.defaultWriteObject()来序列化对象的所有非瞬态(non-transie ...
JAVA反序列化前置我们在调试RMI时会发现,其发送、接收的数据都是反序列化数据
其他不同语言都拥有此类方法(发序列化),且多少都拥有相关的漏洞
那么,为什么反序列化常常会带来安全隐患?
编程语言如果需要在网络上传递信息,通常会用到一些格式化数据:
JSON
XML
JSON和XML是通用数据交互格式,通常用于不同语言、不同环境下数据的交互,比如前端的JavaScript通过JSON和后端服务通信、微信服务器通过XML和公众号服务器通信。但这两个数据格式都有一个共同的问题:不支持复杂的数据类型。
大多数处理方法中,JSON和XML支持的数据类型就是基本数据类型,整型、浮点型、字符串、布尔等,如果开发者希望在传输数据的时候直接传输一个对象,那么就不得不想办法扩展基础的JSON(XML)语法。
比如,Jackson和Fastjson这类序列化库,在JSON(XML)的基础上进行改造,通过特定的语法来传递对象;亦或者如RMI,直接使用Java等语言内置的序列化方法,将一个对象转换成一串二进制数据进行传输。
不管是Jackson、Fastjson还是编程语言内置的序列化方法,一旦涉及到序列 ...
JAVA - RMI这个还是理解了挺久的
主要是第一次代码审计 又枯燥又难 审着犯困 效率挺低的
RMI基础RMI 作为后续漏洞中最为基本的利用手段之一,学习的必要性非常之大
如果只懂利用,就太脚本小子了
定义java RMI全称为 java Remote Method Invocation(java 远程方法调用),是java编程语言中,一种实现远程过程调用的应用程序编程接口。存储于java.rmi包中,使用其方法调用对象时,必须实现Remote远程接口,能够让某个java虚拟机上的对象调用另外一个Java虚拟机中的对象上的方法。两个虚拟机可以运行在相同计算机上的不同进程,也可以是网络上的不同计算机。两者之间通过网络进行通信。
组成
如上图:
基本分为三层架构模式来实现 RMI
分别为 RMI 服务端,RMI 客户端和 RMI 注册中心。
客户端:(Client 上图右边部分)存根 / 桩 (Stub): 远程对象在客户端上的代理;远程引用层 (Remote Reference Layer): 解析并执行远程引用协议;传输层 (Transport): 发送调用、传递远程 ...
H&NCTF WP[官方wp](H&NCTF 2024 官方WP (qq.com))
Please_RCE_Me进入
提示是?moran=flag get访问一下得到源码
题目源码如下
<?phpif($_GET['moran'] === 'flag'){ highlight_file(__FILE__); if(isset($_POST['task'])&&isset($_POST['flag'])){ $str1 = $_POST['task']; $str2 = $_POST['flag']; if(preg_match('/system|eval|assert|call|create|preg|sort|{|}|filter|exec|passthru|proc|open|echo|`| |\.|inclu ...
java反射Java安全可以从反序列化漏洞开始说起,反序列化漏洞又可以从反射开始说起。
定义对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
简单的说就是可以任意访问和使用任意类
java反射是通过获取字节码文件来获取其对应的Class类型的对象的
反射的使用反射相关类:
Class类
代表类的实体,在运行的Java应用程序中表示类和接口
Field类
代表类的成员变量/字段
Method类
代表类的方法
Constructor类
代表类的构造方法
获取字节码文件(获取Class对象)有三种方法
obj.getClass() 如果上下⽂中存在某个类的实例 obj ,那么我们可以直接通过obj.getClass() 来获取它的类
Test.class 如果你已经加载了某个类,只是想获取到它的 java.lang.Class 对象,那么就直接拿它的 class 属性即可。这个⽅法其实不属于反射。
Class.forName 如 ...
Writeup
未读蓝桥杯最后成绩是省二啊
情报收集(web)爬虫协议
访问/robots.txt
最后一个可访问
flag在第二个里面(91……)
flag{79f508c3-12fa-4514-aa2d-69165aa3bfed}
安全知识(理论)单选1
C
单选2
C
单选3
这道我做错了 选的A
应该是A(好像是按错了)
单选4
A
单选5
好像是B
单选6
B
单选7
C
单选8
C
单选9
B
单选10
B
数据分析(misc)packet简单的流量分析
wireshark打开附件
找到发的shell.php
跟踪流
base64解码
flag{7d6f17a4-2b0a-467d-8a42-66750368c249}
消失的数据爆破解压包密码:
pavilion
发现应该是水印
exp:
import cv2import numpy as npimport pywtclass WaterMarkDWT: def __init__(self, origin: str, watermark: str, key: int, weight: list): ...
Writeup
未读第一届“帕鲁杯”-CTF应急响应挑战赛应急响应的题根本做不来 还是学web吧
以后应该不会学密码、misc之类的了
现在的学习路线是先学蓝队这边java安全 溯源什么的
然后大二学红队这边 渗透 内网 re 武器开发之类的
Web-签到进来
给了源码:
from flask import Flask, request, jsonifyimport requestsfrom flag import flag # 假设从 flag.py 文件中导入了 flag 函数app = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def getinfo(): url = request.args.get('url') if url: # 请求url response = requests.get(url) content = response.text print(content) ...