Pilgrimage é uma máquina Linux de dificuldade fácil. Nela é preciso abusar de um Information Disclosure no ImageMagick para obter as credenciais para acessar por SSH. Com isso é possível abusar de uma vulnerabilidade do Binwalk para obter uma reverse shell como root.

banner


Para essa máquina é necessário inserir o domínio pilgrimage.htb no arquivo de hosts local.

Com um scan do nmap encontra-se duas portas abertas nessa máquina, 22 do ssh e 80 de uma aplicação web. O próprio nmap já identificou que existe um diretório de git no site.

nmap

Nessa aplicação podemos enviar imagens para terem seu tamanho reduzido, quando se faz o upload de uma imagem ele gera uma URL para acessar e baixar a nova imagem. Também é possível se registrar ou fazer login, assim a URL das suas imagens ficam salvas.

site

Utilizando a ferramenta git-dumper podemos obter todo o conteúdo que está no repositório git do site. Com isso conseguimos os códigos da aplicação e o binário do magick na versão 7.1.0-49, que é uma ferramenta de manipulação de imagens.

.git

Podemos ver no código-fonte do index.php que é executado o magick com o parâmetro convert e a imagem que fizemos o upload. Após a imagem ser redimensionada a URL que é gerada é salva em um banco de dados sqlite na pasta “/var/db/pilgrimage”.

    if($upload) {
      $mime = ".png";
      $imagePath = $upload->getFullPath();
      if(mime_content_type($imagePath) === "image/jpeg") {
        $mime = ".jpeg";
      }
      $newname = uniqid();
      exec("/var/www/pilgrimage.htb/magick convert /var/www/pilgrimage.htb/tmp/" . $upload->getName() . $mime . " -resize 50% /var/www/pilgrimage.htb/shrunk/" . $newname . $mime);
      unlink($upload->getFullPath());
      $upload_path = "http://pilgrimage.htb/shrunk/" . $newname . $mime;
      if(isset($_SESSION['user'])) {
        $db = new PDO('sqlite:/var/db/pilgrimage');
        $stmt = $db->prepare("INSERT INTO `images` (url,original,username) VALUES (?,?,?)");
        $stmt->execute(array($upload_path,$_FILES["toConvert"]["name"],$_SESSION['user']));
      }
      header("Location: /?message=" . $upload_path . "&status=success");
    }

Essa versão do magick que está sendo utilizada é vulnerável ao CVE-2022-44268 e há exploits públicos. Aqui estarei utilizando a PoC do voidz0r que está disponível nesse link.

Essa PoC foi escrita em rust e ela gera uma imagem que ao ser redimensionada fará o magick ler algum outro arquivo e inserir o conteúdo na imagem resultante. Aqui eu vou ler o arquivo do banco de dados da aplicação, pois como ele também armazena os logins dos usuários pode conter alguma credencial útil.

Dessa forma eu criei a imagem utilizando a PoC, depois enviei no site e fiz o download do output. Então com o identify, que também é uma ferramenta do magick, podemos obter o conteúdo do arquivo em hexadecimal (não coube no print).

poc

Com o CyberChef eu converti de hexadecimal para texto e também removi os caracteres nulos para facilitar a visualização. Assim, podemos ver as credenciais de um usuário, emily:abigchonkyboi123.

cyberchef

Essas credenciais nos dão acesso a máquina via SSH e obtemos a primeira flag.

user

Ao fazer uma enumeração local com o pspy, encontramos que está sendo executado um script chamado “malwarescan.sh” pelo root.

pspy

Esse script apenas utiliza o binwalk para validar se existe alguma string no arquivo que esteja na sua blacklist. Acontece que essa versão do binwalk que está sendo executada é vulnerável ao CVE-2022-4510.

malwarescan

Utilizando a PoC que está no exploit-db eu criei um payload para uma reverse shell e a transferi para o diretório em que o script analisa.

download

Logo ao baixar a imagem, já recebi a reverse shell como root.

root