Hessian反序列化
来学一下Hessian反序列化,主要参考su18师傅的文章:
Hessian简介直接抄su18师傅里面的
Hessian 是 caucho 公司的工程项目,为了达到或超过 ORMI/Java JNI 等其他跨语言/平台调用的能力设计而出,在 2004 点发布 1.0 规范,一般称之为 Hessian ,并逐步迭代,在 Hassian jar 3.2.0 之后,采用了新的 2.0 版本的协议,一般称之为 Hessian 2.0。
这是一种动态类型的二进制序列化和 Web 服务协议,专为面向对象的传输而设计。Hessian 协议在设计时,重点的几个目标包括了:必须尽可能的快、必须尽可能紧凑、跨语言、不需要外部模式或接口定义等等。
对于这样的设计,caucho 公司其实提供了两种解决方案,一个是 Hessian,一个是 Burlap。Hession 是基于二进制的实现,传输数据更小更快,而 Burlap 的消息是 XML 的,有更好的可读性。两种数据都是基于 HTTP 协议传输。
Hessian 本身作为 Resin 的一部分,但是它的 com.caucho.hessia ...
反射修改变量
低版本修改final和static参考文章:https://www.cnblogs.com/noKing/p/9038234.html
修改static变量这里和正常修改普通变量一样都是没问题的
import java.lang.reflect.Field;public class Test1 { public static String str="ceshi"; public static void main(String[] args) throws Exception { Test1 test1 = new Test1(); Class test1Class = Test1.class; //修改static变量 Field str1 = test1Class.getDeclaredField("str"); str1.setAccessible(true); str1.set(test1,"ceshi1" ...
Mysql-JDBC反序列化
来学一下常见的JDBC反序列化,是MYSQL的,参考文章:https://tttang.com/archive/1877/
JDBC简单介绍一个简单的查询demo
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class Main { public static void main(String[] args) throws Exception { //加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //建立连接,可能要设置一下时区,可以设置为上海 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone ...
传统web应用型内存马
这里是本菜鸡开始学习内存马的起始文章
有关内存马的认知可以看看su18师傅的这篇文章:https://mp.weixin.qq.com/s/NKq4BZ8fLK7bsGSK5UhoGQ
有关tomcat源码分析的文章:Tomcat源码初识一 Tomcat整理流程图_tomcat流程图-CSDN博客
然后这里有一篇总结得特别全得内存马文章:https://paper.seebug.org/3120/
这里放一张文章中的源码分析的初始化流程图:
做个参考对大致流程有个概念
调试的时候我突然发现不应该开启tomcat的自动打开浏览器,这样调试访问前或者访问后的逻辑是才不会那么乱😢
因为他默认是在我们访问后才会去创建实例
Servlet内存马简单demo先写一个简单的demo然后再分析一下原理吧,先看看效果
这里用了使用了tomcat8,tomcat10用那个demo有些类找不到
要看源码的话需要导入对应tomcat版本的依赖
<dependency> <groupId>org.apache.tomcat</groupId> <artif ...
Tomcat中间件内存马
其实前面的传统web应用内存马也是tomcat这部分的,因为它基于tomcat进行分析不过问题不大,别的中间件应该也是有这些基本组件的。
Tomcat-Valve内存马valve就是前面文章中说过的阀门,也就是pipeline(管道)机制,想了解得更加细致一点可以看看这篇文章:https://www.cnblogs.com/coldridgeValley/p/5816414.html,也可以看前文提到的总结大全文章。
这里放一张Valve的运行机制图
原理分析经过前面的学习,现在分析起来还是比较简单的,这里就不自己配一个valve了,因为valve属于容器,需要在server.xml或者context.xml那里配置,看看文章就行,或者像文章里直接用springboot来搭建。
Pipeline定义对应的接口是Pipeline,他的实现类是StandardPipeline,Valve定义对应接口Valve,他的抽象实现类是ValveBase,然后四个容器本身有的阀门为StandardEngineValve,StandardHostValve,StandardContextValve ...
javassist学习
因为看到在缩短payload的时候会用到,赶紧来学习一下,参考文章:https://www.yishuifengxiao.com/2023/04/04/javassist%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E7%AC%94%E8%AE%B0/
这是官方文档:http://www.javassist.org/tutorial/tutorial.html
javassist介绍Javassist 是一个开源的分析、编辑和创建Java字节码的类库.;其主要优点在于简单快速. 直接使用 java 编码的形式, 而不需要了解虚拟机指令, 就能动态改变类的结构, 或者动态生成类。
使用前导入jar包
<!-- https://mvnrepository.com/artifact/org.javassist/javassist --><dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifact ...
内存马前置学习
学内存马前就要来学一学java web三大件的相关原理:Servlet、Filter、Listener
参考文章:https://www.cnblogs.com/jadite/p/16951328.html
ServletServlet是什么Servlet是JavaEE规范(接口)之一;Servlet是运行在服务器(Web容器Tomcat等)上的一个 java 小程序,它用来接收客户端发送过来的请求进行处理,并响应数据给客户端。Servlet及相对的对象,都由Tomcat创建,我们只是使用。
Tomcat就是一个servlet容器
Servlet需要完成3个任务:
接收请求:将客户端发送过来的请求封装成ServletRequest对象(包含请求头、参数等各种信息)
处理请求:在service方法中接收参数,并且进行处理请求。
数据响应:请求处理完成后,通过转发(forward)或者重定向(redirect)到某个页面。
Servlet程序实现
实现Servlet接口,重新service方法
在web.xml或者用注解配置映射
Servlet生命周期
执行 Servlet 构 ...
fastjson反序列化
fastjson介绍官方github地址:https://github.com/alibaba/fastjson
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
简单例子
用Json的toJSONString方法将pojo类转换成字符串
package org.clown.Test1;import com.alibaba.fastjson.*;import com.alibaba.fastjson.serializer.SerializerFeature;public class Student { private String name; private int age; public Student() { System.out.println("Student构造函数"); } public String getName() { re ...
flask内存马学习
拖了很久终于来看一下flask内存马这个东西了,主要是发现某新生赛week2就要打flask内存马,赶紧来学了😢
介绍内存马就是无文件webshell,这个不多说了,python的内存马就是在网站运行的时候动态注册一个路由用于任意命令执行。
python的内存马通常会配合ssti或者pickle反序列化等手段来使用,主要是为了解决不出网的情况。
低版本内存马先简单写一个ssti漏洞的flask服务
from flask import Flask,request,render_template_stringapp = Flask(__name__)@app.route('/')def home(): person="guest" if request.args.get('name'): person=request.args.get('name') template = '<h2>Hello %s!</h2>' % person ...
APP渗透抓包环境配置
模拟器代理设置这里用雷电模拟器
ipconfig查看一下本机的IP
然后在burp添加一个新的代理
然后模拟器也自定义该ip地址
证书安装这里如果要抓https还需要安装一下burp证书,参考文章:https://blog.gm7.org/%E4%B8%AA%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93/04.%E7%A7%BB%E5%8A%A8%E5%AE%89%E5%85%A8/06.%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%90%84%E7%A7%8D%E6%96%B9%E5%BC%8F%E6%8A%93%E5%8C%85/
但是Android 从 7.0 开始,系统不再信任用户 CA 证书,安装证书的方式就麻烦一点
首先访问burp的监听地址下载证书
打开文件管理器可以看到证书
然后用kali里的工具openssl计算证书哈希值
openssl x509 -inform der -subject_hash_old -in cacert.der -noout
将证书名改为<hash>.0
mv cacer ...