Back to all write-ups: here
Spectra - HackTheBox - WriteUp
Tools utilizadas:
nmap
ffuf
metasploit
python
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.1 (protocol 2.0)
| ssh-hostkey:
|_ 4096 52:47:de:5c:37:4f:29:0e:8e:1d:88:6e:f9:23:4d:5a (RSA)
80/tcp open http nginx 1.17.4
| http-methods:
|_ Supported Methods: GET HEAD
|_http-server-header: nginx/1.17.4
|_http-title: Site doesn't have a title (text/html).
3306/tcp open mysql MySQL (unauthorized)
|_ssl-cert: ERROR: Script execution failed (use -d to debug)
|_ssl-date: ERROR: Script execution failed (use -d to debug)
|_sslv2: ERROR: Script execution failed (use -d to debug)
|_tls-alpn: ERROR: Script execution failed (use -d to debug)
|_tls-nextprotoneg: ERROR: Script execution failed (use -d to debug)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.91%E=4%D=2/27%OT=22%CT=1%CU=35715%PV=Y%DS=2%DC=T%G=Y%TM=603AA18
OS:D%P=x86_64-pc-linux-gnu)SEQ(SP=100%GCD=1%ISR=107%TI=Z%CI=Z%II=I%TS=A)OPS
OS:(O1=M54DST11NW7%O2=M54DST11NW7%O3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST1
OS:1NW7%O6=M54DST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE88)ECN
OS:(R=Y%DF=Y%T=40%W=FAF0%O=M54DNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=A
OS:S%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R
OS:=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F
OS:=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%
OS:T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD
OS:=S)
Após nosso scan no nmap, podemos perceber um serviço HTTP em nosso alvo.
Ao acessar nos deparamos com essa página:
O primeiro link, nos envia para o diretório /main/ que está rodando um site WordPress 5.4.2
No segundo link, recebemos um erro de falha ao conectar na database:
Porém, se tentarmos listar o diretório:
Um desses arquivo chama atenção, wp-config.php.save mas se tentarmos lê-lo:
Nesse ponto usamos o truque de visualizar o código fonte da página:
E então temos credenciais :D~
define( 'DB_NAME', 'dev' );
define( 'DB_USER', 'devtest' );
define( 'DB_PASSWORD', 'devteam01' );
define( 'DB_HOST', 'localhost' );
Se tentarmos acessar a página de login do site WordPress, percebemos que as credenciais não funcionam…
Ao continuar analisando o site WordPress, podemos perceber que o nome do usuário é ‘administrator’
Então, vamos tentar logar com as credenciais administrator:devteam01 eee b00m, estamos dentro ~
Agora vamos utilizar o metasploit para criar uma conexão reversa com a máquina, para isso vamos usar o exploit:
exploit/unix/webapps/wp_admin_shell_upload
Ajustamos as opções:
Conferimos antes de executar:
Após isso executamos nosso exploit e ganhamos nosso acesso:
Após isso, em nossa máquina geramos uma chave RSA para escalarmos nosso acesso:
ssh-keygen
No meterpreter, pedimos uma shell e escrevemos nossa chave RSA no arquivo /home/nginx/.ssh/authorized_keys para melhorarmos nossa shell.
Após escreve-la, realizamos a conexão via SSH.
ssh nginx@spectra.htb -i nginx
Agora que temos uma shell interativa, começamos a mapear o sistema… Após um tempo, ao olhar o diretório /opt um arquivo chamado autologin.conf.orig chama atenção…
Dentro desse arquivo podemos perceber que ele tem um arquivo chamado passwd na pasta /etc/autologin, então vamos até ele
Com isso conseguimos outra senha… vamos testa-la Tentei com o usuário chronos mas sem sucesso, já com o user katie… :D
Agora que temos nossa primeira flag, vamos para a escalação de privilégios
Conseguimos executar o /sbin/initctl como root
Podemos olhar os scripts que já estão feitos para tentar reusar algum deles
Dentro da pasta dos scripts, temos permissão de escrita em alguns arquivos:
Vamos analisar o conteúdo do arquivo test.conf e procurar onde podemos usa-lo para escalar privilégios.
Podemos ver que ele executa um NodeJS, então, vamos criar um payload para Node, no meu caso usei a reverse shell node do Payload All The Things Escrevemos ela no diretório /tmp com o nome de chu.js ( /tmp/chu.js )
Agora, vamos voltar ao nosso initctl e tentar executar o script test.conf
Abrimos nossa porta pré-definida em nossa máquina e aguardamos a conexão:
we are r00t
if i helped you, add + respect at my profile :D
My references:
https://linux.die.net/man/8/initctl
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#nodejs