Java反射机制
有反射必然就有正射,而正射就是我们平时写代码的正常逻辑。直接通过类和对象调用其方法或访问其属性,这种方式是静态的,意味着编译时就已经确定了方法的调用以及对象的属性访问
1234567891011121314package org.example;class MyClass { public void sayHello() { System.out.println("Hello, World!"); }}public class Main { public static void main(String[] args) { MyClass myClass = new MyClass(); myClass.sayHello(); }}
Quote
Reflection is commonly used by programs which require the ability to examine or modi ...
JSP类加载机制
前置知识
什么是 JSP
JSP (JavaServer Pages),其是 JavaEE 标准规范的组件之一。其主要关于如何动态生成网页
JSP 是一种服务器端的渲染技术,它允许在 HTML 页面中直接嵌入 Java 代码(通常用 <% ... %> 标签包裹)。本质上经过编译后的 JSP 就是一个 Servlet 文件,JSP 只是 Servlet 的一种高级表现形式,我们可以与 PHP、ASP、ASP.NET 等类似的脚本语言进行类比
既然说到了 JSP,我认为可以先了解一下 Web 容器的一些基础概念,这是一种用于运行 Java Web 应用程序的环境,支持运行Java Servlet、JavaServer Pages (JSP) 和其他基于 Java 的 Web 组件
在 Web 应用中,不仅仅只有一个 HTTP 的请求和相应功能,Java Web 容器就还包括:
HTTP 请求/响应处理:内置支持 HTTP 协议的解析和通信。
会话管理:提供 Session 和 Cookie 的管理。
生命周期管理:Servlet、Filter 等组件的加载、 ...
SQL-Injection-Bypass
每次去找零散的 bypass 很麻烦,而且网上一些 bypass 语句并未做完整说明,想着不如自己搞一份 bypass 文档好了(这个文档会持续更新,一点点累积起来)
MYSQL
过滤空格
1.使用注释符 /**/
1select * from testtable where name = '' union/**/ select 1,2,3,version() #';
2.使用空白字符
1%0a %09 %0c %a0 %0b %0d %20
%a0 只能在特定字符集 latin1 使用,其是一个单字节字符,直接代表不间断空格
3.使用浮点数
1234select * from testtable where id = 1E0union select 1,2,3,4;select * from testtable where id = 1.0union select 1,2,3,4;select * from testtable where id = 1.union select 1,2,3,4;select * from testtable wher ...
2025 春秋杯网络安全联赛冬季赛个人赛
Web1
信息收集与资产暴露
HyperNode
Info
考点:目录穿越
目标系统是一个号称“零漏洞”的自研高性能区块链网关。管理员声称其内置防火墙能拦截所有路径探测。你的任务是探测其底层解析逻辑的缺陷,绕过防御读取服务器中的flag
根据提示应该是考查目录穿越,可以在主页的每个 markdown 文档看到
全部位于 ~/blog_content/view 目录下;还有一点我们现在是以 admin 权限来访问这些文件,在主页中开源仓库不能以 admin 权限访问
再者发现通过搜索可以看到,执行 grep 命令时是以 system 权限运行,这里可以合理猜测应该通过搜索来进行变相的权限提升
但后续又发现这里转义挺严格的,基本上是输入什么返回什么,最终在 id 这里发现其解析文件包含了路径
接下来就是绕过一下,URL 编码即可
Static_Secret
Info
考点:目录穿越
开发小哥为了追求高性能,用 Python 的 某个库 写了一个简单的静态文件服务器来托管项目文档。他说为了方便管理,开启了某个“好用”的功能。但我总觉得这个旧版本 ...
React2Shell CVE-2025-55182 复现及原理分析
今天早上起来也是被该漏洞披露刷烂了,网安圈几乎都在讨论这个话题:Critical Security Vulnerability in React Server Components
CVSS 评分甚至给到了满分,据说甚至可以媲美当年的 Log4j,赶上这个话题热度借此复现一波
此次复现基于源于上游 React 实现 CVE-2025-55182,使用 CVE-2025-66478 App Router 跟踪对 Next.js 应用程序的下游影响
时间 2025.12.4,网上普遍流行的 poc 只是理想化了显式暴露注册危险模块,正常情况下 Next.js 只注册业务函数
漏洞披露者 Lachlan Davidson 也在 https://react2shell.com/ 发布了关于无效概念验证的说明
12345678910111213141516171819202122const serverManifest = { 'fs': { id: 'fs', name: 'readFil ...
关于预编译与宽字节注入的再思考
前言
关于对预编译的思考还要追溯到大一上寒假,当时在进行登录系统部分的编写时,为了防止 SQL 注入,进行了简单的预编译处理。后来看到了一篇文章 “预编译真的能防止 SQL 注入吗?”,了解了模拟预编译的概念,以上是在 PHP 代码的基础上来谈
关于预编译与宽字节注入可以看看这两篇文章:浅谈预编译之于 SQL 注入防御、预编译与 SQL 注入
当然我也是在不同时间段看了这两篇文章有了自己当时复现遇到的困惑,当然只是我自己在一开始没有提炼出来
因此想记录一下自己摸爬滚打的过程
预编译下的宽字节注入
这是一个 demo 代码
1234567891011121314151617<?phptry { $pdo = new PDO('mysql:host=localhost;dbname=testsql', 'root', '123456'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->que ...
GeekGame 2025 Web部分题解
官方归档
Web
小北的计算器
有源码,整体是对输入做了过滤,有几个函数
checkSafetyRegex
1234567891011function checkSafetyRegex(code: string) { const whitelist = /^[a-zA-Z0-9_+\-*/%() ]+$/ if (!whitelist.test(code)) { throw new Error('Bad Code') } const blacklist = /(eval|Function|__proto__|constructor|prototype|window|document|import|require|process|globalThis|self|global|this|module|exports|fetch|new|confirm|alert|prompt|%[0-9a-f]{2})/i if (blacklist.test(code)) { throw ne ...
Xalan ClassLoader
看到这个字眼时还是很熟悉的,能够直接想到 TemplatesImpl 链子,以前做过一道 2023 巅峰极客 BabyURL 就用到了这个链子,自己当时也是分析过 ,也是很久以前的事情了,这次就巩固总结一下吧
TemplatesImpl 类位于 com.sun.org.apache.xalan.internal.xsltc.trax 包中,是 Java 标准库的一部分
其主要作用是处理 XSLT(Extensible Stylesheet Language Transformations);XSLT 是一种用于将 XML 文档转换为其他格式(如 HTML、文本或其他 XML 文档)的技术。
但由于其内部加载字节码的机制,因此可以被滥用于反序列化漏洞利用。其关键机制是 TemplatesImpl 类内部维护了一个 _bytecodes 字段,这是一个用于存储类的字节码(对其注入恶意代码),这种原生依赖限制在 Java 9 以前的 JDK 版本下
寻找利用
大同小异,对于 ClassLoader 类加载器,我们能够想到的是加载恶意类直接利用,如果你熟悉 ClassLoader 的加载 ...
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版本为1.7 ...
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:// ...









