前言这个漏洞来源于路人甲在wooyun提交的漏洞 漏洞编号: WooYun-2016-199433 4月12日也曾在t00ls发表过,但是帖子关闭了 (详细漏洞文档可进群索取) 分析存在漏洞的已知版本为 2.8.0.3 其余版本未知 本次测试的版本为2.8.0.3 看存在漏洞的文件代码 /scripts/setup.php 把传入的configuration给反序列化,而这个setup.php中引入了common.lib.php 来到common.lib.php common.lib.php中引入了Config.class.php 再看看Config.class.php: 继续看load方法: Config.class.php中含有__wakeup魔术方法,因此可以构造序列化参数,造成反序列化漏洞 所以整个思路就是: setup.php->common.lib.php->Config.class.php->__wakeup()->load()->eval(); 漏洞验证构造个简单的poc: 测试在mac下: Win下: 提供一个PHP版PoC: Getshell但是经过分析这个漏洞是不能读取php文件的,因为有了eval(),相当于任意文件包含了,不过另一方面这也是有好处的,如果能写入文件,文件中包含一个一句话就可以直接getshell了。作者给的方式是用error log。 根据作者的方法,使用默认环境,才发现有点鸡肋,比如,在ubuntu下,一般是不允许用root权限运行,实际测试中,我们是无法读取 access.log的,所以getshell就比较困难。在windows下,由于几乎所有的浏览器和python模块都会很“自觉地”将特殊字符编码 进行转换”,getshell就更困难了,所以只能用socket去构造shell。 Access log中就出现了shell了。 再用任意文件包含漏洞去包含,就可以拿到shell了。 影响范围存在漏洞的已知版本为 2.8.0.3 其余版本未知 许多内网的系统都在用这个版本,外网的也绝非少数! 修复建议请尽量升级到最新版,如果有需要的话,将setup.php中28行 中的”configuration”改为传入其他值,防止被恶意攻击。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|