HW行动中对某RCE漏洞的反解密与渗透



    在不久前的渗透测试行动中,有一个红队可用的漏洞列表,其中有一个关于某个堡垒和基机的

有趣的RCE漏洞,最近碰巧是免费的,想审计这个漏洞。要说这个漏洞其实是个古洞,CNV

DNo。CNVD-2020-*,尽管是19年爆出来的漏洞,但还是怀着试一试的心态搜了一下下,成

功利用漏洞打了两个网站。
 
 
 
嗯!!!洞是旧的,但是盖不上,管理员也不会修。既然要做代码审计,没有源代码怎么做?

所以我又一次开始了白嫖技能。我向组里的大佬要了一个堡垒垒球机的源代码。没想到的是

这个源代码不容易得到,所以有了这篇文章。拿到老板给的源码后,我很开心的打开检查,

然后立刻傻眼。
 
 
看着屏幕上乱码的字符,直觉告诉我这个东西是加密的。在之前的一个OA系统的代码审核

中,我看到了用zend方法加密的PHP文件。通常这类加密文件会在密文前面标明自己的加

密方式。比如zend加密的PHP文件,前面会显示字符串“zend”。然后看上面的密文,就可

以得到文件的加密特征“PM9SREW”,不zend的时候不太好。之前是不熟悉的加密方式,

必须一定程度的法力加持才能看出来是什么样的加密规则。
 
 
从收集到的信息来看,PHP代码的这种加密技术叫做PHP_Screw。这种加密技术和zend

加密的区别在于,它导入了一个密钥,可以自定义特征标识。但是因为密钥的导入,不

太可能像zend加密那样直接使用软件开展解密。首先,您必须获取用于加密的密钥,然

后您必须编写自己的解密脚本。对于任何加密的PHP脚本,在被脚本解释器解释之前都

必须解密,就像zend加密的情况一样,PHP_Screw加密也是如此,那么它是如何解密

脚本并传递给脚本解释器的呢?秉承知往何处去的精神,我学会了如何布署用PHP_Sc

rew加密的脚本。在布署的第5步中,必须将php_acsrew_pluse.as的扩展写入到php配

置文件中。直觉告诉我这个扩展是用来解密的。也就是说,每一个布署了这个PHP_S

crew加密的脚本服务器,肯定都会有一个类似的PHP扩展开展解密,所以这个扩展一

定也存在于我们之前打的几个网站的口袋里,嗯。。。我有一个新奇的念头。
 
 
从一开始知道漏洞,到成功利用漏洞打孩子;然后通过获取系统源代码分析文件的加

密算法;通过分析PHP_Screw算法,我们知道必须获取解密密钥,编写解密算法。

然后通过给孩子穿上马甲,翻遍网站的口袋获取解密密钥、算法和源代码,最后通过

对漏洞开展审计分析,了解漏洞触发原理,这样的旅程并不顺利。拿到口袋里的钥匙

时找了很久的文件最后找到了,然后在算法反求的过程中使用了旧的ida和系统,导

致了截然不同的C-like代码的反汇编,长时间无法理解和折腾。好在最后的代码分析

不是很难,所以这是另一个进步,以后要多加油!
分享: