Danke Danke:  0
Dislikes Dislikes:  0
Ergebnis 1 bis 9 von 9

Thema: php mit gdb starten....

  1. #1

    Registriert seit
    24.07.13
    Danke (erhalten)
    0
    Gefällt mir (erhalten)
    3

    Standard php mit gdb starten....

    Anzeige
    hallo,
    ich lese mich gerade in serialize ein.
    Ziel der Geschichte ist:
    Ich lasse eine test.php mit folgendem inhalt ausführen:
    PHP-Code:
    class obj implements Serializable {
        private 
    $data;
        public function 
    __construct() {
            
    $this->data "Meine private-Daten";
        }
        public function 
    serialize() {
            return 
    serialize($this->data);
        }
        public function 
    unserialize($data) {
            
    $this->data unserialize($data);
        }
        public function 
    getData() {
            return 
    $this->data;
        }
    }

    $obj = new obj;
    $ser serialize($obj);

    var_dump($ser);

    $newobj unserialize($ser);

    var_dump($newobj->getData()); 
    Jetzt möchte ich den Speicher mit gdb untersuchen und den inhalt:Meine private-Daten wieder finden. Leider bekomme ich es nicht gebacken die php5 mit gdb zustarten.
    www.die-kunst-des-exploits.de --Buchaktualisierung--

  2. #2
    Moderator Avatar von bitmuncher
    Registriert seit
    30.09.06
    Danke (erhalten)
    130
    Gefällt mir (erhalten)
    1611

    Standard

    Bitte beschreibe genauer, wo dein Problem liegt:

    Code:
    bitmuncher@ktsSN ~ $ gdb --args /usr/bin/php /home/bitmuncher/test.php
    GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
    Copyright (C) 2014 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i586-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from /usr/bin/php...(no debugging symbols found)...done.
    (gdb) run
    Starting program: /usr/bin/php /home/bitmuncher/test.php
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/i386-linux-gnu/i686/cmov/libthread_db.so.1".
    [New Thread 0xf5583b40 (LWP 16158)]
    class obj implements Serializable {
        private $data;
        public function __construct() {
            $this->data = "Meine private-Daten";
        }
        public function serialize() {
            return serialize($this->data);
        }
        public function unserialize($data) {
            $this->data = unserialize($data);
        }
        public function getData() {
            return $this->data;
        }
    }
    
    $obj = new obj;
    $ser = serialize($obj);
    
    var_dump($ser);
    
    $newobj = unserialize($ser);
    
    var_dump($newobj->getData());
    [Thread 0xf5583b40 (LWP 16158) exited]
    [Inferior 1 (process 16119) exited normally]
    (gdb)
    oder mit Übergabe des Parameters/Skripts im GDB:

    Code:
    bitmuncher@ktsSN ~ $ gdb /usr/bin/php
    GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
    Copyright (C) 2014 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i586-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from /usr/bin/php...(no debugging symbols found)...done.
    (gdb) run test.php
    Starting program: /usr/bin/php test.php
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/i386-linux-gnu/i686/cmov/libthread_db.so.1".
    [New Thread 0xf5583b40 (LWP 15929)]
    class obj implements Serializable {
        private $data;
        public function __construct() {
            $this->data = "Meine private-Daten";
        }
        public function serialize() {
            return serialize($this->data);
        }
        public function unserialize($data) {
            $this->data = unserialize($data);
        }
        public function getData() {
            return $this->data;
        }
    }
    
    $obj = new obj;
    $ser = serialize($obj);
    
    var_dump($ser);
    
    $newobj = unserialize($ser);
    
    var_dump($newobj->getData());
    [Thread 0xf5583b40 (LWP 15929) exited]
    [Inferior 1 (process 15925) exited normally]
    Natürlich müsstest du entsprechende Breakpoints setzen um den Speicher an der gewünschten Stelle zu untersuchen.

    Wobei bei PHP eigentlich auch ltrace ausreichend sollte, da das Skript sowieso per write() auf eine FD geschrieben wird:

    Code:
    ...
    fopen64("/home/bitmuncher/test.php", "rb")       = 0x9ac36c8
    ...
    memcpy(0xf6b9d836, "text/html; charset=UTF-8\0", 25) = 0xf6b9d836
    write(1, "class obj implements Serializabl"..., 497class obj implements Serializable {
        private $data;
        public function __construct() {
            $this->data = "Meine private-Daten";
        }
        public function serialize() {
            return serialize($this->data);
        }
        public function unserialize($data) {
            $this->data = unserialize($data);
        }
        public function getData() {
            return $this->data;
        }
    }
    
    $obj = new obj;
    $ser = serialize($obj);
    
    var_dump($ser);
    
    $newobj = unserialize($ser);
    
    var_dump($newobj->getData());
    ) = 497
    fflush(0xf6dc6ac0)                               = 0
    free(0x99d0d90)                                  = <void>
    ...

    Bitmuncher's TechBlog - My Homepage
    Denken ist manchmal so, als würde man wissen auskotzen.

    Neue Beiträge im Habo via Twitter - Das HaBo auf FB

  3. Gefällt mir SchwarzeBeere, Chromatin liked this post
  4. #3

    Registriert seit
    15.05.14
    Danke (erhalten)
    17
    Gefällt mir (erhalten)
    100

    Standard

    Ich glaube du schießt über das Ziel hinaus.
    Du willst nicht den Interpreter debuggen sondern das Skript.
    d.h. sollte xdebug das Mittel deiner Wahl sein.
    LG

    Fluffy
    - Politische Korrektheit ist der Tod einer Gesellschaft -
    - Niemand hat das Recht NICHT angefressen zu sein -
    - Don't be fooled... Google is evil.... and so is Alphabet -

  5. #4

    Registriert seit
    24.07.13
    Danke (erhalten)
    0
    Gefällt mir (erhalten)
    3

    Standard

    thx all,
    ich setze nach dem ...
    PHP-Code:
    $ser serialize($obj); 
    ein break.
    Dann möchte ich gerne den Speicher auslesen und folgendes sehen:
    ... Meine private-Daten... in HEX

    ... ungefähr wie in dem Beispiel:
    c++ - buffer overflow that shouldnt happen (?) - Stack Overflow

    in dem Beispiel ist es einfach, man hat nur eine .c Datei :-)
    www.die-kunst-des-exploits.de --Buchaktualisierung--

  6. #5
    Moderator
    Registriert seit
    30.06.08
    Danke (erhalten)
    25
    Gefällt mir (erhalten)
    816

    Standard

    PHP: debug_backtrace - Manual könnte auch interessant für dich sein.

    Mit einem Programm wie in C kannst du das nicht wirklich vergleichen da PHP eine echte Interpretersprache ist.
    So gesehen könnte man sagen dass ein PHP Skript die Konfiguration darstellt, die das Programm (Interpreter) verarbeitet.

    Vermutlich ist aber var_dump das, was du wirklich suchst. Und wenn du es unbedingt willst, kannste das ja auch in HEX ausgeben (warum auch immer).
    Wenn ein Gesetz nicht gerecht ist, dann geht die Gerechtigkeit vor dem Gesetz!

    Habo Blog - http://blog.hackerboard.de/

  7. #6

    Registriert seit
    24.07.13
    Danke (erhalten)
    0
    Gefällt mir (erhalten)
    3

    Standard

    ok,
    ich glaube ich habe mich vielleicht falsch ausgedrückt.
    Das ist mein Ziel:
    INulledMyself: Exploiting memory corruption bugs in PHP (CVE-2014-8142 and CVE-2015-0231) Part 1: Local Exploitation: Security for mere mortals

    ich habe ubuntu 15,04

    1.ten:aus dem link geht vor:
    gdb /usr/bin/ndphp/bin/./php

    ndphp ?

    2.ten: laut link setze ich einen break in var_unserializer.c:337
    ich habe php als online installiert verwendet, ich brauche jetzt den offline installier?

    3.ten:
    was ist cphp?


    HTML-Code:
    root@tomycat-OptiPlex-GX620:~# gdb /usr/bin/php
    GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9
    Copyright (C) 2015 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from /usr/bin/php...(no debugging symbols found)...done.
    (gdb) b var_unserializer.c:337
    Es ist keine Symboltabelle geladen. Benutzen Sie den »file«-Befehl.
    Make breakpoint pending on future shared library load? (y or [n]) y
    Haltepunkt 1 (var_unserializer.c:337) anstehend.
    (gdb) Quit
    (gdb) Quit
    (gdb) 
    www.die-kunst-des-exploits.de --Buchaktualisierung--

  8. #7
    Moderator
    Registriert seit
    30.06.08
    Danke (erhalten)
    25
    Gefällt mir (erhalten)
    816

    Standard

    1.ten:aus dem link geht vor:
    gdb /usr/bin/ndphp/bin/./php

    3.ten:
    was ist cphp?
    Möglicherweise hat er sich PHP Versionen gebaut mit irgendwelchen Modifikationen/Prints ..

    Aber wieso fragst du ihn nicht einfach statt uns?

    Reading symbols from /usr/bin/php...(no debugging symbols found)...done.
    Du musst dein PHP Interpreter schon selber bauen (code laden, compilieren) - mit Debuginformationen (Compileroptionen)..
    Wenn ein Gesetz nicht gerecht ist, dann geht die Gerechtigkeit vor dem Gesetz!

    Habo Blog - http://blog.hackerboard.de/

  9. #8

    Registriert seit
    24.07.13
    Danke (erhalten)
    0
    Gefällt mir (erhalten)
    3

    Standard

    thx,
    ich wollte ihm gerne eine mail schreiben, er gibt aber keine an. In wie fern selber bauen? Den Quellcode abändern oder php offline installieren mit make.
    www.die-kunst-des-exploits.de --Buchaktualisierung--

  10. #9
    Moderator
    Registriert seit
    30.06.08
    Danke (erhalten)
    25
    Gefällt mir (erhalten)
    816

    Standard

    Anzeige
    Den Quellcode abändern oder php offline installieren mit make.
    Wenn du dich ans debuggen von solchen Dingern machst, musst du in jedem Fall hier und dort mal im Code herumfummeln. Alleine schon um ueberall irgendwas auszuprinten.
    Also Quellcode laden und dann (offline ..) Makefile anpassen und selbst bauen.
    Debug-Infos gibt's mit "-g".



    ich wollte ihm gerne eine mail schreiben, er gibt aber keine an.
    Noch nie was von WHOIS gehört?
    Er benutzt offenbar den google Privacy Service: krtpbq21cln9@contactprivacy.emailAnsonsten ist unter seinem Beitrag ein unübersehbares Kommentarformular..
    Wenn ein Gesetz nicht gerecht ist, dann geht die Gerechtigkeit vor dem Gesetz!

    Habo Blog - http://blog.hackerboard.de/

Ähnliche Themen

  1. Rechner starten
    Von Datonate im Forum Windows
    Antworten: 1
    Letzter Beitrag: 21.02.04, 16:52
  2. Service per ssh starten!
    Von atomklo im Forum Linux/UNIX
    Antworten: 2
    Letzter Beitrag: 30.11.03, 04:47
  3. PHP Programme starten
    Von antcool im Forum Internet Allgemein
    Antworten: 4
    Letzter Beitrag: 01.11.03, 10:06
  4. Starten Des Pc
    Von B52 im Forum Windows
    Antworten: 4
    Letzter Beitrag: 17.10.03, 18:51
  5. Programm automatisch mit dem Starten des iexp. starten
    Von SPaRXLi im Forum Code Kitchen
    Antworten: 6
    Letzter Beitrag: 19.12.01, 14:18

Berechtigungen

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