BCEL ClassLoader
BCEL是什么?
BCEL ClassLoader 本质上是一个自定义的类加载器,属于 Apache Commons BCEL(Byte Code Engineering Library)项目的一部分,主要利用于动态加载和解析 Java 字节码
类名:com.sun.org.apache.bcel.internal.util.ClassLoader
其重写了 Java 的 ClassLoader#loadClass() 方法,可以识别以 $$$BCEL$$$ 开头的字符串,将其解码为字节码并加载为 Java 类;相比于原生的ClassLoader,其不能够直接加载嵌入在字符串中的字节码,必须提供类路径或 URL
由此可见,BCEL ClassLoader 提供了一种更便捷的方式,但同时也带来了安全问题
在JDK 1.8.0_251以前,其属于原生类,再这之后需要引入第三方库
BCEL攻击原理 BCEL ClassLoader先识别以 $$$BCEL$$$ 开头的字符串,随后将其转换为类字节码,最后使用defineClass注册解码后的类,接着就可以加载恶意类
这里我使用的JDK版本为 ...
Phar反序列化
这篇文章其实早就在写了,但不知为何其被我遗留在一个不为人知的的角落里,再不发出来就要发霉了。。。
由于phar遇到的很少,这里只是对其基础知识进行学习,网上有很多师傅更深入了解的文章,也是在这里埋个坑以后继续学习
在PHP中,PHAR(PHP Archive)是一种将多个PHP文件、资源(如图片、样式表)和元数据打包成单个文件的归档格式,类似于Java的JAR文件。它的主要目的是简化代码的分发和部署。
它可以把多个文件存放至同一个文件中,无需解压,PHP就可以进行访问并执行内部语句
phar的文件结构首先我们需要知道php是如何标识一个phar文件的,且是如何从一个phar中访问php文件
Stub(引导程序)stub可以理解为一个phar文件的标识符,类似于可执行文件的“头部”,当直接运行phar时,PHP解释器会首先执行Stub中的代码
其本质上还是一个php文件,必须包含 __HALT_COMPILER(); 语句,通常用于定义自定义的加载逻辑或显示帮助信息,例如
12345<?phpPhar::mapPhar();require "phar://&quo ...
一些打点总结
7.8 ~ 9.8
验证机制与接口安全
短信验证码防护缺失:注意服务器未对短信验证做频率限制的情况,可通过Burp Suite的Turbo Intruder插件进行短信轰炸测试
接口鉴权缺陷:关注接口的鉴权key是否存在无效鉴权或未授权访问漏洞,特别是认证后的链接重定向功能,需检查是否能跳转到任意域外链接
客户端安全与逆向分析
前端加密分析:遇到前端加密时可尝试Js逆向,关键密钥或iv参数有时会硬编码在js文件中
源码泄露利用:注意.app等应用的.js.map文件,可通过reverse-sourcemap工具逆向出源码,查找敏感信息或业务逻辑漏洞
JS文件信息收集:重点关注js文件中泄露的敏感路由、API接口和baseURL,可根据系统或框架特征尝试常用路径
文件处理漏洞
压缩包处理漏洞:遇到自动解压功能时,尝试使用ZipSlip手法进行目录遍历,可能造成文件上传或覆盖(如kkFileView组件)
文件上传绕过:利用混合类型文件生成技术,将图片与PDF等不同格式文件合成,在不同后缀情况下显示为不同类型文件
存储桶配置错误:注意识别存储桶特征,配置不当可能具有ListBuck ...
基于Yapi下的MongoDB NoSQL注入造成的RCE
某次打点时偶遇Yapi管理平台资产,发现其存在版本下 (< 1.12.0) 的nday漏洞,整个攻击过程感觉挺巧妙的,以此记录下对其白盒测试的分析和思考
环境搭建YApi v1.10.2
1docker compose up -d
漏洞复现MongoDB的基础使用MongoDB是一种非关系型数据库 (NoSQL) 是一类不采用传统表格结构来存储数据的数据库,它将数据以类似 JSON 的格式存储,每条记录就是一个文档。这种结构非常适合存储复杂、嵌套的数据
虽然这有点脱离这篇文章的重心,但我觉得还是可以简单了解一下这种数据库的特性
简单来说就是在一些游戏活动场景下,并不是每个用户都会参与活动,如果像关系型数据库那样,给每个用户都添加该活动名的字段,那有很多用户的该字段下一定是空的,这样就会造成大量空间浪费,况且游戏迭代非常频繁,每次都会修改表结构
ID
Name
装备
春节活动
七夕活动
夏日活动
1
Hong
剑
是
2
Ming
枪
是
是
3
Bai
刀
是
但非关系型数据库就不会存在这样的情况,因为每一个文档就是一行数据,那多个文档对应 ...
记 Cobalt Strike 基础使用
启动服务器
1./teamserver <服务端ip> <CS服务端密码>
创建监听器上线客户端后,首先创建一个Beacon
可以看到这里有好几个类型,当然最常见的就是HTTP Beacon
Beacon是一种核心的远程控制组件,是植入目标主机后用于维持访问、执行命令、上传下载文件、横向移动等操作的“后门”,我们可以以此为载荷执行命令、上传下载文件、键盘记录、屏幕截图、横向移动、提权等
正如上图,其支持多种协议,用于不同的场景下
🔄Beacon的通信模式
异步通信:每隔一段时间(由 Sleep 设置)主动向 C2 请求任务并回传结果
交互式通信:实时响应命令(Sleep 设置为 0),适合快速操作但隐蔽性较差
External C2外部控制通道:自定义通信协议,将 Beacon 与 Team Server 连接起来(使用 Python、C、Go 等语言编写自己的第三方控制器和客户端)
Foreign HTTP/HTTPS外部 Beacon 会话:已经通过其他工具植入了 Payload,但想用 Cobalt Strike 的 GUI 来控制它,使用端口 ...
ClassLoder类加载器
以前学习Java反序列化的过程中多多少少接触了一些Java基础知识点,但自己并未系统性的学习过,借此机会来将Java基础巩固一下,也是对Java这门语言有更深刻的认识,二是更快上手Java安全的其它知识
ClassLoder初步感知众所周知,Java是依赖JVM的跨平台语言,其屏蔽了底层操作系统的差异,我们有时看到的.class文件就是被预先编译好的字节码文件,只能被JVM解释编译
当Java程序运行时,JVM并不会一次性加载所有类,而是按需加载,因此java.lang.ClassLoader就充当了一个中间人,加载类的任务由它完成;接着再调用JVM的native方法,从而创建一个 java.lang.Class 实例
ClassLoader类有如下核心方法:
loadClass(加载指定的Java类)
findClass(查找指定的Java类)
findLoadedClass(查找JVM已经加载过的类)
defineClass(定义一个Java类)
resolveClass(链接指定的Java类)
ClassLoder类加载流程主要是两种加载方式,当然加载后都要配合反射去调用输出 ...
NepCTF2025-Web
JavaSeri盲猜Shiro反序列化
1kPH+bIxk5D2deZiIxcaaaA==
有了key直接连
注入内存马后在环境变量中找到flag
RevengeGooGooVVVY这是一个Groovy表达式注入,在了解了基本的语法后发现
禁用闭包功能
1secureASTCustomizer.setClosuresAllowed(false);
禁用execute方法
123if (methodName.equals("execute")) { throw new SecurityException("Calling "+methodName+" on "+ "is not allowed");}
只允许调用string类的合法方法
1234567if (typeName.equals("java.lang.String")) { if (STRING_METHODS.contains(methodName)) { ...
Rootkit学习(二)
Root后门Linux信号机制Linux信号是进程间通信的一种方式,用于通知进程发生了某种事件或异常,其是异步的,可以由内核、其他进程或进程自身触发
比如kill -9 $PID强制杀死进程,其中9定义为SIGKILL,可以在signal.h查看
在64位中64号默认无特殊用途,需手动注册和处理,也许我们可以借助这个信号来埋藏一个后门
因此接下来的这个钩子的思路显而易见,即检查是否信号SIG = 64,否则就还是本身的系统调用sys_kill
1int kill(pid_t pid, int sig);
1234567891011121314151617asmlinkage int hook_kill(const struct pt_regs *regs){ void set_root(void); // pid_t pid = regs->di; int sig = regs->si; if ( sig == 64 ) { printk(KERN_INFO "rootkit: giving roo ...
Rootkit学习(一)
简介&内核理解
“A rootkit is a collection of computer software, typically malicious, designed to enable access to a computer or an area of its software that is not otherwise allowed (for example, to an unauthorized user) and often masks its existence or the existence of other software.”
Rootkit 是一组计算机软件,通常是恶意软件,旨在访问计算机或其软件的某个区域(例如,未经授权的用户),并且通常会掩盖其自身或其他软件的存在。
在内核Rootkit中,编写的代码将通过编写的内核模块以内核级权限运行,其核心技术是函数挂钩(function hooking)
这会在内存中找到需要劫持的内核函数(例如列出目录、进程通信等关键操作);然后实现自定义的恶意版本,同时保留原始函数的副本,以维持系统正常功能;接着通过 ...
Linux中隐藏进程的方法
用户态隐藏进程名伪装 (prctl结合argv[0])在网上看到一个 prctl 函数可以修改当前的进程名,使用方法则在当前逻辑添加代码即可
1234567891011121314151617#include <cstdio>#include <cstdlib>#include <cstring>#include <unistd.h>#include <sys/prctl.h>int main(int argc, char* argv[], char *envp[]){ const char *new_title = "prctl_new_name"; prctl(PR_SET_NAME, new_title, NULL, NULL, NULL); while (true) { sleep(2); } return 0;}
但是好像不起作用
首先我们需要知道的是,ps和top的底层逻辑是读取并遍历/proc目录下的 ...