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-2019-5096-GoAhead-Web-Server-Dos-Exploit — Exploração em Python para CVE-2019-5096, uma vulnerabilidade de use-after-free no manipulador de upload do servidor web GoAhead, causando negação de serviço via double-free. | Kitploit
Ferramentas/GitHubGitHub/ianxtianxt/cve-2019-5096-goahead-web-server-dos-exploit
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebFuzzingExploração de Binários
GitHubianxtianxt/cve-2019-5096-goahead-web-server-dos-exploit

CVE-2019-5096-GoAhead-Web-Server-Dos-Exploit

Exploração em Python para CVE-2019-5096, uma vulnerabilidade de use-after-free no manipulador de upload do servidor web GoAhead, causando negação de serviço via double-free.

Ver Repositório
132há 6 anosAinda não revisado

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

CVE-2019-5096 Use After Free Dos Exploit

root@kitploit:~
python TriggerDOS.py ip	

TriggerDoubleFree

Análise de Vulnerabilidade

[https://github.com/embedthis/goahead.git] link do GoAhead no GitHub

git diff do patch

GitDiff

Análise do código-chave

Localizando no código upload.c:370, pode-se ver que antes de

root@kitploit:~
	wp->currentFile=0

foi executado:

root@kitploit:~
typedef struct WebsUpload {
    char    *filename;              /**< Local (temp) name of the file */
    char    *clientFilename;        /**< Client side name of the file */
    char    *contentType;           /**< Content type */
    ssize   size;                   /**< Uploaded file size */
} WebsUpload;
...

typedef struct Webs {
...
    WebsUpload      *currentFile;
...
}Webs;
...
processContentData(Webs *wp){
...
	file = wp->currentFile;
	...
	hashEnter(wp->files, wp->uploadVar, valueSymbol(file), 0);
	defineUploadVars(wp);
	wp->currentFile=0;
	...
}

A função hashEnter adiciona um elemento à tabela hash, causando múltiplas referências a wp->currentFile. A estrutura WebsUpload em wp->files (tabela hash) será liberada quando termWebs for chamado no final da sessão HTTP (fim do ciclo de vida do Webs).

root@kitploit:~
static void termWebs(Webs *wp, int reuse)
{
...
#if ME_GOAHEAD_UPLOAD
    if (wp->files >= 0) {
        websFreeUpload(wp); //percorre a hashtable e libera a estrutura WebsUpload.
    }
#endif
}

A seguir, veja outro ponto de free:

root@kitploit:~
...
processUploadHeader(Webs *wp, char *line)
{
	while (key && stok(key, ";\r\n", &nextPair)) { // aqui analisa o cabeçalho upload com ';' como delimitador
		...
		else if (scaselesscmp(key, "filename") == 0) {
		...
		freeUploadFile(wp->currentFile);
		file = wp->currentFile = walloc(sizeof(WebsUpload));
		...		
        }
	}
}

Descobre-se que, se o cabeçalho de upload tiver um campo filename, será liberado wp->currentFile e então alocado um WebsUpload com walloc.
Como sizeof(WebsUpload) está dentro do tamanho de global_max_fast, o heap rápido será alocado em LIFO, então o bloco recém-liberado será imediatamente alocado novamente e, posteriormente, na função processContentData, será adicionado novamente à tabela hash. Nesse momento, a tabela hash já terá duas referências a esse chunk, resultando em um double free quando termWebs for chamado, causando abort.

Acionando a vulnerabilidade

Adicionando dois cabeçalhos de upload em uma solicitação:
Após a função processContentData, entrar novamente na função processUploadHeader. Ou seja, a seguinte sequência de chamadas:

websProcessUploadData (循环) #上传状态机,每次循环确定一个状态 ->initUpload()
->processContentBoundary()
->processUploadHeader()
->processContentData()
->processContentBoundary()
->processUploadHeader()
->processContentData()
->return;

Possibilidade de execução de código

...

Baixar ferramenta