Регистрация  |  Забыли пароль?

Глав. страница форума Глав. страница Сайта Скачать Cs 1.6 Готовые Сервера Cs 1.6 Плагины Для Cs 1.6 Моды Для Cs 1.6 Защита Для Cs 1.6
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Pozetif  
Форум Best-Serva4ok.Ru » Создание и настройка серверов » Общие вопросы по созданию и настройке сервера » Взлом сервера Counter Strike (или «Безопасность? Не… не слышал!»)
Взлом сервера Counter Strike
[ADMIN]=Pozetif
Offline
Дата: Суббота, 25.11.2017, 12:33 | Сообщение # 1
Администраторы BSR
Сообщений: 265
Подарки: 0
Репутация: 823


Добрый день. 
В с появлением различных сервисов, предоставляющих услуги хостингов игровых серверов, появилось много желающих сделать свой сервер, при этом, в ряде случаев, вопросы безопасности остаются проигнорированными. 

Пару месяцев назад, просматривая список серверов в поисках «где бы поиграть», я обнаружил сервер, в названии которого содержатся угрозы к тем, кто будет использовать читы. 

Первоначальный план созрел очень быстро: генерируем SteamID администратора, развлекаемся с читами на сервере, имея иммунитет. 
Генерировать SteamID я научился, пока писал VoiceCodecFix — модуль, который даёт возможность общаться с игроками, не обновившими Counter Strike. О нём и о загрузке asi-модулей, я, скорее всего, расскажу в другой раз. 

Зайдя на сервер с администраторской учёткой и обнаружив, что у меня есть доступ к amx_rcon я уже было подумал, что получил доступ к учётке главного администратора, однако, всё прояснилось несколько позже. 

Небольшое отступление по поводу прав доступа в Counter Strike 

Есть права, которые предоставляются модулем AmxModX, они выставляются флагами (a-u), флаг z — обычный игрок. 
Какой флаг за что отвечает, можно посмотреть [url=http://wiki.amxmodx.org/Adding_Admins_(AMX_Mod_X)#Access_Levels]здесь[/url]. 
Администратор с флагом amx_kick, amx_ban, и т. д. и т. п., не может как-либо воздействовать на игрока, у которого стоит флаг иммунитета. 

Также, есть доступ, предоставляемый RCON-паролем (Remote Console, насколько я понимаю). Думаю, здесь будет уместна аналогия с ssh-ключом. В общем, давать его всем подряд — не самая хорошая мысль. 
Это, фактически, прямой доступ к к консоли сервера. 

Команда amx_rcon несколько облегчает использования Rcon-a, но и имеет «обратную сторону медали». Администратор, имеющий доступ к этой команде имеет доступ и к amx_showrcon, с помощью которой можно узнать RCON-пароль. Отличаются они тем, что amx_rcon не выводит результат выполнения в консоль, а amx_showrcon — выводит. 
Код, отвечающий за amx_rcon выглядит так: 
public cmdRcon(id, level, cid) 
{//в id хранится идентификатор того, кто эту команду использует. Остальные атрибуты нужны для проверки прав доступа. 
     if (!cmd_access(id, level, cid, 2)) 
         return PLUGIN_HANDLED//Если нет доступа, прекращаем выполнение команды. 
      
     new arg[128], authid[32], name[32] 
     read_args(arg, 127) 
     get_user_authid(id, authid, 31)//Получаем SteamID использующего эту команду. 
     get_user_name(id, name, 31)//Получаем его имя. 
     log_amx("Cmd: ^"%s<%d><%s><>^" server console (cmdline ^"%s^")", name, get_user_userid(id), authid, arg)//Записываем в лог, что он произвёл какое-то действие с RCON-ом. 
     console_print(id, " [AMXX]%L", id, "COM_SENT_SERVER", arg)//Пишем в консоль того, кто эту команду использовал, что-то вроде "команда отправлена на сервер". 
     server_cmd("%s", arg)//Выполняем команду в консоли сервера. 
     return PLUGIN_HANDLED 
}
Прочитать то, что написал сервер у себя в консоли и вывести обратно игроку средствами AmxModX не представляется возможым. 

Команда amx_showrcon фактически заменяет 2 стандартные команды, за которые отвечает движок, и для работы которых не нужны модули: 
rcon_password _пароль_ 
rcon _команда_
 
public cmdShowRcon(id, level, cid) 
{  
     if (!cmd_access(id, level, cid, 2)) 
         return PLUGIN_HANDLED  
     new password[64] 
     get_pcvar_string(rcon_password, password, 63)//получаем значение CVar "rcon_password" 
     if (!password[0]) 
     { 
         cmdRcon(id, level, cid) // Если RCON-пароль на сервере не установлен, выполняем обычный amx_rcon 
     }  
     else  
     { 
         new args[128] 
         read_args(args, 127) //считываем аргументы команды 
         client_cmd(id, "rcon_password %s", password)//устанавливаем нужное значение rcon_password администратору 
         client_cmd(id, "rcon %s", args)//выполняем команду из консоли администратора. 
     } 
     return PLUGIN_HANDLED 
}
То есть, после использования этой команды, достаточно посмотреть, каким стало значение rcon_password, чтобы узнать RCON-пароль сервера. Узнав его можно: 
1. Изменять настройки сервера (Поставь гравитацию 10000000, говорили они, это весело, говорили они) 
2. Переименовать сервер. 
3. Кикать игроков, даже тех, у которых есть иммунитет (rcon kick #userid). 
4. Менять карту на своё усмотрение (rcon changelevel _mapname_
5. Менять результат голосования за следующую карту (rcon amx_nextmap _mapname_
6. Банить от имени сервера 
… короче, творить всяческие безобразия. 

Посмотрев командой amx_who какие права кому выданы… в общем, это была не учётка главного администратора. Они всем администраторам ставили все доступные флаги. 
В качестве теста я решил кикнуть одного администратора, который громко ругался на сервере и мешал играть, написав в причине «помолчи». Об этом «инциденте» им тут же была создана тема в группе сервера, мол «меня кто-то кикает». 
Главный администратор не придумал ничего лучшего, чем снять со всех администраторов доступ к amx_kick
Так как подделать SteamID достаточно просто, я решил написать об этом главному администратору, который занимался выставлением прав доступа. В ответ получил «Раз ты такой умный, почему ты до сих пор не купил у нас админку?». (Действительно...) 
В общем, после наглядной демонстрации возможности кикать администраторов, используя rcon, вместо того, чтобы как-то ограничить у администраторов доступ к amx_rcon он выдал мне бан по IP-адресу, «чтобы не лез, куда не надо». 
Это так у нас теперь благодарят за найденную уязвимость. 

Ну чтож, пишем небольшой скрипт, который кикает всех игроков с сервера и закрывает сервер паролем. Весело, надёжно. 
Опять таки, вместо того, чтобы убрать у админов доступ к Rcon-паролю, главный админ решил перевести их на доступ по комбинации ник- пароль 
Про то, чтобы поменять RCON-пароль никто так и не подумал. 

Часть вторая, получаем доступ к MySQL от AmxBans сервера 

Сейчас стало модно держать отдельную веб-страничку со списком игроков, забаненных на сервере. Вот, например, страничка того сервера, с которым проводились эти манипуляции. 
Этот список формируется из MySQL таблицы, данные в которую заносит плагин AmxBans. 
Так же, AmxBans позволяет хранить информацию о админах не в файле users.ini, а в той же самой БД. 
Данные для доступа к этой базе прописываются в кварах(CVar) сервера. Их можно прочитать командой rcon amxx cvars 
Нас интересуют значения: 
amx_sql_host 
amx_sql_user 
amx_sql_pass
 

В качестве способа общения с БД, я традиционно использую SQLYog 
База принадлежала игровому хостингу и была настроена на доступ только с доверенных IP-адресов. 
SQLYog может использовать HTTP-туннель для доступа к базе, для этого достаточно закинуть SQLyogTunnel.php на нужный ресурс и указать к нему путь. 
Пришлось немного раскошелиться и купить на этом же хостинге сервер и страничку для AmxBans. На всё про всё- 200 рублей. 

В базе данных AmxBans все пароли хранятся в виде MD5 хешей. Всего их там было около 50, при этом практически все были раскодированы с помощью сервиса по декодированию различных хешей так как состояли из 7-8 цифр без использования каких-либо буквенных символов. 

Выставлением прав доступа прямым редактированием БД мало кто занимается, поэтому на веб-странице AmxBans можно залогиниться под администраторской учёткой и выставлять права через удобный веб-интерфейс. 
Там было 3 администратора. Их пароли так же хранятся в виде MD5 хешей, но у одного был длинный и с виду надёжный пароль, но он состоял из часто встречаемых слов и года, у другого — дата рождения. Пароль третьего был расшифрован где-то через час. 

Сообщать об этом администрации, я, разумеется, уже не буду, более того, когда я сообщил о уязвимости первый раз, мне было сказано, что из-за того, что я нашёл уязвимость и сообщил о ней администрации — «сам понимаешь доверие пропадает». (Ну да, действительно, надо было пользоваться и ни кому о ней не говорить  ) 

PS: Судя по всему, никаких выводов они так и не сделали. Там стали появляться новые администраторы с правами «abcdefghijklmnopqrstu», и опять эти права выдаются по SteamID.


Форум Best-Serva4ok.Ru » Создание и настройка серверов » Общие вопросы по созданию и настройке сервера » Взлом сервера Counter Strike (или «Безопасность? Не… не слышал!»)
  • Страница 1 из 1
  • 1
Поиск: