Kingkk's Blog

菜的要死

runc容器逃逸漏洞分析(CVE-2021-30465)

前言虽然漏洞的利用难度比较高,但是个人感觉还是很有意思的一个洞,值得记录一下。不过分析起来可能会像是一篇译文23333,欢迎直接阅读原文。 http://blog.champtar.fr/runc-symlink-CVE-2021-30465/ 漏洞利用1、首先需要创建多个容器,一个正常启动的容器c1,以及多个无法正常启动(即image为donotexists.com/do/not:e......

docker容器核心技术与实现简介

Namespacesnamespace是linux提供的一种操作系统级别的资源隔离。 https://man7.org/linux/man-pages/man7/namespaces.7.html 命名空间是被不断完善加入到linux内核当中的,这里介绍几个常用的namespace(runc里会多一个Cgroup namespace) UTS(CLONE_NEWUTS):主要用于hostn......

配置不当导致的容器逃逸

前言代码安全搞不动了,这几天又开始摸鱼k8s,记录下一些由于配置不当导致的容器逃逸,以及一些利用方式和原理。 privileged特权模式privileged简介docker中提供了一个--privileged参数,这个参数本身最初的目的是为了提供在docker中运行docker的能力https://www.docker.com/blog/docker-can-now-run-within-......

静态程序分析笔记

前言本来2020年就写完了的,但最近发生了比较多事情,就一直也忘了更新,希望2021剩下的日子能好一些吧。 说实话一部分过程内的数据流分析算法现在也没搞太懂,凑活看吧,仅供参考。 AST & IR通常来说,一个程序从源码(Source Code)到二进制程序/机器码(Machine Code)通常需要经过如下几个步骤 编译器在获取到源码之后,会先对源代码进行词法分析(Lexica......

从MethodHandle到InvokeDynamic指令

前言之前在用ASM处理字节码的时候,发现rt.jar中居然有比较多的invokedynamic指令,并且ASM对该指令提供了一个单独的结构体来描述InvokeDynamicInsnNode,甚至不能一眼看出这个指令具体调用了个什么方法。 之后便翻了几天文档和一些文章,在这里做一下记录,文章难免有疏漏,欢迎指出。 MethodHandleMethodHanlde是Java7之后出现的API,以......

ASM历险记

前言之前就一直说着要学ASM,但每次看着一堆JVM指令就脑壳疼,前段时间算是静下心来看了一遍文档,不得不说ASM的文档写的确实很赞,和Soot简直鲜明对比。 本文主要内容来自于ASM4官方文档,推荐直接看原文档,本文仅做个人学习记录,不保证正确性。 https://asm.ow2.io/asm4-guide.pdf JVM基础类结构 如上就是一个类文件的大体文件结构(其中Attribut......

CVE-2020-14644分析与gadget的一些思考

前言前段时间Weblogic出了七月份的补丁,其中比较受关注的有4个9.8评分的RCE,目前14625和14645在网上也都有了详情,话说有个老哥一己之力包了其中三个属实nb。 之前也有几个朋友问起14644的详情,正好一起分享下14644的利用,和之前疫情半年在家挖gadget的一些思考。 CVE-2020-14644和2883、14645不同的是,这应该算是一条全新的gadget,并不......

Java中的反射

前言个人对反射的理解就是在运行时动态去获取、操作Java程序,反射赋予了Java这门静态语言动态执行的能力。反射的对象是在JVM中运行时的方法、属性、构造函数。在现代化Java框架中都不可避免的运用到了反射,赋予程序更好的动态执行能力。过于随意的反射操作也会带来一些安全隐患,比如反序列化中知名的cc链、weblogic中的coherence链,以及tomcat中rmi工厂类的绕过payloa......

浅谈下Fastjson的autotype绕过

前言继去年1.2.47 Fastjson被绕过之后,最近的1.2.68又出现了绕过。 正好前段时间翻了一遍Fastjson的源码,对整体逻辑有了一些了解,就尝试分析下autotype的校验过程,以及这两次绕过的思路。若有错误,还望指出。 autotype的校验为什么校验一直被绕过?1.2.24之后,fastjson对反序列化的类型进行了校验,主要就体现在ParserConfig.checkA......

浅谈JNDI

关于JNDI Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI),是Java的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象 。 可以理解为一个Java抽象出来统一与命名服务或者目录服务交互的接口。比如需要访问DNS服务、LDAP服务、RMI......