RASP绕过初探
最近看完了赛博朋克边缘行者,我愿称之为年度最强番,扳机社太强了,塑造的02和lucy都很戳我《I Really Want to Stay At Your House》一响直接泪目了xd
RASP是Runtime application self-protection的缩写,中文翻译为应用程序运行时防护,其与WAF等传统安全防护措施的主要区别于其防护层级更加底层——在功能调用前或调用时能获取访问到当前方法的参数等信息,根据这些信息来判定是否安全
RASP与传统的基于流量监测的安全防护产品来说,优势点在于可以忽略各种绕过流量检测的攻击方式(如分段传输,编码等),只关注功能运行时的传参是否会产生安全威胁。简单来说,RASP不看过程,只看具体参数导致方法实现时是否会产生安全威胁。简单类比一下,RASP就相当于应用程序的主防,其判断是更加精准的。
OpenRASP官网地址:https://rasp.baidu.com/OpenRASP是该技术的开源实现,可以在不依赖请求特征的情况下,准确的识别代码注入、反序列化等应用异常,很好的弥补了传统设备防护滞后的问题
在 https://packag ...
Fastjson高版本的奇技淫巧
众所周知fastjson一般都是打JNDI的,这也是最常用的一种方法,但是高版本的话autoType默认为false,不支持,这里就需要通过一些其他的方法来rce了
在去年的黑帽大会上分享了fastjson1.2.68的几种利用链,今年看到浅蓝师傅关于fastjson1.2.80分享的议题,决定两个一起学习一下
BlackHat2021(fastjson 1.2.68)fastjson 1.2.68可以利用java.lang.AutoCloseable绕过checkAutotype
利用前提:
必须继承 AutoCloseable
必须具有默认构造函数或带符号的构造函数,否则无法正确实例化
不在黑名单中
可以引起 rce 、任意文件读写或其他高风险影响
gadget的依赖应该在原生jdk或者广泛使用的第三方库中
Mysql JDBC先配置一下mysql
12345<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId& ...
java反序列化之SnakeYaml
SnakeYamlSnakeYaml包主要用来解析yaml格式的内容,yaml语言比普通的xml与properties等配置文件的可读性更高,像是Spring系列就支持yaml的配置文件,而SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型
YAML基本格式要求:
YAML大小写敏感
使用缩进代表层级关系
缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)
pom导入依赖jar包
12345<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.27</version></dependency>
反序列化SnakeYaml提供了Yaml.dump()和Yaml.load()两个函数 ...
Spring内存马学习
Spring回显写一个controller测试一下,发现可以通过ServletRequestAttributes直接获取HttpServletRequest和HttpServletResponse并且RequestContextHolder.getRequestAttributes()可以获取RequestAttributes
12345678910111213141516171819202122import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import java.io.*;@Controllerpublic class SpringMVCTestController ...
java二次反序列化初探
前置知识ctf的题目越来越难了,java的考点也更多更复杂,这里就学习一下二次反序列化
SignedObject它是java.security下一个用于创建真实运行时对象的类,更具体地说,SignedObject包含另一个Serializable对象
看一下它的getObject()方法,是一个反序列化,并且该方法还是getter
并且发现反序列化内容是可控的
这里可以看到content是一个byte型数组private byte[] content;那么思路就很简单了,先构造一个恶意SignedObject
1234KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");kpg.initialize(1024);KeyPair kp = kpg.generateKeyPair();SignedObject signedObject = new SignedObject(恶意对象 用于第二次反序列化, kp.getPrivate(), Signature.getInstance("DSA&q ...
Tomcat内存马学习
内存马是无文件Webshell,什么是无文件webshell呢?简单来说,就是服务器上不会存在需要链接的webshell脚本文件,内存马的原理就是在web组件或者应用程序中,注册一层访问路由,访问者通过这层路由,来执行我们控制器中的代码
向各种中间件和框架注入内存马的基础,就是要获得context,所谓context实际上就是拥有当前中间件或框架处理请求、保存和控制servlet对象、保存和控制filter对象等功能的对象
Tomcat内存马Tomcat架构原理
首先需要了解tomcat的一些处理机制以及结构,这样才能了解内存马Tomcat中有四种类型的Servlet容器,从上到下分别是 Engine、Host、Context、Wrapper:
Engine,实现类为 org.apache.catalina.core.StandardEngine
Host,实现类为 org.apache.catalina.core.StandardHost
Context,实现类为 org.apache.catalina.core.StandardContext
Wrapper,实现类为 or ...
Tomcat不出网回显学习
Linux回显在学习内存马之前,先学习一下如何实现回显
通过文件描述符回显linux下java反序列化通杀回显方法的低配版实现
通过java反序列化执行java代码,系统命令获取到发起这次请求时对应的服务端socket文件描述符,然后在文件描述符写入回显内容
问题在于如何通过java反序列化执行代码获取本次http请求用到socket的文件描述符(服务器对外开放的时fd下会有很多socket描述符)在/proc/net/tcp6文件中存储了大量的连接请求其中local_address是服务端的地址和连接端口,rem_address是远程机器的地址和端口(客户端也在此记录),因此我们可以通过remote_address字段筛选出需要的inode号这个inode号也出现在/proc/$PPID/fd中获取socket思路就很明显了:
1.通过client ip在/proc/net/tcp6文件中筛选出对应的inode号2.通过inode号在/proc/$PPID/fd/中筛选出fd号3.创建FileDescri ...
Fastjson漏洞学习
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean
自我提问与回答
parse 和 parseObject的区别:使用JSON.parse(jsonString)和JSON.parseObject(jsonString, Target.class),两者调用链一致,前者会在 jsonString 中解析字符串获取 @type 指定的类,后者则会直接使用参数中的classparse 会识别并调用目标类的 setter 方法及某些特定条件的 getter 方法,而 parseObject 由于多执行了 JSON.toJSON(obj),所以在处理过程中会调用反序列化目标类的所有 setter 和 getter 方法
templatesimpl为什么鸡肋:调用parseObject()方法时,需要加入Feature.SupportNonPublicField参数,不太现实
不出网怎么利用:使用到的是BCEL字节码然后使用classload进 ...
java反序列化之MySQL JDBC链
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行Sql语句的Java Api,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范。简单理解为链接数据库、对数据库操作都需要通过jdbc来实现
Mysql JDBC 中包含一个危险的扩展参数: "autoDeserialize"。这个参数配置为 true 时,JDBC 客户端将会自动反序列化服务端返回的数据,这就产生了 RCE
漏洞复现mysql-connector-java:https://mvnrepository.com/artifact/mysql/mysql-connector-java使用师傅的项目:https://github.com/fnmsd/MySQL_Fake_Server修改config.json中的ysoserial位置成功连接后,触发cc6利用链的反序列化
12345678910111213package jdbc;import java.sql.*;public class JdbcTe ...
java反序列化之Rome链
ROME 是一个可以兼容多种格式的 feeds 解析器,可以从一种格式转换成另一种格式,也可返回指定格式或 Java 对象,Rome是为RSS聚合而开发的开源包,它可以支持0.91、0.92、0.93、0.94、1.0、2.0,可以说rss的版本基本上都支持
下载地址:https://rometools.github.io/rome/ROMEReleases/ROME1.0Release.html
前置知识ObjectBeancom.sun.syndication.feed.impl.ObjectBean是 Rome 提供的一个封装类型,初始化时提供了一个 Class 类型和一个 Object 对象实例进行封装ObjectBean 也是使用委托模式设计的类,其中有三个成员变量,分别是 EqualsBean/ToStringBean/CloneableBean 类,这三个类为 ObjectBean 提供了 equals、toString、clone 以及 hashCode 方法
看一下 ObjectBean 的hashCode方法,会调用 EqualsBean 的b ...