浅谈RMI
RMI小记RMI(Remote Method Invocation)也就是远程方法调用,他的目标与RPC(Remote Call Protocol)远程过程调用协议类似,让某个java虚拟机上的对象调用另一个java虚拟机中对象上的方法,只是RMI是Java独有的一种机制。 在网络传输的过程中,RMI中对象是通过序列化的形式进行编码传输,既然有序列化,必然会有反序列化,RMI服务端在接收到序列化后的会将对象进行反序列化。 在反序列化攻击中,我们可能找不到反序列化的点,那么使用RMI就可以作为反序列化利用链的触发点 先来看看下面这个RMI架构: RMI的组成RMI主要分为三个部分: Client客户端:客户端调用服务端的方法 Server服务端:远程调用方法对象的提供者,是代码真正执行的地方,执行结束会给客户端返回一个方法执行的结果 Registry注册中心:本质就是一个map,像一个字典,用于客户端查询服务端调用方法的引用 RMI调用的目的就是调用远程机器的类和调用一个写在本地的类一样 唯一区别就是RMI服务端提供的方法,被调用时方法是执行在服务端 为了屏蔽网络通信的复杂性,RM ...
2023年度总结
2023年度总结这一年感觉学了挺多东西但又感觉没怎么学。 参加了Hacking Group 0571A的线下沙龙,学了些关于RASP还有免杀的小寄巧。 学了些奇奇怪怪杂七杂八的东西,总感觉这一年荒废了很多时间。若是有一个师傅可以带我学安全就好了,哈哈。算了,相信开源的资料还有那么多师傅的文档应该够我用了。 之后会慢慢更新javasec的文档,可能偶尔会有一些云安全的东西。要好好补开发基础了。 这一年,可能也是我情绪波动最大的一年吧,暑假找到了我的女朋友,但是因为某些原因这个暑假跟我分了手同时患上了双相情绪障碍。不过寒假我们又在一起了,并正式确定了关系,希望这次可以一直走下去,我也会好好陪着她,治好她的双相。 最后谢谢肖鹿的扮演者邹佳佳,谢谢你在我迷茫的时候通过肖鹿这个角色走进了我的生活。24群骑士团会一直守护着佳佳。 师傅们,新年快乐。
RWCTF-Web-Old_Shiro复现
RWCTF-Web-Old_Shiro复现当时做这题的时候shiro-tools一把梭没梭出来,没考虑到他不出网不能反弹shell,没好好看docker-compose文件(悲)。 先把key爆破了 这里就拿到key了 然后我们看配置文件,有限制header的长度 123# application.propertiesserver.max-http-header-size = 3000server.port=8888 那么就得缩小我们的payload,可以看看这篇文章=>终极Java反序列化Payload缩小技术 因为不出网所以可以尝试直接读取根目录下的flag 123456Object attr = java.lang.Class.forName("org.springframework.web.context.request.RequestContextHolder").getMethod("currentRequestAttributes", new java.lang.Class[ ]{}).invoke(nu ...
闲谈ClassLoader
闲谈ClassLoader总算放假了,摆了几天,幻兽帕鲁真上头(x。RWctf的那道shiro凹了半天反弹shell没成功是我没想到的,还是菜了。这篇文章就来讲讲Java的类加载机制吧,类加载机制之前在反射机制那篇文章里提到过,这次就来详细说说。 Java是一个依赖于JVM(Java虚拟机)实现的跨平台的开发语言。Java程序在运行前需要先编译成class文件,Java类初始化的时候会调用java.lang.ClassLoader加载类字节码,ClassLoader会调用JVM的native方法(defineClass0/1/2)来定义一个java.lang.Class实例 我们先来看一下JVM的架构图 ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。 Java类先来简单了解下Java类 接下来我们自己写一个测试类 123456package com.deicide.sec.classloader;public class TestHelloWorl ...
浅谈Java反射机制
浅谈Java反射机制这篇文章算是我做javasec的开始吧,这也是我学习P牛的Java安全漫谈以及Java Web 安全的文档的第一篇笔记,下一篇应该得到寒假写了,要期末周了,有点痛苦。 Java反射(Reflection)是Java非常重要且好玩的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法(Methods)、成员变量(Fields)、构造方法(Constructors)等,还可以动态创建Java类实例、调用任意的类方法、修改任意的类成员变量值等。 反射机制原理在Java 程序中,JVM 加载完一个类后,在堆内存中就会产生该类的一个 Class 对象,一个类在堆内存中最多只会有一个 Class 对象,这个Class 对象包含了该类的完整结构信息,我们通过这个 Class 对象便可以得到该类的完整结构信息。 反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。 反射机制原理示意图👇 那么如果我给出下面这段代码,在你不知道传入的参数值的时候,你能知道他的作用吗 1234public void execute(String class ...
SQL注入补充
SQL注入补充好久没写文章了,主要是最近在学java开发,也不知道记录些啥。 上周六(2023.11.11)去参加HackingGroup的一个闭门会议,有师傅讲到一个关于绕过语义分析的好玩的东西,就来记录(转载)一下 原文链接 => 安全研究所 | 突破语义分析的黑魔法 语义/词法分析词法分析目前,SQL注入的词法分析主流可以分为两类: 基于弱规则词法黑名单 基于此法Token变化 其中基于弱规则词法黑名单的算法有被用于大家熟知的 Libinjection ,它使用基于机器学习的技术,通过分析输入字符串的语法和语义特征来检测SQL注入攻击。主要是通过将用户的输入进行Token化,然后再去匹配一份维护好了的SQL注入黑名单规则库,从而有效发现SQL注入问题。 各种输入的对应词法如下: 123456789101112131415161718192021222324252627282930typedef enum { TYPE_NONE = 0 , TYPE_KEYWORD = (int)'k' , TYPE ...
SICTF2023_Round2_WP_By_D3ic1de
WebInclude挺简单的一个文件包含,没啥过滤的,直接来 题目描述中说flag位于flag.php,直接 1http://ip:port/?SICTF=php://filter/read=convert.base64-encode/resource=flag.php base64解密之后得到flag.php的源码 12345678<?php$file_path = "/flag";if (file_exists($file_path)) { $flag = file_get_contents($file_path);}else{ echo "error";} 发现真正的flag在/flag下 1http://ip:port/?SICTF=php://filter/read=convert.base64-encode/resource=/flag base64解码,拿到flag Baby_PHP这题考了些php的语言特性 1http://ip:port/?k%20e%20y=123%0A ...
PHP反序列化
PHP反序列化php面向对象基础知识类类:定义类名、定义成员变量(属性)、定义成员函数(方法) 12345678910class Class_Name {//成员属性声明//成员方法声明}//举个栗子class hacker{ var $name; var $sex; function } 序列化基础知识魔术方法12345678910111213141516__construct() // 类的构建函数__destruct() // 类的析构函数__call() // 在对象中调用一个不可以访问方法时调用__callStatic()// 用静态方法中调用一个不可访问方法时调用__get() // 获得一个类的成员变量时调用__isset() // 当对不可访问属性调用isset()或empty()时调用__set() // 设置一个类的成员变量时调用__unset() // 当对不可访问属性调用unset()时被调用__sleep() // 执行serialize()时 ...
Python原型链污染
Python原型链污染简介这一期主要是自己在打DASCTF2023七月暑期挑战赛遗憾爆0之后,在复现的时候想搞清楚这一类的攻击方式及解题技巧 类似于Javascript中的原型链污染一样,这种攻击方式可以在Python中实现对类属性值的污染。需要注意的是,由于Python中的安全设定和部分特殊实行类型限定,并不是所有的属性都是可以被污染的,不过可以肯定,污染只对类属性起作用,对于类方法是无效的。 不过由于Python中变量空间的设置,实际上还能做到全局变量中的属性实现污染。 那就索性把Javascript的原型链污染也一块说了好了,免得再出一期Javascript的原型链污染,主要是懒(bushi 那就先来说一下原型链污染是什么 原型链污染一般的原型链污染我们通常指的是针对于Javascript运行时的注入攻击。通过原型链污染,攻击者可能控制对象属性的默认值。这允许攻击者篡改应用程序的逻辑,还可能导致拒绝服务,或者在极端情况下,远程执行代码。 比较出名的一个原型链污染漏洞,是在2019年初,在Snyk的安全研究人员透露出流行的JavaScript库—Lodash的严重的漏洞,这允许黑客 ...
Docker命令
Docker命令底层原理在说Docker命令前先简要说一下它的原理 Docker是怎么工作的?Docker是一个Client-Server结构的系统,Docker的守护进行运行在主机上。通过Socket从客户端访问。 DockerServer接收到Docker-Client的指令,就会执行这个命令 Docker为什么比VM快 Docker有着比虚拟机更少的抽象层 Docker利用的是宿主机的内核,vm需要的是Guest OS 新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。 帮助命令123docker version # 显示docker版本信息docker info # 显示docker系统信息,包括镜像和容器的数量docker <命令> --help # 帮助命令 帮助文档地址:Reference documentation | Docker Documentation 镜像命令docker ...