使用全部
让我们一起来看看使用它们的过程。第一步是获取补丁并重新编译内核(或者只是编译dm-crypt我们的xtsproxy模块)。
接下来,让我们在单独的终端中重新启动我们的 IO 工作负载,这样我们就可以确保我们可以在负载下运行时重新配置内核
让我们一起来看看使用它们的过程。第一步是获取补丁并重新编译内核(或者只是编译dm-crypt我们的xtsproxy模块)。
接下来,让我们在单独的终端中重新启动我们的 IO 工作负载,这样我们就可以确保我们可以在负载下运行时重新配置内核
❤1
投入生产
到目前为止,我们一直在使用合成设置,其中缺少完整生产堆栈的某些部分,例如文件系统、实际硬件以及最重要的生产工作负载。为了确保我们不是在优化虚构的东西,下面是这些更改给我们堆栈的缓存部分带来的生产影响的快照
该图表显示了我们其中一台服务器中缓存命中的最坏情况响应时间(第 99 个百分位)的三向比较。绿线来自具有未加密磁盘的服务器,我们将其用作基准。红线来自具有加密磁盘并使用默认 Linux 磁盘加密实现的服务器,蓝线来自具有加密磁盘并启用了我们的优化的服务器。我们可以看到,默认的 Linux 磁盘加密实现在最坏情况下对我们的缓存延迟有显著影响,而修补后的实现与根本没有使用加密没有区别。换句话说,改进的加密实现对我们的缓存响应速度没有任何影响,所以我们基本上是免费获得的!这是一个胜利!
到目前为止,我们一直在使用合成设置,其中缺少完整生产堆栈的某些部分,例如文件系统、实际硬件以及最重要的生产工作负载。为了确保我们不是在优化虚构的东西,下面是这些更改给我们堆栈的缓存部分带来的生产影响的快照
该图表显示了我们其中一台服务器中缓存命中的最坏情况响应时间(第 99 个百分位)的三向比较。绿线来自具有未加密磁盘的服务器,我们将其用作基准。红线来自具有加密磁盘并使用默认 Linux 磁盘加密实现的服务器,蓝线来自具有加密磁盘并启用了我们的优化的服务器。我们可以看到,默认的 Linux 磁盘加密实现在最坏情况下对我们的缓存延迟有显著影响,而修补后的实现与根本没有使用加密没有区别。换句话说,改进的加密实现对我们的缓存响应速度没有任何影响,所以我们基本上是免费获得的!这是一个胜利!
ysoserial-CommonsCollections系列总结篇
前言:
网上分析CommonsCollections调用链的文章也有不少,但是看完分析文章直接手动构造利用链仍有难度,因此这篇文章主要总结本人调试ysoserial的CommonsCollections系列利用链的思考和体会,通过这篇文章希望大家能够了解CommonsCollections不同链之间的共性和区别,能够在看完gadget后可以手动构造利用链,本文主要内容包括以下几点:
1.每条反序列化利用链的构成特点
2.每条链不同类之间衔接的特点及要点
3.对比不同利用链之间的区别以及相似点
4.自己如何根据链接点的特性来构造反序列化exp
5.如何混合搭配链接点从而形成一条新的gadget利用链(例如cc5、cc6、cc7分别扩展2条、2条、1条)
前言:
网上分析CommonsCollections调用链的文章也有不少,但是看完分析文章直接手动构造利用链仍有难度,因此这篇文章主要总结本人调试ysoserial的CommonsCollections系列利用链的思考和体会,通过这篇文章希望大家能够了解CommonsCollections不同链之间的共性和区别,能够在看完gadget后可以手动构造利用链,本文主要内容包括以下几点:
1.每条反序列化利用链的构成特点
2.每条链不同类之间衔接的特点及要点
3.对比不同利用链之间的区别以及相似点
4.自己如何根据链接点的特性来构造反序列化exp
5.如何混合搭配链接点从而形成一条新的gadget利用链(例如cc5、cc6、cc7分别扩展2条、2条、1条)
对于cc1(以下cc即代表commonscollections)来说最外层的Annotationinvocationhandler相当于只是一个容器作用,将动态代理proxy放到其this.memberValues成员方法中去,其中invocationhandler又是一个Annotationinvocationhandler,然后在其readobject方法中就会调用this.memberValues.entryset,从而触发动态代理,从而进入动态代理的invoke函数代码块
因此invoke函数中调用this.memberValues.get即调用lazymap.get,从而到了this.factory.transform(),接下来内部是chainedTransformer+constantTransformer+3层invokeTransformer,因为get的参数是不存在的entryset,所以需要constantTransformer先返回一个Runtime类再通过3个invokeTransformer联合起来反射rce执行命令。
因此invoke函数中调用this.memberValues.get即调用lazymap.get,从而到了this.factory.transform(),接下来内部是chainedTransformer+constantTransformer+3层invokeTransformer,因为get的参数是不存在的entryset,所以需要constantTransformer先返回一个Runtime类再通过3个invokeTransformer联合起来反射rce执行命令。
CommonsCollections2
反序列化调用链如下所示:
PriorityQueue.readObject()
PriorityQueue.heapify()
PriorityQueue.siftDown()
PriorityQueue.siftDownUsingConparator()
TransformingComparator.compare()
InvokerTransformer.transform()
TemplatesImpl.newTranformer()
Method.invoke()
Runtime.exec()
cc2的利用PriorityQueue队列键值反序列化后进行key值比较,可以自定义比较器comparator,因此利用commonscollections4里面的TransformingComparator,在该类的compare函数中又会调用this.transformer.transform来对key进行转换,因为key是从外面直接传进来的,即可控的,这里key其实是一个templatesimpl的实例。
反序列化调用链如下所示:
PriorityQueue.readObject()
PriorityQueue.heapify()
PriorityQueue.siftDown()
PriorityQueue.siftDownUsingConparator()
TransformingComparator.compare()
InvokerTransformer.transform()
TemplatesImpl.newTranformer()
Method.invoke()
Runtime.exec()
cc2的利用PriorityQueue队列键值反序列化后进行key值比较,可以自定义比较器comparator,因此利用commonscollections4里面的TransformingComparator,在该类的compare函数中又会调用this.transformer.transform来对key进行转换,因为key是从外面直接传进来的,即可控的,这里key其实是一个templatesimpl的实例。
在打fastjson1.2.24中就用到了jdk的templatesimpl这个内置类,在其_bytecodes字段中放入恶意类的字节码,将在调用其getTransletInstance中进行实例化,所以这里只需要一个invoketransformer即可,直接反射执行调用templatesImpl的newTransformer或者getoutputProperties来实例化templates的_bytecodes字段中的类进行rce
CommonsCollections2.java
CommonsCollections2.java
PHP-FPM 远程代码执行(CVE-2019-11043)
PHP-FPM 是 PHP 的 FastCGI 实现。在 PHP 版本 7.1.x 低于 7.1.33、7.2.x 低于 7.2.24 和 7.3.x 低于 7.3.11 中,在某些 FPM 设置配置中,可能会导致 FPM 模块将过去分配的缓冲区写入为 FCGI 协议数据保留的空间,从而打开远程代码执行的可能性。
该漏洞最早是在 Real World CTF 2019 Quals(由 Chaitin Tech 组织)期间发现的。它会影响使用 PHP-FPM 时存在某些错误配置的 Nginx 服务器,最常见的易受攻击的配置包括location ~ [^/]\.php(/|$)规则。
PHP-FPM 是 PHP 的 FastCGI 实现。在 PHP 版本 7.1.x 低于 7.1.33、7.2.x 低于 7.2.24 和 7.3.x 低于 7.3.11 中,在某些 FPM 设置配置中,可能会导致 FPM 模块将过去分配的缓冲区写入为 FCGI 协议数据保留的空间,从而打开远程代码执行的可能性。
该漏洞最早是在 Real World CTF 2019 Quals(由 Chaitin Tech 组织)期间发现的。它会影响使用 PHP-FPM 时存在某些错误配置的 Nginx 服务器,最常见的易受攻击的配置包括location ~ [^/]\.php(/|$)规则。
使用 Ghidra 分析 phpStudy 后门
这次事件已过去数日,该响应的也都响应了,虽然网上有很多厂商及组织发表了分析文章,但记载分析过程的不多,我只是想正儿八经用 Ghidra 从头到尾分析下。
1. 工具和平台
主要工具:
Kali
Ghidra 9.0.4
010Editor 9.0.2
样本环境:
Windows7
phpStudy 20180211
2. 分析过程
先在 Windows 7 虚拟机中安装 PhpStudy 20180211,然后把安装完后的目录拷贝到 Kali Linux 中。
根据网上公开的信息:后门存在于 php_xmlrpc.dll 文件中,里面存在“eval”关键字,文件 MD5 为 c339482fd2b233fb0a555b629c0ea5d5。
这次事件已过去数日,该响应的也都响应了,虽然网上有很多厂商及组织发表了分析文章,但记载分析过程的不多,我只是想正儿八经用 Ghidra 从头到尾分析下。
1. 工具和平台
主要工具:
Kali
Ghidra 9.0.4
010Editor 9.0.2
样本环境:
Windows7
phpStudy 20180211
2. 分析过程
先在 Windows 7 虚拟机中安装 PhpStudy 20180211,然后把安装完后的目录拷贝到 Kali Linux 中。
根据网上公开的信息:后门存在于 php_xmlrpc.dll 文件中,里面存在“eval”关键字,文件 MD5 为 c339482fd2b233fb0a555b629c0ea5d5。
从上方结果“Code”字段看的出这三个关键字都位于文件 Data 段中。随便选中一个(我选的“@eval(%s(‘%s’));”)并双击,跳转到地址中,然后查看哪些地方引用过这个字符串(右击,References > Show References to Address)