Java安全-JNDI注入
Java安全-JNDI注入JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java EE的重要部分,JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA
首先来介绍一下JNDI的具体内容
Naming Service 命名服务:这就是JNDI中的N
命名服务将名称和对象进行关联,提供通过名称找到对象的操作,例如:DNS系统将计算机名和IP地址进行关联、文件系统将文件名和文件句柄进行关联等等,简单的说,就是把一个名称绑定到一个对象上,以方便后续的查找
在名称系统中,有几个重要的概念。Bindings: 表示一个名称和对应对象的绑定关系,比如在文件系统中文件名绑定到对应的文件,在 DNS 中域名绑定到对应的 IP。Context: 上下文,一个上下文中对应着一组名称到对象的绑定关系,我们可以在指定上下文中查找名称对应的对象。这个概念比较抽象,我个人的理解就是一个前后文环境的意思,比如在文件系统中,一个目录就是 ...
Java安全-Fastjson学习
Java安全-Fastjson学习Fastjson基础Fastjson简介Fastjson 是 Alibaba 开发的 Java 语言编写的高性能 JSON 库,用于将数据在 json 和 Java Object 之间互相转换。
提供两个主要接口来分别实现序列化和反序列化操作
JSON.toJSONString 将 Java 对象转换为 json 对象,序列化的过程。
JSON.parseObject/JSON.parse 将 json 对象重新变回 Java 对象;反序列化的过程
Fastjson代码Demo首先我们通过几个例子来了解一下Fastjson是如何使用的
pom.xml导入对应的依赖
12345<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version> </dependency>
然后我们定义一个测试用的学生类
12 ...
SQL盲注
SQL盲注什么是SQL盲注盲注是SQL注入的其中一种,是在SQL注入的基础上,根据根据SQL注入的回显不同来进行判断的
什么叫回显的不同,举个例子
1SELECT * FROM users WHERE id='$id' LIMIT 0,1
执行这个语句进行查询,如果你能看到查询到的数据,就叫做有回显,如果你没看到查询的具体信息,只告诉你查询成功等信息,甚至什么都不说,但是在这个过程中,SQL语句被执行了,SQL注入也发生了,只是我们拿不到注入的结果
那么遇到查不到详细信息的情况怎么办呢,就需要用到SQL盲注的知识,可以理解为一种爆破
比如他只告诉你查询成功和查询失败,那么你就可以这样去问
12345678如果"数据库名"的第1个字母是a,你就说“查询成功”,否则就说“查询失败”如果"数据库名"的第1个字母是b,你就说“查询成功”,否则就说“查询失败”如果"数据库名"的第1个字母是c,你就说“查询成功”,否则就说“查询失败”...如果"数据库名"的第2个字母是a,你就说“查询成功”,否则 ...
JavaScript学习
JavaScript学习JavaScript是前端的一种脚本,,简单的来说,就是让前端网页由静态编程动态的一种语言,可以用来创建动态更新的内容,它是一种解释型语言,即不提前编译,代码以文本格式传输到浏览器上进行接收,采用了一种叫做即时编译(just-in-time compiling)的技术
这是构建一个网页的过程:
浏览器在读取一个网页时,代码(HTML, CSS 和 JavaScript)将在一个运行环境(浏览器标签页)中得到执行。就像一间工厂,将原材料(代码)加工为一件产品(网页),然后在HTML和CSS组装成一个网页之后,浏览器的 JavaScript 引擎将执行 JavaScript 代码,这样就可以实现根据DOM(Document Object Model) API对网页的各种内容进行动态修改
基本语法使用关键字 let 和一个名字来创建变量,使用关键字 const 和一个名字来创建常量
可以使用等号(=)和一个值来为变量或常量赋值
函数定义(可以在控制台中输入checkGuess();进行调用,弹出一个告警文本框)
这里我们使用关键字 function 、一个 ...
Jsoup爬虫入门
Jsoup爬虫入门粗略的了解一下Java的Jsoup爬虫入门
首先肯定是导包
这次我们拿京东的搜索商品来举例,我们搜索java,然后观察地址栏的url
https://search.jd.com/Search?keyword=java,关键url就是这一段
首先了解一下jsoup的Document类,Document是一个装载html的文档类,即通过我们传入的url获取整个页面的html内容
然后我们看一下爬虫代码
1234567891011121314151617181920212223242526272829import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.io.IOException;import java.net.URL;public class jsoup { public static void main(String[] args) throw ...
Java安全-反序列化CommonsCollections1利用链
Java安全-反序列化CommonsCollections1利用链在上一篇文章中,我们学习了Java反序列化入门的URLDNS链,这次进行CC链的初次学习
前置知识在学习CC链之前,我们需要了解一些前置知识,其实就是了解CommonsCollections中的几个Transformer,这几个类建议直接看着源码来学习
环境123456789<dependencies> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency></dependencies>
JDK版本应该为8u71之前
Commons Collections这个Commons Collections是什么意思呢,简单的说,就是一个对Java的 ...
Java安全-反序列化URLDNS
Java安全-反序列化URLDNSP神的Java安全漫谈里说,学习Java反序列化,先从URLDNS 开始看起,因为它足够简单,那我们就从URLDNS这条链子开始学习,然后再去看CC链
那什么是利用链呢,利用链也叫“gadget chains”,我们通常称为gadget,顾名思义就是一条利用恶意代码去执行某些命令的链子,从触发位置到利用执行命令的位置结束
那我们接下来就来看看URLDNS这条利用链,这条利用链通常用于检测是否存在Java反序列化漏洞
简介URLDNS这条链,并不能用来执行其他命令来进行RCE,只能用来发送一次DNS请求到我们指定的网站上,然后我们就能查看是否有请求记录而来判断是否存在Java的反序列化漏洞。简单的来说:URLDNS只能用来探测和验证是否存在漏洞。看似没什么用,但其实在渗透测试的实战中,这种用DNS请求来探测和验证漏洞的点到为止的思想还是挺常用的。而且这个Gadget还不需要任何其他的依赖,原生Java就能够成功调用成功。
该利用链有三个特点
不限制jdk版本,使用Java内置类,对第三方依赖没有要求
目标无回显,可以通过DNS请求来验证是否存在反序列 ...
Java安全-反序列化
Java安全-反序列化Java反序列化简介在学习反序列化的漏洞之前,首先需要了解一下Java反序列化的基本概念和用法
关于反序列化的介绍,在之前学习php反序列化的时候已经了解的足够多了,这里就不在过多解释了,简单介绍一下,序列化是一种方便的将对象进行存储和传输的技术,一般情况下在网络通讯或保存数据时,是使用JSON或者XML格式进行传输数据,但这两种格式无法传输对象,利用序列化的方法就可以将Java对象存储到文件或者通过网络传输出去了
序列化:Java 提供了一种将对象序列化的机制,该机制中,一个对象可以被表示为一个字节(Byte[])序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型
反序列化:既然有序列化,那就有读取序列化的方法,将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象
简单来说,Java 序列化就是把一个 Java Object 变成一个二进制字节数组 , 即 byte[], Java 反序列化就是把一个二进制字节数组(byte[]) 变回 ...
Java安全-RMI
Java安全-RMI前言RMI 在 Java 里面还是很常用的,后续 Java 安全章节也会涉及到诸多 RMI 的问题,所以先学习一下有关RMI的相关部分
RMI概述RMI全称为Remote Method Invocation(远程方法调用),是java编程语言中,一种实现远程过程调用的应用程序编程接口,存储于java.rmi包中,使用其方法调用对象时,必须实现Remote远程接口,能够让某个java虚拟机上的对象调用另外一个Java虚拟机中的对象上的方法
简单的来说,就是从一个java虚拟机调用本地或者其他计算机上的另一个java虚拟机中的方法,屏蔽了通信内容,且无需担心JVM中对象的不同(跨JVM操作)
RMI基本概念从RMI设计角度来讲,基本分为三层架构模式来实现RMI,分别为RMI服务端,RMI客户端和RMI注册中心:
Client-客户端:客户端调用服务端的方法
Server-服务端:远程调用方法对象的提供者,也是代码真正执行的地方,执行结束会返回给客户端一个方法执行的结果
Registry-注册中心:其实本质就是一个map,相当于是字典一样,用于客户端查询要调用的方法的引用 ...
Java安全-反射
Java安全-反射Java安全中很重要的一个模块就是Java的反序列化漏洞,而要进行Java反序列化漏洞的学习,就需要先了解反射的一些知识,在之前的一篇文章中,已经大概介绍了反射的各种用法,这里就不再详细介绍了,需要了解的可以移步博客首页的《Java基础知识》这篇文章进行查看。反射是大多数语言里都必不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有),拿到的⽅法可以调⽤,总之通过“反射”,我们可以将Java这种静态语⾔附加上动态特性
Java的反射机制,为Java提供了动态特性,那么什么是动态特性呢,简单的来说,就是在通过外部文件配置,在不修改源码的情况下,来控制程序,例如php中的一句话木马的执行就是一个动态特性
在Java安全中,各种和反射有关的payload都会用到如下方法
获取类的方法: forName
实例化类对象的方法: newInstance
获取函数的方法: getMethod
执行函数的方法: invoke
获取class对象,也就是类,一般有三种方法
1、类的.class属性第一种就是最简单明了的方式,我们可以通过类名的属性cla ...