Прикольная уязвимость здесь была в чате

Тема в разделе "СТАТЬИ И УРОКИ ПО ВЗЛОМУ И ОБХОДУ ЗАЩИТЫ", создана пользователем X-Shar, 30 ноя 2014.

↑ ↓
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.800
    Симпатии:
    425
    Пол:
    Мужской
    Репа:
    +957 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Как наверное многие знают, что сессии в движке хранятся в базе в зашифрованном виде, так вот захотел я кешировать сессии в памяти, т.е. что-бы не дербанить каждый раз базу, было-бы прикольно кешировать это всё в памяти, причём движок позволяет-же...

    Но проблема, что чат тоже дербанит базу, что-бы получить эту самую сессию, вот код получения ID пользователя:

    Код:
    function getUserID() {
        
    $userid 0;
        if (!empty(
    $_SESSION['basedata']) && $_SESSION['basedata'] != 'null') {
            
    $_REQUEST['basedata'] = $_SESSION['basedata'];
        }

        if (!empty(
    $_REQUEST['basedata'])) {
       
            if (
    function_exists('mcrypt_encrypt')) {
                
    $key KEY_A.KEY_B.KEY_C;
                
    $uid rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256md5($key), base64_decode($_REQUEST['basedata']), MCRYPT_MODE_CBCmd5(md5($key))), "\0");
                if (
    intval($uid) > 0) {
                    
    $userid $uid;
                }
            } else {
                
    $userid $_REQUEST['basedata'];
            }
        }
        if (!empty(
    $_COOKIE['xf_session'])) {       
            
    $sql = ("SELECT `session_data` FROM  `".TABLE_PREFIX."session` WHERE `session_id` = '".$_COOKIE['xf_session']."'");        $query mysqli_query($GLOBALS['dbh'],$sql);
            
    $sess2 mysqli_fetch_assoc($query);
            
    $sess3 unserialize($sess2['session_data']);
            if(!empty(
    $sess3['user_id'])) {
                
    $userid $sess3['user_id'];
            } else {
                
    $userid 0;
            }
        }
        
    $userid intval($userid);
        return 
    $userid;
    }
    Так вот на одном форуме я увидел совет, сохранять ID пользователя в куки, а потом эти куки уже брать чатом и тем-самым базу дербанить ненужно и кешировать сессии можно, код получился уже такой:

    Код:
    function getUserID() {
        
    $userid 0;

        if (!empty(
    $_SESSION['basedata']) && $_SESSION['basedata'] != 'null') {
            
    $_REQUEST['basedata'] = $_SESSION['basedata'];
        }
        if (!empty(
    $_REQUEST['basedata'])) {
            
    $userid $_REQUEST['basedata'];
        }
        if (!empty(
    $_COOKIE['cc_xf_user'])) {
            
    $a explode(',',$_COOKIE['cc_xf_user']);
            
    $userid $a[0];
        }
        return 
    $userid;
    }
    Создаём куки так:
    Код:
    <script type="text/javascript">
    var 
    userid = {$visitor.user_id};document.cookie "cc_xf_user="+userid;
    </script>
    Теперь вы уже наверное поняли сразу в чём подвох, супер-пупер мега-хакер может подменить куки в своём браузере и войти под любым пользователем в чате !Отдыхай!!!

    Пример как это сделать в Опере, заходите на форум, далее Настройки->Управление Куками->Выбираете этот мега-крутой сайт, далее находите cc_xf_user=... и меняете на ID нужного пользователя, т.е. если введёте 1, то зайдёте под моим никнеймом, минуя авторизацию !Как об стену !!!ogo-gonea88

    Fix.
     
    • Мне нравится Мне нравится x 3
  2. Антоха Администратор
    Антоха
    Ответить в чате

    Администрация

    Регистрация:
    26.12.2012
    Сообщения:
    3.174
    Симпатии:
    11.089
    Пол:
    Мужской
    Репа:
    +11.237 / 47 / -6
    Jabber:
    Skype:
    Как можно найти подобную уязвимость на других сайтах?Она именно в этой версии чата?
     
    • Мне нравится Мне нравится x 2
  3. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.800
    Симпатии:
    425
    Пол:
    Мужской
    Репа:
    +957 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Это головотяпство из серии "Вредные советы" !Dmeh-Smeh-Smeh!!!

    Тут нужно анализировать в "Веб разработка" в мозилле например, а так есть спец. софт для поиска уязвимостей на сайтах, кто-чем пользуются...

    У профи наверное глаз набит уже, посмотрят на сайт и могут его хакнуть уже, если конечно есть уязвимости !WinkSmile

    Эту я прекрыл уже, т.е. вернул как было, кеширование сессий пришлось правда отключить, пока не пойму как сделать чтобы чат неслетал...Отдыхай!!!
     
    • Мне нравится Мне нравится x 2
  4. Bless Пользователь
    Bless
    Ответить в чате

    Первый уровень

    Регистрация:
    30.11.2014
    Сообщения:
    19
    Симпатии:
    14
    Пол:
    Мужской
    Репа:
    +14 / 0 / -0
    То есть в куки сохраняется только кеш одного ID?
     
    • Мне нравится Мне нравится x 2
  5. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.800
    Симпатии:
    425
    Пол:
    Мужской
    Репа:
    +957 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Ога, он-же сессию-то найти не может, т.к. если включить кеш она сохранится в памяти, а не базе !

    Этот вредный совет кстати на офф. сайте движка:https://xenforo.com/community/threads/xf-memcached-cometchat-works-now.59430/

    :Mem26:
     
    • Мне нравится Мне нравится x 2
  6. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.800
    Симпатии:
    425
    Пол:
    Мужской
    Репа:
    +957 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Мля целый вечер провозился, скажите что я ламер, ну и пох...

    Короче убрал я этот Индийский код получения ID , и решил написать свой ещё более Индийский код, а почему-бы неподцепить ксенфоровский АПИ, вот что делаем, в файле Integration.php объявляем дефайном переменные:

    Код:
    define'XF_ROOT''Относительный путь к папке XenForo' );
    define'TIMENOW'time( ) );
    define'SESSION_BYPASS'false );
    Далее, переписал процедуру получения айди пользователя, через апи движка:

    Код:
    function getUserID() {

    $userid 0;
    $user_info = array( );
    require_once( 
    XF_ROOT '/library/XenForo/Autoloader.php' );
    XenForo_Autoloader::getInstance( )->setupAutoloaderXF_ROOT '/library' );
    XenForo_Application::initializeXF_ROOT '/library'XF_ROOT );
    XenForo_Application::set'page_start_time'TIMENOW );
    XenForo_Application::disablePhpErrorHandler( );
    XenForo_Application::setDebugModefalse );
    if (!
    SESSION_BYPASS)
    {
        
    XenForo_Session::startPublicSession();

        
    $visitor XenForo_Visitor::getInstance();

        if (
    $visitor->getUserId())
        {
            
    $userModel XenForo_Model::create('XenForo_Model_User');
            
    $userid $visitor->getUserId();
        }
    }
    $userid intval($userid);
    return 
    $userid ;
    }
    В этоге мы "Грабим" UserID прям из памяти, при помощи ксенфоровских АПИ, включил кеширование сессии и пошёл спать !Hi-H-88
     
    • Мне нравится Мне нравится x 3
  7. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.800
    Симпатии:
    425
    Пол:
    Мужской
    Репа:
    +957 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Мля, тут в коде закралась страшная ошибка которая приводила "Отказ в обслуживании":https://ru-sphere.ru/threads/obnovlenie-foruma-i-lagi.2042/page-4#post-116545

    Модифицировал код так:

    Код:
    function getUserID() {

    $userid 0;

    XenForo_Autoloader::getInstance( )->setupAutoloaderXF_ROOT '/library' );
    XenForo_Application::initializeXF_ROOT '/library'XF_ROOT );

    XenForo_Session::startPublicSession();

    $visitor XenForo_Visitor::getInstance();

    if (
    $visitor->getUserId())
        {
           
    $userid $visitor->getUserId();
        }

    $userid intval($userid);
    return 
    $userid ;
    }
    Т.е. удалил всё лишнее, т.е. сейчас всё должно-быть нормально, я надеюсь !
     
    • Мне нравится Мне нравится x 3

Поделиться этой страницей