CommonCollections1
CommonCollections1前言Commons Collections是反序列化漏洞学习过程中不可缺少的一部分,Apache Commons Collections是Java中应用广泛的一个库,包括Weblogic、JBoss、WebSphere、Jenkins等知名大型Java应用都使用了这个库。
Apache Commons Collections 中提供了一个 Transformer 的类,这个接口的功能就是将一个对象转换为另外一个对象,CC 链都依赖于此
下面的是跟着大佬的脚步,一步一步分析,从零开始一层一层往上找链子
环境搭建然后下载sun包,点击zip
https://hg.openjdk.org/jdk8u/jdk8u/jdk/rev/af660750b2f4
下载后解压,把 jdk-af660750b2f4/src/share/classes/sun 放到jdk中src⽂件夹中,默认有个src.zip 需要先
解压
把src⽂件加载进来
创建一个Maven项目,不用选择任何Maven模板;在pom.xml中添加如下代码 ...
Java代理与动态代理
Java代理与动态代理代理代理是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。
静态代理静态代理是一种代理模式,它在程序运行之前就已经存在代理类的字节码文件,所以又称为编译时代理或者普通代理。在使用静态代理模式时,需要手动编写代理类,并在其中实现目标对象的方法调用。
下面举个例子: 黄*杰学长给学弟Tree买饭,买饭回来的路上还去买了奶茶
getrice.java 定义一个接口“买饭”
//抽象对象:买饭
public interface getrice {
public void Getrice();
}
Person.java 真实角色, 实现getrice接口
public class Person implements getrice {
public void Getrice() {
System.o ...
URLDNS利用链
URLDNS利用链URLDNS利用链是java原生的一条利用链,通常用来验证是否存在反序列化漏洞,因为是原生的,所以不存在版本限制
特点:
不限制jdk版本,使用Java内置类,对第三方依赖没有要求
目标无回显,可以通过DNS请求来验证是否存在反序列化漏洞
URLDNS利用链,只能发起DNS请求,并不能进行其他利用
HashMapHashMap 是一个存储键值对的容器。 每个键与一个值关联。 HashMap中的键必须唯一。 HashMap在其他编程语言中称为关联数组或词典。 HashMaps占用更多内存,因为每个值还有一个键。 删除和插入操作需要固定的时间。 HashMaps可以存储空值。
基本用法:
创建对象
HashMap<String,Integer> hashMap = new HashMap<>();
添加键值对:
hashMap.put("aa",1);
hashMap.put("bb",2);
hashMap.put("cc",3);
put方法会覆盖原有的value,而另一种pu ...
Java序列化与反序列化
Java序列化与反序列化什么是序列化和反序列化序列化: 把Java对象转换为字节序列的过程
反序列化:把字节序列恢复为Java对象的过程
序列化和反序列化的意义序列化与反序列化的设计就是用来传输数据的。
当两个进程进行通信的时候,可以通过序列化反序列化来进行传输。
序列化的好处:
能够实现数据的持久化,通过序列化可以把数据永久的保存在硬盘上,也可以理解为通过序列化将数据保存在文件中。
利用序列化实现远程通信,在网络上传送对象的字节序列。
**序列化与反序列化应用的场景: **
想把内存中的对象保存到一个文件中或者是数据库当中。
用套接字在网络上传输对象。
通过 RMI 传输对象的时候。
常见的序列化和反序列化协议
XML&SOAP
XML 是一种常用的序列化和反序列化协议,具有跨机器,跨语言等优点,SOAP(Simple Object Access protocol) 是一种被广泛应用的,基于 XML 为序列化和反序列化协议的结构化消息传递协议
JSON
Protobuf
实现序列化和反序列化的方法
java.io.ObjectOutputStream序列化: ...
JNDI注入学习
JNDI注入学习理解JNDIJNDI是Java命名和目录接口,是Java的一个目录服务应用程序接口,它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。——–维基百科
很官方,看不懂 建议看这篇文章理解 https://blog.csdn.net/wn084/article/details/80729230
通俗易懂的解释就是就是把资源取个名字,再根据名字来找资源,就像人的身份证或DNS中的域名与IP的关系
另一种理解:JNDI就是一组API接口。每一个对象都有一组唯一的键值绑定,将名字和对象绑定,可以通过名字检索指定的对象,而该对象可能存储在RMI、LDAP、CORBA等等。
JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等
Java Naming命名服务是一种键值对的绑定,使应用程序可以通过键检索值。
Java Directory目录服务是命名服务的自然扩展。这两者之间的区别在于目录服务中对象可以有属性,而命名服务中对象没有属性。因此,在目录服务中可以根据属性搜索对象。
JNDI允许你访问文件系统中的文件,定位远 ...
Java反射
java反射什么是java反射?Java反射机制是在运行状态时,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。
Java反射的主要类
类:java.lang.Class;
构造器:java.lang.reflect.Constructor;
字段:java.lang.reflect.Field;
方法:java.lang.reflect.Method;
修饰符:java.lang.reflect.Modifier;
Java如何获取一个类JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息;因此,如果获取了某个Class实例,我们就可以通过这个Class实例获取到该实例对应的class的所有信息(下面用String类举例)
直接通过一个class的静态变量class获取
Class cls = String.class;
通过该实例变量提供的getClass()方法获取
Str ...
CVE-2022-39197学习笔记
CVE-2022-39197学习笔记前言该漏洞存在于Cobalt Strike的Beacon软件中,一个 XSS漏洞,允许远程攻击者在 Cobalt Strike 团队服务器上执行 HTML,并实现rce。
漏洞起点Cobalt Strike 接口建立在 Java Swing 框架之上。该框架为开发人员提供了用于 Java 程序的图形用户界面。
根据官方文档 所描述,在开头插入<html>标签后续的内容就会被格式化为html文档进行解析,也就是说支持html标签
测试demo:
import javax.swing.*;
public class test {
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("asdfas");
frame.setDefaultCloseOperation(JFrame ...
三个素性检验
Python实现三个素性检验使用方法:直接运行,根据提示选择模式、输入检验的数n和循环次数k即可
代码import random
import time
def QuickPower(a,n,p):#快速幂算法
tmp = a
ret =1
while(n >0):
if(n&1):
ret = (ret * tmp) % p
tmp = (tmp * tmp) % p
n>>=1
return ret
def Jacobi(n,m):# calc Jacobi(n/m)
n = n%m
if n==0:
return 0
Jacobi2 =1
if not(n&1):#若有n为偶数,计算Jacobi2 = Jacobi(2/m)^(s)其中n = 2^s*t t为奇数
k = (-1)**(((m**2-1)//8)&1)
while not(n&1):
Ja ...
xss-labs靶场练习
xss-labs靶场练习Level 1
观察url的构造,这里是向服务器提交了个名为name的参数,值为text,并且值和值的长度都在页面有回显。
查看网页源码
name参数的值直接插入到了标签之中。那么这样看来这一关主要就是考察反射型XSS。
payload:name=<script>alert('xss')</script>
Level 2
从url地址来看,依然是get方式传递参数,所以猜测考察的还是反射型XSS。只不过这一关将参数名换成了keyword。
查看页面源码
这里有两个地方回显值的地方,利用第一关的payload试试
观察源码,第一处回显处的特殊字符被编码了,不能利用,第二处的回显处可以完整的回显值,可以利用这里构造payload,
这里需要构造闭合
"><script>alert('xss')</script>
Level 3url构造同上一关
页面源码和上一关的差不多,只是双引号变成单引号
尝试构造payload:
'><script ...
DC-7靶场练习
DC-7靶场练习环境kali:192.168.10.128
dc-7:192.168.10.196
信息收集靶机发现:
netdiscover -r 192.168.10.0/24
端口扫描
nmap -sS -sV -T4 -A -p- 192.168.10.196
发现靶机打开了22(ssh)和80(http)端口
打开web端http://192.168.10.196/
这个网站使用的CMS是Drupal8
第一反应就是使用searchsploit和MSF来寻找利用模块,但是尝试了好几个脚本和模块都没有拿到shell
翻译一下首页的内容,获取到一点点线索,并且得到线索在框外部
欢迎来到 DC-7
DC-7 引入了一些“新”概念,但我会让你弄清楚它们是什么。 :-)
虽然这个挑战并不是那么技术性的,但如果你需要诉诸蛮力或字典攻击,你可能不会成功。
您必须做的是“跳出”框框思考。
方法在“外”框。 :-)
回到网页发现Drupal是被DIY过的,重点看首页的footer部分,也就是网页的最下方的黑色区域,靶机的除了”Powered by Drupal”,还多了一个 ...