Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2019-5096-GoAhead-Web-Server-Dos-Exploit — Exploit Python per CVE-2019-5096, una vulnerabilità use-after-free nel gestore di upload del server web GoAhead, che causa denial of service tramite double-free. | Kitploit
Strumenti/GitHubGitHub/ianxtianxt/cve-2019-5096-goahead-web-server-dos-exploit
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebFuzzingBinary Exploitation
GitHubianxtianxt/cve-2019-5096-goahead-web-server-dos-exploit

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

Exploit Python per CVE-2019-5096, una vulnerabilità use-after-free nel gestore di upload del server web GoAhead, che causa denial of service tramite double-free.

Vedi Repository
1326 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2019-5096 Use After Free Dos Exploit

root@kitploit:~
python TriggerDOS.py ip	

TriggerDoubleFree

Analisi della vulnerabilità

[https://github.com/embedthis/goahead.git] Collegamento GitHub di GoAhead

git diff della patch

GitDiff

Analisi del codice critico

Nel codice, individuare upload.c:370, si può vedere che in

root@kitploit:~
	wp->currentFile=0

prima viene eseguito

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;
	...
}

La funzione hashEnter aggiunge un elemento alla tabella hash, causando qui molteplici riferimenti a wp->currentFile. La struttura WebsUpload nella wp->files (tabella hash) verrà liberata quando viene chiamata termWebs alla fine della sessione HTTP (fine del ciclo di vita di Webs).

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

Ora guardiamo un altro punto di free:

root@kitploit:~
...
processUploadHeader(Webs *wp, char *line)
{
	while (key && stok(key, ";\r\n", &nextPair)) {// parsing dell'header upload usando ; come delimitatore
		...
		else if (scaselesscmp(key, "filename") == 0) {
		...
		freeUploadFile(wp->currentFile);
		file = wp->currentFile = walloc(sizeof(WebsUpload));
		...		
        }
	}
}

Si scopre che se l'header upload ha un campo filename, allora wp->currentFile viene liberato, e successivamente viene allocato un WebsUpload con walloc.
Poiché sizeof(WebsUpload) rientra nella dimensione di global_max_fast, il chunk heap verrà allocato secondo la politica LIFO (Last In First Out), quindi il chunk appena liberato viene immediatamente riallocato e verrà nuovamente aggiunto alla tabella hash nella successiva funzione processContentData. A questo punto la tabella hash ha già due riferimenti a quel chunk, e quando viene chiamato termWebs si verifica un double free che causa un abort.

Attivazione della vulnerabilità

Aggiungere due header upload in una singola richiesta:
Invocazione sequenziale dopo processContentData della funzione processUploadHeader. Cioè nell'ordine seguente:

websProcessUploadData (ciclo) # macchina a stati dell'upload, ogni ciclo determina uno stato ->initUpload()
->processContentBoundary()
->processUploadHeader()
->processContentData()
->processContentBoundary()
->processUploadHeader()
->processContentData()
->return;

Possibilità di esecuzione di codice

...

Scarica lo strumento