Autor
|
Tema: Problema con CreateProcessA en nasm. (Leído 5,384 veces)
|
otroWeyMas.nasm
Desconectado
Mensajes: 27
|
Hola. Tengo un problema tratando de usar CreateProcessA en nasm, he estado intentando hacerlo funcionar, pero no logro que se ejecute bien, primero lo intente de la siguiente manera. mov r13, rdx ;CreateProcessA
xor rdx, rdx xor r15, r15 mov edx, 0x646d6361 shr edx, 8 push rdx mov r15, rsp ;cmd
xor rdx, rdx push rdi ;socket push rdi ;socket push rdi ;socket push rdx push rdx xor rax, rax inc rax rol rax, 8 push rax ;0x00000100 push rdx push rdx push rdx push rdx push rdx push rdx push rdx push rdx push rdx push rdx xor rax, rax add al, 44 push rax xor r14, r14 mov r14, rsp ;STARTUPINFOA
xor r12, r12 sub rsp, 0x16 mov r12, rsp ;ProcessInfo
sub rsp, 0x58 ;shadowspace
mov [rsp+72], r12 ;ProcessInfo mov [rsp+64], r14 ;STARTUPINFOA mov [rsp+56], rdx mov [rsp+48], rdx mov [rsp+40], rdx xor rax, rax inc rax mov [rsp+32], rax xor r8, r8 xor r9, r9 mov rdx, r15 ;cmd xor rcx, rcx
call r13
Pero creo esta mal alineado entre ProcessInfo y el "shadowspace" que coloqué, la verdad no se si otra vez estoy pisando o borrando el stack, o incluso puede ser que el código este mal. Bueno, así que lo hice de otra manera, que es la siguiente, mov r13, rdx ;CreateProcessA
xor rdx, rdx xor r15, r15 mov edx, 0x646d6361 shr edx, 8 push rdx mov r15, rsp ;cmd
xor r12, r12 xor rcx, rcx xor rdx, rdx mov rcx, 0x80 ;espacio para STARTUPINFOA y ProcessInfo
lop_nul: push rdx loop lop_nul
xor rax, rax mov al, 44
lea r12, [rsp] mov [r12], dword eax ;STARTUPINFOA mov [r12+4], rcx mov [r12+12], rcx mov [r12+20], rcx mov [r12+24], rcx
xor rdx, rdx mov dl, 255 inc rdx
mov [r12+0x3c], edx ;0x00000100 mov [r12+0x50], rdi ;socket mov [r12+0x58], rdi ;socket mov [r12+0x60], rdi ;socket
xor rdx, rdx
sub rsp, 0x58
lea r9, [r12] mov [rsp+64], r9 ;STARTUPINFOA lea r9, [r12+104] mov [rsp+72], r9 ;ProcessInfo mov [rsp+56], rdx mov [rsp+48], rdx mov [rsp+40], rdx xor rax, rax inc rax mov [rsp+32], rax xor r8, r8 xor r9, r9 mov rdx, r15 ;"cmd" xor rcx, rcx
call r13 Creo esta mejor alineado, traté de abrir espacio para no pisar nada, pero igual tampoco funcionó, y ya nosé que más debo hacer, me cuesta trabajo alinear a 16 todo, pero no sé si sea eso, o esté mal algún parámetro o estoy pisando y/o borrando algo del stack... ya me bloqué. Espero me puedan ayudar, para ya terminar esto y ponerme a estudiar más sobre seguridad con CTF's y retos, pero mi mente solo está pensando... "y si le sumo, y si le resto y si checo con mod en tal cosa y si cambio el registro" y es horrible  jeje. Bueno, saludos.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
El entry point en Windows x64 esta alineado a 8 bytes. Teniendo en cuenta el ultimo codigo le estas restando 8 (primer push rdx), 0x400 - 0x80 * 8 - (push rdx dentro del loop) y 0x58 (sub rsp, 0x58). Un total de 0x460 y por lo tanto desalineado.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
otroWeyMas.nasm
Desconectado
Mensajes: 27
|
Ok, si logro entender en donde esta desalineado, pero no consigo alinearlo y sigue crasheando esa parte en el debugger, ya intente modificarlo usando MOD en la calculadora, pero no lo consigo.
Espero me puedan ayudar otro poco o me puedan explicar como alinearlo, sino pues igual gracias por la respuesta.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Sin usar ninguna variable local tenes que restarle 0x58 a la pila, eso es lo minimo indispensable. 0x20 para el shadow space, 0x30 para los parametros que necesita la funcion (son 10 en total, 4 en registros y 6 en pila, 6 * 8 = 0x30) y 8 para alinear la pila a 16. No me voy a poner a hacer ese trabajo a mano para las variables locales pero aca tenes un ejemplo generado por VC++: 0000000000000000: 48 8B C4 mov rax,rsp 0000000000000003: 48 81 EC E8 00 00 sub rsp,0E8h 00 000000000000000A: 33 D2 xor edx,edx 000000000000000C: C7 40 08 63 6D 64 mov dword ptr [rax+8],646D63h 00 0000000000000013: 48 8D 48 8C lea rcx,[rax-74h] 0000000000000017: 44 8D 42 64 lea r8d,[rdx+64h] 000000000000001B: E8 00 00 00 00 call memset 0000000000000020: 48 8D 44 24 50 lea rax,[rsp+50h] 0000000000000025: C7 44 24 70 68 00 mov dword ptr [rsp+70h],68h 00 00 000000000000002D: 48 89 44 24 48 mov qword ptr [rsp+48h],rax 0000000000000032: 48 8D 8C 24 F0 00 lea rcx,[rsp+0F0h] 00 00 000000000000003A: 48 8D 44 24 70 lea rax,[rsp+70h] 000000000000003F: 45 33 C9 xor r9d,r9d 0000000000000042: 48 89 44 24 40 mov qword ptr [rsp+40h],rax 0000000000000047: 45 33 C0 xor r8d,r8d 000000000000004A: 33 C0 xor eax,eax 000000000000004C: 33 D2 xor edx,edx 000000000000004E: 48 89 44 24 38 mov qword ptr [rsp+38h],rax 0000000000000053: 48 89 44 24 30 mov qword ptr [rsp+30h],rax 0000000000000058: 89 44 24 28 mov dword ptr [rsp+28h],eax 000000000000005C: C7 44 24 20 01 00 mov dword ptr [rsp+20h],1 00 00 0000000000000064: FF 15 00 00 00 00 call qword ptr [__imp_CreateProcessA] 000000000000006A: 33 C0 xor eax,eax 000000000000006C: 48 81 C4 E8 00 00 add rsp,0E8h 00 0000000000000073: C3 ret
Al llamar a CreateProcessA en RSP + 0x20 arrancan los parametros (antes esta el shadow space), en RSP + 0x50 la estructura PROCESS_INFORMATION, en RSP + 0x70 la estructura STARTUPINFOA y en RSP + 0xF0 esta la cadena 'cmd\0'.
|
|
« Última modificación: 22 Noviembre 2021, 15:30 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
otroWeyMas.nasm
Desconectado
Mensajes: 27
|
Ok, lo voy a seguir revisando. Solo voy a mostrar algo que me di cuenta, tal vez no voy tan mal. algo que note en el código de C++ fue... Eso significa que es un espacio de 0x58 + 0x90 = E8 Otra cosa que note es... No me fije que le estaba asignando 44 pero debería ser 104 = 0x68 Fui siguiendo los registros con los mios y al parecer están bien, el único que me puso en duda es... Pero igual el parametro siguiente es null, así que no veo que perjudique que yo le haya puesto... Pues bueno, así me quedó ahora mov r13, rdx
xor rdx, rdx xor r15, r15 mov edx, 0x646d6361 shr edx, 8 push rdx mov r15, rsp ;cmd
xor r12, r12 xor rcx, rcx xor rdx, rdx mov rcx, 0x90
lop_nul: push rdx loop lop_nul
xor rax, rax mov al, 0x68
lea r12, [rsp] mov [r12], dword eax mov [r12+4], rcx mov [r12+12], rcx mov [r12+20], rcx mov [r12+24], rcx
xor rdx, rdx mov dl, 255 inc rdx
mov [r12+0x3c], edx mov [r12+0x50], rdi mov [r12+0x58], rdi mov [r12+0x60], rdi
xor rdx, rdx
sub rsp, 0x58
lea r9, [r12] mov [rsp+64], r9 lea r9, [r12+104] mov [rsp+72], r9 mov [rsp+56], rdx mov [rsp+48], rdx mov [rsp+40], rdx xor rax, rax inc rax mov [rsp+32], rax xor r8, r8 xor r9, r9 mov rdx, r15 xor rcx, rcx
call r13 Solo por curiosidad pase RCX de 0x78 hasta 0xa0, pero igual no se acomodó el stack xP. Seguiré pensando que más puedo hacer. Gracias.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
 
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Ese 0x70 o 0xA0 esta muy pasado de los bytes necesarios para las 2 estructuras ya que estas empujando 8 bytes en cada iteracion del bucle. RCX deberia ser 0x10 (o simplemente restar 0x80) y despues deberias restarle 0x50 en lugar de 0x58.
Igual sinceramente no se que te impide acomodar la pila de una vez como hace el VC++.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
otroWeyMas.nasm
Desconectado
Mensajes: 27
|
No se rompan mucho la cabeza como yo, el problema es solo esto.
mov [r12+104], rcx <--- mov [r12+116], rcx <--- mov [r12+120], dword ecx <---- mov [r12+124], dword ecx <--- la suma de todo es 24 Seguiría 0x50 para el espacio, pero hay que sumar esos 24 sub rsp, 0x68 <----> 0x50 = rsp+80 + 24 = 0x68 xor r9, r9 lea r9, [r12+104] mov [rsp+72], r9 lea r9, [r12] mov [rsp+64], r9 mov [rsp+56], rcx mov [rsp+48], rcx mov [rsp+40], rcx xor rax, rax inc rax mov [rsp+32], rax xor r8, r8 xor r9, r9 xor rax, rax call r13
Aquí en adelante es ProcessInfo. lea r9, [r12+104] mov [rsp+72], r9
que sería esta parte mov [r12+104], rcx mov [r12+116], rcx mov [r12+120], dword ecx mov [r12+124], dword ecx Aquí en adelante es el inicio de STARTUPINFOA lea r9, [r12] mov [rsp+64], r9
Luego continua un par de null's, hasta InheritHandles = 1 siguen otros null, cmd, otro null y la ejecución de CreateProcessA. Bueno... muchas gracias por la paciencia y la ayuda. Saludos.
Ya lo logré... después de varios intentos me di cuenta que algo no encajaba con ProcessInfo y el shadow space de CreateProcessA. Ya funcionó.
|
|
« Última modificación: 24 Noviembre 2021, 20:55 pm por otroWeyMas.nasm »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Mi primer programa en NASM
ASM
|
Debci
|
6
|
7,585
|
2 Abril 2010, 13:23 pm
por Debci
|
|
|
Eso es bug del hypervisor o del NASM....
ASM
|
ño_ño
|
1
|
3,109
|
15 Julio 2010, 03:58 am
por ño_ño
|
|
|
[NASM] String Reverse =P
ASM
|
Binary_Death
|
0
|
3,646
|
28 Noviembre 2010, 19:23 pm
por Binary_Death
|
|
|
NASM en Linux
ASM
|
Stroncio
|
5
|
6,462
|
28 Enero 2011, 02:01 am
por Stroncio
|
|
|
Error de ld en nasm
ASM
|
alienxz77b
|
2
|
7,594
|
2 Noviembre 2021, 16:35 pm
por RayR
|
|