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
 
Zuletzt bearbeitet:
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 :wink:
 
@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@
 
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:

http://www.hackerboard.de/hacks-crackmes/29284-exploitme-1-a.html
 
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
Danke, genau das meine ich! Ich werde es gleich testen, aber warum willst du einen RemoteThread erstellen, wenn der Shellcode schon im Speicher ist?
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:
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 :D
Aber wie soll ich den Shellcode danach ausführen?
mit freundlichen grüssen
@night@
 
Zuletzt bearbeitet:
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/library/ms680632(VS.85).aspx
[2] CreateRemoteThread() - http://msdn.microsoft.com/en-us/library/ms682437(VS.85).aspx
 
€dit: srry, ich bin doofff :D
ich hab den speicherbereich freigegeben bevor ich den Shellcode ausgeführt hatte...
Ihr seid spitze :P Endlich konnte ich meine Idee mit eurer Hilfe umsetzen:thumb_up:
mfg
@night@
 
Zuletzt bearbeitet:
Zurück
Oben