Java反序列化(2)
JAVA反序列化(2)这篇是反序列化学习的第二篇 参考文章:P牛的《JAVA安全漫谈》 ,ek1ng学长的Java 反序列化安全入门——从URLDNS到Commons-Collections URLDNSURLDNS是ysoserial中的一个利用链的名字,这个ysoserial在我之前写的RMI小记中有说过。 这个URLDNS的参数仅仅是一个URL,其能触发的结果也不是命令执行,而是一次DNS请求。 这条链是使用Java内置的类构造,没有依赖第三方库,同时也不需要漏洞点有回显就可以通过DNS请求来的值是否存在反序列化漏洞 下面是ysoserial的URLDNS的代码: 1234567891011121314151617181920212223242526272829303132333435363738394041public class URLDNS implements ObjectPayload<Object> { public Object getObject(final String url) throws Exception { ...
java反序列化(1)
JAVA反序列化(1)放暑假了,又来学习了。之前讲RMI反序列化,这篇正式开始JAVA反序列化的学习 参考文章:《JAVA安全漫谈》 JAVA反序列化安全入门 序列化与反序列化序列化和反序列化是用来干嘛的 我们需要在网络上去传输数据,可能会用XML、YAML、JSON等数据交互格式。但是它们比较简单,对于比较复杂的数据难以表示清楚。比如想要表示一个对象,如果用JSON或者XML,定义起来就比较费劲,所以像Fastjson这类序列化库就是在JSON(XML)的基础上进行改造,通过特定语法传递对象,而像这样RMI就是直接通过JAVA内置的序列化方法,将对象转换成二进制进行传输。一旦有涉及到将对象转换成一个指定格式的数据 再从数据中还原出对象的这个过程,就有可能造成一系列安全问题 反序列化方法对比之前我们也有说过PHP反序列化的东西 Java的反序列化和PHP的反序列化有点类似,都只能将一个对象中的属性按照某种特定的格式生成一段数据流,在反序列化的时候再按照这个格式将属性拿回来,再赋值给新的对象。 JAVA提供了writeObject来允许开发者在序列化六中插入自定义数据,再在反序列化的时候 ...
python内存马分析
python内存马分析前言最近那场HNCTF有一道只能执行一次的Flask模板注入,这个预期解是用python内存马,这篇就来学习一下,做一下笔记。 原理Python常见的框架有Django、Flask,这两个都可能存在SSTI注入,Python 内存马就是利用Flask的SSTI注入来实现。 flask routeflask常规注册的方式为使用装饰器@app.route(),而实际工作的函数为装饰器里调用的self.add_url_rule() self.app_url_rule(rule,endpoint=None,view_func=None) rule: 就是url,和装饰器app.route() 的第一个参数一样,必须以/ 开始 endpoint: 就是在使用url_for()进行反转的时候,这个里面传入的第一个参数就是这个endpoint对应的值。这个值也可以不指定,默认值为函数名。 view_func: 只需要写方法名(也可以为匿名参数),如果使用方法名不要加括号,加括号表示将函数的返回值传给了view_func参数了,程序就会直接报错。 这个可以用来添加路由 fla ...
HNCTF2024_GoJava复现
HNCTF 2024 GoJava复现看题目应该就是一个用Go写的Java编译器 可以把.java文件传上去进行编译 先扫个目录看看 1python dirsearch.py -u hnctf.yuanshen.life:port 然后就可以发现有一个/js/和/robots.txt 12200 - 145B - /js/200 - 77B - /robots.txt 那就直接看看/robots.txt 12345User-agent: *Disallow: ./main-old.zipUser-agent: *Disallow: ./main.go 很好,这个./main.go被403了,还有个./main-old.zip,盲猜是题目源码,访问一下下载下来 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 ...
CVE-2019-9625分析
CVE-2019-9615分析这是一个OFCMS的Sql注入漏洞 OFCMS是基于Java技术的内容管理系统,在v1.1.3之前的OFCMS中发现了一个问题,在admin / system / generate / create?sql =路径可以进行SQL注入,与SystemGenerateController.java文件相关 但总的来说这个漏洞还是比较的鸡肋,前提是得进入到后台 下面来进行一些分析和复现 环境搭建先去gitee把源码搞下来,整一个v1.1.2版本的 https://gitee.com/oufu/ofcms/releases 直接用idea打开项目就好了(高版本的是这样的) 然后再ofcms-admin/src/main/resources/dev/conf/文件夹下打开db.properties,修改数据包的账号密码 修改根目录下的pom.xml,搜索mysql,然后修改成自己机器上装的版本,然后点击import changes 然后就是下载所需要的jar包 先右键这个ofcms项目的文件夹然后点这个Maven -> Reimport 点击run -> ...
2024护网面试题(蓝队更新中)
2024护网面试记录(蓝队更新中)宁云志面试记录 了解过中间件漏洞吗 apache tomcat 文件上传(CVE-2017-12615) 影响版本: Apache Tomcat 7.0.0 – 7.0.81 前提是Tomcat开启了HTTP PUT请求 漏洞原理: Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致可以使用PUT方法上传任意文件,攻击者将精心构造的payload向服务器上传包含任意代码的.JSP文件。之后JSP文件中的代码将能被服务器执行。 文件包含(CVE-2020-1938) 影响版本: Apache Tomcat 6Apache Tomcat 7 < 7.0.100Apache Tomcat 8 < 8.5.51Apache Tomcat 9 < 9.0.31 漏洞原理:Tomcat配置了两个连接,它们分别是HTTP和AJP:HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理AJP协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP ...
RMI小记
RMI小记这期主要就是通过debug,一步步调试来找到RMI的反序列化点,并了解RMI的具体流程。 这部分我是看组长的视频学的,看了两三遍了。下面是视频的网址 https://www.bilibili.com/video/BV1L3411a7ax?p=2&vd_source=6a92aae104751f5bc065a281b15c4fcb 下面是要用到的class 服务端下面是服务端要用到的代码 123456789101112131415161718192021222324252627282930313233343536373839// testRMIServer.javaimport java.rmi.AlreadyBoundException;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;public class testRMIServer { public static void main(S ...
浅谈RMI
RMI小记RMI(Remote Method Invocation)也就是远程方法调用,他的目标与RPC(Remote Call Protocol)远程过程调用协议类似,让某个java虚拟机上的对象调用另一个java虚拟机中对象上的方法,只是RMI是Java独有的一种机制。 在网络传输的过程中,RMI中对象是通过序列化的形式进行编码传输,既然有序列化,必然会有反序列化,RMI服务端在接收到序列化后的会将对象进行反序列化。 在反序列化攻击中,我们可能找不到反序列化的点,那么使用RMI就可以作为反序列化利用链的触发点 先来看看下面这个RMI架构: RMI的组成RMI主要分为三个部分: Client客户端:客户端调用服务端的方法 Server服务端:远程调用方法对象的提供者,是代码真正执行的地方,执行结束会给客户端返回一个方法执行的结果 Registry注册中心:本质就是一个map,像一个字典,用于客户端查询服务端调用方法的引用 RMI调用的目的就是调用远程机器的类和调用一个写在本地的类一样 唯一区别就是RMI服务端提供的方法,被调用时方法是执行在服务端 为了屏蔽网络通信的复杂性,RM ...
2023年度总结
2023年度总结这一年感觉学了挺多东西但又感觉没怎么学。 参加了Hacking Group 0571A的线下沙龙,学了些关于RASP还有免杀的小寄巧。 学了些奇奇怪怪杂七杂八的东西,总感觉这一年荒废了很多时间。若是有一个师傅可以带我学安全就好了,哈哈。算了,相信开源的资料还有那么多师傅的文档应该够我用了。 之后会慢慢更新javasec的文档,可能偶尔会有一些云安全的东西。要好好补开发基础了。 这一年,可能也是我情绪波动最大的一年吧,暑假找到了我的女朋友,但是因为某些原因这个暑假跟我分了手同时患上了双相情绪障碍。不过寒假我们又在一起了,并正式确定了关系,希望这次可以一直走下去,我也会好好陪着她,治好她的双相。 最后谢谢肖鹿的扮演者邹佳佳,谢谢你在我迷茫的时候通过肖鹿这个角色走进了我的生活。24群骑士团会一直守护着佳佳。 师傅们,新年快乐。
RWCTF-Web-Old_Shiro复现
RWCTF-Web-Old_Shiro复现当时做这题的时候shiro-tools一把梭没梭出来,没考虑到他不出网不能反弹shell,没好好看docker-compose文件(悲)。 先把key爆破了 这里就拿到key了 然后我们看配置文件,有限制header的长度 123# application.propertiesserver.max-http-header-size = 3000server.port=8888 那么就得缩小我们的payload,可以看看这篇文章=>终极Java反序列化Payload缩小技术 因为不出网所以可以尝试直接读取根目录下的flag 123456Object attr = java.lang.Class.forName("org.springframework.web.context.request.RequestContextHolder").getMethod("currentRequestAttributes", new java.lang.Class[ ]{}).invoke(nu ...