Contenidos
Compilar
|
1 |
clang shell.s -o payload_asm1 |
Código fuente
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
.section __TEXT,__text .globl _main .p2align 2 _main: /* 1. Guardar la cadena "/bin/ls" en el Stack */ sub sp, sp, #16 // Reservamos 16 bytes en la pila mov x0, #0x622f // "/b" (en hexadecimal, orden inverso) movk x0, #0x6e69, lsl #16 // "in" movk x0, #0x6c2f, lsl #32 // "/l" movk x0, #0x73, lsl #48 // "s" + \0 (el resto del registro se llena con ceros) str x0, [sp] // Guardamos el registro X0 en la dirección de SP /* 2. Configurar los argumentos para execve(path, argv, envp) */ mov x0, sp // X0 = Puntero a la cadena "/bin/ls" (Primer argumento) // Crear el array argv[] = {puntero_a_path, NULL} sub sp, sp, #16 // Espacio extra para el array de punteros str x0, [sp] // argv[0] apunta a "/bin/ls" str xzr, [sp, #8] // argv[1] es NULL (XZR es el registro cero) mov x1, sp // X1 = Puntero al array argv (Segundo argumento) mov x2, xzr // X2 = envp = NULL (Tercer argumento) /* 3. Invocar al Kernel (System Call) */ mov x16, #0x3b // Código 59 para execve movk x16, #0x0200, lsl #16 // Clase UNIX (2 << 24). Total: 0x200003B svc #0x80 // Llamada al supervisor (ejecutar) |

