Делікатний vbulletin. Який форум краще vBulletin або PunBB. Читаємо файли, виконуємо команди

Ти, напевно, неодноразово бачив форуми на движку vBulletin. Форуми як такі вже не на піку моди, але vBulletin, як і раніше, один з найпопулярніших движків. У його останній (п'ятій) версії знайшли кілька вразливостей, які здатні сильно зіпсувати життя адміну. У цій статті розповім, як вони експлуатуються.

Перша проблема полягає в некоректній фільтрації даних користувача. Про неї повідомив незалежний дослідник безпеки, який побажав залишитись анонімним. Вразливість, хоч і має деякі обмеження, набула статусу критичної, тому що дозволяє читати будь-які файли і виконувати довільний код на цільовій системі.

Друга вразливість була знайдена дослідниками компанії TRUEL IT і отримала ідентифікатор CVE-2017-17672. Вона пов'язана з особливостями десеріалізації даних у двигуні і може бути використана атакуючим для видалення довільних файлів у системі.

Повні звіти з деталями обох проблем було опубліковано у рамках програми Beyond Security від SecuriTeam. Там є PoC-експлоїти для демонстрації вразливостей. Давай по порядку пройдемося з усього цього.

Приготування

Як сервер я використовував дистрибутив WAMP.

Читаємо файли, виконуємо команди

Отже, причина першої вразливості - некоректна логіка при обробці параметра routestring, яка дозволяє атакуючому додати через include будь-який файл на диску і виконати PHP-код, який у ньому знаходиться.

Наш шлях починається з найголовнішого файлу – index.php, де відбувається базова ініціалізація програми.

/index.php
48: $app = vB5_Frontend_Application::init("config.php"); ... 60: $routing = $app->getRouter(); 61: $method = $routing->getAction(); 62: $template = $routing->getTemplate(); 63: $class = $routing->getControllerClass();

Подивимося метод vB5_Frontend_Application::init .

/includes/vb5/frontend/application.php
13: class vB5_Frontend_Application extends vB5_ApplicationAbstract 14: ( 15: public static function init($configFile) 16: ( 17: parent::init($configFile); 18: 19: self::$instance = new vB5_Fron_ self::$instance->router = new vB5_Frontend_Routing(); 21: self::$instance->router->setRoutes();

Тут нас цікавить метод setRoutes.

47: public function setRoutes() 48: ( 49: $this->processQueryString(); ... 54: if (isset($_GET["routestring"])) 55: ( 56: $path = $_GET[" routestring"];

У змінну $path потрапляє значення користувача з параметра routestring . До нього можна передати шлях до сторінки форуму, і вона буде завантажена.



Допустимо, ми передали /test.

Після призначення змінної слід шматок коду, який позбавляється слеша на початку рядка, якщо він присутній.

/includes/vb5/frontend/routing.php
75: if (strlen($path) AND $path(0) == "/") 76: ( 77: $path = substr($path, 1); // $path = "test" 78: )
includes\vb5\frontend\routing.php
83: if (strlen($path) > 2) 84: ( 85: $ext = strtolower(substr($path, -4))); 86: if (($ext == ".gif") OR ($ext == ".png") OR ($ext == ".jpg") OR ($ext == ".css") 87: OR (strtolower(substr($path, -3)) == ".js" )) 88: ( 89: header("HTTP/1.0 404 Not Found"); 90: die(""); 91: ) 92: )

Як бачиш, перевірка є досить дивною. Як мінімум бентежить наявність зашитого прямо в код списку заборонених розширень. Та й взагалі сам факт, що розширення одержують, вирізаючи чотири символи з кінця рядка (рядок 85), викликає подив. Загалом, якщо ми намагаємося отримати файл з розширеннями gif, png, jsp, css або js, сервер поверне сторінку 404 і виконання скрипту припиниться. Коли всі перевірки пройдені, callApi викликається метод getRoute з класу vB_Api_Route . Він шукає відповідні роути, виходячи з переданої користувачем інформації.

Продовження доступне лише учасникам

Варіант 1. Приєднайтесь до спільноти «сайт», щоб читати всі матеріали на сайті

Членство у спільноті протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалів «Хакера», збільшить особисту накопичувальну знижку та дозволить накопичувати професійний рейтинг Xakep Score!

Виключно з ознайомлювальною метою. Адміністрація не несе відповідальності за його вміст. Завантажити безкоштовно .


vBulletin Connect v5.3.3 - потужний, масштабований пакет форумів для вашого сайту.

Версія: 5.3.3 (Nulled by vBSupport.org)

Мінімальні вимоги php 5.6
Сумісність із php 7.1
При новій установці необхідно перейменувати файл htaccess.txt на.htaccess
При оновленні видалити папку fonts (до початку оновлення).

Нові можливості:
Новий UI з великою соціальною інтеграцією;
Оптимізовано під мобільні пристрої;
Спрощено встановлення, керування та налаштування;
Нова архітектура бази даних для покращення пошуку та кращої продуктивності;
Зручна динамічна зміна контенту;
Розширена для обміну відео та зображеннями;
Повна інтеграція з VigLink;
Більш ніж 100 інших нових функцій та покращень;

Вбудовані програми:
Дискусійний форум
Групи
Опитування
Блог

Оптимізація пошукової системи:
SEO дружні URL
Користувальницький тег ключових слів/опису META

Гнучкість:
Профілі користувачів, що розширюються.
Перезапис URL
Інтерфейсна локалізація
Метадані

Відповідність стандартів:
Об'єднання в синдикати змісту (RSS)
Об'єднання в синдикати змісту: RSS, Atom, XML
PHP v5.4 сумісний

Без розривний інтегрована система:
Єдиний задіяний вхід до системи
Єдина система дозволу
Єдина адміністраторська панель управління
Створіть безперервний Стиль/тему через Статті, Блоги, Форум

Панелі керування для кожної ролі:
Адміністраторські засоби управління
Панель керування модератора
Панель керування
Об'єднана система дозволу
Двигун живлення для вдосконаленого налаштування

Управління користувача:
Розрахована на багато користувачів система з необмеженими ролями і повноваженнями
Задіяні групи
Безпека
Гранульовані повноваження
Проблемне повідомлення
Сумісний SSL
Captcha
Підтвердження адреси електронної пошти
Адміністраторський редактор новин панелі управління
Система "страйку" входу в систему
Електронна пошта та зміни пароля потребують поточного пароля
Сумісний з Children's Online Privacy Protection Act (COPPA) 1998

1. Зайдіть до панелі керування адміністратора:
Languages ​​& Phrases - Download / Upload Languages.
2. У полі "EITHER upload the XML file from your computer" введіть шлях до
файлу vbulletin-language_ua.xml на Вашому комп'ютері.
3. У "Overwrite Language" виберіть "Create New Language".
4. У полі "Title for Uploaded Language" введіть назву мови.
За відсутності введених даних мова називатиметься "Russian (RU)"
5. Встановіть "Yes" у параметрі "Ignore Language Version"
6. Встановіть "Yes" у параметрі "Read Charset from XML File"
7. Натисніть кнопку "Import" і чекайте завершення процесу завантаження.
7А За бажанням, Ви можете зробити нову мову мовою "За замовчуванням",
натиснувши біля нього кнопку "Default" / "Значення за замовчуванням".





Основні переваги:

  • Швидка та ефективна основа на базі даних
  • Інтерфейс, що складається із шаблонів
  • Потужна пошукова система
  • Багатомовна підтримка
  • Профілі користувачів
  • Потужна та зручна панель адміністратора
  • Необмежену кількість розділів/тем/повідомлень
  • Повідомлення по email
  • Підтримка COPPA

Зважаючи на те, що демки форуму, яку можна інсталювати, фірма-виробник не надає, довелося встановлювати ліву версію, завантажену з якогось варезника. Отже, інструкція може не зовсім відповідати процесу встановлення ліцензійного форуму. Після інсталяції сайт був видалений, за призначенням не використовувався.

Для інсталяції vBulletin, переходимо в панель керування хостингом (кнопка з шестернею навпроти замовлення хостингу в білінгу), там у "Менеджер файлів", в ньому переходимо в директорію "www". Натискаємо кнопку "Закачати файл до поточної директорії":

Вказуємо шлях до файлу на своєму комп'ютері:

Виділяємо архів з vBulletin, розпаковуємо його:

Видаляємо непотрібні нам файли та директорії, у тому числі директорію нашого www домену - за умови, що там у вас нічого потрібного немає. Якщо ви ставите не в корінь сайту, або в директорії сайту є щось потрібне - видаляти директорію www домену не треба:

Виділяємо директорію з інсталятором vBulletin, перейменовуємо її:

Вводимо ім'я нашого сайту, як ім'я директорії:

Переходимо до розділу "Бази даних", панелі керування хостингом:

Створюємо нову базу даних MySQL та користувача з повними правами доступу до неї:

Зверніть увагу, що користувач і база автоматично отримали префікс, на ім'я вашого облікового запису на хостинг-сервері:

Заходимо на головну сторінку нашого сайту, отримуємо таку помилку vBulletin:

Вбиваємо шлях до інсталятора в адресному рядку, треба дописати "install/install.php", після чого запуститься програма встановлення форуму vBulletin:

Інсталятор vBulletin перевіряє наявність файлів:

На наступному кроці відбувається перевірка з'єднання з базою даних, вона не проходить - т.к. у файлі конфігурації форуму вбито неправильні дані:

Повертаємося в панель управління хостингом, файловий менеджер, заходимо до директорії з форумом, далі субдиректорія "includes". Відкриваємо файл "config.php":

Вносимо правильні дані від БД до конфігураційного файлу, після чого його закриваємо:

Повертаємось на сайт, до інсталятора. натискаємо "F5", цього разу все добре, з'єднання з базою зрослося:

Програма встановлення vBulletin створює таблиці в базі даних:

Інсталятор vBulletin змінює типи деяких таблиць:

Вносяться дані до бази даних:

Імортуються мови:

Імпортуються стилі:

Імпортується довідка:

Налаштування за замовчуванням не чіпаємо, програма установки vBulletin все правильно визначила:

Імпортуються стандартні налаштування:

Вводимо дані адміністратора vBulletin:

Адміністратор vBulletin успішно доданий:

vBulletin на хостинг успішно завершено:

Наслідуючи останню пораду інсталятора, видаляємо непотрібні файли:

Можна зайти на форум vBulletin, переконатися, що все працює коректно:

  • Від:
  • Registered: 2014.07.07
  • Posts: 3,825
  • I just like PunBB:
  • 5 years, 8 months, 20 days,
  • Likes: 480

Topic: Який форум краще vBulletin або PunBB

VBulletin (Вобла або Булка, як його люблять у нас називати) – один із найстаріших комерційних форумних движків, написаних за допомогою технологій PHP та MySQL. Починаючи з виходу найпершої версії в 2000 році, було проведено колосальну роботу з покращення функціоналу, що дозволило VB потрапити до списку кращих програмних продуктів.

Ліцензія VBulletin буде коштувати вам близько 250 доларів. Не сумнівайтеся, це цілком виправдана витрата і точно окупить себе економією робочого часу і нервових клітин. Більшість цих грошей йде розробникам і програмістам, які надалі пустять їх на доопрацювання функціоналу і випуск латок і доповнень (так, протягом року всі оновлення будуть поставлятися вам безкоштовно).

2 Reply by PunBB

  • Від: Москва, Sovkhoznay 3, apt. 98
  • Registered: 2014.07.07
  • Posts: 3,825
  • I just like PunBB:
  • 5 years, 8 months, 20 days,
  • Likes: 480

Перерахування всіх функцій VBulletin займатися не має сенсу. Там реалізували практично все, що може знадобитися адміністраторам форуму. Подкастінг, підтримка мультицитування, поділ на соціальні групи та спільноти, рейтингова система (репутація). Базову комплектацію можна доповнити сторонніми розширеннями.

Двигун форуму VBulletin створює серйозне навантаження на сервер, особливо якщо встановлені сторонні доповнення та скрипти. Щоб надалі уникнути проблем із завантаженням сторінок, доведеться розщедритися на нормальний хостинг. Особливо якщо у майбутньому прогнозуєте своєму ресурсу велику відвідуваність.

3 Reply by PunBB

  • Від: Москва, Sovkhoznay 3, apt. 98
  • Registered: 2014.07.07
  • Posts: 3,825
  • I just like PunBB:
  • 5 years, 8 months, 20 days,
  • Likes: 480

Який форум краще vBulletin або PunBB

VBulletin, внаслідок його надзвичайної стійкості до злому та спам-ботів, рекомендований для використання у великих серйозних проектах. Крім того, стандартні налаштування та конфігураційні файли можна легко змінити на свій лад, досягнувши ще більшого ефекту. В інтернеті є безліч інструкцій та гайдів від народних умільців, щоправда, не кожному з них варто довіряти.

VBulletin, реалізує масштабні ідеї якнайкраще. Постійні оновлення, високоякісний сервіс, додаткові розширення та надійні механізми безпеки – це цілком виправдовує витрачені на продукт кошти.

4 Reply by PunBB

  • Від: Москва, Sovkhoznay 3, apt. 98
  • Registered: 2014.07.07
  • Posts: 3,825
  • I just like PunBB:
  • 5 years, 8 months, 20 days,
  • Likes: 480

Який форум краще vBulletin або PunBB

Всі функції перераховувати немає сенсу – в ньому (або в доповненнях) реалізовано практично все, що може знадобитися адміністратору для створення форуму. Там є і мультицитування, і підтримка підкастингу, і спільноти користувачів, і соціальні групи, гнучка система репутації та багато іншого.

Звичайно, для vBulletin є велика кількість доповнень і користувацьких спільнот, тому жодних проблем з обслуговуванням не буде, особливо з урахуванням того, що існує офіційна служба підтримки. Мінусом vBulletin, нехай і не дуже великим, є платність доповнень, наприклад, для блогів користувача.

За великим рахунком, недоліків форуму немає. Його можна рекомендувати для великих серйозних проектів саме через його надійність та стійкість до всіляких атак. Як наслідок, він створює суттєве навантаження на сервер, особливо із встановленими доповненнями, але для серйозних проектів зазвичай використовують серйозні сервери та серйозних адміністраторів.

Будь-який двигун вимагає певних дій для оптимізації його для кращої і швидкої роботи. У нашому випадку ми поговоримо про оптимізацію Vbulletin 4.

Так як движок нашого форуму постійно оновлюється, я не писатиму про оптимізацію більш ранніх версій Vbulletin, а почну саме з версії 4.1.12. Хоча можливо, поступово доповнюватиму цю статтю та оптимізацією для попередніх версій, оскільки не всі переходять на новіші.

Тут я наведу кілька прикладів, щоб зробити ваш форум Vbulletin швидше і краще (починаючи з найпростіших речей, переходячи до більш складних). Будь ласка, майте на увазі, що ті речі, які працюють у мене, не обов'язково будуть працювати і у вас. Тому всі зміни ви робите на свій страх та ризик.

Вимкнення списку користувачів.

Існує простий спосіб, просто вимкнути функцію AdminCP. (Settings -> Options -> User Listing Options)

Це не глобально звичайно, і ви можете це пропустити і не робити, просто поставте собі питання чи потрібно вам це? Так як маючи список, користувачі можуть сортувати його, подивитися у кого більше повідомлень, репутація і так далі. Чи ваші користувачі користуються цим? Напевно, ні… коли ви самі востаннє користувалися цим списком?

Як на мене, так мені здається, що дані списки тільки на користь спамерам, так як це найпростіший спосіб зібрати всі саме учасників форуму Vbulletin 4 для розсилки спаму в особистих повідомленнях.

Крім цього, запит, який необхідний для генерації списку користувачів, жахливий для серверів баз даних і може призвести до великого завантаження сервера.

Збільшення швидкості обробки списку особистих повідомлень.

Якщо ви не імпортували особисті повідомлення від зовнішніх джерел за допомогою Impex або інших засобів, ви можете сміливо покластися на сортування за ID для особистих повідомлень. Сортування за ID буде робити так, щоб ваш сервер бази даних не доводилося скидати особисті повідомлення в тимчасову таблицю для виконання сортування (роблячи запит набагато швидше).

Щоб зробити це, потрібно прописати невеликий модуль з розташуванням private_messagelist_filter і прописати в ньому наступне:

If ($sortfield == "pmtext.dateline") $sortfield = "pm.pmid";

І все, ви тільки що зробили private.php на ~ 20% швидше.


Налаштовуємо ефективніший пошук останніх повідомлень від користувача.

Ідемо на фтп, шукаємо файл includes /class_userprofile.php, і замінюємо в ньому дані таким чином, шукаємо:

$getlastposts = $this->registry->db->query_read_slave(" SELECT thread.title, thread.threadid, thread.forumid, thread.postuserid, post.postid, post.dateline FROM " . TABLE_PREFIX . "post AS post INNER JOIN " . TABLE_PREFIX . " thread AS thread USING (threadid) WHERE thread.visible = 1 AND post.userid = " . $this->userinfo["userid"] . " AND post.visible = 1 ORDER BY post.dateline DESC LIMIT 20");

і замінюємо на це (а конкретніше ORDER BY):

$getlastposts = $this->registry->db->query_read_slave(" SELECT thread.title, thread.threadid, thread.forumid, thread.postuserid, post.postid, post.dateline FROM " . TABLE_PREFIX . "post AS post INNER JOIN " . TABLE_PREFIX . "thread AS thread USING (threadid) WHERE thread.visible = 1 AND post.userid = " . $this->userinfo["userid"] . " AND post.visible = 1 ORDER BY post.postid DESC LIMIT 20");

Це робить запит трохи правильнішим, ніж він існує в даному вигляді. Таким чином, не доведеться робити сортування в тимчасову таблицю. Для користувачів у яких більше 1000 повідомлень, вихідний запит зайняв би близько 10 секунд, у нашому випадку набагато менше. Це в першу чергу стосується профілю користувача Vbulletin 4, для відображення останніх повідомлень.

Перевірка індексу тем.

Якщо ваші форуми мають порядок сортування за замовчуванням, і які встановлені без змін, таких як ми робили вище, переконайтеся, що всі ваші індекси знаходяться у своїх таблицях. були випадки, коли індекси з невідомих мені причин перетиналися і деякі форуми не відкривалися.

Я пропоную зробити так, щоб сортування за умовчанням було у вигляді дати (стовпець, який використовує ці дані називається «dateline»), і щоб це реалізувати, виконаємо запит:

ALTER TABLE thread ADD INDEX forumid2_dp (forumid, visible, sticky, dateline)

Це запит застосовується до мене конкретно, у вашому випадку forumid2_dp повинен мати ваше ім'я. Використовуйте на свій страх та ризик.

Будьте обережні під час встановлення додатків.

Просто тому, що хтось робить модулі та хакі, не означає, що вони зроблені саме для вас, працювали на великих форумах Vbulletin 4 і не мають помилок. Прекрасним прикладом служать повідомлення про масові злами, через те чи інше хак.

Звичайно, можна припустити, що розробники не можуть всього врахувати, і перелопатити всі хакі, щоб вони не конфліктували, але ... Переконайтеся, що модуль Vbulletin не викликає великих навантажень бази даних, переконайтеся, що хак має потенціал для захисту від SQL ін'єкцій або XSS . На жаль, додатків та модифікацій тисячі, і просто не реально все перевірити. Краще буде якщо всі хакі ви писатимете собі самі, або замовляти у будь-кого. Саме під вас і ваші завдання.

Не використовуйте таблиці в InnoDB.

Тут, звичайно, мені можуть плюнути в обличчя, оскільки ця тема вже обговорювалася мільйон разів, але за своїм досвідом можу сказати, що я працюю 100% на MyISAM таблицях для будь-якої дії. Буває обробляю 1000 запитів за секунду.

Якщо ви вже починаєте психовати де при запитах у вас все повисає, особливо в новому пошуку Vbulletin, змініть таблиці InnoDB MyISAM. MyISAM відповідає швидше на окремі запити, тому що не потрібно керувати блокуванням окремих записів. InnoDB працює швидше загалом, але тільки тому, що дозволяє виконувати запити одночасно. якщо ваші запити і так виконуються швидко під MyISAM, не потрібно переходити на InnoDB. ІМХО.

Рейтинг статті

0%

Рейтинг

User Rating: 0.35 (1 votes)