WHMCS взломан с помощью {php} и кода Eval base64 с помощью билетов [закрыто]


WHMCS использует Smarty для своей системы шаблонов, хотя у отличной системы шаблонов есть недостаток - теги {php}. Эти теги позволяют smarty интерпретировать PHP-код непосредственно в шаблоне или, в данном случае, через систему тикетов при создании нового тикета. Этот взлом происходит постоянно в системах WHMCS, вы можете попробовать заблокировать код в WHMCS с помощью опции блокировать текст в конфигурации. Но в большинстве случаев это не работает.

Что происходит, так это то, что WHMCS принимает билет и хакер добавил следующее в сообщение о билете:

{php}eval(base64_decode(encoded message));{\php}

Итак, smarty видит часть {php} и немедленно запускает эту команду. Поэтому он сначала декодирует PHP, закодированный в base64. Это приведет к появлению некоторой функции/скрипта PHP, которую пытается запустить хакер.

Затем eval берет на себя и фактически оценивает PHP-код и запускает его на стороне сервера.

Многие хакеры поступают таким образом, они запускают коды, которые, как они знают, будут работать в WHMCS, которые затем захватывают информацию базы данных и передайте его в файл. Затем они просто захватывают этот файл через URL-адрес браузера и получают нужную им информацию.

Это работает только на некоторых установках WHMCS, хотя WHMCS говорит, что самая последняя версия этого не позволяет, и {php} отключен в Smarty, иногда хакеры находят способ обойти это и eval их код.

Author: jfreak53, 2012-11-22

2 answers

В конфигурации Smarty есть флаг для включения/отключения этого, и он должен быть выключен по умолчанию.

Если WHMCS требует использования тегов {php}, то они [выражаясь как можно вежливее] невероятно отсталые и должны уйти из бизнеса выставления счетов или любого другого программного обеспечения.

Редактировать: Да, прямо здесь, в их документах. "Эй, смотри! Мы включили эту супер гигантскую дыру в безопасности только для ты!"

Возможно, вам захочется просмотреть файлы шаблонов, чтобы найти любое использование этих тегов {php}, поскольку это укажет на любую функциональность, которую вы потеряете, заткнув эту зияющую дыру в безопасности.

 2
Author: Sammitch, 2012-11-22 16:35:23

На самом деле это очень простой хак, который можно исправить с помощью mod_security. Во-первых, найдите, где находится ваш конфигурационный файл mod_security, все зависит от вашей установки mod_security и операционной системы, но обычно он называется modsec.conf или modsec2.conf, иногда security.conf, но очень редко.

Вы можете найти его с помощью команды locate, если она установлена, в большинстве систем Linux.

sudo updatedb
locate modsec.conf
or
locate modsec2.conf

Если у вас нет locate, вам нужно будет перейти в каталог / и просто запустить find, это займет некоторое время но иногда панели устанавливают его в странных местах, а не только в /etc.

cd /
find . -type f -iname 'modsec*.conf'

В любом случае будет работать, чтобы найти файл конфигурации. После того, как вы нашли, используйте свой любимый редактор, чтобы отредактировать файл, перейдите в самый низ и добавьте следующее:

SecRuleEngine On    
SecRule ARGS {php} "severity:4,log,deny"
SecRule ARGS eval "severity:4,log,deny"
SecRule ARGS base64_decode "severity:4,log,deny"

В основном вы говорите ему фильтровать аргументы в GET и POST. Вот и все, перезагрузите apache сейчас:

CentOS:
service httpd restart

Ubuntu:
service apache2 restart

Теперь вы можете подумать, что это вообще не позволит вам использовать эти команды в сценариях. Это только блокирует те слова, отправленные по GET или POST. Если кто-то попытается, он получит ошибку Not Acceptable, и это просто не сработает вообще.

Это избавляет вас от необходимости блокировать кучу IP-адресов с вашего брандмауэра или WHMCS и потенциальных клиентов.

 1
Author: jfreak53, 2012-11-22 13:59:05