Občutljiv vbilten. Kateri forum je boljši vBulletin ali PunBB. Branje datotek, izvajanje ukazov

Verjetno ste že večkrat videli forume o motorju vBulletin. Forumi kot taki niso več v modi, vendar je vBulletin še vedno eden najbolj priljubljenih motorjev. V zadnji (peti) različici je bilo odkritih več ranljivosti, ki lahko skrbniku močno zagrenijo življenje. V tem članku vam bom povedal, kako se uporabljajo.

Prva težava je nepravilno filtriranje uporabniških podatkov. O tem je poročal neodvisni varnostni raziskovalec, ki je želel ostati anonimen. Ranljivost, čeprav ima nekatere omejitve, je prejela kritičen status, ker vam omogoča branje vseh datotek in izvajanje poljubne kode v ciljnem sistemu.

Drugo ranljivost so odkrili raziskovalci iz TRUEL IT in prejeli identifikator CVE-2017-17672. Povezan je s funkcijami deserializacije podatkov v motorju in ga lahko napadalec uporabi za brisanje poljubnih datotek v sistemu.

Celotna poročila s podrobnostmi o obeh težavah so bila objavljena kot del programa Beyond Security podjetja SecuriTeam. Obstajajo tudi izkoriščanja PoC za prikaz ranljivosti. Pojdimo skozi vse to po vrsti.

Priprave

Kot strežnik sem uporabil distribucijo WAMP.

Branje datotek, izvajanje ukazov

Torej, razlog za prvo ranljivost je napačna logika pri obdelavi parametra routestring, ki napadalcu omogoča, da preko include vključi katero koli datoteko na disku in izvede kodo PHP, ki se nahaja v njej.

Naša pot se začne pri najpomembnejši datoteki - index.php, kjer poteka osnovna inicializacija aplikacije.

/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();

Poglejmo metodo vB5_Frontend_Application::init.

/includes/vb5/frontend/application.php
13: razred vB5_Frontend_Application razširja vB5_ApplicationAbstract 14: ( 15: javna statična funkcija init($configFile) 16: ( 17: parent::init($configFile); 18: 19: self::$instance = new vB5_Frontend_Application(); 20: self::$instance->router = new vB5_Frontend_Routing(); 21: self::$instance->router->setRoutes();

Tukaj nas zanima metoda setRoutes.

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

Spremenljivka $path vsebuje vrednost uporabniških podatkov iz parametra routestring. Vanj lahko posredujete pot do strani foruma in naloži se bo.



Recimo, da smo opravili /test.

Po dodelitvi spremenljivke obstaja del kode, ki se znebi poševnice na začetku vrstice, če je prisotna.

/includes/vb5/frontend/routing.php
75: if (strlen($path) IN $path(0) == "/") 76: ( 77: $path = substr($path, 1); // $path = "test" 78: )
vključuje\vb5\frontend\routing.php
83: if (strlen($path) > 2) 84: ( 85: $ext = strtolower(substr($path, -4)) ; 86: if (($ext == ".gif") ALI ($ext == ".png") ALI ($ext == ".jpg") ALI ($ext == ".css") 87: ALI (strtolower(substr($path, -3)) == ".js" )) 88: ( 89: header("HTTP/1.0 404 ni bilo mogoče najti"); 90: die(""); 91: ) 92: )

Kot lahko vidite, je ček precej čuden. Zmeda je vsaj prisotnost seznama prepovedanih razširitev, zapisanih neposredno v kodo. In nasploh, že samo dejstvo, da razširitev dobimo z rezanjem štirih znakov s konca vrstice (vrstica 85), je zmedeno. Na splošno velja, da če poskušamo prejeti datoteko s končnicami gif, png, jsp, css ali js, bo strežnik vrnil stran 404 in skript se bo nehal izvajati. Ko so opravljena vsa preverjanja, se z uporabo callApi pokliče metoda getRoute iz razreda vB_Api_Route. Na podlagi podatkov, ki jih posreduje uporabnik, išče ustrezne poti.

Nadaljevanje je na voljo samo članom

Možnost 1. Pridružite se skupnosti »site«, da preberete vsa gradiva na spletnem mestu

Članstvo v skupnosti v določenem obdobju vam bo omogočilo dostop do VSEH hekerskih gradiv, povečalo vaš osebni kumulativni popust in vam omogočilo, da si naberete profesionalno oceno Xakep Score!

Samo v informativne namene. Uprava ne odgovarja za vsebino. Prenesi brezplačno.


vBulletin Connect v5.3.3 je močan, razširljiv in popolnoma prilagodljiv forumski paket za vaše spletno mesto.

Različica: 5.3.3 (razveljavil vBSupport.org)

Minimalne zahteve php 5.6
Združljivo s php 7.1
Za novo namestitev morate datoteko htaccess.txt preimenovati v .htaccess
Pri posodabljanju izbrišite mapo s pisavami (pred začetkom posodabljanja).

Nove priložnosti:
Nov uporabniški vmesnik z obsežno socialno integracijo;
Optimizirano za mobilne naprave;
Poenostavljena namestitev, upravljanje in konfiguracija;
Nova arhitektura baze podatkov za izboljšano iskanje in boljšo zmogljivost;
Priročna dinamična sprememba vsebine;
Napredno za skupno rabo videa in slik;
Popolna integracija z VigLinkom;
Več kot 100 drugih novih funkcij in izboljšav;

Vgrajene aplikacije:
Forum za razprave
Skupine
Ankete
Blog

Optimizacija iskalnikov:
SEO prijazni URL-ji
META oznaka ključne besede/opisa po meri

Prilagodljivost:
Razširljivi uporabniški profili
Prepisovanje URL-jev
Lokalizacija vmesnika
Metapodatki

Skladnost s standardi:
Objavljanje vsebine (RSS)
Sindiciranje vsebine: RSS, Atom, XML
Združljiv s PHP v5.4

Neprekinjen integrirani sistem:
Vključena je edina prijava
Sistem z enojno ločljivostjo
Edina skrbniška nadzorna plošča
Ustvarite stalen slog/temo prek člankov, spletnih dnevnikov, foruma

Nadzorne plošče za vsako vlogo:
Administrativni nadzor
Nadzorna plošča moderatorja
Nadzorna plošča po meri
Sistem enotnega reševanja
Power template engine za napredno prilagajanje

Uporabniški nadzor:
Večuporabniški sistem z neomejenimi vlogami in pooblastili
Vključene skupine
Varnost
Zrnate moči
Obvestilo o težavi
Združljiv SSL
Captcha
Potrditev e-poštnega naslova
Urejevalnik novic na upravni nadzorni plošči
Prijava "strike" sistem
Spremembe e-pošte in gesla zahtevajo trenutno geslo
Skladno z Zakonom o varstvu zasebnosti otrok na spletu (COPPA) iz leta 1998

1. Pojdite na skrbniško nadzorno ploščo:
Jeziki in besedne zveze - Prenos/nalaganje jezikov.
2. V polje »ALI naložite datoteko XML iz vašega računalnika« vnesite pot do
datoteko vbulletin-language_ru.xml v vašem računalniku.
3. V možnosti »Prepiši jezik« izberite »Ustvari nov jezik«
4. V polje "Naslov za naložen jezik" vnesite ime jezika.
Če ni vnesenih podatkov, se bo jezik imenoval "Ruščina (RU)"
5. Nastavite »Da« na »Prezri jezikovno različico«
6. Nastavite »Da« na »Preberi nabor znakov iz datoteke XML«
7. Kliknite na gumb "Uvozi" in počakajte, da se postopek prenosa konča.
7A Če želite, lahko novi jezik nastavite za »privzeti« jezik,
s klikom na gumb "Privzeto" / "Privzeta vrednost" poleg njega.





Glavne prednosti:

  • Hitro in učinkovito ogrodje baze podatkov
  • Vmesnik, sestavljen iz predlog
  • Zmogljiv iskalnik
  • Večjezična podpora
  • Uporabniški profili
  • Zmogljiva in priročna skrbniška plošča
  • Neomejeno število rubrik/tem/sporočil
  • Obvestila po elektronski pošti
  • Podpora COPPA

Ker proizvajalec ne daje demo foruma, ki bi ga bilo mogoče namestiti, sem moral namestiti levo verzijo, naloženo iz nekega vareznika. Zato se navodila morda ne ujemajo popolnoma s postopkom namestitve foruma za licenciranje. Po namestitvi je bilo spletno mesto izbrisano in ni bilo uporabljeno za predvideni namen.

Za namestitev vBulletin gremo na nadzorno ploščo gostovanja (gumb z zobnikom poleg naročila gostovanja v obračunu), tam v “Upravitelju datotek”, v njem gremo v imenik “www”. Kliknite gumb "Naloži datoteko v trenutni imenik":

Določite pot do datoteke v računalniku:

Izberite arhiv z vBulletin in ga razpakirajte:

Izbrišemo datoteke in imenike, ki jih ne potrebujemo, vključno z imenikom naše domene www - pod pogojem, da tam nimate ničesar, kar potrebujete. Če ga ne postavite v koren spletnega mesta ali je v imeniku spletnega mesta nekaj potrebnega, imenika domene www ni treba izbrisati:

Izberite imenik z namestitvenim programom vBulletin in ga preimenujte:

Vnesite ime naše strani kot ime imenika:

Pojdite na razdelek »Baze podatkov« na nadzorni plošči gostovanja:

Ustvarite novo bazo podatkov MySQL in uporabnika s polnimi pravicami dostopa do nje:

Upoštevajte, da sta uporabnik in zbirka podatkov samodejno prejela predpono glede na ime vašega računa na strežniku gostovanja:

Gremo na glavno stran našega spletnega mesta in prejmemo naslednjo napako vBulletin:

V naslovno vrstico vnesemo pot do namestitvenega programa, dodamo “install/install.php”, nakar se zažene namestitveni program foruma vBulletin:

Namestitveni program vBulletin preveri prisotnost datotek:

Naslednji korak je preverjanje povezave z bazo podatkov, ne deluje - ker ... Konfiguracijska datoteka foruma vsebuje napačne podatke:

Vrnemo se na nadzorno ploščo gostovanja, upravitelja datotek, pojdimo v imenik s forumom, nato v podimenik »vključuje«. Odprite datoteko "config.php":

V konfiguracijsko datoteko vnesemo pravilne podatke iz baze, nato pa jo zapremo:

Vrnemo se na spletno mesto, k monterju. pritisnite “F5”, tokrat je vse v redu, povezava z bazo podatkov je zrasla skupaj:

Namestitveni program vBulletin ustvari tabele v bazi podatkov:

Namestitveni program vBulletin spremeni vrste nekaterih tabel:

Podatki se vnesejo v bazo:

Uvoženi jeziki:

Slogi so uvoženi:

Pomoč je uvožena:

Privzetih nastavitev se ne dotikamo; namestitveni program vBulletin je vse določil pravilno:

Privzete nastavitve so uvožene:

Vnesite podrobnosti skrbnika vBulletin:

Skrbnik vBulletin je bil uspešno dodan:

Namestitev vBulletin na gostovanje je bila uspešno zaključena:

Po zadnjem nasvetu namestitvenega programa izbrišite nepotrebne datoteke:

Obiščete lahko forum vBulletin in se prepričate, ali vse deluje pravilno:

  • Od:
  • Registriran: 2014.07.07
  • Objave: 3,825
  • Všeč mi je samo PunBB:
  • 5 leta, 8 meseci, 20 dnevi,
  • Všeč mi je: 480

Tema: Kateri forum je boljši vBulletin ali PunBB

VBulletin (Vobla ali Bulka, kot ga radi imenujemo) je eden najstarejših komercialnih forumskih mehanizmov, napisanih s tehnologijama PHP in MySQL. Od izdaje prve različice leta 2000 je bilo opravljenega ogromno dela za izboljšanje funkcionalnosti, kar je VB omogočilo uvrstitev na seznam najboljših programskih izdelkov.

Licenca VBulletin vas bo stala približno 250 USD. Bodite prepričani, to je povsem upravičen strošek in se bo zagotovo povrnil s prihrankom delovnega časa in živčnih celic. Večina tega denarja gre razvijalcem in programerjem, ki ga bodo kasneje porabili za izboljšanje funkcionalnosti ter izdajo popravkov in dodatkov (da, vse posodobitve vam bomo dostavili brezplačno skozi vse leto).

2 Odgovori do PunBB

  • Od: Moskva, Sovkhoznay 3, apt. 98
  • Registriran: 2014.07.07
  • Objave: 3,825
  • Všeč mi je samo PunBB:
  • 5 leta, 8 meseci, 20 dnevi,
  • Všeč mi je: 480

Nima smisla naštevati vseh funkcij VBulletin. Implementirali so skoraj vse, kar bi administratorji foruma morda potrebovali. Podcasting, multicitirana podpora, delitev na družbene skupine in skupnosti, sistem ocenjevanja (ugleda). Osnovni paket je mogoče dopolniti z razširitvami tretjih oseb.

Mehanizem foruma VBulletin resno obremeni strežnik, še posebej, če so nameščeni dodatki in skripti tretjih oseb. Da bi se izognili težavam z nalaganjem strani v prihodnosti, se boste morali odšteti za običajno gostovanje. Še posebej, če napovedujete več prometa za svoj vir v prihodnosti.

3 Odgovori do PunBB

  • Od: Moskva, Sovkhoznay 3, apt. 98
  • Registriran: 2014.07.07
  • Objave: 3,825
  • Všeč mi je samo PunBB:
  • 5 leta, 8 meseci, 20 dnevi,
  • Všeč mi je: 480

Re: Kateri forum je boljši vBulletin ali PunBB

VBulletin je zaradi izjemne odpornosti na vdore in spambote priporočljiv za uporabo v velikih resnih projektih. Poleg tega lahko standardne nastavitve in konfiguracijske datoteke preprosto spremenite na svoj način, s čimer dosežete še večji učinek. Na internetu je veliko navodil in navodil ljudskih obrtnikov, čeprav vsem ne gre zaupati.

VBulletin uresničuje obsežne ideje na najboljši možni način. Stalne posodobitve, kakovostna storitev, dodatne razširitve in zanesljivi varnostni mehanizmi - vse to v celoti upravičuje denar, porabljen za izdelek.

4 Odgovori do PunBB

  • Od: Moskva, Sovkhoznay 3, apt. 98
  • Registriran: 2014.07.07
  • Objave: 3,825
  • Všeč mi je samo PunBB:
  • 5 leta, 8 meseci, 20 dnevi,
  • Všeč mi je: 480

Re: Kateri forum je boljši vBulletin ali PunBB

Nima smisla naštevati vseh funkcij - ta (ali dodatki) implementira skoraj vse, kar administrator morda potrebuje za ustvarjanje foruma. Obstaja več citatov, podpora za podcasting, uporabniške skupnosti, družbene skupine, prilagodljiv sistem ugleda in še veliko več.

Seveda ima vBulletin veliko število dodatkov in uporabniških skupnosti, tako da ne bo težav z vzdrževanjem, še posebej, ker obstaja uradna ekipa za podporo. Pomanjkljivost vBulletin, čeprav ne zelo velika, so plačljivi dodatki, na primer za uporabniške bloge.

Na splošno forum nima pomanjkljivosti. Prav zaradi svoje zanesljivosti in odpornosti na vse vrste napadov ga lahko priporočamo za velike resne projekte. Posledično ustvari precejšnjo obremenitev strežnika, sploh z nameščenimi dodatki, a za resne projekte običajno uporabljajo resne strežnike in resne skrbnike.

Vsak motor zahteva določene ukrepe za njegovo optimizacijo za boljše in hitrejše delovanje. V našem primeru bomo govorili o optimizaciji Vbulletin 4.

Ker se naš forumski mehanizem nenehno posodablja, ne bom pisal o optimizaciji prejšnjih različic Vbulletin, ampak bom začel z različico 4.1.12. Čeprav bom morda ta članek postopoma dopolnil z optimizacijo za prejšnje različice, saj vsi ne preidejo na novejše.

Tukaj bom navedel nekaj primerov, da bo vaš forum Vbulletin hitrejši in boljši (začenši z najpreprostejšimi stvarmi in nadaljevati z bolj zapletenimi). Ne pozabite, da tisto, kar deluje zame, ne bo nujno delovalo tudi vam. Zato vse spremembe izvajate na lastno odgovornost in tveganje.

Onemogočanje seznama uporabnikov.

Obstaja preprost način, da preprosto onemogočite funkcijo v AdminCP. (Nastavitve -> Možnosti -> Možnosti seznama uporabnikov)

To seveda ni globalno in lahko ga preskočite in ne storite, samo vprašajte se, ali ga potrebujete? Ker imajo seznam, ga lahko uporabniki razvrstijo, vidijo, kdo ima več sporočil, ugled in tako naprej. Ali vaši uporabniki to uporabljajo? Verjetno ne ... kdaj ste nazadnje sami uporabili ta seznam?

Kar se mene tiče, se mi zdi, da ti seznami koristijo samo pošiljateljem neželene pošte, saj je to najlažji način za zbiranje vseh imen udeležencev foruma Vbulletin 4 za pošiljanje neželene pošte v zasebnih sporočilih.

Poleg tega je poizvedba, ki je potrebna za ustvarjanje seznama uporabnikov, grozna za strežnike baz podatkov in lahko povzroči veliko obremenitev strežnika.

Povečana hitrost pri obdelavi seznama osebnih sporočil.

Če še nikoli niste uvažali zasebnih sporočil iz zunanjih virov z uporabo Impexa ali drugih sredstev, se lahko varno zanesete na razvrščanje ID-jev za zasebna sporočila. Z razvrščanjem po ID-ju vašemu strežniku zbirke podatkov ne bo treba odložiti zasebnih sporočil v začasno tabelo, da izvede razvrščanje (zaradi česar je poizvedba veliko hitrejša).

Če želite to narediti, morate registrirati majhen modul z lokacijo v private_messagelist_filter in vanj napisati naslednje:

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

In to je to, pravkar ste naredili private.php ~20 % hitrejši.


Vzpostavili smo učinkovitejše iskanje zadnjih sporočil uporabnika.

Gremo na FTP, poiščemo datoteko, ki vključuje /class_userprofile.php, in zamenjamo podatke v njej, kot sledi, poiščemo:

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

in ga nadomestite s tem (natančneje ORDER BY):

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

Zaradi tega je zahteva nekoliko bolj pravilna, kot je. Tako vam ne bo treba razvrščati v začasno tabelo. Pri uporabnikih z več kot 1000 sporočili bi začetna zahteva trajala približno 10 sekund, v našem primeru precej manj. To se nanaša predvsem na uporabniški profil Vbulletin 4 za prikaz zadnjih objav.

Preverjanje indeksa tem.

Če imajo vaši forumi privzeti vrstni red, ki je nastavljen brez sprememb, kot smo naredili zgoraj, se prepričajte, da so vsi vaši indeksi v njihovih tabelah. Bili so primeri, ko so se indeksi prekrivali iz meni neznanih razlogov in nekateri forumi se niso odprli.

Predlagam, da je privzeto razvrščanje v obliki datuma (stolpec, ki uporablja te podatke, se imenuje »dateline«) in za izvedbo tega zaženimo poizvedbo:

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

Ta zahteva velja posebej zame, v vašem primeru bi forumid2_dp moral imeti vaše ime. Uporabljajte na lastno odgovornost.

Bodite previdni pri nameščanju dodatkov.

Samo zato, ker nekdo izdeluje module in vdore, ne pomeni, da so narejeni samo za vas, da so delali na velikih forumih Vbulletin 4 in so brez napak. Odličen primer so poročila o množičnih vdorih prek enega ali drugega vdora.

Seveda lahko domnevamo, da razvijalci ne morejo upoštevati vsega in presejati vseh vdorov, da ne bi bili v nasprotju, vendar ... Prepričajte se, da modul Vbulletin ne povzroča velikih obremenitev baze podatkov, poskrbite, da vdor ima potencial za zaščito pred vbrizgavanjem SQL ali XSS. Na žalost je na tisoče aplikacij in modifikacij in preprosto ni mogoče preveriti vseh. Bolje bo, če vse heke napišete sami ali jih naročite komu drugemu. Posebej prilagojeno vam in vašim nalogam.

Ne uporabljajte tabel v InnoDB.

Tukaj mi seveda lahko pljunejo v obraz, saj je bila ta tema že milijonkrat razpravljana, a iz lastnih izkušenj lahko rečem, da 100% delam na tabelah MyISAM za vsako dejanje. Včasih obdelam 1000 zahtevkov na sekundo.

Če se že začenjate čuditi, kje vse visi med poizvedbami, zlasti pri novem iskanju Vbulletin, spremenite tabele InnoDB v MyISAM. MyISAM se hitreje odzove na posamezne zahteve, ker vam ni treba upravljati zaklepanja posameznih zapisov. InnoDB je na splošno hitrejši, a le zato, ker omogoča sočasno izvajanje poizvedb. Če se vaše poizvedbe že izvajajo hitro pod MyISAM, ni potrebe po preklopu na InnoDB. IMHO.

Ocena članka

0%

Ocena

Ocena uporabnika: 0,35 (1 glasov)