我的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 · 2834 阅读 · 5 评论 -
[Java随笔]冰蝎2.0-jsp马交互部分源码解读及其特征检测
文章目录写在前面源码解读Jsp马交互部分源码解读认证流程写在前面大概是最近搞内存马有点累了,今晚顺便看看冰蝎部分源码,简简单单写篇博客休息休息,本着怕第一次看这个工具源码,怕直接看最新的容易不理解,就拿了个2.0版本看着玩吧,谁知道也太简单了:同款源码在rebeyond/Behinder源码解读反编译jar包后,其核心代码在net.rebeyond.behinderJsp马交互部分源码解读直接丢出来源码,挺简单的,首先是一个继承ClassLoader的U类,一看defineClass就知道是加载原创 2021-11-11 22:22:54 · 3572 阅读 · 2 评论 -
[Java安全]HashMap的readObject都发生了什么
文章目录写在前面分析(以URLDNS为例)分析LinkedHashSet,HashSet,TreeSet等类为什么不可以写在前面这篇文章的灵感来自纯好奇大佬的文章当然推荐大家看看大佬的文章,学点骚操作,我只是顺便分析一下为什么这样可以而已,大佬可乐嗯觉得这些比较简单没有写原因,那我来学习学习顺便记录,大佬文章直达Java反序列化数据绕WAF之加大量脏数据分析(以URLDNS为例)首先我们要知道ObjectInputStream的readObject的调用栈,来个网图自己懒的画,很简单的关系至原创 2021-09-17 11:20:21 · 804 阅读 · 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 · 2253 阅读 · 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 · 721 阅读 · 0 评论 -
[Java反序列化]JDK7U21原生反序列化利用链分析
文章目录写在前面利用链JDK7U21原生反序列化利用链分析流程跟踪参考文章写在前面这段时间看了也跟踪了CC链,CB链,也跟踪调试了shiro的两个链子,XMLDecoder等,就用JDKK7U21原生反序列化利用链来暂时结束下最近的学习利用链LinkedHashSet.readObject() LinkedHashSet.add() ... TemplatesImpl.hashCode() (X) LinkedHashSet.add() ... Pro原创 2021-07-29 16:42:08 · 1398 阅读 · 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 · 780 阅读 · 0 评论 -
[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析
文章目录Java-CommonsCollections2TemplatesImpl利用链分析完整代码Java-CommonsCollections2TemplatesImpl利用链分析我们知道我们之前可以利用TemplatesImpl 构造出⽆Transformer数组的利⽤链,那这里是否可以实现呢,答案是是的,在这里的queue现在开始正文,还是稍微详细说一下利用过程吧现在我们的目标就是通过PriorityQueue来调用TemplatesImpl的newTransformer来加载字节码 T原创 2021-07-28 09:40:03 · 523 阅读 · 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 · 465 阅读 · 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 · 806 阅读 · 0 评论 -
[Java反序列化]CommonsCollections3利用链学习
文章目录利用思路利用思路绕过了对InvokerTransformer的利用,替代方法是这⾥⽤⼀个新的Transformer,org.apache.commons.collections.functors.InstantiateTransformer,通过利⽤ InstantiateTransformer来调⽤到TrAXFilter 的构造⽅法,再利⽤其构造⽅法⾥的 templates.newTransformer() 调⽤到 TemplatesImpl⾥的字节码...原创 2021-07-25 18:50:56 · 592 阅读 · 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 · 3308 阅读 · 2 评论 -
[Java-sec-code]Java velocity SSTI
文章目录Java velocityJava velocity可以看一看这一篇文章java velocity模板用法(替换、循环、if判断)原创 2021-07-25 10:04:40 · 1084 阅读 · 0 评论 -
[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 · 894 阅读 · 5 评论 -
JavaWeb ------ 请求重定向
文章目录简单说明使用方法第一种(通过原生浏览器方式)第二种(推荐)重定向特点简单说明请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)可能随着时间的推移和项目的不断更新,升级,原来这个接口慢慢被废弃了,由新的接口所取代。使用方法第一种(通过原生浏览器方式)protected void doGet(HttpServletRequest request, HttpServletResponse response)原创 2020-07-25 10:19:32 · 7373 阅读 · 0 评论 -
Idea Maven项目选项中无new Servlet
点击Moudle web 把下面打勾然后应用即可原创 2020-07-11 22:06:26 · 9082 阅读 · 1 评论 -
JavaWeb ----- JSP中EL表达式失效
JSP 2.0的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能,因此基本上所有seriptlet能实现的功能都可以由JSP替代。isELIgnored属性用来指定是否忽略。格式为:<%@ page isELIgnored="true|false"%> 如果设定为真,那么JSP中的表达式被当成字符串处理。而isELIgnor原创 2020-07-11 15:47:55 · 9045 阅读 · 0 评论 -
JavaWeb初识监听器
文章目录简要说明ServletContextListener 监听器简单示例监听器配置Web.xml配置简要说明1、Listener 监听器它是 JavaWeb 的三大组件Servlet 程序、Filter 过滤器、Listener监听器之一。2、Listener 它是 JavaEE 的规范,就是接口。3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。ServletContextListener 监听器现在常用的监听器便是ServletContext原创 2020-07-10 16:18:09 · 8899 阅读 · 0 评论 -
JavaWeb ------ jsp请求转发
主要是记录下这个标签,避免复习的时候遗忘了<%-- <jsp:forward page=""></jsp:forward> 是请求转发标签,它的功能就是请求转发 page 属性设置请求转发的路径--%><jsp:forward page="请求转发地址"></jsp:forward>...原创 2020-07-10 15:40:24 · 9042 阅读 · 0 评论 -
JavaWeb ------ JSP总结
文章目录简介本质Page指令JSP中常用的脚本声明脚本(极少使用)表达式脚本(常用)代码脚本JSP对象九大内置对象列举jsp 四大域对象示例一示例二简介jsp 的全换是 java server pages。Java 的服务器页面。jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。因为 Servlet 程序回传 html 页面数据非常繁锁,开发成本和维护成本都极高。本质jsp 页面本质上是一个 Servlet 程序;当我们第一次访问 jsp 页面的时候。Tomcat 服务原创 2020-07-10 15:00:33 · 9200 阅读 · 0 评论 -
JavaWeb ------ HttpServletResponse类
文章目录HttpServletResponse简单说明两个输出流的简要说明给客户端回传字符串数据中文乱码问题描述解决方法解决方法一解决方法二(推荐)HttpServletResponse简单说明 HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。 &原创 2020-07-09 23:02:42 · 9055 阅读 · 0 评论 -
JavaWeb当中的相对路径与绝对路径
文章目录相对路径绝对路径斜杠的不同意义举三个例子特殊情况(重定向)在 JavaWeb 中,路径分为相对路径和绝对路径两种:相对路径符号释义./表示当前目录…/表示上一级目录某个资源表示当前目录/资源名第三个简单来说就是假如a目录下有个index.html,这个index.html就算上面表格指的某个资源绝对路径绝对路径大家都很熟悉,在javaweb中为:http://ip:port/工程路径/资源路径斜杠的不同意义在 web 中 / 斜杠 是一种绝原创 2020-07-09 22:10:28 · 9140 阅读 · 0 评论 -
JavaWeb解决Web.xml当中中文注释导致webapp标签出错问题
我们发现在web.xml中使用中文注释就会报错,但是项目还是能够正常运行,但是作为一名强迫患者看着很是不舒服,解决方法只需要加上xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-a原创 2020-07-09 22:06:38 · 9584 阅读 · 0 评论 -
JavaWeb - base标签的运用
文章目录引例目录结构index.htmllogin.html演示解释说明Base标签引例目录结构下面我们来举一个例子进行说明,首先列出目录结构index.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>首页</title></head><body> 这是web下的index.原创 2020-07-09 21:48:14 · 11138 阅读 · 0 评论 -
JavaWeb ----- HttpServletRequest类与请求转发
文章目录HttpServletRequest类HttpServletRequest 类作用HttpServletRequest 类的常用方法简单使用Servelt获取请求参数首先准备一个form表单Servlet配置小问题请求转发释义简单使用Servlet1Servlet2请求转发特点HttpServletRequest类HttpServletRequest 类作用每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。原创 2020-07-09 20:33:37 · 10680 阅读 · 0 评论 -
JavaWeb ----- ServletContext类
文章目录简介域对象ServletContext 类的四个作用简单使用(前三个演示)在web.xml中的配置在Servlet中第四个功能的演示写两个Servlet简介(一个工程只有一个!!!)1、ServletContext 是一个接口,它表示 Servlet 上下文对象2、一个 web 工程,只有一个 ServletContext 对象实例。3、ServletContext 对象是一个域对象。4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁原创 2020-07-09 16:20:38 · 10206 阅读 · 1 评论 -
JavaWeb ---- ServletConfig类
文章目录ServletConfig简介ServletConfig 类的三大作用ServletConfig简介ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。 Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对 象。ServletConfig 类的三大原创 2020-07-09 15:08:54 · 10227 阅读 · 0 评论 -
网安实训前准备Servlet ---- Servlet初识
前言:兄弟们看到这里可以跳过了,不是教程是笔记文章目录作为了解即可,开发不这样使用第一个ServletJava-ServletXML配置解决中文乱码问题Servlet生命周期看是否为GET或者POST方法开发中用法简单说明简单示例使用IDEA创建Servlet程序作为了解即可,开发不这样使用第一个ServletJava-Servlet第一个Get,复习的时候看看注释package com.stackery.servlet;import javax.servlet.*;import java原创 2020-07-09 14:30:00 · 10400 阅读 · 0 评论 -
JavaWeb中所需要的所有Jar包(引用自Maven中心仓库)
便于大家直接使用,下面给出依赖,放入pom.xml即可很简洁,便于直接食用,这样就得到了JavaWeb当中所需要的所有Jar包<dependencies> <!-- 解析XML的jar包 --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.原创 2020-07-09 11:11:54 · 13985 阅读 · 2 评论 -
基于Maven的JavaWeb项目创建
前言:既然是IDEA那么就很随意了,为啥非得Maven,相对于不使用框架构建maven工程集成web来说,使用maven webapp框架来创建Java EE工程更加的简单一些,所以推荐Maven!!!文章目录使用模板创建Step1Step2Step3如果不是请看我使用模板创建Step1首先新建项目Step2起好项目名称再设置好保存路径Step3根据提示完成项目构建,等待项目加载完成后新建两个文件夹即可:java与resources,如果没有下图这个那就手动输入、设置完之后一定要是原创 2020-07-08 20:10:52 · 15018 阅读 · 4 评论 -
Java实现九九乘法表
思想:利用二重循环,主要是利用j与i的关系,直接上代码,太简单了package demo1;public class test_1 { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.ou...原创 2020-03-05 20:20:54 · 22917 阅读 · 1 评论 -
我的Java学习之路(第二十天)------ 总结常见的数组异常(越界与空指针)
(参考:尚硅谷_宋红康_Java语言基础)文章目录数组异常数组的越界空指针数组异常数组的越界int[] arr = new int[4];for(int i=0;i<arr.length;i++){ statement.......}上面这个例子毫无疑问是正确的,但如果把里面的条件改为i<=arr.length,便会导致越界;当然越界也可能是左边界越界,不多叙述;...原创 2020-02-04 15:10:10 · 27216 阅读 · 1 评论 -
我的Java学习之路(第十九天)------ 排序算法(冒泡排序、快速排序)
(参考:尚硅谷_宋红康_Java语言基础)文章目录数组的冒泡排序数组的快速排序数组的冒泡排序package de1;public class Test2 {public static void main(String[] args) { int[] arr=new int[] {-6,-3,0,1,3,5,9,56,58,99}; for(int i=0;i<arr.l...原创 2020-02-03 15:43:06 · 27311 阅读 · 1 评论 -
我的Java学习之路(第十九天)------ 数组的复制、反转、查找(线性查找、二分法)
(参考:尚硅谷_宋红康)文章目录数组的复制数组的反转数组的复制假定两个数组arr1与arr2,如果使用arr2 = arr1,但是这个并不能实现数组的复制,因为在此时堆空间当中只有一个数组,arr2 = arr1实现的仅仅是将arr1的地址复制给了arr2,让它们都指向堆空间的唯一的一个数组实体;那如何真正意义上取实现数组的复制呢?①其中一个方法就是使用遍历的额方式取逐个赋值packa...原创 2020-02-03 12:32:14 · 27449 阅读 · 1 评论 -
我的Java学习之路(第十八天)------ Math.random的使用
(Eg:如果只需要一个答案,直接翻到最下面即可)首先Math.random()是令系统随机生成一个大于等于 0.0 且小于 1.0 (前开后闭)的伪随机 double 值,为方便本篇叙述将其表示为:Math.random:[0.0,1.0)下面以整数(int)为例子:通常,如果我们需要获取从[x,y)范围内的伪随机数,有下面这样的公式:Math.random()*(y-x)+x这很好...原创 2020-02-02 16:55:15 · 27968 阅读 · 1 评论 -
我的Java学习之路(第十七天)------关于随机数的一个Java面试题目
题目内容为:创建一个长度为6的int型数组,取值为1-30,并且元素值各不相同思路:第一个数字不用管(因为没有数字和它重复),从第二个元素开始,依次比较与前面数字是否相同,如果相同则重新生成一个新的随机数,下面为实现代码;????很简单,一眼就能看懂(Eg:如果没看懂,评论区评论下,我会解释的,不过应该不存在这个问题)package de1;public class Test { p...原创 2020-02-01 18:05:55 · 27455 阅读 · 1 评论 -
我的Java学习之路(第十六天)----- Java实现杨辉三角
很简单的东西,就没必要讲的多详细了 唯一要说的就是杨辉三角的规律 从第三行开始第二列元素为上一列元素对应位置与上一个元素的和;即array[i][j] = array[i-1][j-1] + array[i-1][j];package de1;public class Test { public static void main(String[] args) { //初始化 ...原创 2020-01-31 15:13:29 · 26729 阅读 · 3 评论 -
我的Java学习之路(第十五天)----- 字符串格式设置(附:print、printf以及println区别)
1、字符串格式设置(参考书籍:Java编程思想 Allen B.Downey)涉及到方法String.format,它与String.printf相同:一个格式说明符和一系列的值,主要差别在于后者将结果显示到屏幕上,前者则创建一个新的字符串但什么都不显示;下面举个例子:package de1;public class Test { public static void main(St...原创 2020-01-21 11:24:35 · 24976 阅读 · 1 评论 -
我的Java学习之路(第十五天)------ 字符串的比较以及compareTo方法的使用
一开始,可能对于某些问题不太清楚,你可能会使用==或!=来比较字符串;(注意:这是错误的做法)package de1;public class Test { public static void main(String[] args) { String name1 = "ywh"; String name2 = "ywh"; if(name1 == name2) { ...原创 2020-01-21 11:04:47 · 26161 阅读 · 2 评论 -
我的Java学习之路(第十四天)------ 在字符串中查找字符
方法indexOf用于在字符串中查找字符package de1;public class Test { public static void main(String[] args) { String name = "yangwenhao"; int index = name.indexOf('a'); System.out.println(index); }}...原创 2020-01-20 18:10:50 · 24915 阅读 · 1 评论