13.10.
2008

Joomla! reset.php ranljivost

Ena izmed najbolj splošno znanih ranljivosti Joomla! sistemov do verzije 1.5.6, na katero sem pred kratkim  preprosto pozabil. Med prenosom spletne strani nisem posodobil verzije CMSja in pustil to ranljivost odprto. Na srečo redno delam varnostne kopije, tako da izgube podatkov tudi v primeru vdora nebi bilo, imel bi le delo s ponovno namestitvijo CMSja.

Kakšna ranljivost je to bila? V bistvu  je šlo  za  preprost primer  slabega  preverjanja vnosnih polj. V polje za potrditev spremembe  smo lahko vnesli znak  ‘ (enojna navednica). Ker je skripta bila  površno napisana, se je ob tem izvedel spremenjen SQL stavek in potrditvena koda ni bila več potrebna. V naslednjem koraku smo lahko vpisali novo geslo za administrativni račun in tako pridobili dostop do spletne strani.

Ranljive so verzije do 1.5.6, zato je najlažja metoda za popravek  posodobitev Joomla! CMS  na zadnjo različico (trenutno 1.5.7).

Če pa imate kak dober razlog, da posodobitve ne izvedete, pa lahko v datoteko “components\com_user\models\reset.php” v vrstico 113 dodate naslednjo kodo:

if(strlen($token) != 32) {
$this->setError(JText::_( €™INVALID_TOKEN €™));
return false;
}

Dodatno imamo tudi možnost beleženja poskusov vdora. Na voljo sta dve metodi – pisanje v dnevniško datoteko, ali pošiljanje obvestil  na e-pošto.

V zgornji datoteki v  vrstico 116, takoj za “$this->setError(JText::_(‘INVALID_TOKEN’));” in  pred “return false”, vpišemo sledečo kodo:

error_log(“Poskus vdora z IP naslova: “.$_SERVER[‘REMOTE_ADDR’].” \n\r  Stran: “.$_SERVER[‘HTTP_HOST’], 1, tvoj.naslov@ponudnik.si);

ali

error_log(“Poskus vdora z IP naslova: “.$_SERVER[‘REMOTE_ADDR’].” \n\r Stran: “.$_SERVER[‘HTTP_HOST’], 0);

V prvem primeru bo obvestilo o poskusu vdora  poslalo na email naslov, v drugem primeru pa v dnevniško datoteko.

Koda je povzeta z naslova: http://forum.joomla.org/viewtopic.php?f=432&t=316362.

Ni komentarjev.

Dodaj komentar