BlackBoard » Computerecke » Netzwerke/Telekommunikation » HackIt Stack Overflow - Hackit » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Stack Overflow - Hackit
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Stack Overflow - Hackit       Zum Anfang der Seite springen

Hi,

ich veranstalte hier mal ein Hackit der etwas anderen Art.
Ich habe ein kleines Konsolenprogramm unter Windows gecodet. Dieses Programm beinhaltet einen "Programmierfehler", den man in Form eines Stack Overflows nutzen kann um eigenen Code auszuführen.

Ziel ist es das Programm gezielt zu manipulieren, so daß es eigenen Code ausführt. Das kann das Ausgeben einer eigenen Meldung sein oder auch was völlig anderes. Laßt eurer Kreativität freien Lauf. Wenn das Programm dabei abstürzt ist das egal. Hauptsache ist, daß es vor seinem Ableben noch den injizierten Code ausführt.

Noch einmal im Klartext: Es geht nicht darum das Programm zu patchen, sondern darum, das Programm mittels gezielter Parameterübergabe zum Ausführen von eigenem Code zu bringen. Mit anderen Worten: Entwickelt einen Exploit.

Ich weiß, keine leichte Aufgabe. Bei Bedarf kann ich ja weitere Hilfestellungen geben. Einfach die angehängte Datei runterladen und in "hackme.exe" umbenennen. Bei Bedarf kann ich auch den Quellcode posten. Die Sache wird dadurch aber nicht wesentlich leichter werden, da ich in ASM code smile

Viel Spaß
--------------------------
Hall of Fame:

1. CDW Respekt
2.
3.

Dateianhang:
txt hackme.txt (3 KB, 59 mal heruntergeladen)

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Compuholic: 01.12.2002 10:27.

23.11.2002 21:47 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
Zirias Zirias ist männlich
BlackBoarder


images/avatars/avatar-450.jpg

Dabei seit: 11.09.2002
Beiträge: 1.217
Herkunft: /dev/urandom

      Zum Anfang der Seite springen

Ui. Verdammt. Jetzt erfährt die Welt doch noch, dass ich kein IA32-Assembler kann *g* Oder darf man auch irgendn fertigen Shellcode oder was auch immer nehmen? *g*

Greets, Ziri

__________________
palmen-it.de
GCS/MU d+(++) s+: a C++ UL++++ P+++$ L+++ !E W+++ N+ o? K? w++$ !O M-- V?
PS+ PE++ Y+ PGP++ t !5 X- R- tv b+ DI++ D+ G e++ h r y+
23.11.2002 22:01 Zirias ist offline Homepage von Zirias Beiträge von Zirias suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

Klar darfst Du fertigen Shellcode nehmen, wenn er sich auf das Programm anwenden läßt.
Nur für das Debuggen wirst Du ASM wohl brauchen.

[edit]
Aber der Exploit sollte schon selbst geschrieben sein. Kannste ja in C oder ähnlichem machen und den Shellcode dann einfügen.
[/edit]

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Compuholic: 23.11.2002 22:07.

23.11.2002 22:06 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

ich bin gerade am überlegen,wie man hexcode 00 als argument übergibt...., ansonsten schon was geschrieben (mit delta offset usw, wenn es klappt, müsste eine Datei im selben verzeichniss erstellt werden...)
24.11.2002 14:52 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

Tipp: Probiers mir einer XOR-Codierung. Da fliegen alle 00s raus. Die kannst Codierung kannstDu nach dem Sprung wieder umkehren.

[edit]Weiß eigentlich jemand wie ich einem Programm bestimmte Hex-Zahlen übergeben kann. Die Werte als ASCII-Zeichen zu übergeben funktioniert nicht, da die Werte "Extended ASCII" wären. Also fällt "Alt + ASCII-Code" leider aus.
Ich brauch das nämlich um den Fehler in meinem Exploit rauszufinden. Dazu müßte ich das Programm debuggen und ich kann OllyDbg die Parameter nur als ASCII übergeben.
[/edit]

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Compuholic: 24.11.2002 18:38.

24.11.2002 17:21 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

das überleg ich ja die ganze Zeit, das problem ist, ich hab bis jetz noch nie einen Exploit geschrieben... die schwachstelle rauszufinden war ganz einfach, ich hattte ja den Quellcode (ollydbg großes Grinsen )... aber wie übergebe ich schon mal die richtige rücksprungadresse ist für mich ein problem,da man ja über ASCII keine 00h übergeben kann... dürfte man dann ein proggie schreiben, was dieses Hackit aufruft (mit parameterübergabe)? Wenn ja, wäre das nächste problem dass die Zeichen nach dem therminierungsbyte nicht kopiert werden und man deshalb irgendwo den Heap anspringen muss (wo man die originalparameter übergeben hat... naja und der variirt ja...)

PS: zumindest dein Proggie beenden kann ich mit parameterübergabe (indem ich die Exitprocess adresse übergebe)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDW: 24.11.2002 19:27.

24.11.2002 19:17 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

Du brauchst doch gar nicht 00 als Rücksprungadresse zu übergeben. 00 ist das "most significant byte" befindet sich also auf der niedrigsten Speicherzelle. Der Stack wächst von den hohen Speicherstellen zu den niedrigen.

Es steht aber schon 00 auf dem "most signifikant byte". Das brauchst Du gar nicht zu überschreiben. Häng einfach als letztes Zeichen 00 an. Das Byte wird zwar dann nicht mitkopiert, das macht aber auch nichts, weil der richtige Wert sowiso schon drinsteht.


Bei meinem Problem hilft mir die Parameterübergabe über ein Programm leider nicht, weil ich das hackme ja mit den übergebenen Werten debuggen will.
24.11.2002 20:25 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

nein,ich wollte ja den ganzen code als parameter übergeben...die rücksprungadresse wird ja "rückwärts" eingelesen, muss also andersum auf dem Stack abgelegt sein und wenn man mehr Code reinschreiben will als nur die adresse (da DWORD) musste man irgendwas machen, damit es als ASCII übergen kann... ansonsten, wenn man das ganze local machen würde, würde ich einfach einen jmp auf meinen speicherbereich machen, wo mein Code steht..


das hatte ich schon früh raus: einfach mal
mit hackme.exe fuellzeichenfuellzeichenW@
starten... dann beendet man das programm vorzeitig...
24.11.2002 20:37 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

Ich glaube ich habe das mit der Rücksprungadresse hingekriegt. Ich hatte das so geplant, daß Du Die Rückprungadresse mit der Anfangsadresse des Shellcodes (den ich anstelle der Füllzeichen eingebe) überschreibst. Momentan läuft das ganze bei mir noch auf eine Speicherschutzverletzung heraus, weil ich als Füllzeichen (bzw. Shellcode) nur NOPs als Dummy übergeben habe. Der Prozessor arbeitet halt solange NOPs ab bis es auf einen anderen Wert im Stack trifft, den er als Opcode interpretiert und dann auf wilde Speicherbereich zugreifen will.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Compuholic: 24.11.2002 21:19.

24.11.2002 20:58 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

das hab ich mir ungefähr auch gedacht, theoretisch müsste es ja auch klappen, nur in der praxis happert es... ich habe in Olly geschafft, in den Speicher meinen code reinzuschreiben und auszuführen... nur kann ich den nicht als parameter übergeben (bzw. ich weiß nicht, wie das geht...) ansonsten hab ich schon ein proggie gecodet, das einen beliebigen Code als Binärdatei abspeichert, die dann einfach herauskopiert weren kann... die Adresse, die hab ich ja auch schon... wie gesagt, das ganze ist ein Übergabeproblem
24.11.2002 21:52 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

ich kann die Datei nicht öffnen.

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
24.11.2002 22:08 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

@CDW: Mit WinExec funktioniert es. Du übergibst einfach den präparierten String. Momentan hab ich noch Probleme mit dem Shellcode. Die Adressierung der Variablen und der API-Calls ist knifflig.

@Devil: Hast Du die Dateiendung in .exe geändert? Ich habe die Datei, damit ich sie anhängen kann als .txt gespeichert.
24.11.2002 22:48 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

ok, das wollte ich nur wissen, weil ichs schon mit createprocess versucht hab,mit ShellExecute und mit bat file auch...
mit winexec auch, aber da muss ich das wohl falsch gemacht haben... hab noch mal die C't 21 (01) rausgekramt und nachgelesen...
und das mit:
hackme.exe fuellzeichenfuellzeichenW@
ist kein bloßes Wortspiel großes Grinsen (trifft sich ganz gut smile )

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDW: 25.11.2002 16:18.

25.11.2002 16:18 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

hab aufgegeben, hab noch nicht genug wissen dafür... es beginnt(und endet) mit der übergabe... wenn ich die adresse so übergeb:
ffffff00,coderbala
dann wird die kommandozeile nach 00 nicht kopiert(auch die bei der übergabe, bei mir landet es ungefähr an 1325a4, ich sehe die füllzeichen, und die rücksprungsadresse bis zeichen 00, dann ist schlüss)...
ansonsten wird nicht gesprungen...
xor verküpfung usw waren kein problem... ein bisschen probleme hat die ausführung der funktionen bereitet, die hab ich gelöst, in dem ich die Funktionen in der Kernel32.dll direkt anspringe...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDW: 25.11.2002 18:59.

25.11.2002 18:56 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
[TH] [TH] ist männlich
»®€ªN¡M¡€RT«


images/avatars/avatar-564.jpg

Dabei seit: 24.11.2001
Beiträge: 424

      Zum Anfang der Seite springen

@Devil <Rechtsklick>-<Ziel Speichern unter...> und dann hängst du an den Dateinamen (Hackme) '.exe' also Hackme.exe!

__________________
___________________________

:::::::::::::::::::::::::::::::::::::
.....we gonna get out of this sick society! no one who leads and no one who follows......
:::::::::::::::::::::::::::::::::::::
25.11.2002 19:13 [TH] ist offline E-Mail an [TH] senden Homepage von [TH] Beiträge von [TH] suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

So ich hätte es dann soweit. Das einzige Problem an meinem Exploit ist, daß der letzte API-Call der die Meldung ausgeben soll (noch) nicht funkioniert. Aber das kriege ich schon noch hin.

Ich weiß ja nicht, woran es bei euch liegt, daß sowenig mitmachen. Wo liegen die Probleme?

Ich gebe zu, daß ich das ich den Puffer für den Shellcode etwas klein bemessen habe. Ich habe beim Programmieren von meinem Exploit gemerkt, daß ich immer wieder Platzprobleme bekommen habe. Daher hat er einiges am Flexibilität eingebüßt, und trotzdem belegt er jetzt die volle Puffergröße. (So ist beispielsweise das StdOut-Handle hardcoded. Das hätte nicht sein müssen, wenn ich nur ein paar Bytes mehr Platz gehabt hätte).

Wo liegen eure Probleme? Braucht Ihr mehr Hinweise? Braucht Ihr den Shellcode, weil ihr kein ASM könnt?
Soll ich ein Programm mit größerem Puffer online stellen?

@CDW: Schau Dir mal z.B. Folgendes im Debugger an: overflow <Fuellzeichen>hhhf wobei "hhhf" die Bytes darstellen sollen, die die Rückprungadresse überschreiben. Du wirst feststellen, daß das "f" an die Stelle der "00" geschrieben wird. Das heißt doch, daß Du Dich um dieses Byte gar nicht kümmern brauchst, weil es sowiso schon dasteht. Der Puffer wird von den niedrigen zu den hohen Adressen gefüllt. Also setzt Du die Rücksprungadresse auf den Anfang des Puffers.
Dann darfst Du natürlich keine Füllzeichen in den Buffer reinschreiben sondern den Shellcode.
Das letzte Byte was kopiert wird ist also das Byte vor dem NULL-Byte der Rückprungadresse. Mehr braucht es auch gar nicht smile
26.11.2002 22:57 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
Zirias Zirias ist männlich
BlackBoarder


images/avatars/avatar-450.jpg

Dabei seit: 11.09.2002
Beiträge: 1.217
Herkunft: /dev/urandom

      Zum Anfang der Seite springen

Also was mich angeht: Ich kann kein IA32-Assembler. Ich kann schon abschätzen, dass das ne größere Sache wäre, deshalb hab ichs noch garnicht angepackt, ich brauche erstmal mehr Zeit dazu smile

Und als letztes kommt dazu, dass ein Windows-Binary bei mir keine hohe Motivation bringt, weil ich noch nichtmal wirklich WIndows installiert habe, nur in vmware smile Aber das wird wohl bei den wenigsten der Fall sein Augenzwinkern

Habe jedenfalls vor, es mir anzuschauen, aber dann muss ich mich mit genug Zeit dransetzen *g*

Greets, Ziri

__________________
palmen-it.de
GCS/MU d+(++) s+: a C++ UL++++ P+++$ L+++ !E W+++ N+ o? K? w++$ !O M-- V?
PS+ PE++ Y+ PGP++ t !5 X- R- tv b+ DI++ D+ G e++ h r y+
26.11.2002 23:58 Zirias ist offline Homepage von Zirias Beiträge von Zirias suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

Na dann werd ich mal wenigstens schon mal den Shellcode veröffentlichen, damit hier mal ein bisserl Schwung in die Bude kommt.

char shellcode[] = "\x8B\xF4\x33\xC9\xB1\x2E\x4E\xE2\xFD\xB1\x50\x80\x34\x31\x88
\xE2\xFA\xEB\x07\x48\x49\x00\x00\x00\x00\x00\x83\xEC\x40\x6A
\x00\x68\x99\xFF\x12\x00\x6A\x07\x68\x99\xFF\x12\x00\x6A\x07
\xB8\xDA\x10\x40\x00\xFF\xD0\x90\x90\x90\x90\x90";

Hierbei wäre zu erwähnen, daß der Shellcode ab shellcode[17] noch mit 0x88 zu XORn ist. Das ist notwendig, damit die NULL-Bytes rausfliegen.
Es kann sein, daß der Shellcode auf anderen Rechner nicht ganz so schön läuft wie auf meinem. Wie schon erwähnt mußte ich aufgrund des Fehlenden Platzes im Puffer einige Befehle rausnehmen. Dadurch hat die Flexibilität und die Portabilität gelitten. Aber probiert es selbst.

Ich denke ich werde das Ganze zu ca. 1 Woche laufen lassen. Sollte sich bis dahin immer noch keiner finden, der Zeit/Lust/Skill hat. Werde ich dann die Lösung (mit ausführlicher Erklärung veröffentlichen).

Viel Spaß noch

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Compuholic: 27.11.2002 18:27.

27.11.2002 18:25 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

also (voller Stolz smile ) kann ich sagen, dass ich die überlegungen auch angestellt hab, nur passte mir der schmale buffer wirklich nicht so gut hin... da heißt, der Schellcode darf nur so groß wie der buffer sein... das sind ja schätzungsweise 30 Zeichen... damit kann man nicht so viel anstellen... du meinst außerdem XORen, muss dann aber nicht eine Routine im Buffer den code dann entschlüsseln? das sind ja nochmal mindestens die hälfte weg (muss mal die stringbefehle nachschlagen smile )

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDW: 27.11.2002 18:56.

27.11.2002 18:55 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Compuholic Compuholic ist männlich
knows where he wants to go tomorrow


images/avatars/avatar-552.jpg

Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München

Themenstarter Thema begonnen von Compuholic
      Zum Anfang der Seite springen

Das ist richtig:
Fast die Hälfte des Buffers geht dafür drauf das Stackframe, das durch "leave" zerstört wurde wiederherzustellen und die XOR-Codierung wieder aufzuheben.
Dann kommen noch die notwendigen Strings und Variablen dazu.
Effektiv bleiben mir nur noch 26 Bytes für Programmcode übrig (gut geschätzt). Das ist grad mal 1 API-Call mit Parametern.
27.11.2002 19:04 Compuholic ist offline E-Mail an Compuholic senden Homepage von Compuholic Beiträge von Compuholic suchen
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Computerecke » Netzwerke/Telekommunikation » HackIt Stack Overflow - Hackit

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH