Woltlab Board Addon ts_other SQL Injection

Hallo,

wie auf der Startseite geschrieben,werde ich hin und wieder auch mal das Thema SQL-Injektion aufgreifen.

In diesem Fall ist es das Teamsite Addon von robertotto.de

Die google suche nach der ts_index.php ergibt ca 11.000 Einträge,also garnichtmal so ohne.
Nach einem Script Audit habe ich eine Lücke in der ts_other.php gefunden, es ist so möglich sich die Passwörter aus der Datenbank zu laden und sich somit z.b zum admin zu machen und im schlimmsten Fall läßt sich sogar das Woltlab Board shellen.Was das heißt dürfte jedem klar sein,weiter Infos möchte ich jetzt aber nicht geben.

Hier jetzt mal zu der ts_other.php
ts_other.php?action=modboard&userid=’1 erzeugt einen SQL Error

SQL-DATABASE ERROR

Database error in WoltLab Burning Board (2.3.6): Invalid SQL: SELECT m.*, b.* FROM bb1_moderators m LEFT JOIN bb1_boards b USING(boardid) WHERE m.userid=“1′ AND b.boardid IN (0,240,241)
mysql error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‚1‘ AND b.boardid IN (0,240,241)‘ at line 1
mysql error number: 1064
mysql version: 4.1.15-Debian_1-log
php version: 5.1.2-1.dotdeb.2
Date: 21.02.2009 @ 11:40
Script: /ts_other.php?action=modboard&userid=%271
Referer:

Ich möchte jetzt nicht näher dadrauf eingehen und ich möchte auch nicht zeigen wie die Lücke zu exploiten ist.

Wer die Lücke fixen möchte kann folgendes tun

Linie 13
if (isset($_REQUEST['userid'])) $userid = $_REQUEST['userid'];
else $userid = '';

austauchen mit

if (isset($_REQUEST['userid'])) $userid = intval($_REQUEST['userid']);
else $userid = '';

und dann
Linie 54
$result = $db->unbuffered_query("SELECT m.*, b.* FROM bb".$n."_moderators m LEFT JOIN bb".$n."_boards b USING(boardid) WHERE m.userid='$userid' AND b.boardid IN (0".getSearchableBoards().")");

austauchen mit

$result = $db->unbuffered_query("SELECT m.*, b.* FROM bb".$n."_moderators m LEFT JOIN bb".$n."_boards b USING(boardid) WHERE m.userid='" . mysql_real_escape_string($_REQUEST['userid']) . "' AND b.boardid IN (0".getSearchableBoards().")");

Wir haben nun das ganze doppelt abgesichert, alternativ könnte man noch linie 11 ändern.

So ich hoffe Ihr setzt das um, so seit Ihr wieder ein bissl sicherer mit eurem Woltlab Board.

Schreibe einen Kommentar