Awesome
JavaSec
0.For Me
仅仅只是想写给自己看
一个记录我Java安全学习过程的仓库,本仓库不是真正意义上的教学仓库(rep中的内容都是我在平时的一些笔记没有很强逻辑性,内容水平自然也是参差不齐,可能有些对我来说很简单的便忽略不计对其他人来说却是难点,因此作为一个学习目录的话可能会好很多),单纯这是笔者简单记一些笔记,顺便见证自己从0到0.1的过程吧,另外后面如果看到一些好的东西在学习完之后也会贴上链接,少了很多介绍性的东西,以后等厉害了再慢慢补充吧.当然如果感觉还不错的话,师傅们记得给个 Star 呀 ~
<p align="right">@Y4tacker</p> <p align="right">2021年10月18日,梦的开始</p>1.基础篇
- Java反射
- Java动态代理
- JNDI注入
- 反序列化
- 类加载器与双亲委派模型
- 两种实现Java类隔离加载的方法(当然同名目录下也有pdf,防止以后站不在了)
- ClassLoader(类加载机制)
- SPI学习
- JavaAgent
- Java9模块化特性
- JMX
- JDWP远程执行命令
- Tomcat中容器的pipeline机制(学了以后更好帮助Tomcat-Valve类型内存马理解)
- ASM学习+Class文件结构了解+JVM一些简单知识
- Xpath注入
- JSTL(看菜鸟教程即可)
- JEP290基础概念
- Java中的XXE
- 通过反射扫描被注解修饰的类
- 低版本下Java文件系统00截断
- 有趣的XSS之Normalize
- 红队-java代码审计生命周期(带你简单了解审计)
2.反序列化
很早前学了,后面补上,更多是说一点关键的东西,不会很详细,好吧这里再拓展成反序列化专区好了
如果想系统学习CC链、CB链的话这部分还是推荐p牛的Java安全漫谈,我只是简单写写便于自己复习而已(这部分看我下面的share并不适合新人,过了这么久看过网上很多文章还是觉得P牛写的更适合新人)
- Java 反序列化取经路(强推)
- Java反序列化之URLDNS
- CommonsCollections1笔记
- CommonsCollections2笔记
- CommonsCollections3笔记
- CommonsCollections5笔记
- CommonsCollections6-HashSet笔记
- CommonsCollections6-HashMap笔记
- CommonsCollections6-Shiro1.2.4笔记
- CommonsCollections7笔记
- CommonCollectionsWithoutChainedTransformer
- 使用TemplatesImpl改造CommonsCollections2
- 网上看到的套娃CommonsCollections11
- CommonsBeanutils1笔记
- CommonsBeanutils1-Shiro(无CC依赖)
- FileUpload1-写文件\删除文件
- C3P0利用链简单分析
- C3P0Tomcat不出网利用(思路就是之前高版本JNDI注入的思路)
- 反制Ysoserial0.0.6版本-JRMP
- SnakeYAML反序列化及可利用Gadget
- SnakeYAML出网探测Gadget(自己瞎琢磨出来的,不过在1.7以下版本就不行)
- XStream反序列化学习
- 解决反序列化serialVesionUID不一致问题(BestMatch:打破双亲委派对jbxz用工具最方便)
- 自己搞的把ROME利用链长度缩小4400-1320(Base64)
- JDK7u21
- AspectJWeaver写文件
- 反序列化在渗透测试当中值得关注的点
- UTF-8 Overlong Encoding导致的安全问题(在绕过流量设备上非常有帮助)
- 构造java探测class反序列化gadget
- 利用Swing构造反序列化SSRF/RCE(JDK CVE-2023-21939)
- Hessian反序列化
3.Fastjson/Jackson专区
可以对比jackson简单学习下,这里我也会简单提一下jackson的一些利用,当然不会很详细,但是会简单列出一些触发原理,而且有些payload是共通的,这里也不以收集各个依赖下利用的payload为主
-
Jackson
-
Fastjson
-
其他
4.Weblogic专区(虽然也挖了一堆,暂时不想写)
5.内存马学习专区
-
基础知识
-
Tools
6.JavaAgent学习专区
- Java Instrument插桩技术初体验
- PreMain之addTransformer与redefineClasses用法学习
- AgentMain(JVM启动后动态Instrument)
- 通过JVMTI实现C/C++的JavaAgent交互
后面因为一些原因打算更系统学习,感觉在这里面直接添加有点臃肿,故开了一个新的repo来记录整个学习阶段,移步RaspLearning
7.Struts2学习专区
一开始不想搞这个是因为很少人用了,后面想了一下可以具体看看struts2当中对OGNL策略如何做提升处理学学别人的绕过(Ps:不教怎么复现搭建环境)
- Struts2简介与漏洞环境搭建
- S2-001学习(由于是第一篇我还是分析的比较详细,后面不会重复本篇里面的一些流程内容)
- S2-002学习(太鸡肋了感觉实战也比较难出现)
- S2-003学习(比较有趣的一个洞很多小细节)
- S2-005学习(通过Ognl将上下文_memberAccess中的acceptProperties设为空绕过)
- S2-007学习(字符串拼接导致OGNL解析)
- S2-008学习(很鸡肋,稍微有点用的有开启devMode解析任意Ognl)
后面突然觉得调试的过程很无聊我也不感兴趣,更感兴趣的是关于Struts当中Ognl的攻防所以后面更偏向于这方面研究,而不再具体跟踪中间的调用过程
- S2-015学习(静态方法受限制以及没有setAllowStaticMethodAccess后如何绕过)
- S2-032学习(清空_memberAccess当中excludedXXX限制通过构造函数调用/使用DefaultMemberAccess覆盖SecurityMemberAccess绕过限制)
- S2-045学习(通过container获取全局共享的OgnlUtil实例来清除SecurityMemberAccess当中属性的限制)
- S2-057学习(突破#context被删除限制,从attr作用域获取context对象)
- S2-066学习(变量覆盖的有趣的例子)
8.关于Tomcat的一些小研究
9.JDBC Attack
关于Make JDBC Attacks Brilliant Again的简单记录,当我们在 JDBC Connection URL可控的情况下,攻击者可以进行什么样的攻击?这部分可以配合探索高版本 JDK 下 JNDI 漏洞的利用方法来进行拓展攻击
10.关于JNDI的整理
因为比较重要单独列出来了
- Java RMI 攻击由浅入深(深入源码,师傅写的很好)
- 如何绕过高版本 JDK 的限制进行 JNDI 注入利用
- (自己写的流程补充)高低版JDK下的JNDI注入绕过流程跟踪
- 探索高版本 JDK 下 JNDI 漏洞的利用方法
- JNDI jdk高版本绕过—— Druid
11.Spring
- 浅谈SpringWeb请求解析过程(很不错的文章把低版本一些绕过的特性基本都提到了)
- 浅谈Spring与安全约束SecurityConstraint
- SpirngBoot下结合Tomcat实现无OOB方式下的回显
- 低版本SpringBoot-SpEL表达式注入漏洞复现分析
- SpringCloud-SnakeYAML-RCE(高版本不可用)
- Spring Boot Vulnerability Exploit Check List
- SSRF to Rce with Jolokia and Mbeans
- CVE-2022-22947 SpringCloudGateWay 远程代码执行
- Spring Cloud Function-SPEL(利用面不大)
- SpringMVC框架任意代码执行漏洞(CVE-2010-1622)分析
- Spring Beans RCE分析(CVE-2022-22965)(我还是喜欢叫Spring4shell,自己懒得写了,这篇还可以,稍微注意下AccessLogValve这个类WBS)
- Spring Data MongoDB SpEL表达式注入(CVE-2022-22980)(能看但是有些逻辑还是讲得很混乱总体而已还是好的作为参考即可)
- SpringBoot全局注册Filter过滤XSS
- Springboot devtools反序列化(难点在于secret的获取,当然比如有actuator端点暴露情况下就会变得容易)
- 浅谈Spring中的Controller参数的验证机制(注意Hibernate Validator的正确配置)
12.Shiro
- Shiro RememberMe 漏洞检测的探索之路(长亭的一些总结非常不错)
- Shiro另类检测方式
- 浅谈Shiro执行任意反序列化gadget的方案
- CVE-2010-3863权限绕过(通过/./admin绕过/admin,/abc/../admin)
- CVE-2016-6802权限绕过(通过/abc/../y4tacker/admin绕过)
- Shiro550-TemplatesImpl(CC6-Shiro)
- CommonsBeanutils与无 commons-collections的Shiro反序列化利用
- 另类的shiro检验key的检测方式
- shiro反序列化漏洞攻击拓展面--修改key
- Tomcat-Header长度受限突破shiro回显
- Spring下Shiro<1.5.0权限绕过(/unauthorize/)
- CVE-2020-13933特殊场景权限绕过(通过/unauthorize/%3b)
- SpringBoot2.3.0下Shiro<=1.5.1权限绕过(通过/aa;/%2e%2e/unauthorize绕过对/unauthorize拦截,当然也可以不用目录穿越/;y4tacker/unauthorize也可以)
- Spring-Shiro1.5.2 Bypass(通过/unauthorize/a%252Fa绕过对/unauthorize/*的权限限制)
- 记一次 Shiro 的实战利用(突破限制shiro 550利用payload的长度,这种方式不能很好对抗检测文件落地,其实也可以配合上下文一些无害属性多次set写入加载)
13.回显相关技术学习
14. JSPWebshell
- JSP-Webshells集合(三梦的总结挺全面的利用点)
- JspWebShell新姿势解读
- jsp新webshell的探索之旅
- JspWebshell编码混淆篇(unicode和html实体编码那些就懒得写了技术性不强)
15.Waf
- Java文件上传大杀器-绕waf(针对commons-fileupload组件)
- 探寻Java文件上传流量层面waf绕过姿势系列一
- 探寻Java文件上传流量层面waf绕过姿势系列二
- Java反序列化数据绕WAF之加大量脏数据 | 回忆飘如雪 (gv7.me)
- Java反序列化脏数据新姿势-对大师傅的姿势补充(个人的小研究)
- Fastjson词法引擎绕waf
- RCE via SSTI on Spring Boot Error Page with Akamai WAF Bypass
16.漏洞复现
- Apache
- Apache Commons Configuration 远程代码执行(虽然是配置文件RCE但也有学习意义)
- Apache Spark shell command injection vulnerability via Spark UI(之前很早前在我的各个知识星球分享了)
- Apache Commons JXPath 远程代码执行
- Apache Commons Text 远程代码执行
- Log4j2-RCE分析
- Apache Flink RCE via jar/plan API Endpoint in JDK8
- Apache Dubbo 反序列化漏洞(CVE-2023-23638)分析及利用探索
- Apache Dubbo反序列化漏洞(CVE-2023-23638)完整利用及工程化实践
- Apache Airflow: Bypass permission verification to view task instances of other dags(CVE-2023-42663)
- Apache Jackrabbit RMI 远程代码执行漏洞分析(CVE-2023-37895)(这个漏洞适合了解RMI攻击的基础)
- Apache ActiveMQ Jolokia远程代码执行不依赖JDK打法
- Apache OFBiz
- Oracle
- Spring
- Nacos
- Adobe
- Smartbi
- CrushFTP
- Others
- HtmlUnit-RCE
- openfire鉴权绕过漏洞原理解析(主要是学习jetty对%u002e请求的解析支持)
- Metabase-Pre auth RCE
- Ivanti Sentry Authentication Bypass
- 浅析GeoServer property 表达式注入代码执行(CVE-2024-36401)
- UNAUTHENTICATED SERVER SIDE REQUEST FORGERY & CRLF INJECTION IN GEOSERVER WMS(CRLF注入的好例子)
- JetBrains TeamCity 任意代码执行漏洞分析(CVE-2023-42793)
- JetBrains TeamCity权限绕过(CVE-2024-23917)(这篇文章还讲解了一些容器与SpringBoot的流程知识)
- SysAid On-Prem Software(CVE-2023-47246)
- MCMS属性覆盖全版本Bypass分析(又又又是一个属性覆盖带来的漏洞)
- Atlassian Confluence-Remote Code Execution(CVE-2023-22527)
- Jenkins文件读取漏洞拾遗(CVE-2024-23897)
17.模板引擎+表达式相关
-
模板引擎
-
表达式
18.各框架对URI处理的特性及Trick
- Tomcat URL解析差异性导致的安全问题(网上看到的主要关注HttpServletRequest中几个解析URL的函数这个问题)
- Tomcat中url解析特性
- SpringBoot2.3.0以下路由%2e跨目录处理(可用于权限绕过)
- 网上看到的Jetty的部分解析特性(支持%uxxx)
- 浅谈JFinal的DenyAccessJsp绕过
19.ASM与JVM学习
- JAVA虚拟机执行模型(关注引入了栈映射帧,用于加快虚拟机中类验证过程的速度)
- What is a stack map frame
- 这里比较有意思的是:Java 1.7引入了此选项以加速类验证。框架分为两部分:变量类型和堆栈类型。第一帧由方法类型描述。在每个GOTO / JUMP调用之后,您需要提供堆栈映射框架的更新描述。为了节省空间,可以使用SAME,APPEND等选项,也可以通过指定变量类型的FULL数组再次描述所有变量。
- 为什么JVM需要DUP指令
20.议题
其他分享
- JMX
- GadgetInspector源码分析
- CVE-2021-2471 JDBC-XXE漏洞分析
- spring-messaging 远程代码执行漏洞分析
- CVE-2020-9484 Tomcat-RCE漏洞分析报告(备注:三梦师傅的文章,提升了我对Tomcat配置的了解)
- Java “后反序列化漏洞” 利用思路
- 关于Servlet的线程安全问题
- BypassSM
- Spring Boot FatJar任意写目录漏洞导致Getshell
- 利用TemplatesImpl执行字节码
- 为什么补丁都喜欢打在resolveClass
- Java沙箱绕过
- 一种普遍存在于java系统的缺陷 - Memory DoS
- 如何关闭百度的Rasp
- 漫谈 JEP 290
- Java Web —— 从内存中Dump JDBC数据库明文密码(还挺好玩的)
- 如何带依赖打包Jar
- 一些Java二次反序列化的点(持续收集)
- 自己写的OpenRasp分析
- Apache Unomi 表达式注入攻防
- JEXL3表达式注入
- 利用JVMTI实现JAR包加密(还没看很牛逼就是了)
- 安全同学讲Maven重打包的故事
- 某软件监控页面RCE漏洞分析(虽然过于简单,但是可以借此了解下OA系统)
- JDK-Xalan的XSLT整数截断漏洞利用构造
- 某Cloud系统漏洞分析
- 任意文件下载漏洞的利用思考(总结非常细!)
- jdk新入口挖掘(新的toString链)
比赛反思
特地加了一栏吧,希望从比赛当中了解Java相关的东西学习一些新的点!
- Codegate2022(关键词:绕过开头file协议读文件、xpath注入读系统配置)
- SUSCTF2022(关键词:绕rasp、fastjson、xxe)
- D^3CTF2022(关键词:ROME链缩短、Mybatis与Ognl)
- 虎符CTF2022(关键词:Hessian反序列化、Rome二次反序列化、java.security.SignedObject#getObject、UnixPrintService命令执行、Tabby)
- MRCTF2022(关键词:Kryo反序列化、Rome二次反序列化、内存马、Bypass SerialKiller黑名单-找替代类)
- GoogleCTF2022(关键词:Log4j2、Bundle、ReDoS)
- UIUCTF2022-Spoink(关键词:Pebble最新模板注入Bypass、Spring中无路由上传文件处理)
- TetCTF2023&Liferay(CVE-2019-16891)(Pre-Auth RCE)
环境
Todolist
- 解决反序列化serialVesionUID不一致问题--已经拿下
- Dubbo学习之后开启
- 无文件落地Agent型内存马植入(Java内存攻击技术漫谈-Rebyond)
- 自己对所有文件上传框架Trick总结
- 消化腾讯大师傅写的关于文件上传waf
注意事项
- 本仓库仅用于合法合规用途,严禁用于违法违规用途。
- 本工具中所涉及的漏洞均为网上已公开。
优质博客
知识星球
<br/> 知识星球试运营,后面主要会发一些应急漏洞的分析(前提我会😜)Ps:想不想进随意,大部分漏洞我都会发在博客当中,少部分自己觉得不那么有意思的漏洞可能只会发在星球中,谁让我喜欢为爱发电呢(当然大0day不会发)
<img src="https://github.com/Y4tacker/JavaSec/assets/56486273/08eab771-b1cd-4d97-a3a9-173b78fdc997" align="center"></img>