
Exploit per l'esecuzione remota di comandi nel comando go get di Golang.
Exploit per l'esecuzione remota di comandi nel comando go get di Golang.
Quando esegui go get su un pacchetto, Go è progettato per compilare e installare il pacchetto senza eseguire alcun codice da esso. L'intento è che tu possa ottenere, compilare e persino installare pacchetti Go in sicurezza, senza fidarti affatto di loro. In teoria, sembra un'impresa semplice per la toolchain di Go, ma in realtà è una vera sfida. go get fa molto lavoro sotto il cofano, inclusa l'invocazione di strumenti di terze parti come git e clang in modi fortemente influenzati dalle configurazioni dei pacchetti. Garantire che queste invocazioni siano sicure è una battaglia in salita che Go non ha ancora del tutto vinto.
Quando cgo è abilitato, la fase di compilazione durante "go get" invoca il compilatore C dell'host, gcc o clang, aggiungendo i flag del compilatore specificati nei file sorgente Go. Sia gcc che clang supportano un meccanismo di plugin in cui un plugin come libreria condivisa viene caricato nel compilatore, come indicato dai flag del compilatore. Ciò significa che un repository di pacchetti Go può contenere un file exploit.so insieme a un file sorgente Go che dice (ad esempio) // #cgo CFLAGS: -fplugin=exploit.so, causando il caricamento del plugin di attacco nel compilatore C dell'host durante la compilazione. I plugin di gcc e clang hanno un accesso del tutto illimitato al sistema host.
Go precedente alla 1.8.7, Go 1.9.x precedente alla 1.9.4 e le pre-release di Go 1.10 precedenti a Go 1.10rc2 consentono l'esecuzione remota di comandi tramite go get durante la compilazione del codice sorgente, sfruttando la funzionalità dei plugin di gcc o clang, poiché gli argomenti -fplugin= e -plugin= non erano bloccati.Go precedente alla 1.8.7, Go 1.9.x precedente alla 1.9.4 e le pre-release di Go 1.10 precedenti.
Per l'exploit dovremo ospitare il nostro pacchetto malevolo. Abbiamo bisogno di un sito web con TLS e una catena di certificati valida. Un modo semplice per farlo è usare github.
Poi, avrai bisogno di un file plugin/.so malevolo. Il codice in exploit.c dovrebbe aiutarti in questo.
Nota: modifica il seguente codice in exploit.c con il tuo comando
void exploit() {
system("<Your CMD>");
}
Nota: compila questo file in base all'architettura della macchina/PC della vittima
Puoi compilare exploit.sp usando il seguente comando:
gcc -shared -o exploit.so -fPIC exploit.c
Una volta che avrai ospitato il tuo payload completo su Github, dovresti essere in grado di passare il link del pacchetto alla vittima.