Hackerboard WikiHaboBlog

[HaBo]

 
(In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene.

Shellcode per MemoryWrite in Programm injizieren

Diskussion: Shellcode per MemoryWrite in Programm injizieren im Forum (In)security allgemein, in der Kategorie Security Area; Guten Tag. Mein Anliegen ist folgendes: ich habe mir mal angeguckt wie man Shellcode unter Windows schreibt... Jetzt würde ich ...

Antwort
Alt 15.02.10, 18:19   #1 (permalink)
 
Registriert seit: 25.12.09
@night@ Leistung: Z3
Likes: 0
Standard Shellcode per MemoryWrite in Programm injizieren


Guten Tag.
Mein Anliegen ist folgendes:
ich habe mir mal angeguckt wie man Shellcode unter Windows schreibt... Jetzt würde ich gerne meinen Shellcode über die Funktionen VirtaulAllocEx, etc in ein Programm injizieren (so ähnlich wie bei der Dll-Injection)
Ich hab auch schon nen bisschen was gecodet, aber leider befindet sich das Skript auf einem anderen Pc...
Kann mir bitte jemand die herangehensweise schildern? ich habe probiert den Shellcode stumpf in den Speicher zu schreiben, aber das ging nicht^^ (wie schon zu erwarten war)
Den Shellcode zu Integer zu konvertieren hab ich auch schon probiert(mit atoi)-.-
mfg
@night@
PS: Achja, ich benutze C++ mit dem GCC


Geändert von @night@ (15.02.10 um 20:51 Uhr)
@night@ ist offline   Mit Zitat antworten
Alt 19.02.10, 20:40   #2 (permalink)
 
Registriert seit: 07.03.08
90nop Leistung: Facit NTK
Likes: 0
Standard

Einfachste Variante:
Code:
    const char opc[]="your op code goes here";
    main(){
      int (*shell)();
      shell=opc;
      shell();
    }
Unter Win Vista/7 dürfte die DEP u.U. greifen, und die Ausführung des Codes verhindern
90nop ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 19.02.10, 20:53   #3 (permalink)
Themenstarter
 
Registriert seit: 25.12.09
@night@ Leistung: Z3
Likes: 0
Standard

@90NOP
Danke für die Antwort!!! Allerdings wollte ich fragen, ob es möglich ist und wenn wie, wie man den Shellcode in ein laufendes Programm schreiben kann. Natürlich läuft der Prozess auf meinem PC... Es geht mir darum ein Programm, so ähnlich wie bei der Dll-injection, meine Anweisungen ausführen zu lassen.
Außerdem benutze ich Windows XP.
mfg
@night@
@night@ ist offline   Mit Zitat antworten
Alt 19.02.10, 22:05   #4 (permalink)
 
Registriert seit: 07.03.08
90nop Leistung: Facit NTK
Likes: 0
Standard

Das oben gepostete war zum testen gedacht.

Deine Frage ist mir nicht ganz verständlich. i.d.R. Hat man ja einen Exploit (hier eben ein Bufferoverflow) der dann deinen Code ausführt.


Dein Zielprogramm verarbeitet irgendwelche äussere Eingaben, wenn diese unsauber eingelesen werden, es also zu einem Bufferoverflow kommen kann, kannst du dort deinen Shellcode reintricksen.


Einfach gezeigt:

Parameter a nimmt einen String von max 10 Zeichen entgegen.

a = "1234567890" + Shellcode //du lieferst ihm die 10 Zeichen - und ab dann hast du einen Bufferoverflow - und dein SHellcode wird in den ausführbaren Memorybereich geschrieben.


Suche nach Exploitmes, um das zu üben:

exploitme #1
90nop ist offline   Mit Zitat antworten
Alt 19.02.10, 23:00   #5 (permalink)
Member of Honour
 
Benutzerbild von xrayn
 
Registriert seit: 05.03.08
xrayn Leistung: Pentium IIIxrayn Leistung: Pentium IIIxrayn Leistung: Pentium IIIxrayn Leistung: Pentium IIIxrayn Leistung: Pentium III
Likes: 185
Standard

1. OpenProcess() um Handle auf den Zielprozess zu bekommen (mit Schreib- und den Rechten einen Thread zu starten)
2. VirtualAllocEx() Speicher im Zielprozess reservieren, wichtig, dass der reservierte Speicher ausfuehrbar ist
3. WriteProcessMemory() damit den Shellcode in den Zielprozess schreiben und
4. Mit CreateRemoteThread() den Code im Zielprozess ausfuehren
xrayn ist offline   Mit Zitat antworten
Alt 20.02.10, 16:38   #6 (permalink)
Themenstarter
 
Registriert seit: 25.12.09
@night@ Leistung: Z3
Likes: 0
Standard

@xrayn
Danke, genau das meine ich! Ich werde es gleich testen, aber warum willst du einen RemoteThread erstellen, wenn der Shellcode schon im Speicher ist?
Zitat:
4. Mit CreateRemoteThread() den Code im Zielprozess ausfuehren
Entschuldigung, aber ich bin wirklich noch nen Anfänger auf dem Gebiet und hab keine Ahnung wie ich das realiseren soll, den schon geschriebenen Shellcode auszuführen...
Den Rest hab ich schon ausprobiert. Dass heisst ich habe folgendes gemacht:
Zitat:
1. OpenProcess() um Handle auf den Zielprozess zu bekommen (mit Schreib- und den Rechten einen Thread zu starten)
2. VirtualAllocEx() Speicher im Zielprozess reservieren, wichtig, dass der reservierte Speicher ausfuehrbar ist
3. WriteProcessMemory() damit den Shellcode in den Zielprozess schreiben
€dit1: Ich galube ich habe jetzt eine idee, wie ich das machen könnte! Danke euch
Aber wie soll ich den Shellcode danach ausführen?
mit freundlichen grüssen
@night@

Geändert von @night@ (20.02.10 um 17:49 Uhr)
@night@ ist offline   Mit Zitat antworten
Alt 20.02.10, 18:27   #7 (permalink)
Member of Honour
 
Benutzerbild von xrayn
 
Registriert seit: 05.03.08
xrayn Leistung: Pentium IIIxrayn Leistung: Pentium IIIxrayn Leistung: Pentium IIIxrayn Leistung: Pentium IIIxrayn Leistung: Pentium III
Likes: 185
Standard

Zitat:
Danke, genau das meine ich! Ich werde es gleich testen, aber warum willst du einen RemoteThread erstellen, wenn der Shellcode schon im Speicher ist?
Naja, wenn du den Shellcode in deinen Zielprozess schreibst, soll der ja auch unter dem Kontext ausgefuehrt werden, ansonsten brauchst du den nicht erst in einen anderen Prozess zu schreiben. Damit der Code ausgefuehrt wird, musst du entweder mit SetThreadContext() [1] den IP des Zielprozesses auf deinen Code umlenken, was ich nicht empfehlen wuerde, da du dann erstmal saemtliche Register retten musst oder eben mit CreateRemoteThread() [2] im Zielprozess einen neuen Thread und gibst als Startadresse die Adresse an, an die du den Shellcode geschrieben hast.

Ich empfehle dir einfach mal die Dokumentation der MSDN zu lesen, dort steht alles was man braucht.

[1] SetThreadContext() - http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
[2] CreateRemoteThread() - http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
xrayn ist offline   Mit Zitat antworten
Alt 20.02.10, 18:48   #8 (permalink)
Themenstarter
 
Registriert seit: 25.12.09
@night@ Leistung: Z3
Likes: 0
Standard

€dit: srry, ich bin doofff
ich hab den speicherbereich freigegeben bevor ich den Shellcode ausgeführt hatte...
Ihr seid spitze Endlich konnte ich meine Idee mit eurer Hilfe umsetzen
mfg
@night@

Geändert von @night@ (20.02.10 um 22:41 Uhr)
@night@ ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Security Area » (In)security allgemein » Shellcode per MemoryWrite in Programm injizieren
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61