# Machine Late - Hack the box

**Antes de tudo...**<br/>
Fala galera eai? Esse é meu primeiro Writeup que escrevo… espero que fique bem claro de como foi o processo que eu segui para resolver esta máquina. 

#### Vamos lá!

**Reconhecimento:** Para iniciar o reconhecimento da máquina comecei com uma varredura utilizando o *nmap*.<br/>

```sudo nmap -sV -sC 10.10.11.156``` 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655400706053/_kpNaD8zG.png align="left")

**Enumeração:** Note que há 2 serviços rodando nesta máquina, um fornecendo um acesso ao site através do protocolo *HTTP *e o outro um acesso *SSH*. 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401047114/L6arS_jiv.png align="left")

Após acessar o site, resolvi então navegar um pouco no código fonte para ver se encontrava algo de útil para começar a explorar mais a fundo e encontrei o seguinte trecho de código: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401072157/P7T-3y8tN.png align="left")

Repare que há um link dizendo que podemos utilizar um editor de imagem dentro do site, no entanto para conseguir acessar este *subdomínio *é necessário configurar o arquivo *hosts *da sua máquina local ficando da seguinte forma: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401114096/0KULinPTB.png align="left")
Salve o arquivo e agora você poderá acessar o através do *dns images.late.htb*
![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401160864/wYIW7VGsv.png align="left")
Repare que nesta página tem várias informações úteis para dar início a uma exploração mais avançada, como com o que foi desenvolvido o conversor de imagem para texto. Antes de sair buscando por vulnerabilidades da tecnologia do *Flask* resolvi testar um pouco e entender como funciona o conversor de imagem, então subi uma imagem *JPG* e o conversor me retornou um arquivo *results.txt* contendo:<br>
```<p></p>```

Através desse resultado não ficou muito claro o que estava fazendo em si, então resolvi buscar alguns conversores de imagem para texto no GitHub feito em flask e encontrei o seguinte exemplo: [Extractor Image Text](https://github.com/nikssardana/flaskOcr/blob/master/app.py).  

Com esse código ficou mais claro o que o conversor estava fazendo que era: pegar uma imagem e extrair o texto que está nela e não um texto que está como esteganografia; Sabendo disso, então resolvi injetar alguns *payloads* de *Server Side Template Injection (SSTI)* como texto das imagens e para isso eu desenvolvi um exploit para facitar a manipulação dos payloads e envio da imagem para ser através do script e não do site.

Exploi: [Late Hack the Box - Exploit  SSTI](https://github.com/allandiegoasilva/exploit-late-htb)

Utilizando o exploit que criei, então fiz um payload simples: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401388113/T6T3Cz72O.png align="left")

Olhe que há um teste de soma, se o aplicativo estiver vulnerável o exploit deverá retornar o 2 como saída pois foi efetuado a soma, e ao executar o exploit temos a seguinte saída: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401408531/VKI0d9z1V.png align="left")

Boom! Está vulnerável, agora podemos buscar payloads mais avançados e evoluir a exploração para *remote code execution*, para isso eu utilizei o repositório [Payload All The Things](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2) e peguei o seguinte payload: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401496503/R7YvDw0e0.png align="left")

Veja que eu peguei um payload que me permite fazer a excução de comandos do sistema operacional, e alterei o exploit para que ele receba esse novo payload com os comandos do sistema operacional, ao executar o *exploit.py* com essa alteração ele retornará a seguinte saída: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401533094/7-dzjnqM1.png align="left")

O comando *ls -l* foi executado com sucesso! Agora podemos visualizar os usuários do sistema com o os_command: *cat /etc/passwd*

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401561939/noiIBu3HE.png align="left")

Repare que temos um usuário chamado *svc_acc* e que também podemos visualizar o diretório deste usuário com: *ls -la /home/svc_acc*

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401592283/C8g5R2Sek.png align="left")

Neste diretório temos um arquivo chamado *user.txt* que representa a nossa primeira flag! 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401612492/aQYD-LwOF.png align="left")

Mas e agora, Acabou a exploração? Ainda não! Precisamos da segunda flag que é a *system* e para isso precisamos conseguir acesso ao sistema operacional para elevar nossos níveis de usuário e procurar a próxima flag. Ué, mas já temos acesso ao sistema por command injection não temos? Sim, mas desta forma é muito ruim para manter uma exploração efetiva dentro do sistema, teremos que usar o serviço de *ssh* para conseguir acesso. Para isso vemos na listagem dos arquivo dos usuário *svc_acc* que tem um diretório *.ssh* que geralmente costumam ficar as chaves de acesso *ssh*.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401690051/xcXQzR4_l.png align="left")

Temos uma chave ssh para acessar o sistema como o usuário *svc_acc*, para pega-lá execute: *cat /hove/svc_acc/.ssh/id_rsa*

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401731443/auVpOY5yg.png align="left")

Bom, conseguimos a chave *id_rsa *agora podemos utiliza-lá para conectar através do protocolo ssh como o usuário *svc_acc*. Copie a chave id_rsa para um arquivo chamado *id_rsa *e utilize: ***ssh svc_acc@[machine_ip] -i id_rsa*** para conectar como o usuário *svc_acc*.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401801656/KMfCZWfIH.png align="left")

Provavelmente ao tentar se conectar o seu pode ter dado este erro também, isso se dá porque a chave pode ser lida pelo usuário, grupo e qualquer acesso remoto ao computador e sendo assim é considerada uma chave não segura. 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401828909/GJCbsfSub.png align="left")

Para resolver basta alterar as permissões de acesso da chave para somente o usuário conseguir acessar/ler/escrever na chave com: *chmod 600 id_rsa*

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401853878/wl2niFI-k.png align="left")

Agora que foi alterado a permissão podemos executar novamente: ***ssh svc_acc@[machine_ip] -i id_rsa*** para conectar a máquina.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401882444/k6LM9YtCS.png align="left")

**ATENÇÃO**: cuidado ao copiar a chave id_rsa, pois qualquer linha a mais mesmo em branco pode resultar na saída que a chave está inválida.

Então já que temos acesso precisamos conseguir acesso root ao sistema. Primeiro vamos olhar o que há no *crontab* do sistema.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655401937456/HqRQU4S6y.png align="left")

O *PATH:/usr/local/sbin/* é o caminho onde fica os scripts de execução do *cronjob *no sistema, se você der *crontab -e* não mostrará nenhuma configuração adicionada pois essa configuração foi realizada somente para o usuário *root* então pode existir *X jobs* configurados se você não tiver permissão não irá conseguir ver. Agora liste os arquivos do diretório */usr/local/sbin/* e teremos:

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402001901/2sCdH1H05.png align="left")

Um arquivo executável que provavelmente será executado em algum momento por algum *trigger* ou agendamento de tarefas, repare também que podemos ler e executar esse arquivo, então iremos ler primeiramente: 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402036952/irOyuF9QM.png align="left")

Com uma leitura básica do código da para perceber que o *script *é acionado toda vez que um usuário acessar a máquina via SSH. Sabendo disso vamos ver as propriedades do arquivo através do comando *lsattr *esse comando permite fazer alguns tipos de alterações no arquivo, caso não conheça pode dar uma olhada em: 

[Trabalhando com atributos de arquivos](http://www.bosontreinamentos.com.br/linux/certificacao-lpic-1/trabalhando-com-atributos-de-arquivos-lsattr-e-chattr-linux-lpic-1/)

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402155902/iWiFDbQCs.png align="left")

Note que possui o atributo *“a”* que significa que podemos modificar este arquivo anexando o conteúdo nele, então com isso podemos atribuir um *shell-reverso* dentro do arquivo *ssh-alert.sh*

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402185338/gcULOxnuS.png align="left")

Agora pode conferir se o shell foi atribuído ao arquivo que será executado:

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402218612/mJBjE1s1H.png align="left")

Repare que o comando foi adicionado ao arquivo e assim que o arquivo for executado já poderemos acessar através do shell reverso, para isso ligue uma porta para ouvir uma conexão do alvo:

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402247297/djs9MuIZO.png align="left")

Agora com o *nc* ouvindo a conexão podemos executar o *trigger *do arquivo *ssh-alert.sh* através de uma nova conexão *ssh* com o usuário* svc_acc*.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402287347/2mjnuotbz.png align="left")

E então conseguimos acesso root ao sistema!!!!

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402302637/832yWYnLlK.png align="left")

Agora é só visualizar a sua flag e pontuar!!!

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1655402322577/1Cd1zRed3.png align="left")

**Considerações finais:**<br>
Pessoalmente achei esta máquina relativamente difícil pois não estava conseguindo encontrar uma forma de conseguir acesso root, e para isso precisei olhar alguns outros writeups desta máquina. Entretanto de modo geral consegui resolver 85% da máquina conseguindo chegar até ao acesso do usuário *svc_acc *sozinho.
