
Java代码审计
文章平均质量分 71
Y4tacker
关于我:Web安全、Java安全研究弟中弟
学校:四川大学(2019级)
写给自己:宁静致远,淡泊明志
展开
-
Java文件上传大杀器-绕waf(针对commons-fileupload组件)
Java文件上传大杀器-绕waf(针对commons-fileupload组件)来个中二的标题,哈哈哈,灵感来源于昨晚赛博群有个师傅@我是killer发了篇新文章,在那篇文章当中提到了在filename="1.jsp"的filename字符左右可以加上一些空白字符%20 %09 %0a %0b %0c %0d %1c %1d %1e %1f,比如%20filename%0a="1.jsp"(直接用url编码为了区别)这样导致waf匹配不到我们上传⽂件 名,⽽我们上传依然可以解析,我对次进行了更深入的研究,原创 2022-02-25 14:35:18 · 3037 阅读 · 5 评论 -
对Java反序列化数据绕WAF新姿势的补充
文章目录对Java反序列化脏数据绕WAF新姿势的补充写在前面引言为什么这里第一个属性反序列化失败,仍然触发了URLDNS的整个过程灵感大发对Java反序列化脏数据绕WAF新姿势的补充@Y4tacker写在前面这篇文章其实很久前也更新到我博客了还是懒,还是搬过来吧,这里再发一次:https://y4tacker.github.io/引言相信大家都看过回忆飘如雪大师傅的一篇文章,Java反序列化数据绕WAF之加大量脏数据,在这篇文章当中大师傅提出了通过将gadget加入到集合类型从而可以实现添加脏数原创 2022-02-14 20:51:23 · 4457 阅读 · 0 评论 -
jsp新webshell的探索之旅
jsp新webshell的探索之旅题外话最近更新了新的博客关于本人一些有趣的java的研究会优先更新到新博客(http://y4tacker.github.io/)简介这篇文章记录了我从一个小发现到实现RCE,为了实现更短的webshell,在这之间遇到了一些的新问题到解决,再到最终精简得到一个新的jsp五行Payload构成的webshell的过程发现在tomcat的扫描中都有对一些配置文件的扫描以及对里面的属性解析赋值的过程,由于之前的一些小发现(这里不多说),今天下午一个突如其来的crus原创 2022-02-04 11:33:54 · 2364 阅读 · 1 评论 -
Servlet的线程安全问题
文章目录Servlet的线程安全问题引入Servlet的多线程机制如何修复1.实现 SingleThreadModel 接口2.避免使用成员变量3.同步对共享数据的操作思考与小结参考文章Servlet的线程安全问题引入首先看看这样的代码,有什么问题这里既要求cmd不能包含Calculator又必须要包含Calculator,能做到吗,当然是可以的Servlet的多线程机制Servlet实际上是一个单件,当我们第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件或者是原创 2022-02-04 11:28:38 · 4245 阅读 · 0 评论 -
两个关于Tomcat利用的好问题
文章目录两个好玩的问题1.为什么往 `/WEB-INF/tomcat-web.xml/`文件夹下写东西可以触发重加载问题来源解决2.Tomcat下/META-INF/lib中被加载的jar,如果在其/META-INF/resources/下直接写jsp可以直接访问执行问题来源两个好玩的问题1.为什么往 /WEB-INF/tomcat-web.xml/文件夹下写东西可以触发重加载问题来源问题的一切来源于一句话:Trigger a reload of the web app by writing an原创 2022-01-26 09:53:31 · 1796 阅读 · 3 评论 -
从DesperateCat学到的Tomcat下的新利用思路
文章目录题目环境分析两个重要的Trick探索开始如何利用org.apache.jasper.compiler.StringInterpreter加载恶意类到JVM梳理利用思路结果题目环境JDK8u311Tomcat9.0.56分析首先拿到这个源码我们看什么 <servlet> <servlet-name>ExportServlet</servlet-name> <servlet-class>org.rwctf.se原创 2022-01-25 09:18:04 · 1388 阅读 · 0 评论 -
[Java随笔]冰蝎2.0-jsp马交互部分源码解读及其特征检测
文章目录写在前面源码解读Jsp马交互部分源码解读认证流程写在前面大概是最近搞内存马有点累了,今晚顺便看看冰蝎部分源码,简简单单写篇博客休息休息,本着怕第一次看这个工具源码,怕直接看最新的容易不理解,就拿了个2.0版本看着玩吧,谁知道也太简单了:同款源码在rebeyond/Behinder源码解读反编译jar包后,其核心代码在net.rebeyond.behinderJsp马交互部分源码解读直接丢出来源码,挺简单的,首先是一个继承ClassLoader的U类,一看defineClass就知道是加载原创 2021-11-11 22:22:54 · 3677 阅读 · 2 评论 -
[Java安全]JDK8u191之后的JNDI注入绕过(javax.el.ELProcessor依赖)
文章目录环境Maven依赖利用分析低版本流程分析JDK8u191之后的JNDI注入绕过参考文章环境我们知道在JDK 6u211、7u201、8u191、11.0.1之后,增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了切换到8u191之后就好了,我这里随便选择了8u201Maven依赖<dependency> <groupId&原创 2021-10-13 15:56:09 · 2761 阅读 · 3 评论 -
[Java安全]C3P0反序列化不出网利用学习
文章目录参考文章利用链构造利用链分析参考文章本文复现了雨了个雨师傅的文章,思路很好,看完以后其实和JNDI8u191后的绕过思路一致,这个等下再复现学习利用链构造在昨天看了Ysoserial的基本过程以后其实这个就相对简单了,不一样的地方就是后面Ysoserial用了URLClassLoader,而这个是当前线程下的ClassLoader,曾经一直觉得没用,还是自己学的太少了,大佬想到通过Tomcat的getObjectInstance方法调用ELProcessor的eval方法实现表达式注入p原创 2021-10-13 09:21:01 · 1483 阅读 · 0 评论 -
[Java安全]Java反序列化之spring-tx(Spring Framework 4.2.4)
文章目录环境依赖分析利用链构造利用链分析环境来自spring-jndi依赖<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.2.4.RELEASE</version> </d原创 2021-10-12 20:03:04 · 604 阅读 · 0 评论 -
[Java安全]Java反序列化C3P0之利用URLClassLoader
文章目录C3P0是什么实现不调用构造参数创建对象利用链分析C3P0是什么C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等实现不调用构造参数创建对象这个东西在后面利用链生成的过程中实现了,为什么ysoserial使用这个猜测是为了节省不必要的变量吧,payload更短可以参考下这篇文章Java ReflectionFactory利用链分析首先是生成的过程,前面部分分割最后一个:获取原创 2021-10-12 14:36:52 · 781 阅读 · 0 评论 -
[Java安全]HashMap的readObject都发生了什么
文章目录写在前面分析(以URLDNS为例)分析LinkedHashSet,HashSet,TreeSet等类为什么不可以写在前面这篇文章的灵感来自纯好奇大佬的文章当然推荐大家看看大佬的文章,学点骚操作,我只是顺便分析一下为什么这样可以而已,大佬可乐嗯觉得这些比较简单没有写原因,那我来学习学习顺便记录,大佬文章直达Java反序列化数据绕WAF之加大量脏数据分析(以URLDNS为例)首先我们要知道ObjectInputStream的readObject的调用栈,来个网图自己懒的画,很简单的关系至原创 2021-09-17 11:20:21 · 840 阅读 · 0 评论 -
[Java安全]Fastjson>=1.2.36$ref引用可触发get方法分析
文章目录写在前面JSONPath语法利用演示$ref引用触发get方法分析解释为什么1.2.36前的版本不行写在前面平时我们在处理fastjson反序列化的时候,如果我们想要执行属性的get方法,而如果只有JSON.parse怎么办我们知道JSON.parse可以套一层parseObject实现对get方法的调用,但说这个也没有必要继续本篇的介绍了,这里介绍另一种,废话不多说开始分析JSONPath语法看文档https://goessner.net/articles/JsonPath/,重点关注下原创 2021-09-13 22:08:34 · 2815 阅读 · 0 评论 -
Fastjson反序列化解析流程分析(以TemplatesImpl加载字节码过程为例)
文章目录写在前面流程分析写在前面关于TemplatesImpl加载字节码就不多说了,之前也写过自己翻一翻,或者网上看看其他大佬的,至于为什么选择这一个,因为这里面大多数过程都有,除了$ref,算是比较全面了流程分析核心代码public class test1 { public static void main(String[] args) throws Exception{ String payload = "{\"@type\":\"com.sun.org.apache原创 2021-09-13 20:29:17 · 763 阅读 · 0 评论 -
[Java安全]Just-Serving-Pages赛题分析
文章目录写在前面Just-Serving-Pages分析写在前面昨晚一点睡觉feng师傅提醒我了下,今天不当懒狗,我相信自己可以解决这里就先直接开始试着边做边写Wp了Just-Serving-Pages分析朴实无华,先看看依赖,这个版本其实是存在反序列化RCE的,但是条件比较苛刻在src/src/cscg/servlets/ConfigServlet.java看到了如果是Object.class多好啊不过这里也给了我一个提示,允许我们去修改除了User的设置也就是如果我们开启De原创 2021-09-07 16:53:04 · 341 阅读 · 3 评论 -
[DASCTF][Java反序列化]easyjava简单分析
文章目录写在前面easyjava推荐文章写在前面昨天题目环境似乎出了点小问题,咋也不好问,咋也不敢说,题目有意思,当然还有其他链子猜测jdbc应该也可以打,没试过太懒了easyjava首先下载源码发现Java版本是1.7的,先放这里看看在evil路由下面,很明显是去触发反序列化,但是有过滤ban了这么多,cc链基本上不用想了,一方面是低版本不起作用,另一方面Transformer被ban了,看来只能用TemplatesImpl去执行字节码试一试,想到了Java7U21反序列化(可以看我博客分原创 2021-08-02 12:39:50 · 2827 阅读 · 3 评论 -
[Java反序列化]JDK7U21原生反序列化利用链分析
文章目录写在前面利用链JDK7U21原生反序列化利用链分析流程跟踪参考文章写在前面这段时间看了也跟踪了CC链,CB链,也跟踪调试了shiro的两个链子,XMLDecoder等,就用JDKK7U21原生反序列化利用链来暂时结束下最近的学习利用链LinkedHashSet.readObject() LinkedHashSet.add() ... TemplatesImpl.hashCode() (X) LinkedHashSet.add() ... Pro原创 2021-07-29 16:42:08 · 1450 阅读 · 0 评论 -
[Java反序列化]Java-CommonsBeanutils1利用链分析
文章目录反序列化调用链Java-CommonsBeanutils1利用链分析参考文章反序列化调用链ObjectInputStream.readObject() PriorityQueue.readObject() PriorityQueue.heapify() PriorityQueue.siftDown() siftDownUsingComparator() BeanComparator.compare() TemplatesImpl.getOutputPro原创 2021-07-28 14:36:26 · 827 阅读 · 0 评论 -
[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析
文章目录Java-CommonsCollections2TemplatesImpl利用链分析完整代码Java-CommonsCollections2TemplatesImpl利用链分析我们知道我们之前可以利用TemplatesImpl 构造出⽆Transformer数组的利⽤链,那这里是否可以实现呢,答案是是的,在这里的queue现在开始正文,还是稍微详细说一下利用过程吧现在我们的目标就是通过PriorityQueue来调用TemplatesImpl的newTransformer来加载字节码 T原创 2021-07-28 09:40:03 · 544 阅读 · 0 评论 -
[Java反序列化]Java-CommonsCollections2利用链分析
文章目录Java-CommonsCollections2利用链分析Java-CommonsCollections2利用链分析简单来说CC2就是从 Serializable的readObject()⽅法到 Transformer的transform()⽅法的调⽤链看一看具体流程,Serializable的readObject()⽅法调用heapify方法调用siftDown方法调用siftDownUsingComparator方法最后到了TransformingComparator下的comp原创 2021-07-26 17:14:22 · 489 阅读 · 0 评论 -
[Java安全]Shiro RememberMe 1.2.4反序列化漏洞分析
文章目录写在前面Shiro RememberMe 1.2.4反序列化漏洞Payload写在前面Payload来自P神的GithubShiro RememberMe 1.2.4反序列化漏洞在Shiro 1.2.4版本之前内置了一个默认且固定的加密Key,导致攻击者可以伪造任意的rememberMe,进而触发反序列化漏洞,在这里我们还是配合TemplatesImpl执行字节码,但是如果使用Transformer数组则会报错,因为反序列化流中包含非Java自身的数组,则会出现无法加载类的错误Trans原创 2021-07-26 13:54:04 · 832 阅读 · 0 评论 -
[Java反序列化]CommonsCollections3利用链学习
文章目录利用思路利用思路绕过了对InvokerTransformer的利用,替代方法是这⾥⽤⼀个新的Transformer,org.apache.commons.collections.functors.InstantiateTransformer,通过利⽤ InstantiateTransformer来调⽤到TrAXFilter 的构造⽅法,再利⽤其构造⽅法⾥的 templates.newTransformer() 调⽤到 TemplatesImpl⾥的字节码...原创 2021-07-25 18:50:56 · 626 阅读 · 4 评论 -
[Java安全]利用TemplatesImpl执行字节码
文章目录defineClass利用TemplatesImpl执行字节码defineClass介绍之前首先还是要知道defineClass的利用方式,下面给出简单的代码public class TouchFile{ public TouchFile() throws Exception { Runtime.getRuntime().exec("calc"); } }把它编译成字节码后Base64之后运行Method defineClass =原创 2021-07-25 15:48:22 · 3590 阅读 · 2 评论 -
[Java-sec-code]Java velocity SSTI
文章目录Java velocityJava velocity可以看一看这一篇文章java velocity模板用法(替换、循环、if判断)原创 2021-07-25 10:04:40 · 1129 阅读 · 0 评论 -
[Java-sec-code]SpEL表达式注入
文章目录SpELSpEL注入SpEL我们学安全主要了解那些对我们有用的东西,在这里有一篇链接方便大家进行了解https://www.jianshu.com/p/e0b50053b5d3此外,我觉得其中最重要的是通过 T() 调用一个类的静态方法,它将返回一个 Class Object,然后再调用相应的方法或属性:,并且如果包在java.lang下面可以省略这一部分,因此我们便可以利用此方法调用Runtime执行命令SpEL注入在org/joychou/controller/SpEL.java下面,原创 2021-07-25 09:19:35 · 511 阅读 · 0 评论 -
[Java代码审计]javacon WriteUp
文章目录写在前面javacon写在前面在P神星球看到的,这里学习一下,文件在https://www.leavesongs.com/media/attachment/2018/11/23/challenge-0.0.1-SNAPSHOT.jarjavacon运行的时候利用java -jar challenge-0.0.1-SNAPSHOT.jar首先查看配置首先在登录页面,在login页面post接收参数,与配置当中的比对,成功则设置cookie@PostMapping({"/login"})原创 2021-07-21 14:40:58 · 1167 阅读 · 2 评论 -
[GKCTF2021]babycat
文章目录写在前面babycat写在前面是Java没错了,冲它babycat发现接口直接post发包注册一个号登录进去此时我们可以看见不管怎样role都是guest,后台只有管理员有上传权限我们需要关注如何成为admin,但是文件下载那里可以目录穿越首先读取web.xml<web-app> <servlet> <servlet-name>register</servlet-name> <servlet-class>原创 2021-07-18 15:21:27 · 1331 阅读 · 0 评论 -
[Java安全]fastjson≤1.2.24结合JdbcRowSetImpl利用链
https://zhuanlan.zhihu.com/p/73428357https://blog.csdn.net/further_eye/article/details/109718241https://www.freebuf.com/vuls/208339.html原创 2021-07-15 08:16:05 · 390 阅读 · 1 评论 -
[Java-sec-code学习]SSRF
文章目录前言SSRF修复方式前言今天预览版把我电脑搞崩了破防了CPU占用率100%,还好可以回滚版本,当然虽然是最简单的漏洞,但是底层代码我也觉得值得学习,一切从0开始SSRF其实闭着眼睛都知道支持file协议但是我还是想要分析一下漏洞点位于org/joychou/controller/SSRF.java下跟进这个URLConnection方法他把url参数首先传入构造函数里,接着调用openConnection方法很明显我们传入参数不满足上面条件进入else循环调用构造函数原创 2021-06-27 16:55:53 · 848 阅读 · 0 评论 -
[Java-sec-code学习]path_traversal路径穿越
文章目录前言path_traversal@RestController路径穿越修复方法前言期末考试周了,学了一天密码学,累死了,我的Java也要开始一点本文章代码来源于Java-sec-code项目path_traversal首先我们在org/joychou/controller/PathTraversal.java路径下面,首先最上方有一个大大的@RestController@RestController这是在Spring4之后新加入的注解,原来返回json需要@ResponseBody和@原创 2021-06-26 21:54:01 · 2230 阅读 · 1 评论 -
[Java反序列化]Javacc链6分析
文章目录写在前面GadgetsJavaCC链6分析利用链参考文章写在前面感觉看完了cc链1以后cc链6就突然变得很简单了(来自P神的简化链,这里我修改了一丢丢),那么就开始学习了Gadgets/* Gadget chain: java.io.ObjectInputStream.readObject() java.util.HashMap.readObject() java.util.HashMap.hash() org.apache.commons.collections.k原创 2021-06-02 00:00:21 · 1313 阅读 · 2 评论 -
[JAVA反序列化]Javacc链1分析
文章目录写在前面动态代理简单介绍动态代理的实现JavaCC链1解读参考文章写在前面这几天算是好好一边审计PHP的一些CMS一边啃Java的代码,终于能看懂CC链1的构造流程了动态代理简单介绍在JavaCC链1的构造中,动态代理起了很关键的作用,这里来进行简单介绍,Java标准库提供了动态代理的机制,其可以在运行期动态创建interface的实例,直接从demo来理解首先我们来个通常写代码的方式我们先来一个一个接口,本CTF狗来个Flag吧interface flag { void g原创 2021-06-01 20:50:04 · 2157 阅读 · 6 评论 -
[Java反序列化]JavaCC链学习(8u71前)
文章目录写在前面前置TransformerTransformedMapChainedTransformerInvokerTransformerConstantTransformer简化的CC链(来自P神代码审计知识星球)参考链接写在前面仅仅只是前置知识,感谢P神,让我接触到了新的东西,下面是P神的知识星球https://govuln.com/?page=4前置要了解这个链子,必须要知道下面几个TransformerTransformer能看到这是一个接口,有一个待实现的方法Transformer原创 2021-05-26 14:36:11 · 1153 阅读 · 3 评论 -
[Java安全]Java序列化与反序列化
文章目录Java序列化与反序列化写在前面序列化与反序列化实现序列化条件简单的例子参考文章Java序列化与反序列化写在前面最近在学习Java方面的内容,很头疼,函数那些啥的也太多了吧!!!自闭序列化与反序列化把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。在我看来这两个过程就是为了对对象状态的保存便于恢复,不太准确,至少现在这么认为;Java的反序列化主要是靠readObject方法,之前有学过PHP的反序列化,对比Java与PHP反序列化的过程,我认为原创 2021-05-25 17:11:59 · 551 阅读 · 0 评论 -
[Java反序列化]URLDNS链分析
文章目录结果分析利用链(来自ysoserial)生成链反序列化参考链接结果成功触发分析利用链(来自ysoserial)* HashMap.readObject()* HashMap.putVal()* HashMap.hash()* URL.hashCode()生成链反序列化参考链接https://zhuanlan.zhihu.com/p/149416105https://www.cnblogs.com/v1ntlyn/p原创 2021-05-25 08:35:52 · 736 阅读 · 1 评论 -
[Java审计]OFCMS命令注入漏洞
文章目录写在前面分析写在前面闲来无事,分析着玩分析根据今日撇脚水平,知道了命令注入一般就是表达式注入或者模板注入吧,因此我们直接取pom.xml里面找一下,找到了freemarker网上一搜还真有模板注入,点我直达下面就是去找利用点了,这里我以index.html为例输入<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}或者<#assign val原创 2021-05-19 23:04:16 · 1087 阅读 · 0 评论 -
[JAVA代码审计]OFCMS路径遍历漏洞
文章目录写在前面分析写在前面今天分析的第二篇,当时在网上看到爆了这个漏洞那么就分析一下啦网上似乎没有人写,那就让本小可爱来吧分析漏洞点存在于后台的模板文件查看处漏洞函数位于com/ofsoft/cms/admin/controller/cms/TemplateController.java下的getTemplates函数,首先是接收这三个参数,当时是get传参方式//当前目录 String dirName = getPara("dir",""); //上级目录String upDir原创 2021-05-19 21:40:11 · 1674 阅读 · 8 评论 -
[JAVA代码审计]OFCMSv1.3.3之前存在SQL注入漏洞
文章目录写在前面环境配置分析写在前面好久没碰过Javaweb了,但是感觉自己配环境的时候还是满熟练的哈,这一篇算是超级简单那种了,就开启我的Java审计之旅吧环境配置我这里是老古董无敌兼容版本Jdk1.8,开启配置分析漏洞点在http://url/admin/system/generate/create.json?sqlid=,在com/ofsoft/cms/admin/controller/system/SystemGenerateController.java,能看到这里直接接收了s原创 2021-05-19 20:57:40 · 935 阅读 · 5 评论