Lab1在java中对于bash命令的执行会把它按照空格分成三部分,也就是反弹shell命令中只能存在两个空格
序列化脚本如下:
12345678910111213141516171819202122232425package yxxx.javasec.deserialize;import com.yxxx.javasec.deserialize.Calc;import com.yxxx.javasec.deserialize.Utils;import java.io.ByteArrayOutputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Field;public class Test { public static void main(String[] args) throws Exception { Calc calc = new Calc(); Class c = calc.getClass(); Field field = ...
静态代理首先定义一个接口,实现类,以及一个代理类
12345package com.sherlock;public interface IUser { void show();}
123456789101112package com.sherlock;public class UserImpl implements IUser{ public UserImpl(){ } @Override public void show() { System.out.println("展示"); }}
123456789101112package com.sherlock;public class UserProxy implements IUser { IUser user; public UserProxy(){} public UserProxy(IUser user) {this. ...
静态代码块的执行在上文JDK动态代理的代码中,在Person类定义中添加以下几点:
一个静态属性id,一个静态方法,一个静态代码块,一个构造代码块
12345678910public static int id;public static void staticAction(){ System.out.println("静态方法调用");}static { System.out.println("静态代码块调用");}{ System.out.println("构造代码块利用");}
对静态属性调用,会触发静态代码块
1Person.id = 1;
对静态方法调用,也会触发静态代码块
1Person.staticAction();
对类进行初始化,两种代码块都被调用:
1new Person();
class的获取在java中,获取一个类的class,有下面几种方式:
这样只进行了加载,没进行初始化,因此没有任何输出
1Class<?& ...
java反序列化
未读前言12Commons Collections <= 3.2.1jdk <= 8u65
CC1危险的方法调用:Transform.transform()
Transformer接口,该接口主要就是定义了一个接口方法transform()
ConstantTransformer类:ConstantTransformer类中的transform()方法:
返回一个常量,该常量在构造方法调用的时候就确定了,因此,后续不管transform()方法传入什么对象,都将返回构造对象时构造方法传入的那个对象
InvokerTransformer我们可以查看实现这个接口的类(idea中选中接口名+ctrl+h)
然后在其中有一个实现类为InvokerTransformer.java,其中的transform方法如下
可以发现该方法接受任意一个对象实例,进行反射调用执行任意方法
所以让我们来测试一下,我们先看一下InvokerTransformer类的构造函数:接收参数名,参数类型,参数值
测试代码如下,成功弹出计算器
ChainedTransformer类:该类的transfo ...
引用java序列化,看这篇就够了
大白话说Java反射:入门、使用、原理 - 陈树义 - 博客园
序列化的含义、意义及使用场景
序列化:将对象写入到IO流中
反序列化:从IO流中恢复对象
意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
使用场景:所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;所有需要保存到磁盘的java对象都必须是可序列化的。通常建议:程序创建的每个JavaBean类都实现Serializeable接口。
序列化实现的方式如果需要将某个对象保存到磁盘上或者通过网络传输,那么这个类应该实现Serializable接口或者Externalizable接口之一。
Serializable普通序列化Serializable接口是一个标记接口,不用实现任何方法。一旦实现了此接口,该类的对象就是可序列化的;不实现此接口的类将不 ...
前言本篇复盘仅仅是针对于本次比赛中我不会的题目进行一次复盘,对于做出来的题目并不会写上相关的题解
并且仅仅是web方向的题目
Re: 从零开始的 XDU 教书生活该题首先要对题目提供的源码理解透彻,明白每个函数的功能
题目要求是要让每个学生都正常签到才可以获得flag
其实本质上就是需要我们重复发送请求
脚本如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495import requestsfrom Crypto.Cipher import AESimport base64# 请替换为您的靶机BASE_URL = "http://127.0.0.1:8888"def encrypt_by_aes(data: str, key: str, iv: str) ...
借鉴JWT渗透姿势
JWT(JSON Web Token)是一种无状态认证机制,通过将用户身份和权限信息存储在令牌中,实现安全地在网络应用间传递信息。它具有跨域支持、扩展性和灵活性、安全性以及可扩展的验证方式等特点,成为现代应用开发中重要的认证和授权解决方案。
JWT的组成JWT的结构由三部分组成,分别是Header、Payload和Signature,下面是每一部分的详细介绍和示例:
Header 部分在 JWT 中 Header 部分存储的是 Token 类型和加密算法,通常使用JSON对象表示并使用Base64编码,其中包含两个字段:alg和typ
alg(algorithm):指定了使用的加密算法,常见的有HMAC、RSA和ECDSA等算法
typ(type):指定了JWT的类型,通常为JWT
下面是一个示例Header:
1234{ "alg": "HS256", "typ": "JWT"}
Payload 部分Payload包含了JWT的主要信息,通常使用JSO ...
前言本次审计的项目有提供部署的相关步骤和视频教程,但不知为何我自己在搭建的时候会出现莫名的错误导致环境搭建不起来,因此只能fofa上面搜一个来进行测试
fofa语句:"/Mao_Public/js/jquery-2.1.1.min.js"
前台sql注入漏洞首先我们先审计一下主页代码index.php,发现一处sql查询的地方
1234567891011<?php $rs = $DB->query("SELECT * FROM mao_shop WHERE M_id='{$mao['id']}' and (tj='0' && zt='0') order by id desc limit 2"); while($rows = $DB->fetch($rs)){ i ...
前言本次审计的是一个基于tinkphp6框架的U支付系统
在fofa上面搜索:"/usdtmerchant/login/reg.html"便可以找到相关的网站,要注意的是有些网站已经进行了改进,再也不能利用该文章中的漏洞了
前台sql注入漏洞身为一个普通用户,我们能够访问的也就只有index.php,所以我们要从app/index/controller/Index.php开始进行审计
我是在已经知道有该漏洞的情况下进行复现的,所以在该文件中我直接搜索关键字Db,查查是否有可以利用的函数,如下:
1public function send(){ $dd = Db::query(urldecode($_REQUEST['query']));}
该方法允许直接对变量query进行赋值,输入相关的搜索语句,直接运行
该方法并没有对输入的内容进行验证,所以可以尝试是否存在sql注入漏洞
正是因为语句是我们自己输入的,所以并不存在联合注入漏洞,无法报错注入
尝试后可知该方法只要搜索语句正确状态码便是200 ...