maybe harmful SQL Injection possible??

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
buzzdee
Beiträge: 39
Registriert: Di 1. Jul 2008, 10:39
Kontaktdaten:

maybe harmful SQL Injection possible??

Beitrag von buzzdee » Di 4. Aug 2009, 17:05

Hi,

Ich war dabei mod_security2 im Apache vor Contenido zu testen, und habe nikto drauf losgelassen. Erstmal alles gut. Dann habe ich das mod_security2 wieder abgeschalten, und nikto nochmals laufen lassen. Dabei sind mir folgende Fehlermeldungen wg. kaputter SQL Syntax im Contenido log aufgefallen die mir ein wenig sorge bereiteten:

[04-Aug-2009 16:58:31] /k/home?dir=/&file=../../../../../../../../etc/passwd&lang=kor; MySQL error 1064: 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 'kor' at line 1
SELECT cl.idcat, cl.urlpath FROM con_cat_lang AS cl, con_cat AS c WHERE c.idclient = 1 AND c.idcat = cl.idcat AND cl.idlang = 2;create table blah (blubb int);
[04-Aug-2009 16:58:31] /k/home?dir=/&file=../../../../../../../../etc/passwd&lang=kor; next_record called with no query pending.

Dann habe ich halt mal folgendes probiert:
/k/home?dir=/&file=../../../../../../../../etc/passwd&lang=2%20OR%201=1
Und es kam kein Fehler im Contenido Log, was dann im mysql query log folgendermassen aussah:
SELECT cl.idcat, cl.urlpath FROM con_cat_lang AS cl, con_cat AS c WHERE c.idclient = 1 AND c.idcat = cl.idcat AND cl.idlang = 2 OR 1=1
also hat er mein untergeschobenes SQL schön ausgeführt, ohne zu zucken.

Habe auch folgende Sachen probiert:
/k/home?dir=/&file=../../../../../../../../etc/passwd&lang=2;create%20table%20blah%20(blubb%20int);;;;
oder:
/k/home?dir=/&file=../../../../../../../../etc/passwd&lang=2;%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08create%20table%20blah%20(blubb%20int);--

wobei immer felher im contenido log auftauchten, und zumindest die Tabelle blah nicht kreiert wurde.
bei der 2. Query interessant das contenido log:
[04-Aug-2009 17:47:23] /k/home?dir=/&file=../../../../../../../../etc/passwd&lang=2;%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08create%20table%20blah%20(blubb%20int);-- MySQL error 1064: You have an error in your SQL syntax; check the manual ' at line 1ponds to your MySQL server version for the right syntax to use near '
create table blah (blubb int);--lang AS cl, con_cat AS c WHERE c.idclient = 1 AND c.idcat = cl.idcat AND cl.idlang = 2;
[04-Aug-2009 17:47:23] /k/home?dir=/&file=../../../../../../../../etc/passwd&lang=2;%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08%08create%20table%20blah%20(blubb%20int);-- next_record called with no query pending.

und im mysql query log habe ich nur noch das create table blah (blubb int);-- gesehen.

In der Kürze der Zeit habe ich es nicht geschafft, eine Tabelle oder einen neuen Benutzer anzulegen, da es scheint das das php mysql keine zwei Befehle durch ; getrennt an den mysqld schickt.
Keine Ahnung ob man das möglicherweise ausnutzen kann, um einigen schabernack zu veranstalten, ich schätze mal, eine SUBQUERY oder ähnliche sachen könnten möglicherweise auch funktionieren.

Meinungen?

cheers
Sebastian

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von Dodger77 » Di 4. Aug 2009, 17:08

Mit welcher Version hast du denn getestet? 4.8.12?

buzzdee
Beiträge: 39
Registriert: Di 1. Jul 2008, 10:39
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von buzzdee » Mi 5. Aug 2009, 08:00

Hi,

verdammt! Die wichtigsten Infos wieder vergessen. Aber ja, Contenido 4.8.12, AMR 0.5.4 und mysql 5.0.67 und php5 5.2.6 ists.

Sebastian

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von xmurrix » Mi 5. Aug 2009, 22:14

Hallo Sebastian,

mich würde es interessieren, wo genau in Contenido diese Query an die DB losgelassen wurde.

Eigentlich sollte das nicht möglich sein. Zum Einen werden die wichtigsten Parameter während der Initialisierungsphase geprüft und bereinigt, zum Anderen werden beim Erstellen von Queries alle Werte durch Type Casting in den Typ umgewandelt, der in der Query erwartet wird.

Ich konnte bei ein paar Test mit den Beispielen zwar keine DB-Fehler erzwingen, dennoch sollte man deinen Hinweisen auf jeden Fall nachgehen.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

buzzdee
Beiträge: 39
Registriert: Di 1. Jul 2008, 10:39
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von buzzdee » Do 6. Aug 2009, 12:54

Hi,

aus irgendwelchen Gründen, habe ich die Fehlermeldungen nicht bekommen, als ich versucht habe diesen Request via Browser abzusetzen. Mir ist das nur erst mit nikto aufgefallen, und dann habe ich via telnet probiert.

Werde versuchen die Stelle im php code zu finden, könnte aber ein weilchen Dauern...

cheers
Sebastian

buzzdee
Beiträge: 39
Registriert: Di 1. Jul 2008, 10:39
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von buzzdee » Do 6. Aug 2009, 13:07

Hi,

es war einfacher herauszufinden als ich dachte, das Problem scheint im AMR modul zu liegen: contenido/plugins/mod_rewrite/classes/class.modrewrite.php

Code: Alles auswählen

        if (count($aPathsCache) == 0) {^M
            $aTab   = parent::$_oGlobals->get('cfg/tab');^M
            $client = parent::$_oGlobals->get('client');^M
            $lang   = parent::$_oGlobals->get('lang');^M
            $db     = new DB_Contenido();^M
^M
            $sql = "SELECT cl.idcat, cl.urlpath FROM " . $aTab['cat_lang'] . " AS cl, " . $aTab['cat'] . " AS c WHERE "^M
                 . "c.idclient = " . $client . " AND c.idcat = cl.idcat AND cl.idlang = " . $lang;^M
            $db->query($sql);^M
            while ($db->next_record()) {^M
                $urlPath = $db->f('urlpath');^M
                if ($startFromRoot == 0 && strpos($urlPath, $catSeperator) > 0) {^M
                    // paths are stored with prefixed main category, but created^M
                    // urls doesn't contain the main cat, remove it...^M
                    $urlPath = substr($urlPath, strpos($urlPath, $catSeperator)+1);^M
                }^M
                if ($urls2lowercase) {^M
                    $urlPath = strtolower($urlPath);^M
                }^M
^M
                // store path^M
                $aPathsCache[$db->f('idcat')] = $urlPath;^M
            }^M
        }
Wenn ich mir die Query genau anschaue, dann scheint $client auch betroffen zu sein.

cheers
Sebastian

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von xmurrix » Do 6. Aug 2009, 22:13

Vielen Dank für die Info,

damit keiner auf dumme Gedanken kommt, gibt es eine gefixte Version der betroffenen Datei.

Download unter:
plugin_advanced_mod_rewrite_security_fix_0.5.0-0.5.4.zip

Der Fix ist für die AMR Versionen 0.5.0 - 0.5.4.

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

buzzdee
Beiträge: 39
Registriert: Di 1. Jul 2008, 10:39
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von buzzdee » Fr 7. Aug 2009, 09:16

Hi,

Besten dank für den schnellen Fix, werds gleich mal austesten.

Grüße
Sebastian

Polardrache
Beiträge: 55
Registriert: Fr 22. Apr 2005, 15:41
Wohnort: Berlin
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von Polardrache » Fr 7. Aug 2009, 11:02

Auf der Seite www.citytourcard.com führte der Fix dazu, dass man nicht mehr zwischen den Sprachen umschalten konnte. Musste ihn erstmal wieder entfernen und werde mir das Ganze erstmal genauer anschauen.
Unterstützt das Contenido-Wiki-Projekt: www.contenido-wiki.org!

ikusei - Wir lassen Ihre Projekte wachsen!

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von xmurrix » Fr 7. Aug 2009, 12:25

Polardrache hat geschrieben:Auf der Seite http://www.citytourcard.com führte der Fix dazu, dass man nicht mehr zwischen den Sprachen umschalten konnte. Musste ihn erstmal wieder entfernen und werde mir das Ganze erstmal genauer anschauen.
Hallo,

das kommt davon, wenn man das in einer Nacht- u. Nebelaktion macht....

Bitte die Zeile 737 von

Code: Alles auswählen

        $sLanguageName = self::$_db->escape($sClientName);
in

Code: Alles auswählen

        $sLanguageName = self::$_db->escape($sLanguageName);
ändern. Dann sollte der Sprachwechsel wieder funktionieren.

Nachtrag:
Die Datei in (plugin_advanced_mod_rewrite_security_fix_0.5.0-0.5.4.zip) ist korrigiert und neu hochgeladen worden.

Grüße
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Oldperl
Beiträge: 4255
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von Oldperl » Fr 7. Aug 2009, 17:17

@xmurrix
sollte man das nicht auch im AMR-Thread ergänzen? :arrow: http://forum.contenido.org/viewtopic.php?f=66&t=21578

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Polardrache
Beiträge: 55
Registriert: Fr 22. Apr 2005, 15:41
Wohnort: Berlin
Kontaktdaten:

Re: maybe harmful SQL Injection possible??

Beitrag von Polardrache » So 9. Aug 2009, 13:07

xmurrix hat geschrieben: das kommt davon, wenn man das in einer Nacht- u. Nebelaktion macht....
Bin trotzdem immer wieder beeindruckt, wie schnell Du Dich um alles kümmerst ... vielen Dank!!!
Unterstützt das Contenido-Wiki-Projekt: www.contenido-wiki.org!

ikusei - Wir lassen Ihre Projekte wachsen!

Antworten