Corte a caixa. Explicação passo a passo de JSON. Vulnerabilidade no Json.Net e LPE via SeImpersonatePrivilege

imagem

Continuo publicando soluções enviadas para processamento adicional no site da HackTheBox . Espero que isso ajude pelo menos alguém a se desenvolver no campo da segurança da informação. Neste artigo, exploramos uma vulnerabilidade no Json.Net e vemos como aumentar nossos privilégios para SYSTEM se tivermos o privilégio SeImpersonatePrivilege.

A conexão ao laboratório é via VPN. É recomendável não conectar-se a partir de um computador de trabalho ou de um host em que os dados importantes estejam disponíveis, pois você entra em uma rede privada com pessoas que sabem algo no campo da segurança da informação :)

Informações Organizacionais
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Serviço de inteligência


Esta máquina possui um endereço IP 10.10.10.158, que eu adiciono ao / etc / hosts.

10.10.10.158    json.htb

Primeiro, examinamos portas abertas. Como leva muito tempo para varrer todas as portas com o nmap, primeiro farei isso com o masscan. Examinamos todas as portas TCP e UDP da interface tun0 a uma velocidade de 500 pacotes por segundo.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.158 --rate=500

imagem

Em seguida, você precisa coletar mais informações sobre portas conhecidas. Para fazer isso, use o nmap com a opção -A.

nmap json.htb -p49156,49154,49152,47001,80,137,49153,139,49155,135,445,49158,5985,6666,21

imagem

Agora, para obter informações mais detalhadas sobre os serviços que operam nas portas, executaremos uma varredura com a opção -A.

nmap -A json.htb -p80,139,135,445,5985,6666,21

imagem

Vamos ver o que na web. Como resultado, a página é carregada e, somente então, ela nos lança na página de autorização.

imagem

Poderíamos contornar isso, mas admin: admin nos permite fazer login.

imagem

Não há nada interessante no próprio site e, na tentativa de encontrar pelo menos alguma coisa, nos apegamos aos cookies.

imagem

Decodifique Base64.

echo "eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" | base64 -d ; echo

imagem

Ou seja, o valor da senha é MD5 da senha do administrador.

imagem

Além disso, nada de interessante. Abrindo Burp e interceptando a solicitação, você pode encontrar um cabeçalho HTTP interessante.

imagem

E, nesta fase, fiquei pendurado até me dizerem para "quebrar o significado". Obviamente, nesses casos, você precisa cometer erros e observar a reação da API em três estados: verdadeiro, falso e erro. Mas por alguma razão eu perdi.

Ponto de entrada


E foi descoberto que, se os dados quebrados forem transmitidos em um cabeçalho HTTP estranho (exclua alguns dos caracteres), o servidor apresentará erros. Abaixo estão os dados que o servidor retorna com um valor de cabeçalho normal e com um a quatro caracteres excluídos.

imagem

Temos um erro interessante no último caso. Como o objeto JSON está desativando , podemos explorar isso usando ysoserial . Usaremos o gadget ObjectDataProvider para Json.Net e executaremos o comando ping para verificar a suposição de vulnerabilidade.

imagem

Agora habilite o tcpdump com um filtro de protocolo ICMP para capturar ping.

imagem

Ao interceptar uma solicitação, alteramos o cabeçalho.

imagem

E recebemos o ping que foi solicitado.

imagem

DO UTILIZADOR


Agora você precisa fazer o mesmo com o medidor de carga. Primeiro, geramos uma carga e abrimos um ouvinte.

imagem

imagem

Agora abra o servidor SMB local a partir do qual o carregamento será iniciado.

imagem

Agora, novamente, serializamos os dados necessários, como um comando, lançamos nossa carga do nosso servidor.

imagem

Vemos uma conexão bem-sucedida ao servidor SMB e uma sessão Meterpreter carregada com sucesso.

imagem

imagem

E leia o arquivo do usuário.

RAIZ


Primeiro de tudo, analisamos as informações sobre o usuário sob quem trabalhamos.

imagem

O usuário tem o privilégio SeImpersonatePrivilege ativado (o direito "Representar o cliente após autenticação"). Como a Microsoft diz :
Atribuir a um usuário o direito de "Representar um cliente após autenticação" permite que programas iniciados em nome desse usuário representem um cliente. O uso desse parâmetro impede que servidores não autorizados representem clientes que se conectam a esses servidores usando procedimentos RPC ou pipes nomeados.
O fato é que podemos aumentar nossos direitos ao SYSTEM. Um estudo completo pode ser encontrado aqui . Os seguintes privilégios são afetados por esta vulnerabilidade:

  • SeImpersonatePrivilege
  • SeAssignPrimaryPrivilege
  • Setcbprivilege
  • SeBackupPrivilege
  • SeRestorePrivilege
  • SeCreateTokenPrivilege
  • SeLoadDriverPrivilege
  • SeTakeOwnershipPrivilege
  • SeDebugPrivilege

Vamos gerar outra carga e executar um ouvinte para ela.

imagem

imagem

Para operação, usaremos Juicy Potato . Mas, como parâmetro, você precisa especificar o CLSID da conta para o sistema de destino, também o usaremos no repositório . Mas primeiro, vamos ver que tipo de sistema.

imagem

E agora olhamos para o CLSID.

imagem

Faça o upload dos arquivos para o host de destino.

imagem

Agora execute o Juicy Potato e diga como o processo será criado (CreateProcessWithTokenW ou CreateProcessAsUser, parâmetro -t), arquivo do processo (-p), porta de atendimento (-l) e CLSID (-c).

imagem

O processo foi criado com sucesso e vemos a sessão metterpreter criada.

imagem

E temos a conta do sistema.

Você pode se juntar a nós no Telegram. Vamos montar uma comunidade na qual haverá pessoas versadas em muitas áreas da TI, para que possamos sempre ajudar uns aos outros em qualquer problema de segurança da TI e da informação.

All Articles