Soeben eine Lücke im STG Automailer gefunden, wodurch eine SQL Injection möglich ist. Diese wurde wohl schon bei Maddin (anteilclub.de) ausgenutzt, dort habe ich nach einer Lücke gesucht und bin darauf gestoßen.

Bei Anteilclub hat der "Angreifer" in der vms_userdaten sämtliche Nicknamen gelöscht und die Userids verändert wodurch ein Login unmöglich war.

Ursache


In der Einbauanleitung heißt es:

6.2 content/konto/userprofil.php

Suche folgendes:
PHP-Code:
if ($_POST['aendern'] == 'Jetzt ändern!') { 
und füge darunter folgendes ein:

PHP-Code:
    if($_POST['mail_max']>=$mailer['mail_min'] && $_POST['mail_max']<=$mailer['mail_max']){
        
db_query("UPDATE ".$db_prefix."_userdaten SET mail_max='".$_POST['mail_max']."' WHERE uid=".$_SESSION['uid'].""); 
        
db_query("UPDATE ".$db_prefix."_userdaten SET min_verdienst='".$_POST['min_verdienst']."' WHERE uid=".$_SESSION['uid'].""); 
    } 
Durch die ungeschützte Übergabe der Variablen an den SQL Query ist es möglich eine SQL Injection zu machen.

Bugfix
Suche:

PHP-Code:
        db_query("UPDATE ".$db_prefix."_userdaten SET mail_max='".$_POST['mail_max']."' WHERE uid=".$_SESSION['uid'].""); 
        
db_query("UPDATE ".$db_prefix."_userdaten SET min_verdienst='".$_POST['min_verdienst']."' WHERE uid=".$_SESSION['uid'].""); 
Ersetze mit:
PHP-Code:
        db_query("UPDATE ".$db_prefix."_userdaten SET mail_max=".(INT)$_POST['mail_max'].", min_verdienst=".(INT)$_POST['min_verdienst']." WHERE uid=".$_SESSION['uid'].""); 
Habe bei Maddin erfolgreich eine SQL Injection ausgeführt und bei allen Usern die Spalte max_forcedt auf 9999999 gesetzt. SQL Injections sind besonders gefährlich denn hier kann der Angreifer unter Umständen Kontrolle über die ganze Datenbank erlangen.

Getestet und gefunden in Version 1.0