一、 漏洞概述
1.漏洞信息
"IPS Community Suite "是一款國外比較常見的cms。但在其4.1.12.3版本及以下版本,存在PHP代碼注入漏洞,該漏洞源于程序未能充分過濾content_class請求參數。遠程攻擊者可利用該漏洞注入并執行任意PHP代碼。
2.漏洞觸發條件
IPS版本:<=4.1.12.3
php環境:<=5.4.24和5.5.0-5.5.8
二、漏洞復現
1. 漏洞分析
在 /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 文件中的 spl_autoload_register 函數,
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 函數,從而造成遠程代碼執行
程序處理流程如下:

2. IPS 官方修復分析
經過我們的分析對比
發現 /applications/cms/Application.php這個文件中 原來的 spl_autoload_register() 和更新后

我們可以看到,官方利用 intval() 函數對最后傳入的 $class 進行來整數驗證
使得傳入的 $class 的第14位后被限定成為一個整數,防止傳入字符串進入 eval()
3. 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() ,故不再觸發漏洞
4. 漏洞利用
由此,我們可以構造PoC:
http://*/ips/index.php?app=core&module=system&controller=content&do=find&content_class=cms\Fields1{}phpinfo();/*
效果如圖:
Pocsuite:

5. 漏洞修復
PHP 5.4.x 升級至 5.4.25 以上, 5.5.x 升級至 5.5.9 以上 IPS 升級至`4.12.3.1 以上
三、參考
- http://blog.knownsec.com/2016/08/ips-community-suite-php-rce-cve-2016-6174/
- 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
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/11/
暫無評論