Joomla 1.0.9 Weblinks Remote Blind SQL Injection Exploit

Juni 20th, 2006 by admin

Joomla <= 1.0.9 (Weblinks) Remote Blind SQL Injection Exploit

der titel sagt eigentlich schon alles.

das exploit findet man bei milw0rm.com. da es joomla bis jetzt nicht geschaft hat ein update zu veröffentlichen.

hab ich mal ein hier ein paar ansärtze wie man das sicherheitsproblem lösen kann.

als 1. dachte ich das im administrator bereich etwas nicht richtig überprüft wird. aber falsch gedacht. das problem ist in der datei components/com_weblinks/weblinks.php.

als erstes sollte man mal überlegen ob normale user (also frontend-user) wirklich weblinks speichern können. wenn nicht ist folgende variante die beste:

PHP:
  1. saveWebLink( $option );

suchen und auskommentieren.

man könnte auch die funktion suchen

PHP:
  1. function saveWeblink( $option ) {

und ein

PHP:
  1. die();

gleich darunter einsetzen.

wenn ein "Author" Weblinks anlegen soll einfach

PHP:
  1. if ($my->gid <1) {

suchen und mit

PHP:
  1. if ($my->gid <= 1) {

ersetzen.

das ganze schützt ersteinmal vor dem einfachen users, das exploit funktioniert aber immer noch. das grundproblem ist

PHP:
  1. if (!$row->check()) {

hier werden die post variablen nicht richtig überprüft. um das ganze zu lösen müssen 2 dateien bearbeitet werden.

1. die schon bekannte weblinks.php

folgende if anweisung suchen

PHP:
  1. if (!$row->bind( $_POST, 'published' )) {

und mit

PHP:
  1. if (!$row->bind( $_POST, 'published,hits,params,archived,sid,checked_out_time,checked_out' )) {

ersetzen. das hält schon mal ein paar angriffe auf.

das 2. und wichtigste ist die weblinks.class.php die sich im gleichen ordner befindet.

PHP:
  1. function check() {

suchen und darunter:

PHP:
  1. global $database;
  2. $numbers_ar = Array('id','catid','ordering','approved');
  3. foreach($numbers_ar as $nr_name)
  4. {
  5. if(!is_numeric($this->$nr_name))
  6. {
  7. $this->_error = 'Please provide a valid Number';
  8. return false;
  9. }
  10. }
  11. $escapes_ar = Array('description','url','title');
  12. foreach($escapes_ar as $escape_name)
  13. {
  14. $this->$escape_name = $database->getEscaped( $this->$escape_name );
  15. }

einfügen. das verhindert die sql injection da die wichtigen parameter escaped werden.

ps: das grundgerüst dieses exploits können spamer auch zum verteilen ihrer links benutzen es brauch nur ein parameter angehängt zu werden und schon verlinkt man auf die besten porno- und potenzmittel-seiten

Posted in misc |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.