|
Verfasser |
Nachricht |
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
Exploit Hunting
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 19:31 von SkyleN.
|
|
20.05.2014 18:17 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: Exploit Hunting
Darf ich einmal fragen wieso du die Kontrolle über den 2. Argument Register haben willst?
Die PSP hier crasht ja nur, da 0x19D24B64 keine gültige Adresse ist, und versucht von eben dieser ungültigen Adresse ein Word zu laden.
Wenn du einmal einen Disassembly Code Posten könntest, könnten wir rausfinden wieso das die PSP Crasht.
Also einen Exploit wirst du daraus nicht machen können, da du dafür die "Return-Address" Register ($ra) überschreiben müsstest!
EDIT:
2. Ich habe sehr oft gelesen das man in dem Spielernamen nach Crash´s suchen soll...
Warum eigentlich?... Ich hab einfach irgendwo im Savegame ein paar "AAAAAAAAA" rein gehämmert und geguckt was passiert.
Ist es überhaupt möglich Exploits auf diese Weise zu finden?
Thx im voraus!
Der Spielername wird während der Ausführung in einen Buffer im RAM abgelegt. Dieser Buffer hat aber eine bestimmte Größe. Ein String wiederum endet erst bei einem Nullbyte. Läd man einen zu langen String in den Buffer läuft dieser über (Buffer Overflow). Dadurch zerstörst du den Stack und überschreibst die "Return-Address", also das $ra Register. Nach Ende einer bestimmten Funktion wird einfach zu der Return-Address gesprungen. Durch einen Überlangen String erzeugst du eben einen Buffer Overflow und wenn das passiert kannst du eben auf deine eigene Return Adresse springen. Dadurch kannst du unsignierten Code ausführen, aber eben nur Usermode.
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 18:47 von dx3m.
|
|
20.05.2014 18:32 |
|
Folgende User bedanken sich: |
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
hmm schade, hab ich wohl was falsch verstanden
und ja ich kann den code posten
EDIT:
hir ist der code:
0x0883E194: 0x34110000 '...4' - li $s1, 0x0
0x0883E198: 0xAE11009C '....' - sw $s1, 156($s0)
0x0883E19C: 0x8FB00000 '....' - lw $s0, 0($sp)
0x0883E1A0: 0x8FB10004 '....' - lw $s1, 4($sp)
0x0883E1A4: 0x8FB20008 '....' - lw $s2, 8($sp)
0x0883E1A8: 0x8FB3000C '....' - lw $s3, 12($sp)
0x0883E1AC: 0x8FB40010 '....' - lw $s4, 16($sp)
0x0883E1B0: 0x8FBF0014 '....' - lw $ra, 20($sp)
0x0883E1B4: 0x03E00008 '....' - jr $ra
0x0883E1B8: 0x27BD0020 ' ..'' - addiu $sp, $sp, 32
0x0883E1BC: 0x8C860098 '....' - lw $a2, 152($a0)
0x0883E1C0: 0x00052880 '.(..' - sll $a1, $a1, 2
0x0883E1C4: 0x00C52821 '!(..' - addu $a1, $a2, $a1
0x0883E1C8: 0x8CA50000 '....' - lw $a1, 0($a1)
0x0883E1CC: 0x03E00008 '....' - jr $ra
0x0883E1D0: 0xAC85009C '....' - sw $a1, 156($a0)
0x0883E1D4: 0x03E00008 '....' - jr $ra
0x0883E1D8: 0x8C82009C '....' - lw $v0, 156($a0)
0x0883E1DC: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16
0x0883E1E0: 0xAFB00000 '....' - sw $s0, 0($sp)
0x0883E1E4: 0xAFB10004 '....' - sw $s1, 4($sp)
0x0883E1E8: 0x00808825 '%...' - move $s1, $a0
0x0883E1EC: 0x00A08025 '%...' - move $s0, $a1
0x0883E1F0: 0xAFBF0008 '....' - sw $ra, 8($sp)
0x0883E1F4: 0x0E2B2804 '.(+.' - jal 0x08ACA010
0x0883E1F8: 0x262400AC '..$&' - addiu $a0, $s1, 172
0x0883E1FC: 0x02002025 '% ..' - move $a0, $s0
0x0883E200: 0x0E2229E0 '.)".' - jal 0x0888A780
0x0883E204: 0x02202825 '%( .' - move $a1, $s1
0x0883E208: 0x8FB00000 '....' - lw $s0, 0($sp)
0x0883E20C: 0x8FB10004 '....' - lw $s1, 4($sp)
0x0883E210: 0x8FBF0008 '....' - lw $ra, 8($sp)
0x0883E214: 0x03E00008 '....' - jr $ra
0x0883E218: 0x27BD0010 '...'' - addiu $sp, $sp, 16
0x0883E21C: 0x03E00008 '....' - jr $ra
0x0883E220: 0x8C8200C0 '....' - lw $v0, 192($a0)
0x0883E224: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16
0x0883E228: 0xAFBF0000 '....' - sw $ra, 0($sp)
0x0883E22C: 0x0E2B2771 'q'+.' - jal 0x08AC9DC4
0x0883E230: 0x24840088 '...$' - addiu $a0, $a0, 136
0x0883E234: 0x8FBF0000 '....' - lw $ra, 0($sp)
0x0883E238: 0x03E00008 '....' - jr $ra
0x0883E23C: 0x27BD0010 '...'' - addiu $sp, $sp, 16
0x0883E240: 0x03E00008 '....' - jr $ra
0x0883E244: 0x24820088 '...$' - addiu $v0, $a0, 136
0x0883E248: 0x27BDFFE0 '...'' - addiu $sp, $sp, -32
0x0883E24C: 0xAFB00000 '....' - sw $s0, 0($sp)
0x0883E250: 0xAFB20008 '....' - sw $s2, 8($sp)
0x0883E254: 0xAFB3000C '....' - sw $s3, 12($sp)
0x0883E258: 0x00809825 '%...' - move $s3, $a0
Crash line:
0x0883E1C8: 0x8CA50000 '....' - lw $a1, 0($a1)
mein Gehirn sagt "lw" = "load word"
und "jr ra" ist kurz nach dem Crash. Mein Gehirn sagt das ist gut
Der Spielername wird während der Ausführung in einen Buffer im RAM abgelegt. Dieser Buffer hat aber eine bestimmte Größe. Ein String wiederum endet erst bei einem Nullbyte. Läd man einen zu langen String in den Buffer läuft dieser über (Buffer Overflow). Dadurch zerstörst du den Stack und überschreibst die "Return-Address", also das $ra Register. Nach ende einer bestimmten funktion wird einfach zu der Return-Address gesprungen.
aber es kann auch funktionieren wenn ich "AAAAAA" irgendwo rein schmeiße? ... Ich muss nur glück haben un ra$ treffen, richtig? ...
aber es muss doch auch noch andere Wege geben an $ra zu kommen.
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 19:21 von SkyleN.
|
|
20.05.2014 18:41 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: Exploit Hunting
Du kannst 256 Bytes mit einen A ins Savegame pumpen.
Wenn du einen Crash hast und bei dem "Return-Address" Register "0x41414141" steht dann du schon Gewonnen. Sonst hast du keine Chance.
Wie gesagt, die PSP crasht eben beim LoadWord weil die Adresse ungültig ist woher er das Word laden will. Ausserdem hat das LoadWord(lw) und JmpReg (jr) keinen zusammenhang.
|
|
20.05.2014 19:11 |
|
Folgende User bedanken sich: |
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
Du kannst 256 Bytes mit einen A ins Savegame pumpen.
Wenn du einen Crash hast und bei dem "Return-Address" Register "0x41414141" steht dann du schon Gewonnen. Sonst hast du keine Chance.
Wie gesagt, die PSP crasht eben beim LoadWord weil die Adresse ungültig ist woher er das Word laden will. Ausserdem hat das LoadWord(lw) und JmpReg (jr) keinen zusammenhang.
Ich erinnere mich das hier gelesen zu haben:
wenn man einen Register in einer Crashline kontrolliert, und nach dem Crash zu $ra gesprungen wird, ist der Crash zu 99% exploitable.
...wenn du möchtest kann ich dir per PM den Link zu dem Tut. schicken
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 19:19 von SkyleN.
|
|
20.05.2014 19:18 |
|
|
|
fkrone
*meow*
Beiträge: 3.421
Gruppe: Super Moderator
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 5342
|
RE: Exploit Hunting
Du kannst 256 Bytes mit einen A ins Savegame pumpen.
Wenn du einen Crash hast und bei dem "Return-Address" Register "0x41414141" steht dann du schon Gewonnen. Sonst hast du keine Chance.
Wie gesagt, die PSP crasht eben beim LoadWord weil die Adresse ungültig ist woher er das Word laden will. Ausserdem hat das LoadWord(lw) und JmpReg (jr) keinen zusammenhang.
Ich erinnere mich das hier gelesen zu haben:
wenn man einen Register in einer Crashline kontrolliert, und nach dem Crash zu $ra gesprungen wird, ist der Crash zu 99% exploitable.
...wenn du möchtest kann ich dir per PM den Link zu dem Tut. schicken
Das alles ist ja schön und gut. Aber ich erkläre dir einfach mal was hier passiert:
Du versuchst von einer ungültigen Adresse etwas in $a1 zu schreiben. Schön und gut. Würde es normal durch laufen, so springst du danach auf die Adresse, die in $ra steht.
Damit hier etwas exploitable ist müsstest du schon so etwas wie
oder so was danach haben (wusste auf die Schnelle nicht die Syntax vom Pseudobefehl move). Aber da du maximal etwas in $a3 machen kannst und nicht beeinflussen kannst, wohin gesprungen wird, kannst du damit nix anfangen.
Und du kannst in der Hinsicht dx3m und mir trauen. Er ist jemand, den ich was MIPS angeht sehr schätze und ich hatte dieses Semester im Studium MIPS
Edit: kleine Verwirrung. Bin wohl etwas zu müde ...
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 19:38 von fkrone.
|
|
20.05.2014 19:23 |
|
Folgende User bedanken sich: |
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
Das alles ist ja schön und gut. Aber ich erkläre dir einfach mal was hier passiert:
Du versuchst von einer ungültigen Adresse etwas in $a1 zu schreiben. Schön und gut. Würde es normal durch laufen, so springst du danach auf die Adresse, die in $ra steht.
Damit hier etwas exploitable ist müsstest du schon so etwas wie
oder so was danach haben (wusste auf die Schnelle nicht die Syntax vom Pseudobefehl move). Aber da du maximal etwas in $a1 machen kannst und nicht beeinflussen kannst, wohin gesprungen wird, kannst du damit nix anfangen.
Und du kannst in der Hinsicht dx3m und mir trauen. Er ist jemand, den ich was MIPS angeht sehr schätze und ich hatte dieses Semester im Studium MIPS
Naaaguuuut
Kann ich jetzt unabhängig davon das am Anfang der Register $a3 den Crash verursacht, an einer anderen Stelle im Savegame nach einem Ort suchen, mit dem ich $a1 kontrollieren kann?
und was meint ihr dazu?
(sry für den Doppelpost, würde das gerne beheben, kann ich aber leider nicht )
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 19:40 von SkyleN.
|
|
20.05.2014 19:30 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: Exploit Hunting
Vergiss die Argument-Register!
Such dir ein Spiel wo man Namen eingeben kann. Und versuch das du einfach ein paar Zeichen anhängst. Auf wololo gibt es ein Tutorial wie du von 0 zum Exploit kommst. Musst aber berücksichtigen das du erstmal das richtige Spiel finden.
Kleiner Tipp:
Such im PSN Store nach Mini's. Da gibt es einige Spiele die unausreichend in der Sicherheit sind.
Brauchst nur das nötige Kleingeld und den richtigen Riecher.
Wirst schon was finden.
|
|
20.05.2014 19:46 |
|
Folgende User bedanken sich: |
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
naja ... wie man sieht hab ich noch viel zu wenig Ahnung ...
aber ich komme zurück wenn ich das alles drauf hab!
hast du es schon geschafft einen Exploit zu finden der auch auf der vita läuft?
es solln ja 10% der games exploitbar sein.
Kann ich mir irgendwie nicht vorstellen o.O
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 20:22 von SkyleN.
|
|
20.05.2014 20:20 |
|
|
|
Shana-chan
Developer
Beiträge: 2.834
Gruppe: Datenpfleger
Registriert seit: Feb 2011
Status:
Abwesend
Danke erhalten: 1997
|
RE: Exploit Hunting
naja ... wie man sieht hab ich noch viel zu wenig Ahnung ...
aber ich komme zurück wenn ich das alles drauf hab!
hast du es schon geschafft einen Exploit zu finden der auch auf der vita läuft?
es solln ja 10% der games exploitbar sein.
Kann ich mir irgendwie nicht vorstellen o.O
Durchaus hat er das, ist aber auch keine Zauberrei.
Zu deinen 10% das sind definitiv mehr, man kann fast sagen jedes dritte Mini hat ein Explooit.
MyAnimeList
[img ]http://abload.de/img/twins1sicr1.png[/img][/url]
|
|
20.05.2014 21:42 |
|
|
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
man kann fast sagen jedes dritte Mini hat ein Explooit
ich durchstöber grade die minis...ich konnte bis jetzt kein Game finden bei den man einen Playernamen eingeben kann ...
entweder ich bin zu müde, oder du übertreibst mit deiner aussage
EDIT:
1 Minute später und schuuubs hab ich eins gefunden
Dieser Beitrag wurde zuletzt bearbeitet: 20.05.2014 22:10 von SkyleN.
|
|
20.05.2014 22:02 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: Exploit Hunting
Kannst dich ja gerne Melden wenn du Hilfe brauchst.
Und könntest du den Crash Dump posten?
Möcht das gerne mal sehen.
Viel Glück noch!
|
|
21.05.2014 22:32 |
|
Folgende User bedanken sich: |
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
Wenn du mir sagst was du mit Crash Dumb meinst xD
Ich hab jetzt das Buch " Hacking the Art of exploits "
Und versteh jetzt schon etwas mehr ;D
Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2014 12:52 von SkyleN.
|
|
22.05.2014 12:39 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: Exploit Hunting
Das ist das Bild das du als aller erstes gepostet hast.
Nur halt jetzt mit dem neuen Spiel und überschriebenen $RA Register.
|
|
24.05.2014 03:34 |
|
|
|
SkyleN
Junior Mitglied
Beiträge: 35
Gruppe: User
Registriert seit: Jan 2012
Status:
Offline
Danke erhalten: 3
|
RE: Exploit Hunting
Ich hab mit dem Spiel leider kein Crash hin bekommen. Der Spielername verlängert sich nur und überschreibt ein paar andere Texte im Spiel.
Muss mir wohl ein neues suchen
EDIT:
Hir neues Spiel... aber auch kein Erfolg
Exception - Address load/inst fetch
Thread ID - ----------
Th Name - user_main
Module ID - ----------
Mod Name - ----------
EPC - 0x088F66F8
Cause - 0x10000010
BadVAddr - 0x61617799
Status - 0x60088613
zr:0x00000000 at:0x00000000 v0:0x61616161 v1:0x08BBE780
a0:0x08BBEA88 a1:0x00000019 a2:0x08BBE780 a3:0x08A4E268
t0:0x10080000 t1:0x08A4E264 t2:0x01000000 t3:0xD3000000
t4:0x04000000 t5:0xD3000000 t6:0x00000600 t7:0x00000400
s0:0x08DBB7FC s1:0x00000000 s2:0x00000000 s3:0x00000021
s4:0x00000001 s5:0x088E0000 s6:0xDEADBEEF s7:0xDEADBEEF
t8:0x10000000 t9:0x00000008 k0:0x09FFFB00 k1:0x00000000
gp:0x08A55530 sp:0x09FFF5D0 fp:0x09FFFA90 ra:0x088F6F00
0x088F66F8: 0x94421638 '8.B.' - lhu $v0, 5688($v0)
host0:/> calc 0x088F66F8-50
0x088F66C6
host0:/> disasm 0x088F66C6 50
0x088F66C4: 0x27BD0030 '0..'' - addiu $sp, $sp, 48
0x088F66C8: 0x27BDFFE0 '...'' - addiu $sp, $sp, -32
0x088F66CC: 0xAFBF001C '....' - sw $ra, 28($sp)
0x088F66D0: 0xAFB40018 '....' - sw $s4, 24($sp)
0x088F66D4: 0xAFB30014 '....' - sw $s3, 20($sp)
0x088F66D8: 0xAFB20010 '....' - sw $s2, 16($sp)
0x088F66DC: 0xAFB1000C '....' - sw $s1, 12($sp)
0x088F66E0: 0xAFB00008 '....' - sw $s0, 8($sp)
0x088F66E4: 0x3C0208A4 '...<' - lui $v0, 0x8A4
0x088F66E8: 0x8C438440 '@.C.' - lw $v1, -31680($v0)
0x088F66EC: 0x8C62035C '\.b.' - lw $v0, 860($v1)
0x088F66F0: 0x10400006 '..@.' - beqz $v0, 0x088F670C
0x088F66F4: 0x24640308 '..d$' - addiu $a0, $v1, 776
0x088F66F8: 0x94421638 '8.B.' - lhu $v0, 5688($v0)
0x088F66FC: 0x50400004 '..@P' - beqzl $v0, 0x088F6710
0x088F6700: 0x94820000 '....' - lhu $v0, 0($a0)
0x088F6704: 0x10000003 '....' - b 0x088F6714
0x088F6708: 0x3042FFFF '..B0' - andi $v0, $v0, 0xFFFF
0x088F670C: 0x94820000 '....' - lhu $v0, 0($a0)
0x088F6710: 0x3042FFFF '..B0' - andi $v0, $v0, 0xFFFF
0x088F6714: 0x50400004 '..@P' - beqzl $v0, 0x088F6728
0x088F6718: 0x00009021 '!...' - move $s2, $zr
0x088F671C: 0x0E23CC67 'g.#.' - jal 0x088F319C
0x088F6720: 0x246503A0 '..e$' - addiu $a1, $v1, 928
0x088F6724: 0x00009021 '!...' - move $s2, $zr
0x088F6728: 0x00008821 '!...' - move $s1, $zr
0x088F672C: 0x3C0208A4 '...<' - lui $v0, 0x8A4
0x088F6730: 0x8C428440 '@.B.' - lw $v0, -31680($v0)
0x088F6734: 0x00511021 '!.Q.' - addu $v0, $v0, $s1
0x088F6738: 0x94451AE0 '..E.' - lhu $a1, 6880($v0)
0x088F673C: 0x10A00046 'F...' - beqz $a1, 0x088F6858
0x088F6740: 0x24501AE0 '..P$' - addiu $s0, $v0, 6880
0x088F6744: 0x3C0408AE '...<' - lui $a0, 0x8AE
0x088F6748: 0x24846470 'pd.$' - addiu $a0, $a0, 25712
0x088F674C: 0x0E216B3F '?k!.' - jal 0x0885ACFC
0x088F6750: 0x24060001 '...$' - li $a2, 1
0x088F6754: 0x00021900 '....' - sll $v1, $v0, 4
0x088F6758: 0x00621023 '#.b.' - subu $v0, $v1, $v0
0x088F675C: 0x000218C0 '....' - sll $v1, $v0, 3
0x088F6760: 0x3C0208AE '...<' - lui $v0, 0x8AE
0x088F6764: 0x8C426474 'tdB.' - lw $v0, 25716($v0)
0x088F6768: 0x3C0408AE '...<' - lui $a0, 0x8AE
0x088F676C: 0x00431021 '!.C.' - addu $v0, $v0, $v1
0x088F6770: 0xAE020004 '....' - sw $v0, 4($s0)
0x088F6774: 0x82060002 '....' - lb $a2, 2($s0)
0x088F6778: 0x96050000 '....' - lhu $a1, 0($s0)
0x088F677C: 0x0E20AF47 'G. .' - jal 0x0882BD1C
0x088F6780: 0x248465EC '.e.$' - addiu $a0, $a0, 26092
0x088F6784: 0xAE020008 '....' - sw $v0, 8($s0)
0x088F6788: 0x960500AC '....' - lhu $a1, 172($s0)
host0:/>[/code]
EDIT:
GESCHAFFT! endlich!.
wollte grade aufgeben und an schon gefundenen Exploit Games üben.
Aber dann hatte ich doch Erfolg!
Exception - Bus error (instr)
Thread ID - //////////
Th Name - user_main
EPC - 0x61616160
Cause - 0x10000018
BadVAddr - 0x3FFFFFE6
Status - 0x60088613
zr:0x00000000 at:0x00000001 v0:0x00000000 v1:0x00000384
a0:0x0000004C a1:0x09FFF488 a2:0x00000000 a3:0x09157D40
t0:0x09FFF4B8 t1:0x00000003 t2:0x00000000 t3:0x09FFF488
t4:0x00000000 t5:0x00000000 t6:0x0000002C t7:0x0000001E
s0:0x08AE4104 s1:0x09FFF694 s2:0x09FFFAD0 s3:0x00000021
s4:0x00000001 s5:0x088E0000 s6:0xDEADBEEF s7:0xDEADBEEF
t8:0x09FFF450 t9:0x00000000 k0:0x09FFFB00 k1:0x00000000
gp:0x08A55530 sp:0x09FFF630 fp:0x09FFFA90 ra:0x61616161
host0:/>
Nur verwirrt mich EPC ein bisschen o.O
EDIT:
okay habs mit EPC schon kapiert xD
Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2014 16:27 von SkyleN.
|
|
25.05.2014 11:35 |
|
|
|
|