VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Этот плагин является уязвимым для инъекции SQL в файле /vbsso/avatar.php в функции fetchUserinfo.
Эта уязвимость использует запросы UNION ALL SELECTL. Если инъекция SQL будет успешна, браузер будет перенаправлять пользователя на URL, где URL содержит извлеченную информацию.
Я расскажу о 2 функциях, которые используются, goToAvatarUrl и fetchUserinfo. Я приведу лишь небольшую часть кода функции fetchUserinfo.
private function fetchUserinfo(&$hash) {
// Exit if a guest, otherwise we waste time running the query.
if (!$hash) {
return false;
}
$query = "SELECT userfield.*, usertextfield.*, user.*, usergroup.genericpermissions, UNIX_TIMESTAMP(passworddate) AS passworddate,
IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid" .
$this->iif($this->settings['avatarenabled'], ', avatar.avatarpath, NOT ISNULL(customavatar.userid) AS hascustomavatar,
customavatar.dateline AS avatardateline, customavatar.width AS avwidth, customavatar.height AS avheight,
customavatar.height_thumb AS avheight_thumb, customavatar.width_thumb AS avwidth_thumb, customavatar.filedata_thumb') .
" FROM " . TABLE_PREFIX . "user AS user
LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON (user.userid = userfield.userid)
LEFT JOIN " . TABLE_PREFIX . "usergroup AS usergroup ON (usergroup.usergroupid = user.usergroupid)
LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON (usertextfield.userid = user.userid) " .
$this->iif($this->settings['avatarenabled'], "LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON (avatar.avatarid = user.avatarid)
LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON (customavatar.userid = user.userid) ") .
"WHERE MD5(LOWER(user.email)) LIKE '{$hash}' LIMIT 1";
$user = $this->mysqli->query($query);
$user = ($user) ? $user->fetch_assoc() : false;
// Rest of the code.
Функция проверяет goToAvatarUrl на существующий параметр ID который устанавливается в URL, а затем выполняет над ним запрос sharedapi_gpc_variable.
После этого она вызывает функцию fetchUserinfo, которая выполняет запрос, который использует переменную unsanitized $ хэша, на проверку параметра ID в URL. После того, как запрос был выполнен он будет вызывать функцию fetchAvatarFromUserinfo, которая создает URL, где пользователь будет перенаправлен на хеш соль с паролем.
Пример приводить не буду, так как он запрещен правилами, запрос должен быть очень большой, делетант его не подберет, но для программеров не составит большого труда.