
Pentest di TeamCity con Metasploit
TL;DR: Ottieni password da JetBrains IDE (come IntelliJ o PyCharm) e usa quelle credenziali all'interno di TeamCity Continuous Integration Server per ottenere una sessione meterpreter sul server e sugli agenti di build usando metasploit di Kacper Szurek.




Questo è un commento del fornitore (JetBrains TeamCity team) di Yegor Yarko:
La maggior parte del contenuto dell'articolo descrive come utenti malintenzionati possano abusare di TeamCity se gli vengono concesse le autorizzazioni appropriate per farlo. Ad esempio, un utente con il ruolo di Amministratore di Sistema (che concede il controllo completo sul server) può installare un plugin TeamCity malevolo o ottenere un token per l'accesso "super user" al server. Inoltre, uno con il ruolo di Amministratore di Progetto può eseguire codice arbitrario sull'agente o recuperare le password di accesso al repository configurate. Questo comportamento fa parte delle funzionalità fornite da TeamCity come prodotto. Queste considerazioni sono descritte nella sezione correlata della documentazione di TeamCity.
I problemi descritti indicano quanto pericoloso possa essere fornire privilegi elevati a un attore malintenzionato. I manutentori del server TeamCity dovrebbero rivedere regolarmente le autorizzazioni degli utenti per non concedere a utenti potenzialmente malevoli autorizzazioni che potrebbero abusare; rivedere le autorizzazioni degli utenti guest, se abilitate. Un altro punto è non lasciare i terminali incustoditi mentre si è connessi con autorizzazioni non banali.
Tuttavia, due reali problemi di sicurezza sono menzionati nell'articolo: uno riguarda la pubblicazione di un artefatto di build malevolo e indurre un utente amministratore a visualizzarlo nel browser, e l'altro è l'escalation di un'autorizzazione per eseguire una build personalizzata in esecuzione di codice arbitrario su un agente TeamCity. Quest'ultimo ha solo effetti minori sulla maggior parte delle installazioni TeamCity poiché coloro che hanno questa autorizzazione hanno già regolarmente la capacità di eseguire qualsiasi codice sull'agente.
Tuttavia, intendiamo affrontare i problemi sopra menzionati in una delle prossime release di TeamCity, e vi ringraziamo per averli portati alla nostra attenzione.
Supponiamo che tu stia eseguendo un penetration test all'interno di un'azienda di software che utilizza lo stack Jetbrains. Stai usando metasploit e ottieni una sessione meterpreter sul computer dello sviluppatore.
Cosa puoi fare dopo? C'è un articolo sul pentesting di TeamCity di Nikhil SamratAshok Mittal del 2015.
In questo post combino diverse tecniche da Security Notes e BugTrack e le inserisco in un modulo Metasploit.
Nota: Non uso alcun 0 day qui. Per ogni azione sono necessarie credenziali TeamCity valide. Vedi Commento di JetBrains.
Non sono responsabile per eventuali danni causati da questo script. Per la sicurezza dei dati usa set CLEANUP false.
Testato su TeamCity 2017.2.1 (build 50732).
Per decodificare il database KeePass abbiamo bisogno della libreria Ruby kdbx.
find / -name "metasploit-framework.gemspec"vim /usr/share/metasploit-framework/metasploit-framework.gemspecspec.add_runtime_dependency 'kdbx', '0.2.0'cd /usr/share/metasploit-framework/ && bundle installOra puoi:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb e serverplugin.zip in ~/.msf4/modules/exploitsjetbrains.rb in ~/.msf4/modules/postmsfconsolereload_allTeamCity può essere facilmente integrato con tutti gli IDE JetBrains utilizzando il plugin.

Se l'opzione Remember me viene utilizzata, le password vengono memorizzate tramite IntelliJ Platform Credentials Store API. Puoi trovare il codice sorgente qui.
La routine di decodifica su Windows funziona così:

pdb.pw viene decifrato utilizzando Windows CryptUnprotectData. Ciò significa che solo l'utente che ha crittografato i dati può decodificarli.c.kdbx può ora essere decifrato usando la Master Password del punto 20xDFAAPer impostazione predefinita, la Master Password è casuale. Può essere modificata nelle opzioni:

Ma questo non cambia nulla.
Significa solo che il database KeePass c.kdbx sarà crittografato con una password diversa. L'utente locale può comunque ottenere facilmente questa password dal file pdb.pw.