jueves, 6 de septiembre de 2012

Trucos para la consola de Windows

Tomo prestada la idea del magnífico blog de Open Security Research para, imitando a las antiguas revistas de papel, publicar algunos trucos de la famosa línea de comandos de Windows 7/2008. Algunos más enfocados a seguridad, otros simplemente prácticos.
1.- Ejecutar CMD como Administrador.
Aunque realmente sirve para cualquier comando, si se pulsan las teclas control+shift y la tecla enter,  una vez se ha buscado por "cmd" en el buscador de Windows 7, directamente se ejecutará con permisos de Administrador. Es una tontería, pero una vez te acostumbras, desplegar las opciones con el botón derecho del ratón para irse sobre "Ejecutar como administrador", se vuelve casi molesto.
2.- Configuración del firewall.
El comando netsh (Network Shell), sirve para manejar la configuración de red del sistema. Es bastante completo y permite definir un interfaz con direccionamiento DHCP, con una IP estática o incluso mostrar la configuración del firewall de un perfil.
Para ver un resumen: netsh advfirewall show currentprofile
Para obtener las reglas del firewall: netsh advfirewall firewall rule name=all
Para deshabilitarlo: netsh firewall set opmode disable
3.- Restablecer Winsock2 y TCP/IP.
Con netsh también se puede restablecer la configuración de Winsock2 y TCP/IP si se detectan problemas de conectividad y algunos expedientes X de red (esas cosas que pasan a veces en Windows y que no se solucionan mirando el /var/log/messages)
4.- Contraseña de una conexión Wireless en texto claro.
Mediante el mismo netsh existe la opción de generar un fichero de configuración del perfil actual de la conexión de la configuración wireless. Este fichero almacenará en texto claro (en formato hexadecimal), la contraseña que utiliza el sistema para conectarse al punto de acceso.

Guardar la configuración en el directorio actual: netsh wlan export profile folder=. key=clear



5.- Borrar registro de eventos.
Con el comando wevtutil se gestionan los logs de los sistemas Windows, configuración, borrado, almacenamiento, etcétera. Es bastante completo y para aprender a usarlo nada como leerse su documentación.

Para eliminar los registros de Seguridad, System y Application:
  • wevtutil cl "Security"
  • wevtutil cl "System"
  • wevtutil cl "Application"

6.- Datos del sistema de WMI.
Utilizando el comando wmic es posible hacer consultas al Windows Management Instrumentation (WMI), que entre otras cosas, almacena decenas de tablas con información sobre el sistema.

Algunos ejemplos:
  • Lista completa y detallada de usuarios: wmic useraccount list full
  • Lista de usuarios de sistema: wmic sysaccount list full
  • Direcciones IP y nombres de interfaz de red: wmic nicconfig get index,description,ipaddress
  • Lista de procesos (sustituto de tasklist): wmic process list brief

7.- Modificar el prompt.
Al igual que en Linux se modifica el PROMPT con la variable PS1, en Windows es posible con el comando prompt.
  • Prompt por defect: prompt $p$g
  • Prompt con el nombre del sistema, de usuario y la ruta: prompt [%computername%] [%username%] $p$g

8.- Cambiar color de la terminal.
Para cambiar los colores de la consola no hace falta irse a las propiedades, desde línea de comando y con un simple "color 0a", estaremos en un viejo fósforo P1 a lo Matrix.
El "0" representa el color de fondo (negro) y la "a", el verde de las letras. Con color /? se consultan todas las posibilidades. Otra mucho más útil: color f0, blanco sobre negro, muy práctica para las capturas de pantalla.
9.- Consultar los ficheros que abre cada proceso.
En Windows también se puede averiguar (sin necesidad de herramientas como handle de sysinternals) los ficheros que están abiertos por cada proceso al igual que se hace en Linux con lsof.

Primero se habilita openfiles con la instrucción: openfiles /local on



Una vez se reinicia el sistema (esta es la única pega), tan solo hace falta ejecutar el comando: openfiles


10.- Cambiar el tamaño de la consola.
Ya que el propio cmd no deja redimensionarse horizontalmente, para hacerlo directamente desde el propio cmd sin tener que abrir sus propiedades, se utiliza el comando: mode, seguido de las columnas y líneas que se desean:

Establecer una ventana de 80 caracteres de columna y 40 líneas: mode 80,40


11.- Comparar archivos de texto y buscar textos
También es posible comparar archivos de texto usando fc, que mostrará las diferencias entre ambos, similar al comando diff de sistemas unix:

Diferencias entre el archivo 1.txt y 2.txt (uno tiene la letra d y otro no): fc 1.txt 2.txt


También es posible buscar una cadena de texto pasando por una tubería con el comando "find", tal y como se hace con grep:
  • Buscar los archivos que contengan la cadena 'dll': dir | find "dll"
  • Una alternativa es usar el comando findstr
12.- Copias incrementales de ficheros.
Para copiar un directorio y todo su contenido recursivamente, pero tan solo aquellos ficheros que no estén en el destino. Es decir, incrementalmente y manteniendo fechas de timestamp, se puede usar el comando robocopy.

Copia del directorio c:\tmp al directorio c:\tmpbackup:

robocopy c:\tmp c:\tmpbackup /copyall /dcopy:t /mir

13.- Histórico de comandos.
Tan solo pulsando la tecla F7 se abrirá un pseudo pop-up con los últimos comandos ejecutados. Al igual que ocurre cuando se pulsa sobre la tecla de cursores arriba, solo que visualmente.


14.- Averiguar qué proceso abre un puerto.
En Windows 7/2008 existe la posibilidad de conocer cuál es el proceso que está haciendo bind de un determinado puerto con el comando netstat. Tal y como hace el famoso tcpview, solo que desde línea de la terminal.
Para listar todos los puertos y mostrar los ID del proceso que lo usa: netstat -ano
Posteriormente se usa "tasklist" para listar los procesos y "findstr" para filtrar el contenido en base a una cadena de texto.
15.- Copiar al portapapeles la salida de un comando.
Para almacenar la salida de un comando en el portapales directamente, tan solo hay que usar una tubería y el comando clip


Referencias:

miércoles, 9 de mayo de 2012

Setup X11VNC Server

Setup

Ubuntu/Linux Mint and related projects

x11vnc is very similar to vnc, except that it allows you to view display :0, the display that would currently be showing on your monitor if you were sitting at your computer.
HINT: Replace "sudo nano" with "gksu gedit" on GNOME or "kdesudo kate" on KDE for a graphical editor.
1. Install the packages
sudo aptitude install x11vnc openbsd-inetd tcpd
2. Run the following command
ps wwaux | grep auth
This command should output something like this:
root      3838 10.1  1.7  13308  8840 tty7     Ss+  15:35   2:14 /usr/bin/X -br -nolisten tcp :0 vt7 -auth /root/xauth
erik      5156  0.0  0.1   2800   752 pts/0    R+   15:57   0:00 grep auth
Note the bold path after -auth, as you will need this for the next step
3a. Add the x11vnc service to inetd:
sudo nano /etc/inetd.conf
Add this line:
5900    stream  tcp4     nowait  root    /usr/sbin/tcpd /usr/local/bin/x11vnc.sh

4a. Then edit /usr/local/bin/x11vnc.sh:
sudo nano /usr/local/bin/x11vnc.sh
Enter this into the new file:
#!/bin/sh
/usr/bin/x11vnc -inetd -o /var/log/x11vnc.log -display :0 \
-auth /root/xauth -many -bg
Notice the bold path, this is where you put the path you found in step 2.
Now, to make the script executable, you have to run the command:
sudo chmod +x /usr/local/bin/x11vnc.sh
4b. If you use xinetd (openSUSE does) then skip steps 3a and 4a and put the following text into a new file named /etc/xinetd.d/x11vnc:
service x11vnc
{
port = 5900
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/x11vnc
server_args = -inetd -o /var/log/x11vnc.log -display :0 -auth /var/run/xauth/A:0-LliKdB -many -bg
disable = no
}
5. Restart inetd
sudo /etc/init.d/openbsd-inetd restart
6. You can now connect to display :0 from another machine by using a VNC client. For example:
vncviewer vnchost:0

martes, 13 de diciembre de 2011

viernes, 9 de diciembre de 2011

Openvpn






En este artículo voy a describir mi caso de uso de openvpn para cifrar el tráfico cuando estoy fuera de casa o no estoy usando una red segura (típicamente wifi en un hotel, universidad, aeropuerto...) evitando mirones. Otra de las ventajas que tiene es poder acceder a la red interna de mi casa donde tengo un servidor web que no es accesible al público y los servicios de compartición de archivos, nuestro portátil fuera de casa será un ordenador más dentro de la LAN. También puede ser útil para enmascarar nuestra IP, por ejemplo si conectamos a un servidor openvpn de estados unidos podemos navegar y usar servicios con IP estadounidense. 
Si tienes una IP dinámica en casa que es lo más habitual vas a tener que darte en algún servicio de dns dinámica y configurarlo para que se actualice cuando tu IP cambia. El proveedor de este servicio más popular es dyn.com. para mantener la ip actualizada se puede usar un script llamado ddclient. Se necesita también un ordenador conectado a internet y encendido las 24 horas del día (si queréis usar el servicio las 24 horas del día).
Yo tengo el servidor openvpn en el router, conectado a la IP pública de internet y no me tengo que preocupar de abrir puertos hacia el ordenador que está corriendo openvpn. 
Empezamos con la configuración en el servidor 
1-instalar los paquetes necesarios
apt-get install openvpn openssl bridge-utils
2-generación de claves
Copiamos el scrip de generación de claves a nuestro directorio de configuración de openvpn
cp -a /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
Editar /etc/openvpn/easy-rsa/2.0/vars para que contengan los datos acordes a nosotros
export KEY_COUNTRY=”US”
export KEY_PROVINCE=”US”
export KEY_CITY=”mycity”
export KEY_ORG=”vpn”
export KEY_EMAIL=”
myname@myemail.org
Después usamos los siguientes comandos para crear una entidad de certificación
. ./vars
./clean-all
./build-ca
Creamos las claves de servidor
./build-key-server server
Y las claves de usuario. Repetimos este paso tantas veces como usuarios queremos que senecten a la vpn (también se puede crear alguna de más)
./build-key user1
Generamos el Diffie-Hellman.
./build-dh
Generamos la clave estática (esto añade seguridad)
openvpn --genkey --secret ta.key
En los pasos anteriores se han creado una serie de archivos con claves, vamos a colocar cada uno en su sitio.
Creamos un directorio para almacenar las claves en el servidor
mkdir /etc/openvpn/keys
Copiamos las claves que nos interesan para el servidor.
cp ca.crt  server.crt server.key dh1024.pem  ta.key  /etc/openvpn/keys
3-Fichero de configuración
En /etc/openvpn creamos un fichero llamado server.conf. podemos crear un fichero por cada servidor que queramos arrancar, por ejemplo podemos crear un fichero server2.conf en que cambiemos el puerto y el protocolo para que use el puerto 443 y el protocolo TCP debido a que ciertas redes pueden bloquear el puerto 1194 UDP que es el que típicamente usa openvpn. Si una red bloquea el puerto 443 en TCP estaría impidiendo el trafico https así que es improbable que nos lo encontremos bloqueado.
#/etc/openvpn/server.conf
#home.dyndns.org es la dirección que he configurado y que se traduce en mi ip, si teneis ip fija, hay que ponerla en vez del nombre del servidor
local home.dyndns.org
port 1194
#port 443
proto udp
#proto tcp

#la otra opción es usar un dispositivo de tipo tun (tunnel), que es un dispositivo de más alto nivel (en cuanto al modelo OSI de red) y necesita menos recursos pero el dispositivo tap es necesario para el modo bridge
dev tap0

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-auth /etc/openvpn/keys/ta.key 0

up "/etc/openvpn/up.sh"
ifconfig-pool-persist ipp.txt

#usamos el 188 para el último segmento de subred para que sea rara y no coincida con la subred de alguno de los sitios en los que nos vamos a conectar, también asignamos un pool de ips (al estilo de dhcp) para los posibles clientes
server-bridge 192.168.188.1 255.255.255.0 192.168.188.70 192.168.188.79

keepalive 10 120
push "redirect-gateway"
max-clients 5
persist-key
persist-tun
status openvpn-status.log
#log-append openvpn.log
verb 6

En el archivo de configuración anterior usamos un script (up.sh) que se ejecutará cuando se inicie el servidor openvpn que lo que hace es primero añadir la interfaz tap al bridge (similar a enchufar nuestra tarjeta de red virtual a nuestro switch virtual) y luego activamos la interfaz para que empiece a funcionar. el bridge ya está previamente creado. No os olvidemos de dar permiso de ejecución a este script.
#!/bin/sh
brctl addif br0 tap0
ifconfig tap0 up

Ahora el servidor openvpn debería arrancar sin problemas. Podemos chequear el estado con "service openvpn status" y si no ha arrancado al inicio probar a arrancarlo con "service openvpn start" y mirar los logs (syslog y /etc/openvpn/openvpn-status.log por ejemplo)

4- Cliente
Para la parte de cliente yo uso el plugin de vpn para network-manager y poder conectar con la vpn a golpe de ratón. estos son los parámetros de configuración
pasarela: home.dyndns.org
Autenticación: certificados (TLS)
certificado de usuario: user1.crt
certificado de CA: ca.crt
clave privada:user1.key
sin contraseña
Ahora pulsamos en la configuración avanzada y especificamos el puerto y marcamos la opción de usar un dispositivo tap, el resto desmarcadas. En la pestaña de autenticación TLS también tenemos que proporcionar la clave estática ta.key y especificar un 1 como dirección de clave ya que estamos usando autenticación TLS adicional.
Para probar nuestra VPN debemos estar fuera de nuestra LAN (desde dentro no funcionará porque las respuestas del servidor no se reciben desde la IP que se espera) y seleccionar la conexión vpn que acabábamos de crear con el plugin openvpn de Network manager. Para comprobar que funciona podemos ir a alguna web que nos diga nuestra IP publica y veremos que estamos utilizando la del servidor openvpn en vez de la IP publica del lugar en el que nos estamos conectando.