Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-65018_Exploit_Challenge — Desafio CTF explorando um buffer overflow na heap do mundo real em libpng (CVE-2025-65018) com um PNG entrelaçado malicioso para sobrescrever um ponteiro de função e obter um shell. | Kitploit
Ferramentas/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
Análise de VulnerabilidadesExploraçãoCTFAprendizado e EducaçãoExploração de BináriosLabs e Prática
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

Desafio CTF explorando um buffer overflow na heap do mundo real em libpng (CVE-2025-65018) com um PNG entrelaçado malicioso para sobrescrever um ponteiro de função e obter um shell.

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
há 8 mesesAinda não revisado

Desafio CTF CVE-2025-65018: "Pânico PNG"

Este desafio é baseado em uma vulnerabilidade real de estouro de buffer no libpng (especificamente lidando com a API simplificada png_image_finish_read ao processar imagens entrelaçadas de 16 bits).

🚩 Objetivo do Desafio

Você recebe um binário vulnerável victim que usa uma versão estaticamente ligada e vulnerável do libpng. O aplicativo lê um arquivo PNG chamado exploit.png em um buffer. Seu objetivo é criar um arquivo PNG malicioso que desencadeie um estouro de heap para sobrescrever um ponteiro de função na estrutura Logger (localizada imediatamente após o buffer da imagem), redirecionando a execução para a função win() para abrir um shell.


🛠️ Configuração e Compilação

Pré-requisitos: gcc, make, python3, git, autoconf, automake, libtool.

  1. Clone o repositório:

    root@kitploit:~
    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. Compile o desafio (incluindo libpng vulnerável):

    root@kitploit:~
    ./build.sh
    

    Este script irá:

    • Configurar e aplicar patch no código-fonte do libpng incluído para ativar a vulnerabilidade.
    • Compilar a biblioteca estática libpng.
    • Compilar o binário victim.

🔍 Detalhes da Vulnerabilidade

A vulnerabilidade existe na forma como o libpng lida com imagens entrelaçadas ao converter da entrada de 16 bits para saída de 8 bits.

  1. A Incompatibilidade: O aplicativo solicita um formato de saída de 8 bits (PNG_FORMAT_RGBA). O libpng aloca um tamanho de buffer suficiente para dados de 8 bits.
  2. A Falha: Durante o processamento das passagens entrelaçadas (Adam7), a função interna png_combine_row escreve incorretamente os dados usando a profundidade de bits de 16 bits da entrada no buffer de saída.
  3. O Resultado: Para cada pixel, escreve 2 bytes por canal em vez de 1, efetivamente escrevendo o dobro da quantidade esperada de dados para aquela linha, estourando o buffer da heap.

💥 Passo a Passo da Exploração

1. Encontre o Endereço Alvo

O binário contém uma função auxiliar win() que chama execl("/bin/sh", ...). Precisamos do seu endereço. Como o binário é compilado com -no-pie, os endereços são estáticos.

root@kitploit:~
nm victim | grep win
# Output: 00000000004013e0 T win

Endereço Alvo: 0x4013e0

2. Criando o Payload (solve.py)

Precisamos criar um PNG válido que:

  1. Seja Entrelaçado (Adam7) para acionar o caminho de código vulnerável.
  2. Tenha um cabeçalho (IHDR) especificando profundidade de 16 bits.
  3. Tenha dados de pixel que, quando escritos como valores de 16 bits, formem nosso payload desejado (o endereço de win).

O script solve.py faz isso:

  • Constrói uma imagem 32x32.
  • Calcula o deslocamento para a struct Logger (que está 4096 bytes após o início do buffer).
  • Coloca o endereço de win nos dados de pixel da última linha.
  • Comprime os dados em um chunk IDAT.

Layout do Payload: O endereço de win 0x4013e0 (Little Endian: E0 13 40 00 ...) precisa ser codificado em pixels RGB de 16 bits.

  • Cada canal de 16 bits tem 2 bytes.
  • Mapeamos os bytes do endereço para os canais Vermelho, Verde e Azul de pixels específicos na última linha.

3. Executando o Exploit

Gere o PNG malicioso:

root@kitploit:~
python3 solve.py 4013e0

Isso cria exploit.png.

Execute o victim:

root@kitploit:~
./victim

Saída Esperada:

root@kitploit:~
[*] Win function is at: 0x4013e0
[*] Buffer at: 0x7ffd51353530
[*] Logger at: 0x7ffd51354530
[*] Offset from buffer start to logger: 4096 bytes
[*] Processing image...
[+] png_image_finish_read success
[*] Calling logger...
[*] Hacked! Spawning shell...
$ 

🐛 Análise com GDB

Para ver o estouro em ação, você pode usar o GDB.

1. Coloque um ponto de parada antes da chamada vulnerável:

root@kitploit:~
break 62
run

2. Monitore a sobrescrita: A struct Logger está no deslocamento 4096. Vamos monitorar o ponteiro de função alvo.

root@kitploit:~
print &ctx.logger.log_func
# $1 = (void (**)(const char *)) 0x7fffffffc8f0
watch *0x7fffffffc8f0
continue

3. Acione: O GDB irá parar quando png_combine_row escrever no ponteiro de função.

root@kitploit:~
Hardware watchpoint 2: *0x7fffffffc8f0

Old value = 4199366  (0x4013c6 <normal_log>)
New value = 4199392  (0x4013e0 <win>)
0x00007ffff7e024d9 in __memcpy_avx_unaligned_erms ()

Isso confirma que o libpng sobrescreveu nosso ponteiro com o endereço de win!


📁 Arquivos

  • victim.c: Código-fonte vulnerável.
  • solve.py: Gerador de exploit.
  • libpng-src/: Código-fonte do libpng (v1.6.37).
  • build.sh: Script para compilar tudo.
  • Makefile: Sistema de compilação para o binário victim.
Baixar ferramenta