- 博客(112)
- 收藏
- 关注
原创 Javaweb安全——Dubbo 反序列化(一)
Apache Dubbo 是一款 RPC 服务开发框架。智能容错和负载均衡,以及服务自动注册和发现。
2023-02-13 23:22:28
1457
1
原创 Javaweb安全——Hessian 反序列化
Hessian类似于RMI也是一种RPC(Remote Produce Call)的实现。基于HTTP协议,使用二进制消息进行客户端和服务器端交互。Hessian 自行定义了一套自己的储存和还原数据的机制。对 8 种基础数据类型、3 种递归类型、ref 引用以及 Hessian 2.0 中的内部引用映射进行了相关定义。这样的设计使得 Hassian 可以进行跨语言跨平台的调用。
2023-02-03 23:12:07
1927
原创 ThinkPHP5 Request类method任意方法调用RCE
此时的调用链如下,由array_walk_recursive调用filterValue函数,完成命令执行。从上面可以看到,filter变量清除在module分支中完成的,通过进入其他进行绕过分支。此时的触发点位于记录路由和请求信息的部分,这也是为什么需要开启debug选项。5.0.13版本之前无需开启debug就能rce,之前的版本中下图代码不会在。中重新再设置一次默认filter,这就会覆盖传入的恶意filter类属性。之前的版本仅在路由调度之前进行设置filter,的键名同名的类属性赋值为。
2023-01-24 17:03:51
1469
原创 ThinkPHP5.x未开启强制路由(s参数)RCE
官方公告:https://blog.thinkphp.cn/869075由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本。
2023-01-14 19:21:10
1100
原创 ThinkPHP多语言文件包含RCE(QVD-2022-46174)
ThinkPHP6新版本补丁\think\middleware\LoadLangPack::detect`中增加了对url、Header、Cookie中设置语言的合法性检查。查看官方文档关于多语言的解释可见:会首先检查请求的URL或者Cookie中是否包含语言变量。在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在。需开启多语言选项,以thinkPHP6版本为例。方法会被自动加载(中间件的入口执行方法)在detect方法中设置语言之后进入。进行语言切换,路径直接拼接而成。
2023-01-10 23:43:18
2384
原创 Javaweb安全——反序列化漏洞-CC&CB链思路整理
如上图所示基本上起点终点就是那几个点然后相互拼接:《Shiro RememberMe 漏洞检测的探索之路》中Koalr师傅已经对CommonsCollections 系列 gadget进行了提纯变成以下四条对命令执行部分的调用分别为InvokerTransformer调用TemplatesImpl对 commons-Collections4 的适配则直接用替换。
2022-10-28 22:13:55
2357
原创 Javaweb安全——反序列化漏洞-C3P0链
C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool)。..............自下向上的调用,从lookup看着像一个jndi注入,调用链比较短,直接静态审计源码试试。还原属性赋值跟到的内部类的方法。
2022-10-25 00:21:10
2154
原创 Javaweb安全——反序列化漏洞-原生利用链JDK8u20
回顾一下JDK7u21那个链子,主体部分是通过方法去调用。equalsImpl会将this.type 类中的所有方法遍历并执行,通过设置Templates类,则势必会调用到其中的 getOutputProperties()方法,进而触发任意代码执行。从7u25修复了这个利用链,AnnotationInvocationHandler 的反序列化逻辑发生了改变,将会判断this.type字段值是否是 Annotation 注解类型,不是则直接抛出异常。
2022-10-24 00:07:48
1545
原创 Javaweb安全——Fastjson反序列化利用
JSON.parseObject 的底层调用的还是 JSON.parse 方法,只是在 JSON.parse 的基础上做了一个封装。在JSON序列化时开启 SerializerFeature.WriteClassName 选项,序列化出来的结果会在开头加一个 @type 字段,值为进行序列化的类名。反序列化时带有@type 字段的序列化数据会得到对应类型的实例化对象。漏洞的还是Fastjson的功能,此功能可以反序列化的时候人为指定类,然后在利用指定的反序列化器过程中,如果满足条件则会去反射调用方法,以串联
2022-10-13 00:51:43
4507
原创 Javaweb安全——Shiro漏洞利用
炒个冷饭,主要还是对反序列化漏洞利用方式的学习,目前只测试了tomcat环境,后面再将weblogic的部分补一补。
2022-09-25 20:17:46
991
原创 羊城杯2022 部分web
pearcmd.php文件包含,过滤了常用的几个命令选项,但还有个download。写个马丢到vps上,pear的过滤使用url编码绕过。
2022-09-05 23:32:36
845
原创 Javaweb安全——JSP Webshell
public static class x extends ClassLoader //继承ClassLoader {#恶意类字节码 BASE64Decoder code = new sun . misc . BASE64Decoder();//将base64解码成byte数组,并传入自定义类的get函数 System . out . println(result . newInstance());}.
2022-08-22 22:00:35
6294
原创 Javaweb安全——Tomcat 内存马基础
无文件落地的 webshell 技术,即,通常配合反序列化或者spel表达式注入进行类加载写入。本文环境 Tomcat 9.0.59 作为中间件,且并没有配置spring框架,代码具体实现与中间件有关。
2022-08-17 17:43:40
1403
原创 强网杯2022——WEB
www.zip下载源码,可见黑名单过滤。开启了spl_autoload_register没有做限制的话,在反序列化实例化一个test类的时候,spl_autoload_register会自动去当前目录下包含文件名为test.php或者是test.inc上传一个inc,再生成反序列化数据,最后去config.inc.php包含,执行木马。...
2022-08-02 00:37:38
1657
4
原创 Javaweb安全——表达式注入(EL+SpEL)
Java中表达式根据框架分为好多种,这里以JSP自带的表达式语言EL和使用较多的Spring框架所支持的SpEL为例。其基本语法为${变量表达式}。
2022-07-22 23:27:54
3037
原创 Javaweb安全——JNDI注入
测试环境为JDK8u111以及8u211JavaNamingandDirectoryInterface(JNDI)是一个和JDBC、LDAP、RMI、DNS。名称与对象相关联的方法,例如地址、标识符或计算机程序通常使用的对象。目录服务是命名服务的扩展,除了提供名称和对象的关联,。在一个实际的名称服务中,有些对象可能无法直接存储在系统内,而是以引用的形式进行存储。引用包含了如何访问实际对象的信息。对象工厂是对象的生产者。它接受有关如何创建对象的一些信息,例如引用,然后返回该对象的实例。的错误。...
2022-07-21 01:28:12
1427
原创 Javaweb安全——反序列化漏洞-原生利用链JDK7u21
先来看看ysoserial当中payload的调用链:从TemplatesImpl.getOutputProperties()开始是很熟悉的,而调用它用的类也在之前CC1利用链出现过:当时只用到了这个类会触发 Map#put 、 Map#get 的特点,这条利用链则是用到了其方法去调用有个很明显的反射调用 ,而 memberMethod 由getMemberMethods()方法获得,最终是由this.type.getDeclaredMethods()得到的type属性设置的类的所有方法。equals
2022-07-08 16:44:38
564
原创 Javaweb安全——反序列化漏洞-Shiro(CommonsBeanutils利用链)
先来看一段这个漏洞描述:这里使用的shiro应用demo为https://github.com/phith0n/JavaThings/tree/master/shirodemo测试的jdk版本为8u111 以及 8u211 都试过可以触发。的特征:处理cookie的流程:生成payload的流程:使用shiro内置的类 org.apache.shiro.crypto.AesCipherService进行AES加密,先要找到硬编码的key,然后写一个exp生成payload。key的位置位于(shiro...
2022-07-08 03:03:36
1650
原创 Javaweb安全——反序列化漏洞-commons-collections4利用链(CC2和CC4)
在2015年底commons-collections反序列化利用链被提出时,Apache Commons Collections有以下两个分支版本:对旧CC链的影响主要体现在 这个方法被修改了在commons-collections4中对应的方法为。3和4的groupId和artifactId都不一样所以可以在同一项目中共存方便调试。还是做的一个LazyMap构造函数包装,基本就是改了个名字,那将之前的链子decorate换成lazyMap就行,导入的包名变。以CC6为例:CC1、CC3、CC6修改之后
2022-07-06 01:52:51
2358
原创 Javaweb安全——反序列化漏洞-CC3链
CommonsCollections3是为了绕过一些规则对InvokerTransformer的限制而产生的,因为在CommonsCollections1中我们为了动态调用方法需要使InvokerTransformer这个类完成回调,被加入黑名单的话就切断了CommonsCollections1的利用链。上一篇文章的TemplatesImpl动态加载字节码刚好就有用武之地了,将原来的回调链替换掉变成直接加载字节码。先来看一个demo:由CommonsCollections1 AnnotationInvoc
2022-07-06 01:51:14
974
原创 Javaweb安全——Java 动态加载字节码
主要是为了学习这个在各类漏洞利用链中高频出现的类。顺便复习下ClassLoader(加载器)相关知识。即编译后得到的class文件内容,本质上就是JVM执行使用的一类指令。广义上包括所有能够恢复成一个类并在JVM虚拟机里加载的字节序列继承了,提供了加载远程资源的能力, 实际上是我们平时默认使用的 的父类。Java会根据配置项 和 中列举到的基础路径(这些路径是经过处理后的 java.net.URL 类)来寻找.class文件来加载,而这个基础路径有分为三种情况:攻击者通常使用的是第三种情况,即在vps上丢
2022-06-25 03:48:27
696
原创 Javaweb安全——反序列化漏洞-CC6链
本文环境为 JDK8u11现在开始学习,Java 8u71之后,即高版本Java利用链,从CommonCollections6开始在 8u71之后AnnotationInvocationHandler的逻辑变成新建了一个LinkedHashMap对象,并将原来的键值添加进去,传进去的恶意Map不再执行set或put操作。而是通过invoke方法触发其get方法开始的,所以需要一个新的触发get方法的点,先看ysoserial当中CC6的通过去触发get方法直接搜get,找到方法查找其调用,跟踪到方法要
2022-06-01 10:49:36
820
原创 BUU Dest0g3 520迎新赛 WEB writeup
WEBphpdest<?phphighlight_file(__FILE__);require_once 'flag.php';if(isset($_GET['file'])) { require_once($_GET['file']);} require_once 绕过不能重复包含文件的限制/?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/r
2022-05-29 23:15:48
2113
原创 Javaweb安全——反序列化漏洞- CC1链
Common-Collections利用链1第一次接触反序列化漏洞时写的初识Java反序列化漏洞这篇文章当中已经分析过一遍Common-Collections的两条链子(分别用的TransformedMap和LazyMap构造恶意对象反射链,AnnotationInvocationHandler(CC1)和BadAttributeValueExpException(CC5)调用transform())。这次从Common-Collections1开始再捋一遍,顺便自己写一遍exp加深印象。本文环境为jd
2022-05-24 02:24:23
1202
原创 2022DASCTF MAY 出题人挑战赛writeup
2022DASCTF MAY 出题人挑战赛WEBPower Cookie1.抓包2.添加Cookie魔法浏览器运行页面源代码的js得到User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Magic/100.0.4896.75带着这个User-Agent访问即可getmeCVE-2021-42013 Apache HTTPd 2.4.49 2.4.50
2022-05-22 12:00:00
527
3
原创 Javaweb安全——反序列化漏洞-URLDNS链
反序列化- URLDNS链之前学过一遍Java反序列化漏洞,不过那次是从cc链入手的,当时也看了好久,各种调试才搞明白。这次从调用简单的URLDNS链开始从新捋一遍。本文SDK为1.8 8u211URLDNSysoserial中一个利用链,其触发的结果是一次DNS请求。可用于确认是否存在反序列化漏洞,因为整条链均用Java内置的类构造,对第三方库没有依赖。先来看看ysoserial当中的实现代码public class URLDNS implements ObjectPayload<Obj
2022-05-21 23:28:58
505
原创 python pickle反序列化漏洞
前置知识什么是picklepickle是Python专用的一个进行序列化和反序列化的工具包,pickle能表示Python几乎所有的类型(包括自定义类型),由一系列opcode组成,模拟了类似堆栈的内存。与PHP序列化或者JSON,这些以键值对形式存储序列化对象数据的不同,pickle 序列化(Python独有)是将一个 Python 对象及其所拥有的层次结构变成可以持久化储存的二进制数据,无法像JSON 一样直观阅读。在Python中,采用术语 封存 (pickling)和 解封 (unpickli
2022-05-20 20:28:37
3044
原创 网刃杯 第二届 2022 web
Sign_inFile协议读取/etc/hosts得到内网iphttp://探测内网主机按照提示传参,添加http头即可,用gopher发送post数据http://124.220.9.19:8091/?url=gopher://172.73.23.100:80/%5f%50%4f%53%54%25%32%30%2f%25%33%46%61%25%33%44%31%25%32%30%48%54%54%50%2f%31%2e%31%25%30%44%25%30%41%48%6f%73%74%
2022-04-25 10:35:18
585
原创 MySQL注入及绕过备忘录
SQL注入(以Mysql为例)大致分为有回显和无回显两类进行梳理,重心会放在盲注这一块,正则匹配等一些技巧都放在盲注部分。使用sql-labs进行演示,在challenges数据库中在添加一个flag数据库表,并修改sql-labs源码使其回显执行的sql语句,方便演示。判断是否存在SQL注入本质都是看页面是否出现异常加单引号’、双引号”、单括号)、双括号))或者进行组合看看是否报错(字符型)。服务器不返回报错信息时,加 and 1=1 、 and 1=2 看页面是否有变化(数字型),字符型
2022-04-25 00:33:54
5158
原创 2022DASCTF Apr X FATE 防疫挑战赛 warmup-php
主页代码逻辑就是自动加载class下类文件,然后动态调用一个类,并设置成员变量。最后调用类的run()方法。看uml类图其实就大致有数该实例化哪个类了,TestView看这几个类文件的内容,很明显的页面模板生成代码,感觉是根据YII2框架的模板渲染提取的主要逻辑先找漏洞点,在Base类中再去找调用链,搜索run()方法,在ListView类中接着跟到renderContent,会去调用类中的renderSection方法,$this->template需为{test}形式,才会被正则
2022-04-24 19:30:13
2414
原创 Javaweb安全——RMI反序列化
RMIRMI(Remote Method Invocation)即Java远程方法调用,RMI用于构建分布式应用程序,类似于RPC(Remote Procedure Call Protocol)远程过程调用协议,RMI实现了Java程序之间跨JVM的远程通信,使得一个JMV上的对象可以调用另一个JMV上的方法(方法在远程JVM上执行,只是返回运行结果)。这两个JVM可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。RMI架构:RMI分为三个主体部分:Client,Server
2022-04-13 01:01:05
1267
原创 Javaweb安全——Java动态代理
Java 动态代理Java的java.lang.reflect包下提供了一个Proxy类和InvocationHandler接口,可以生成JDK动态代理类或对象来完成程序无侵入式扩展(即不通过继承接口编写实现类来完成功能拓展)。Java动态代理主要使用场景:统计方法执行所耗时间。在方法执行前后添加日志。检测方法的参数或返回值。方法访问权限控制。方法Mock测试。动态代理Java的代理感觉是,给原来的操作前后加上了增强代码,像是类的包装。静态代理通过编写一个代理类实现,如下面这个例子,
2022-04-05 02:19:03
4208
原创 Javaweb安全——Java反射
Java反射机制Java反射(Reflection)是Java非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法(Methods)、成员变量(Fields)、构造方法(Constructors)等信息,还可以动态创建Java类实例、调用任意的类方法、修改任意的类成员变量值等。Java反射机制是Java语言的动态性的重要体现,也是Java的各种框架底层实现的灵魂。获取Class对象Java反射操作的是java.lang.Class对象,所以我们需要先想办法获取到Class对象,通常我们有
2022-04-01 12:15:29
2973
原创 Javaweb安全——Java类加载机制
前言参照https://javasec.org/以及p神的Java安全漫谈的路线进行学习,类似读书笔记那种吧。之前都是ctf遇到Java的题才学一点,像是反序列化这种,没系统化的学过Java Web安全,这次从头来好好学一遍。Java平台版本Java平台共分为三个主要版本Java SE(Java Platform, Standard Edition-Java平台标准版)、Java EE(Java Platform Enterprise Edition-Java平台企业版)、和Java ME(Java
2022-04-01 12:12:06
3237
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人