小迪安全java入门

thinkphp有内置过滤sql;相比原生态

特定版本的sql注入

逻辑越权 sql注入插值实现修改uid 普通到管理员

暂且把前两集的php也放在这里

本期直接从JAVA EE讲起,听上去还是比较困难

Servelet、预编译

Servlet:在JavaEE平台上,处理TCP连接,解析HTTP协议这些底层工作统统扔给现成的Web服务器去做,我们只需要把自己的应用程序跑在Web服务器上。为了实现这一目的,JavaEE提供了Servlet API,我们使用Servlet API编写自己的Servlet来处理HTTP请求,Web服务器实现Servlet API接口,实现底层功能。 Servlet入门 - Java教程 - 廖雪峰的官方网站

war,表示Java Web Application Archive

要运行war 需要支持的Web服务器,比如:Tomcat

servelet mapping和@webservelet 实现路由或url路径的配置

类继承 servelet 实现两种http请求方法,覆写doGet()doPost(),传入了HttpServletRequestHttpServletResponse两个对象,分别代表HTTP请求和响应。

生命周期:先init、servelet、HTTP方法、GET/POST

预编译:先执行数据库逻辑、不同逻辑的sql语句失效

内存马

是一种在运行时加载到内存中的恶意软件,它不会直接修改磁盘上的文件,因此很难被传统的基于文件的检测工具发现。在Java环境中,内存马可以利用Listener和Filter等机制来实现其目的。

内存马技术确实可能出现在Listener和Filter中,并且只存在于内存里,因为它们可以通过动态加载类或者使用像Java Reflection这样的特性来改变程序的行为而不需要修改任何实际部署的.class文件。这类攻击通常会在服务器启动或某个条件满足时通过某种方式(例如远程命令执行漏洞)将恶意代码加载进内存中。

我的小迪安全笔记-合集

预编译

Filter、Listener

implement

init和destroy都是在中间件服务启动和结束时触发

Filter:过滤不安全内容

java cookie获取,判断进入admin界面 ;直接F12修改

反射

构造方法和成员方法

添加异常到方法签名

序列化

writeobject 序列化为字节流

利用ObjectInputStream 读入文件和readobject 实现原生的序列化与反序列化

重写readobject直接调用危险方法,相当于执行序列化对象的readObeject方法

步入步出(第三方类)调试

构造函数/静态代码块隐式触发:

包含可控类,里面自带readobject

hashmap<url,integer>

dnslog获取的地址是

hashcode DNS访问

Log4j Fastjson JNDI注入 36

配置maven,之后Maven Repository: org.apache.logging.log4j » log4j-core » 2.14.1;加载maven更改;外部库就会增加新的第三方库 以后要是对于某个第三方库感兴趣,可以直接在这里看版本对应的CVE,如果深入学习代码审计的话;不过问了GPT也有道理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
初期重点放在经典组件漏洞的主CVE + 中小型Java项目源码审计,
不需要一开始就去深挖 log4j、shiro 等“不出名的CVE”。
不出名的组件CVE学习价值较低(初期)
很多CVE只是补了一点边缘case(例如某版本下某配置才触发),学习成本高但实际复现和实战意义不强。
如果你没有调试经验,理解那些补丁diff反而会卡住你。
大量不出名CVE还涉及跨多个依赖组件,搞清楚依赖链本身就很花时间。
✅ 所以:初学阶段专注于 知名利用链和通用攻击面(反序列化、JNDI、EL表达式注入)收益更高。
中小型Java项目源码审计锻炼“代码分析+漏洞定位”的实战能力
真实业务逻辑往往藏着未公开的漏洞,比如:
上传绕过
任意文件读取
接口权限控制不严
它们不会出现在 CVE 数据库里,但在 渗透测试 和 漏洞挖掘 中非常常见。
你会从“看一个完整项目”中,提升审计思维,如:
如何从登录出发找权限控制点?
用户上传的入口在哪?
有没有危险的EL表达式?
✅ 这类练习是你后续能自己写exp/挖day的基础

计算机很多实操还是看博客+视频,有个直观的理解,就不困难了

老师手log4j的漏洞利用不限制POC插入位置,想到XSS

$(JAVA:OS)

ldap属于jndi

在服务器上,通过jndi注入工具,生成

JNDI注入 LDAP 37

rmi在很多高版本的JAVA中无法触发,是否已经过时

RMI动态加载恶意类、RMI-JNDI注入、LDAP-JNDI注入、

JNDI injection mbechler/marshalsec 不同的工具能适配的jdk版本也不同 marsh有ldap的高版本jdk绕过方法

jndi与fastjson结合,上一级fastjson难道没用到jndi 哦哦,上一集是加载自己写的本地类 进而实现RCE

小迪 1小时翻车,自己也要了解部署项目时,tomcat上下文路径 tomcat部署应用时设置应用上下文路径content path - ^^ITBOY^^ - 博客园

调用InitialContext.lookup的类包含:com.sun.rowset.JdbcRowSetImpl.execute()

marshalsec依然不行,因为生成的是原生的写法,不适用于fastjson

SpringBoot框架 MyBatis注入 Thymeleaf模版注入 38

新建项目 设置服务器URL,用来下载脚手架 start.spring.io

Spring Boot 中文文档

真的是越学越有趣,当然别想着一次性学会,被反复虐几遍,不知不觉就会了

路由映射、参数传递、数据响应

显示模块的所有端点

POSTMAN构造POST请求

RequestMapping 两种请求方式Get、Post的请求数据包发送与页面回显

MyBatis数据库应用 mysql driver

pom添加jar包或添加数据库驱动

创建user类操作数据库数据

创建Mapper动态接口代理类实现

创建Controller实现Web调用

like %’ 注入

RestController和Controller一个把index当作字符串,一个当作页面资源

没太看清楚 阿里云的spring切换成官方的低版本,从而切换低版本的模版版本

SpringBoot框架&Actuator监控泄漏&Swagger自动化 39

Ops下Actuator;客户端、服务端

java的moudle算是一个项目吗

Jdumpspider heapdump

api安全时会讲到自动化测试,xray burp postman

SpringBoot JWT鉴权 jar war40

文件项目结构,jdk版本升高

header算法为none;爆破密钥

需要满足知道密钥,修改payload,才能生成正确的jwt

maven生命周期,直接package打包

war的打包修改配置文件,放中间件下运行

没法直接源码打包文件直接获取,比如www.zip

直接解压缩软件,idea打开就能反编译

SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入 66

SpEL(Spring Expression Language)简称Spring表达式语言,在Spring 3中引入。 说明spring2存在未授权,而3才有SPEL注入

类似于PHP的代码执行漏洞

JavaBean详解-CSDN博客

https://www.zhihu.com/question/19773379

https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513115&idx=1&sn=da30cf3d3f163d478748fcdf721b6414#rd

https://liaoxuefeng.com/books/java/oop/core/javabean/index.html

https://www.kingkk.com/2019/05/SPEL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B3%A8%E5%85%A5-%E5%85%A5%E9%97%A8%E7%AF%87/

Java代码审计之SpEL表达式注入漏洞分析_java注入漏洞函数-CSDN博客

j3ers3/Hello-Java-Sec: ☕️ Java Security,安全编码和代码审计 Java靶场:内含漏洞细节的源代码

直接按照手工部署的方式,不过没配置数据库相关的,依然能成功启动,8888端口;希望只是sql注入不能用

sql黑盒注入对编程语言没要求

JavaSec 基础之 RCE_java rce-CSDN博客 后面逐渐讲到RCE,不过只说了前两个,后面一闪而过

JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网 67

yakit log4j ldap 反连服务器

利用链

不出网指的是拦截部分协议。如果http协议都拦截,这个服务器都访问不了

不出网跟不回显是两个问题啊

不出王的意思是只用了80映射资源

ladon9 cs插件

原生反序列化&SpringBoot&Heapdump提取 68

16min

commonscollection利用链限制版本

yso CLI工具和Web界面版本;Yakit打包工具Yso-Java-Hack工具

java 反序列化:readobject、XMLdecoder、SnakeYAMLloader加载远程jar

Actuator分为

泄漏安全(配置密码、AK/SK):

whwlsfb/JDumpSpider: HeapDump敏感信息提取工具 CLI 全提取并展示出来 可能不全

wyzxxz/heapdump_tool: heapdump敏感信息查询工具,例如查找 spring heapdump中的密码明文,AK,SK等 自定义搜索

漏洞安全:

AabyssZG/SpringBoot-Scan: 针对SpringBoot的开源渗透框架,以及Spring相关高危漏洞利用工具

LandGrey/SpringBootVulExploit: SpringBoot 相关漏洞学习资料,利用方法和技巧合集,黑盒安全评估 check list

50多分钟实操的exp,进而搭配gui工具没看清 连接服务器

托管恶意 ldap 服务及代码

https://github.com/LandGrey/SpringBootVulExploit

参考文章,修改 JNDIExploit 并启动(也可以使用其他方法):

1
java -jar JNDIExploit-1.0-SNAPSHOT.jar -i your-vps-ip

APIKit

实战:炼石计划RefiningStone CMS 导入Sql文件、mvn install

JWT攻防&Swagger自动化&算法签名&druid 69

druid 可能没开登录验证 cookie、session

apache-druid2023漏洞

Swagger接口测试

35min

对于jwt和session的区别不理解,以及jwt的验证流程

特征:点号分割,头部eyJ

Hae 匹配规则

空加密算法None,jwt在线网站不支持,需要用jwt-tool工具或burp的jwt插件(不知道自己手动encoder行不行);改完后,签名要置空

对称HS 爆破

非对称RS 源码泄漏 或公钥私钥泄漏(想一想,本科阶段的密码学课程还是效率低,感觉花了长时间,但是也只是掌握一些基本的概念,没有很深入)RSA的公钥私钥格式长什么样 「那现实中public key会公示吗,存在验证必须RS不能修改为HS的吗」

现实黑盒挖掘jwt漏洞:

未授权

敏感信息泄露

爆破密钥+越权

Token有效期

kid与sql注入

JWT的CTFSHOW专题

web345

[-] Invalid token:

Not 3 parts -> header.payload.signature 添加.号

TypeError: list indices must be integers or slices, not collections.OrderedDict

某些服务端只取 payload 部分,甚至忽略签名和结构

这道题:jwt解码后修改为admin再base64编码,没有点号,路径修改为/admin/ 需要加上admin后的/,不然301跳转,不出flag

web346

这道题目,jwt_tool直接就能很方便用,python jwt_tool.py -T 修改 按照提示先修改算法为None,admin,生成jwt后,放到burp注意将第三部分的签名删除,保留点号

另外,/admin会301跳转,所以测试,burp主页,Forward,之后会再次出现路径为/admin/的包,注意auth的jwt恢复成初始的,依然修改为payload,就能在浏览器页面显示flag

CTFshow-Web入门模块-JWT-web345-web350 - lx20220922 - 博客园