网络安全渗透测试反序列化漏洞分析与复现工作

目录
  • 0x00概述
  • 0x01服务分析
  • 0x02漏洞分析
  • 0x03POC构造
  • 0x04总结

0x00 概述

GENESIS64软件的多个版本存在反序列化漏洞,影响多个组件,例如:

根据CVE漏洞相关描述,下载对应GENESIS软件版本搭建环境,进行漏洞分析与复现工作。

0x01 服务分析

安装完成后对整个系统进行熟悉,发现Web程序接口使用Silverlight进行数据交互,因此需要找到相关功能文件进行分析。经过一些时间查找,找到系统服务开启的配置文件,在配置文件中定义了访问接口信息以及调用的相关配置文件信息:

经过多方分析找到FwxServer类,类中定义了重要服务的启动与注册配置,跟进一下StartAsyncServer()进行查看:

StartAsyncServer()函数里对配置项进行处理,加载配置项里的配置,在后面有一个FwxServerBase()函数处理了很多的参数,继续跟进:

FwxServerBase()函数里只是对配置文件里的配置做了一些设置,但此处发现继承了AsyncServer,再次跟进AsyncServer:

AsyncServer()函数最后完成配置相关参数并进行启动。到这里就完成整个服务的创建与启动,当然这里只看了一个启动项目,其他的服务注册与启动都差不多:

0x02 漏洞分析

基于前期的服务启动流程以及配置项的分析,最后定位到Asyncserver里处理提交请求的接口中,此接口中定义了几个接口,均为提交请求的处理,于是就用这个作为分析的突破口。

下图中定义了一个服务契约,在服务契约里面有多个处理提交请求的操作契约:

我们来对相关参数做一个简单的分析,因为这里只有PutRequests是处理提交请求的,所以先来看看它。这里是判断提交过来的数据里的Session是否失效,失效返回false,如果Session未失效则进入第二层处理Request:

在下图可以看到Request()函数对我们提交过来的数据进行了处理:

主要的SOAP数据包标签头:

标签里的cat标签对应了下面的几种提交类型,几种类型对应了相关的处理方式:

其他的标签处理大同小异。来到PutRequest()函数,此函数里有一个a函数处理session,跟进分析一下:

a()函数里,判断了标签Actor和用户提交的数据A_1,跟进a(A_1)重载函数:

可以看到a(A_1)重载函数里只是一个值选项判断,再次回到之前,跟进a(A_0)重载函数:

a(A_0)重载函数处理了Session相关数据,也没什么可分析的,接着往下看:

接下来看到存在一个if判断,对标签PointName和PointHandle做了值判断,因为一般情况下都会有值,因此这个地方流程一般不会进入,进入else分支分析:

在else分支里面进行了一系列的标签值判断,下面代码对提交的数据进行了处理

PointManager.ValidationResult validationResult = this.a(session, request, out pointManagerWrapper, out pointHint);

只要validationResult的值不为Invalid和Unknown,则不会进行处理request数据,否则处理完成后进行返回:

继续往下看,这里调用了IsRequestAllowed()函数,这个函数是属于ISecurityManager接口的,跟进看一下处理:

在IsRequestAllowed()函数中,也对相关标签值进行了判断,这里判断了cat标签值是否为4以及InParams的值是否为SubscribeProcedureInParams;接着判断了Session信息是否失效,后面判断了PointName的值是否为“cfg:”开头的,如果是则进入tj.a()函数里,跟进tj.a()函数:

函数根据cat标签的值进行处理,如果我们提交了cat的值为4且InParams的值为SubscribeProcedureInParams的话,就会进入case 4分支处理,再次跟进tj.a()重载处理函数看看:

这里首先进行了一次判断,使用的是RepositoryIdentifier类,跟进RepositoryIdentifier.TryParse()函数:

这里把用户提交过来的PointName数据用”|”进行分割,加到list变量里面:

在处理完数据后,判断了数据的格式是否正常,这里主要判断了数据的长度,Guid.值,“rpt:“, “ctx:” ,“tag:”,随后处理了”tag:”标签,可以看到这里将”tag:”标签Base64解密后进行了反序列化的操作,跟进Deserialize()函数:

反序列化调用了DataContractSerializer进行序列化操作:

分析上图代码,可知代码里面存在一个坑:代码对用户提交过来序列化的数据进行自定义处理,固不能直接生成POC,须预先做一个处理才能被利用。进入Deserialize()函数后,函数首先获取序列化数据的前4个字节,然后以前4个字节作为长度读取序列化数据,所以我们须在前面加上长度,否则无法反序列化成功,因为在前面的GetType获取中就读取错了数据。

我们可以看到在DataContractSerializer()函数中,GetType的参数是可以控制的,分析一下对type的处理过程:首先使用工具生成一个测试poc,然后带入函数进行处理:

看到函数已经对数据进行了处理,处理完数据之后我们发现,取出的变量值并不完整

接下来带入系统进行查找类型:

最后返回的type结果为null,也就是没有找到所属的类型,自然就会反序列化失败:

这里的序列化类型的清单均置于list清单里,System.Security.Principal.WindowsPrincipal是在list里面的,但却没有找到,就是因为数据存在格式问题:

根据按照序列化处理代码对POC进行删减构造,即可成功获取type:

0x03 POC构造

根据上节的漏洞分析,我们可以构造出漏洞利用POC,并使用DataContractSerializer()作为反序列化的载体进行利用测试:

通过抓包可以看到请求的数据,在数据包中可以看到,标签cat为4,type为0,但是Inparams还不是SubscribeProcedureInParams,借用抓到的数据包构造POC,删除数据包中一些不必要的数据并添加一些能够让漏洞触发的数据:

数据包构造完成后,使用工具生成POC,此处使用ysoserial.NET,把漏洞利用POC修改后添加到数据包里面即可成功利用:

0x04 总结

这个GENESIS64 .NET的反序列化漏洞的分析过程比较曲折,一方面没有太多的资料可供参考,加之软件程序十分庞大,系统开启服务太多,漏洞分析过程中发现的坑点也很多,导致漏洞定位难度增大,但总的来说,整个漏洞的利用过程还是很有意思,个人收获很大。

以上就是网络安全渗透测试反序列化漏洞分析与复现工作的详细内容,更多关于网络安全渗透测试反序列化漏洞分析与复现的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java序列化反序列化原理及漏洞解决方案

    Java序列化 Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据.有关对象的类型的信息和存储在对象中数据的类型. Java反序列化 反序列化就是将字节序列恢复为Java对象的过程 整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象,因此可以实现多平台之间的通信.对象持久化存储,主要有如下几个应用场景. HTTP:多平台之间的通信,管理等 RMI:是 Java 的一

  • 单例模式的反射漏洞和反序列化漏洞代码实例

    除了枚举式单例模式外,其余4种在单例模式提到的单例模式的实现方式都存在反射漏洞和反序列化漏洞. package singleton; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Constructor; /** * 用反射和反

  • JAVA序列化和反序列化的底层实现原理解析

    一.基本概念 1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: (2)**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性.序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中.序列化后的字节流保存了Java对象的状态以及相关的描述信息.序列化机制的核心作用就是对象状态的保存与重建. (3)**反序列化:**客户端从文件中或网络上获得序列化后

  • 深入浅析PHP的session反序列化漏洞问题

    在php.ini中存在三项配置项: session.save_path="" --设置session的存储路径 session.save_handler="" --设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式) session.auto_start boolen --指定会话模块是否在请求开始时启动一个会话,默认为0不启动 session.serialize_handler string --定义用来序列化/反序列化的处

  • Web网络安全分析XSS漏洞原理详解

    目录 XSS基础 XSS漏洞介绍 XSS漏洞原理 反射型XSS 存储型XSS DOM型XSS XSS基础 XSS漏洞介绍 跨站脚本(Cross-Site Scripting,简称为XSS或跨站脚本或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种.它允许恶意用户将代码注入网页,其他用户在浏览网页时就会收到影响.恶意用户利用XSS代码攻击成功后,可能得到很高的权限(如执行一些操作).私密网页内容.会话和cookie等各种内容. XSS攻击可以分为三种:反射型.存储型和DOM

  • 网络安全渗透测试反序列化漏洞分析与复现工作

    目录 0x00概述 0x01服务分析 0x02漏洞分析 0x03POC构造 0x04总结 0x00 概述 GENESIS64软件的多个版本存在反序列化漏洞,影响多个组件,例如: 根据CVE漏洞相关描述,下载对应GENESIS软件版本搭建环境,进行漏洞分析与复现工作. 0x01 服务分析 安装完成后对整个系统进行熟悉,发现Web程序接口使用Silverlight进行数据交互,因此需要找到相关功能文件进行分析.经过一些时间查找,找到系统服务开启的配置文件,在配置文件中定义了访问接口信息以及调用的相关

  • 网络安全渗透测试使用goby检测log4j漏洞

    目录 一.前言 二.漏洞复现 三.gobypoc编写 expJson部分 自定义POC函数部分 一.前言 前段时间的Log4j漏洞影响很广泛,网上已经公开了很多地方的利用方式,而平时用goby较多,就想利用goby的指纹识别对目标定向检测.这篇文章就从Apache Solr Log4j漏洞为例,教大家如何写goby poc,文章中有错误还请及时指正. Goby可以通过编写go文件,来实现一些高级的漏洞检测或利用,例如dnslog检测漏洞 详情可查阅goby官方文档:https://cn.gobi

  • 网络安全渗透测试小程序抓包流程步骤详解

    目录 小程序测试流程 搜索目标小程序 小程序主体信息确认 小程序包获取 PC端 windows端获取小程序包流程 移动端 解包 调试 抓包 小程序测试流程 分为两个方面,解包可以挖掘信息泄露问题.隐藏的接口,抓包可以测试一些逻辑漏洞.API安全问题.两者结合起来就可以边调试边进行测试,更方便于安全测试. 搜索目标小程序 目标搜索不能仅仅局限于主体单位,支撑单位.供应商.全资子公司等都可能是入口点,所以小程序当然也不能放过它们. 小程序主体信息确认 查看小程序账号主体信息,否则打偏了花费了时间不说

  • 网络安全渗透测试之musl堆利用技巧

    目录 前言 题目分析 调试分析 malloc_context meta chunk meta的释放 总结 前言 最近比赛出的musl题型的越来越多,不得不学习一波musl的堆利用来应对今后的比赛.这里要讲的是musl1.22版本的利用,因为网上可以找到很多审计源码的文章,所以这篇文章是通过一道题目来debug去学习堆的利用技巧,这里用到的是2021第五空间线上赛的notegame题目. 题目分析 1.首先是add函数,使用了calloc,申请的最大size是0x90 2.接着是delete函数,

  • Web网络安全漏洞分析XSS常用语句及编码绕过详解

    目录 XSS进阶 XSS常用语句及编码绕过 XSS常用的测试语句 JS编码 HTML实体编码 URL编码 XSS进阶 XSS常用语句及编码绕过 XSS常用的测试语句 <img src=1 alert(1)> (显示1) <script>alert("xss")</script> (显示xss) <script>alert(document.cookie)</script> (显示cookie) <script>wi

  • 详解PHP渗透测试文件包含漏洞与利用

    目录 什么是文件包含漏洞 文件包含漏洞的分类 本地文件包含 漏洞&利用 利用条件(以PHP为例) 直接访问文件 利用协议读取源代码 截断%00 长度截断 PHP的伪协议 file:// php:// data:// phar:// 远程文件包含 漏洞利用 远程包含webshell 代码审计 修复建议 什么是文件包含漏洞 文件包含,在网站开发人员开发网站时,会将经常重复的代码写道一个单独的文件中,在别的文件中可以使用文件包含的函数来引用单独的文件.目前很多语言都支持文件包含,例如php(inchu

  • Web网络安全漏洞分析DOM型XSS攻击原理

    目录 DOM型XSS攻击 DOM型XSS代码分析 DOM型XSS攻击 DOM型XSS攻击页面实现的功能是在"输入"框中输入信息,单击"替换"按钮时,页面会将"这里会显示输入的内容"替换为输入的信息,例如当输入"11"的时候,页面将"这里会显示输入的内容"替换为"11",如图75和图76所示. 图75 HTML页面 图76 替换功能 当输入<img src=1 οnerrοr=&qu

  • Web网络安全漏洞分析SQL注入原理详解

    目录 一.SQL注入的基础 1.1 介绍SQL注入 1.2 注入的原理 1.3 与MySQL注入相关的知识 MySQL查询语句 limit的用法 需要记住的几个函数 注释符 内联注释 一.SQL注入的基础 1.1 介绍SQL注入 SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作. 下面以PHP语句为例. $query = "SELECT * FROM users WH

  • PHP序列化/对象注入漏洞分析

    本文是关于PHP序列化/对象注入漏洞分析的短篇,里面讲述了如何获取主机的远程shell. 如果你想自行测试这个漏洞,你可以通过 XVWA 和 Kevgir 进行操作. 漏洞利用的第一步,我们开始测试目标应用是否存在PHP序列化.为了辅助测试,我们使用了Burpsuite的SuperSerial插件,下载地址在 这里 .它会被动检测PHP和Java序列化的存在. 分析 我们检测到了应用里使用了PHP序列化,所以我们可以开始确认应用代码里是否含有远程代码执行漏洞.需要注意的是,序列化对象是从参数"r

随机推荐