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(),传入了HttpServletRequest和HttpServletResponse两个对象,分别代表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 | 初期重点放在经典组件漏洞的主CVE + 中小型Java项目源码审计, |
计算机很多实操还是看博客+视频,有个直观的理解,就不困难了
老师手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
真的是越学越有趣,当然别想着一次性学会,被反复虐几遍,不知不觉就会了
路由映射、参数传递、数据响应
显示模块的所有端点
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的代码执行漏洞
https://www.zhihu.com/question/19773379
https://liaoxuefeng.com/books/java/oop/core/javabean/index.html
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