红客解密程序 暗网编程
27.5K subscribers
967 photos
12 videos
1 file
56 links
渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持
Download Telegram
深入源代码
当尝试使用dm-crypt上面描述的自定义选项时,我们很好奇它们为什么会存在,以及“卸载”到底是怎么回事。最初我们期望dm-crypt它是一个简单的“代理”,它只是在数据流经堆栈时对其进行加密/解密。结果发现dm-crypt它的作用不仅仅是加密内存缓冲区,下面给出了一个(简化的)IO 遍历路径图

当文件系统发出写入请求时,dm-crypt不会立即处理它 - 而是将其放入名为“kcryptd”的工作队列 中。简而言之,内核工作队列只是安排一些工作(在本例中为加密)在以后更方便的时候执行。当“时间”到来时,将请求发送到Linux Crypto API进行实际加密。但是,现代 Linux Crypto API也是异步的,因此根据您的系统将使用哪种特定实现,很可能不会立即处理它,而是再次排队等待“稍后”。当 Linux Crypto API 最终进行加密时,可能会尝试通过将每个请求放入红黑树中来对待处理的写入请求进行排序。然后,一个单独的内核线程再次在“稍后”实际获取树中的所有 IO 请求并将它们发送到堆栈下方。dm-crypt dm-crypt

现在对于读取请求:这次我们需要先从硬件获取加密数据,但dm-crypt不仅仅是向驱动程序请求数据,而是将请求排队到名为“kcryptd_io”的另一个工作队列 中。稍后,当我们真正拥有加密数据时,我们会使用现在熟悉的“kcryptd”工作队列安排它进行解密。“kcryptd”将请求发送到 Linux Crypto API,后者也可能异步解密数据。
同步 Linux 加密 API
从上图我们记得,并非所有排队都是在 中实现的dm-crypt。现代 Linux Crypto API 也可能是异步的,为了进行此实验,我们也希望消除那里的队列。但是,“可能”是什么意思呢?操作系统可能包含同一算法的不同实现(例如,x86 平台上的硬件加速 AES-NI和通用 C 代码 AES 实现)。默认情况下,系统会根据配置的算法优先级选择“最佳”算法。dm-crypt允许覆盖此行为并使用前缀请求特定的密码实现capi:。但是,有一个问题。让我们实际检查系统上可用的 AES-XTS
使用全部
让我们一起来看看使用它们的过程。第一步是获取补丁并重新编译内核(或者只是编译dm-crypt我们的xtsproxy模块)。

接下来,让我们在单独的终端中重新启动我们的 IO 工作负载,这样我们就可以确保我们可以在负载下运行时重新配置内核
1
投入生产
到目前为止,我们一直在使用合成设置,其中缺少完整生产堆栈的某些部分,例如文件系统、实际硬件以及最重要的生产工作负载。为了确保我们不是在优化虚构的东西,下面是这些更改给我们堆栈的缓存部分带来的生产影响的快照

该图表显示了我们其中一台服务器中缓存命中的最坏情况响应时间(第 99 个百分位)的三向比较。绿线来自具有未加密磁盘的服务器,我们将其用作基准。红线来自具有加密磁盘并使用默认 Linux 磁盘加密实现的服务器,蓝线来自具有加密磁盘并启用了我们的优化的服务器。我们可以看到,默认的 Linux 磁盘加密实现在最坏情况下对我们的缓存延迟有显著影响,而修补后的实现与根本没有使用加密没有区别。换句话说,改进的加密实现对我们的缓存响应速度没有任何影响,所以我们基本上是免费获得的!这是一个胜利!
ysoserial-CommonsCollections系列总结篇

前言:
网上分析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执行命令。
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的实例。
在打fastjson1.2.24中就用到了jdk的templatesimpl这个内置类,在其_bytecodes字段中放入恶意类的字节码,将在调用其getTransletInstance中进行实例化,所以这里只需要一个invoketransformer即可,直接反射执行调用templatesImpl的newTransformer或者getoutputProperties来实例化templates的_bytecodes字段中的类进行rce
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(/|$)规则。
初始利用后,Webshel​​l 会被注入到 PHP-FPM 进程中。您可以通过访问以下网址执行命令:

http://your-ip:8080/index.php?a=id
命令执行成功示例:



重要说明
该漏洞仅影响部分 PHP-FPM 子进程。如果命令第一次尝试未执行,请多次尝试访问受影响的进程。
该漏洞能否成功利用,很大程度上取决于具体的 Nginx 配置。最常见的易受攻击的配置包括:
已启用 FastCGI 处理
通过 PHP-FPM 处理的 PHP 文件
以易受攻击的方式拆分 URL 的特定位置规则
使用 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 中搜索下:菜单栏“Search” > “For Strings”,弹出的菜单按“Search”,然后在结果过滤窗口中过滤“eval”字符串
从上方结果“Code”字段看的出这三个关键字都位于文件 Data 段中。随便选中一个(我选的“@eval(%s(‘%s’));”)并双击,跳转到地址中,然后查看哪些地方引用过这个字符串(右击,References > Show References to Address)