TryHackMe Basic Pentesting CTF Çözümü
                    Hacking pratiği yapmak ve siber güvenlik becerilerini geliştirmek için harika bir platform olan TryHackMe, popüler bir öğrenme platformudur. TryHackMe’de, farklı zorluk seviyelerinde sanal makineler (CTF’ler) ve öğrenme yolları bulunur. Bunlara erişmek için kendi makinenizi platforma VPN aracılığıyla bağlamanız gerekir.
Bu bağlantıyı kurmak için aşağıdaki adımları izleyebilirsiniz.
TryHackMe VPN Bağlantısı Nasıl Yapılır?
VPN bağlantısı kurmak, TryHackMe’deki sanal makinelere erişmek için atılması gereken ilk adımdır. Bu, sizin makinenizle TryHackMe’nin ağını birleştirir ve CTF’leri çözmenize olanak tanır.
1. Erişim Dosyasını İndirin
İlk olarak TryHackMe hesabınıza giriş yapın. Sağ üst köşede bulunan profil simgenize tıklayın ve açılan menüden Access seçeneğini seçin. Bu sayfa, size VPN bağlantısı için gereken OpenVPN ayarlarını sunacaktır.

Sayfada, bir dizi VPN sunucusu seçeneği göreceksiniz. Hız ve gecikme süresi açısından en iyi performansı almak için bulunduğunuz konuma en yakın sunucuyu seçmeniz önerilir. Sunucuyu seçtikten sonra, Download configuration file (Yapılandırma dosyasını indir) düğmesine tıklayın. Bu işlem, .ovpn uzantılı bir dosya indirecektir. Bu dosya, VPN bağlantısını kurmak için gereken tüm bilgileri içerir.

2. OpenVPN ile Bağlantıyı Kurun
İndirdiğiniz .ovpn dosyasını kullanarak VPN bağlantısını kurmak için terminali kullanacağız. Dosyayı indirdiğiniz konuma (genellikle ~/Downloads dizini) gidin ve aşağıdaki komutu çalıştırın:
- sudo: Bu komutu yönetici haklarıyla çalıştırmanızı sağlar.
 - openvpn: OpenVPN programını başlatır.
 - DOSYA_ADI.ovpn: İndirdiğiniz 
.ovpndosyasının adını buraya yazmalısınız. 
Bağlantı başarılı olursa, terminalde birçok log kaydı göreceksiniz. Bu loglar arasında, bağlantının başarıyla kurulduğunu ve bir tünel (tun0) arayüzü oluşturulduğunu belirten satırları arayabilirsiniz.

Şimdi yeni bir terminal açıp ifconfig komutla yeni bir IP adresi atanıp atanmadığını kontrol edebilirsiniz:

Bu komutun çıktısında, tun0 adında yeni bir ağ arayüzü görmeniz gerekir. Bu arayüze atanan IP adresi, artık TryHackMe ağına bağlı olduğunuzu gösterir.
Artık TryHackMe ağına başarıyla bağlandınız. Bir sonraki bölümde, Basic Pentesting CTF çözümüne geçiş yapabiliriz.
Not: Ekran görüntüsündeki loglarda da görebileceğiniz gibi, bağlantı başarıyla kurulduktan sonra tun0 adında bir tünel oluşturulmuş ve 10.9.1.115 gibi bir IP adresi atanmıştır. Bu, VPN bağlantınızın sorunsuz bir şekilde çalıştığı anlamına gelir.
Basic Pentesting CTF Çözümü

Bu bölümde, hedef makineyi aktif hale getirecek ve üzerinde çalışan servisleri keşfedeceğiz. Bu, bir pentest sürecinin en temel ve en önemli adımlarından biridir.
NOT : Yukarda anlattığımız gibi önce VPN bağlantısını yapmayı unutmayın.

Hedef Makineyi Başlatın
Öncelikle, Basic Pentesting odasına gidin ve “Start Machine” düğmesine tıklayın. Bu, TryHackMe’nin sizin için özel bir sanal makineyi başlatmasını sağlar. Makine başlatıldığında, size bu makinenin IP adresi verilecektir. Bu adresi bir yere not alın, çünkü tüm işlemlerimizi bu IP adresi üzerinden yapacağız.


Servis Keşfi (Nmap Taraması)
Hedef makine ile bağlantımız olduğuna göre, şimdi hangi servislerin çalıştığını öğrenmeliyiz. Bunun için Nmap (Network Mapper) aracını kullanacağız. Nmap, bir ağ üzerindeki ana bilgisayarları ve bu ana bilgisayarlar üzerinde çalışan servisleri keşfetmek için kullanılan güçlü bir araçtır.
Terminalde aşağıdaki komutu çalıştırarak kapsamlı bir tarama yapın:
sudo nmap -sV -sC -oN -Pn <HEDEF_IP_ADRESİ>

- sudo: Komutu yönetici haklarıyla çalıştırmak için kullanılır.
 - nmap: Nmap aracını çağırır.
 - -sV: Servis versiyonlarını tespit etmek için kullanılır.
 - -sC: Varsayılan Nmap betiklerini (scripts) çalıştırır. Bu betikler, açık portlar üzerinde zafiyetleri ve ek bilgileri bulmak için kullanışlıdır.
 - -oN: Tarama sonuçlarını bir dosyaya kaydeder.
 - -Pn: Hedefe ping atlamasını devre dışı bırakır ve host’u çevrimdışı görünse bile port taramasını doğrudan başlatır.
 
Taramadan sonra, Nmap çıktısında aşağıdaki açık portları ve servisleri göreceksiniz:
- Port 22: SSH (OpenSSH 8.2p1 Ubuntu)
 - Port 80: HTTP (Apache httpd 2.4.41 Ubuntu)
 - Port 139/445: SMB (Samba smbd 4.x)
 - Port 8009: AJP13 (Apache Jserv Protocol)
 - Port 8080: HTTP (Apache Tomcat)
 
Bu sonuçlar, makineye sızmak için potansiyel yollar sunar.
Web Servislerinin İncelenmesi
Nmap taramasında, 80 ve 8080 portlarında iki farklı web sunucusunun çalıştığını gördük.
Port 80: Tarayıcınızla hedef IP adresine giderek (örn.10.10.84.234/), "Undergoing maintenance" (Bakımda) mesajını göreceksiniz. Sayfanın kaynak kodunu (view-source) incelediğinizde, bir geliştirici notu olduğunu fark edeceksiniz:
`Check our dev note section if you need to know what to work on.`
Bu not, /dev veya `/development` gibi bir dizin arayışına işaret ediyor.


Klasör Keşfi (Dirb): Bu notu takiben, gizli dizinleri bulmak için Dirb aracını kullanmalıyız. Bu araç, yaygın kullanılan kelime listelerini kullanarak web sunucusundaki gizli dizinleri tarar. Terminalde aşağıdaki komutu çalıştırın:
dirb http://10.10.84.234 /usr/share/dirb/wordlists/common.txt

- dirb: Dirb aracını çağırır.
 - http://10.10.84.234: Hedef URL.
 - /usr/share/dirb/wordlists/common.txt: Dirb’ün yaygın kelime listelerinden biridir.
 
Tarama sonuçlarında, /development adlı bir dizinin bulunduğunu göreceksiniz. Tarayıcınızdan bu adrese gittiğinizde (örn. http://10.10.84.234/development/), dev.txt ve j.txt adında iki dosya olduğunu göreceksiniz. Bu dosyaları incelemek, bir sonraki adımlarımız için önemli bilgiler sağlayacaktır.

dev.txt dosyası, K harfiyle imzalanmış bir not içeriyor. Bu not, sunucunun SMB (Samba) servisinin yapılandırıldığından bahsediyor. Bu, potansiyel bir saldırı vektörü olabilir. Notta ayrıca "struts" ve "Apache Tomcat" gibi terimler de geçiyor. Bu, makine üzerindeki port 8080'de çalışan Apache Tomcat'in bir zafiyeti olabileceğine işaret ediyor.

j.txt dosyası ise K'den J'ye yazılmış bir not gibi görünüyor. Notta, K'nin /etc/shadow dosyasını denetlediği ve bir kullanıcının parolasının kolayca kırılabildiği belirtiliyor. Bu, zayıf parola kullanan bir kullanıcının olduğunu ve bu kullanıcının parolasını kırmak için deneme yapmamız gerektiğini gösteriyor.

Kullanıcı Adlarını Bulma
Bu notlar ışığında, hedef makinedeki kullanıcı adlarını bulmak için bir SMB zafiyet arama aracı olan enum4linux’u kullanabiliriz. Bu araç, Samba servisindeki kullanıcıları, grupları ve paylaşım klasörlerini listelemek için tasarlanmıştır.
Terminalde aşağıdaki komutu çalıştırın:
enum4linux -a <HEDEF_IP_ADRESİ>

- enum4linux: Aracı başlatır.
 - -a: Tüm olası listeleme adımlarını (kullanıcı, grup, paylaşımlar vb.) otomatik olarak gerçekleştirir.
 
Tarama sonucunda, hedef makinede bulunan yerel kullanıcıların listesi karşınıza çıkacaktır:

- kay
 - jan
 - ubuntu
 
Bu üç kullanıcı adını bir yere not alın. j.txt dosyasındaki notu hatırlayınca, jan kullanıcısının parolasının kolay kırılabileceği varsayımını yapabiliriz.
Zayıf Parolayı Kırma (Hydra ile Brute-Force)
Artık bir kullanıcı adımız (jan) ve bir de zayıf parola ipucumuz var. Parolayı kırmak için Hydra gibi bir kaba kuvvet (brute-force) aracı kullanabiliriz. Hydra, farklı protokoller (SSH, FTP, HTTP gibi) için parola denemeleri yapmakta oldukça etkilidir. SSH servisi açık olduğundan, SSH üzerinden deneme yapacağız.
Yaygın olarak kullanılan parolaların bulunduğu bir kelime listesi olan rockyou.txt dosyasını kullanacağız. Terminalde aşağıdaki komutu çalıştırın:
hydra -l jan -P /usr/share/wordlists/rockyou.txt ssh://<HEDEF_IP> -VV

- hydra: Hydra aracını başlatır.
 - -l jan: Parola denemesi yapılacak kullanıcı adını (
jan) belirtir. - -p /usr/share/wordlists/rockyou.txt: Kullanılacak parola listesinin yolunu belirtir.
 - ssh://<HEDEF_IP_ADRESİ>: Kaba kuvvet saldırısının yapılacağı servisi (SSH) ve hedef adresi belirtir.
 - -VV: Ayrıntılı çıktılarla denenen her kullanıcı adı/parola kombinasyonunu gösterir.
 
Hydra bir süre çalıştıktan sonra, jan kullanıcısının parolasını bulacaktır. Çıktıda armando parolasının doğru olduğu gösteriliyor.

Artık kullanıcı adımız (jan) ve şifremiz (armando) olduğuna göre, bir sonraki aşama olan sisteme giriş yapma ve yetki yükseltme işlemlerine geçebiliriz.
Sisteme SSH ile Bağlanma
Hydra ile bulduğumuz jan kullanıcısı ve armando parolası ile hedef sisteme SSH üzerinden bağlanabiliriz. Terminalde aşağıdaki komutu girin:
ssh jan@<HEDEF_IP_ADRESİ>

Parola istendiğinde, bulduğunuz armando şifresini girin. Doğru parolayı girdiğinizde, jan kullanıcısı olarak sisteme giriş yapmış olacaksınız.
Dosya Sistemi Keşfi
Artık jan kullanıcısı olarak sistemdesiniz. İlk olarak, yetki yükseltmek için ipuçları aramak üzere dosya sistemini keşfetmeye başlayalım. ls ve ls -la komutlarını kullanarak mevcut dizin ve dosyaları kontrol edin.
cd ..komutuyla bir üst dizine (root dizinine) gidin.lskomutuyla/homedizininin içeriğini listeleyin. Gördüğünüz gibi, sistemde jan, kay ve ubuntu adında kullanıcı dizinleri bulunuyor.cd kaykomutuyla kay kullanıcısının dizinine geçmeye çalışın. AncakPermission denied(İzin reddedildi) hatası alacaksınız. Bu durum normaldir, çünkü başka bir kullanıcının dizinine doğrudan erişim izniniz yoktur.

Fakat SSH bağlantınız devam ettiği için jan kullanıcısı olarak kendi dizininizde ls -la komutunu kullandığınızda .ssh adında gizli bir dizin olduğunu göreceksiniz. Bu dizin genellikle SSH anahtarlarını barındırır ve yetki yükseltme için bir yol sağlayabilir.
SSH Özel Anahtarı Bulma
jan dizinindeki .ssh klasörüne girin ve ls -la komutuyla içeriğini kontrol edin. Burada id_rsa ve authorized_keys adında dosyalar olduğunu göreceksiniz. id_rsa, SSH özel anahtarıdır ve genellikle parolayla korunur. Bu anahtar, başka bir kullanıcıya veya sisteme parola girmeden bağlanmak için kullanılabilir.

cat id_rsakomutuylaid_rsadosyasının içeriğini görüntüleyin. Dosya-----BEGIN RSA PRIVATE KEY-----ile başlayıp-----END RSA PRIVATE KEY-----ile bitiyorsa, bu bir özel anahtardır.

ENCRYPTEDkelimesini görüyorsanız, bu anahtarın bir parola (passphrase) ile korunduğu anlamına gelir.
Bu anahtarı kendi makinemize kopyalamalı ve parolasını kırmalıyız. nano veya vim gibi bir metin düzenleyici kullanarak dosyanın tüm içeriğini kopyalayın ve kendi Kali makinenizde id_rsa adıyla bir dosyaya yapıştırın.



SSH Özel Anahtar Parolasını Kırma
Anahtarın parolasını kırmak için ssh2john ve john araçlarını kullanacağız.
- İlk olarak, SSH anahtarını 
johnaracının anlayacağı bir formata dönüştürmek içinssh2johnaracını kullanın: 
ssh2john id_rsa > john.txt

- Bu komut, 
id_rsadosyasındaki şifreli anahtarı alıpjohn.txtdosyasına John the Ripper'ın okuyabileceği bir formatta yazar. - Şimdi 
johnaracını kullanarak parolayı kırmaya çalışın. Yinerockyou.txtkelime listesini kullanacağız: 
john --wordlist=/usr/share/wordlists/rockyou.txt john.txt

johnbir süre çalıştıktan sonra,id_rsaanahtarının parolasını bulacaktır. Ekran görüntüsünde parolanın "beeswax" olduğu görülüyor.
kay Kullanıcısına Erişme
Artık kay kullanıcısının SSH özel anahtarının parolasını bildiğimize göre, bu anahtarı kullanarak kay hesabına SSH ile bağlanabiliriz.
ssh -i id_rsa kay@<HEDEF_IP_ADRESİ>
- -i: Kullanılacak özel anahtar dosyasını belirtir (
id_rsa). 
Sistem sizden anahtarın parolasını (passphrase) isteyecektir. Bulduğunuz “beeswax” parolasını girin. Giriş başarılı olduğunda, jan yerine kay kullanıcısı olarak sisteme giriş yapmış olacaksınız.

kay kullanıcısının dizininde pass.bak adında bir dosya olduğunu göreceksiniz. Bu dosyayı cat komutuyla okuyabilirsiniz. Dosyanın içinde "heresareallystrongpasswordthatfollowsthepasswordpolicy$$" yazan bir string bulunur. Bu, makinedeki ilk bayrağın cevabı olabilir.
Yetki Yükseltme ve Son Bayrak


kay kullanıcısı olarak sisteme giriş yaptığınızda, dizininde pass.bak adında bir dosya buldunuz ve içeriğini okudunuz. Dosyanın içindeki string olan heresareallystrongpasswordthatfollowsthepasswordpolicy$$ aslında makinenin son bayrağıdır. Bu string'i TryHackMe'deki ilgili soru kutucuğuna yapıştırdığınızda cevabınızın doğru olduğunu göreceksiniz.
Bu string, hem yetki yükseltme için kullanılabilecek bir parola hem de doğrudan cevabın kendisi olabilir. Bu senaryoda yetki yükseltme, genellikle sudo veya SUID binary'leri gibi yöntemlerle gerçekleştirilir. Ancak bu CTF'in amacına ulaşmak için bulduğunuz string yeterli.
Başarılı Tamamlanma

Soruyu doğru cevapladığınızda, TryHackMe size bu CTF’i başarıyla tamamladığınızı bildirecektir. Bu, temel seviyede bir sızma testi (pentest) sürecinin tüm adımlarını başarıyla uyguladığınız anlamına gelir:
- Keşif (Reconnaissance): Nmap ve Dirb araçlarını kullanarak hedef makine hakkındaki bilgileri topladınız.
 - Yetki Kazanma (Gaining Access): SMB servisindeki kullanıcıları ve web sitesindeki geliştirici notlarını kullanarak bir kullanıcı adı (
jan) buldunuz ve Hydra ile zayıf parolasını (armando) kırdınız. - Yetki Yükseltme (Privilege Escalation): 
jankullanıcısı olarak sisteme girdiniz, gizli bir SSH özel anahtarı buldunuz, bu anahtarın parolasını (beeswax) kırdınız ve bu sayedekaykullanıcısına erişim sağladınız. - Bayrak Bulma (Flag Capturing): 
kaykullanıcısının dizinindeki bir dosyada son bayrağı buldunuz ve CTF'i tamamladınız. 
Bu adımlar, gerçek dünyadaki sızma testi çalışmalarının temel mantığını yansıtır. Her adım, bir sonraki adımı mümkün kılan kritik bilgileri ortaya çıkarmıştır.