HackTheBox – Başlangıç Noktası Aşaması – Seviye 1/

HTB Labs — Tier 1 — “Funnel” Makinesi Çözümü | Yazan: CyberAlp0

YAZARCyberAlp0
YAYINLANMA TARİHİ4 Temmuz 2026
OKUMA SÜRESİ08 DK
HTB Labs — Tier 1 — “Funnel” Makinesi Çözümü | Yazan: CyberAlp0

Selam dostlar, ben CyberAlp0. HTB destekli yeni bir çözüm anlatımıyla, Tier 1'deki “Funnel” makinesiyle geri döndüm. Funnel, HackTheBox — Tier 1 — Starting Point aşamasındaki VIP laboratuvarlardan biridir. Pek çok konuya odaklanır ve FTP, PostgreSQL, Parola Spreyleme (Password Spraying), Tünelleme ve Açık Metin Kimlik Bilgileri gibi becerileri güçlendirir.

Yönetici Özeti

İzleyeceğimiz adımların yönetici özeti aşağıdadır:

Aşama I: Tarama

Tarama aşaması, Funnel makinesinin yalnızca iki TCP servisi açığa çıkardığını gösteriyor: FTP 21 numaralı portta ve SSH 22 numaralı portta. FTP anonim girişe izin veriyor; bu da yanlış yapılandırılmış ya da bilinçli olarak açık bırakılmış bir dosya paylaşım servisine işaret ediyor. SSH mevcut ancak geçerli kimlik bilgileri olmadan doğrudan kullanılamıyor. Sınırlı saldırı yüzeyi, ilk erişimin büyük olasılıkla FTP servisindeki yanlış yapılandırmalardan ya da onun içinde ele geçirilen sızdırılmış kimlik bilgilerinden geleceğini gösteriyor.

Nmap taramasının ardından aşağıdaki bilgilere ulaşacağız

  • Çalışan Servis: FTP
  • Servis Sürümü: vsftpd 3.0.3
  • Açık Port: 21/TCP

Aşama II: Keşif (Enumeration)

FTP sunucusuna eriştiğimizde, mail_backup adlı bir dizin iki dosya içeriyor: bir parola politikası belgesi ve yeni ekip üyeleri için bir karşılama mesajı. Bu dosyaların incelenmesi, kuruma ait varsayılan bir parolayı ve yeni kullanıcı hesaplarının bir listesini ortaya çıkarıyor. Bu hesapları denediğimizde, Christine adlı kullanıcının parolasını değiştirmediğini ve böylece kimlik doğrulamalı erişim için geçerli kimlik bilgileri sağladığını tespit ediyoruz.

Daha ileri keşif, ek bir servisi ortaya çıkarıyor — PostgreSQL — 5432 numaralı portta dinliyor ancak yalnızca localhost bağlantılarıyla sınırlandırılmış. Bu, yalnızca iç kullanım için tasarlanmış bir veritabanı servisine işaret ediyor. Doğrudan uzaktan erişim engellendiği için, ona erişmek geri kazanılan kimlik bilgileriyle geçerli bir SSH oturumu üzerinden tünelleme yapmayı gerektirecek.

Aşama III: Sömürü (Exploiting)

FTP keşfi yoluyla elde edilen geçerli SSH kimlik bilgileriyle saldırgan, local port forwarding kullanarak iç PostgreSQL servisine bir tünel kurar ve normalde erişilemeyen bir servise dışarıdan erişimi mümkün kılar. Veritabanına bağlanıldığında, mevcut veritabanlarının keşfi secrets adlı, makinenin saklanan bayrağını içeren bir veritabanını ortaya çıkarır. Bu veritabanının sorgulanması ele geçirme işlemini tamamlar.

Girişte daha fazla vakit kaybetmeyelim ve hacklemeye başlayalım!

Adım 1: Starting Point Laboratuvar Sunucularına Bağlanma.

Hedef makineye saldırabilmek için aynı ağda olmanız gerekir. Hedef makineye bağlanma konusunda size adım adım rehberlik edecek olan blog yazımı okuyabilirsiniz.

Adım 2: Makineyi Başlatma ve Görevleri Çözmeye Koyulma.

Görev 1: Kaç adet TCP portu açık?

Cevap: 2

Çözüm:

Hedef makinedeki açık portları öğrenmek için herhangi bir ağ tarama (network mapper) aracı çalıştıracağız. Nmap benim favorim olduğu için, aşağıdaki ekran görüntüsünde gösterildiği gibi şu komutu çalıştıracağım.

nmap -sV 10.129.226.251
Açık portları ve kaç portun çalıştığını belirlemek için hedef makinede Nmap aracının çalıştırılması.
Açık portları ve kaç portun çalıştığını belirlemek için hedef makinede Nmap aracının çalıştırılması.
Buradaki -sV bayrağı, Nmap'in hedef makinedeki açık portlarda çalışan servislerin sürümlerini tespit edeceği anlamına gelir.

Ekran görüntüsüne göre, TCP portlarının sayısı 2 ve bunlar şunlar:

  • 21/tcp: 3.0.3 sürümündeki FTP servisini çalıştırır
  • 22/tcp: 8.2 sürümündeki SSH servisini çalıştırır
OpenSSH: Bir bilgisayar ağı üzerinden güvenli iletişim sağlayan bir araç setidir. Kullanıcıların uzak makinelere güvenli bir şekilde oturum açmasını sağlayan güvenli kabuk (SSH) bağlantıları için yaygın olarak kullanılır.
8.2p1: Bu, OpenSSH'nin sürümünü belirtir. “8.2” ana sürümdür ve “p1”, bu sürüm için ilk yama (patch) sürümü olduğunu gösterir.

Görev 2: FTP sunucusunda mevcut olan dizinin adı nedir?

Cevap: mail_backup

Çözüm:

Dizinin adını belirlemek için, 21 numaralı portta çalışan FTP üzerinden hedefe bağlanmamız gerekir. “anonymous” kullanıcı adı ve boş bir parolayla bağlanmak için terminalde şu komutu çalıştırın.

ftp -p anonymous@10.129.226.251
Anonymous kullanıcı adı ve boş parolayla 21 numaralı port üzerinden hedef makineye bağlanma.
Anonymous kullanıcı adı ve boş parolayla 21 numaralı port üzerinden hedef makineye bağlanma.

Artık hedef makineye bağlandık ve içeriğini listeledik. Dizin mail_backup

TIER 0 — Starting Point aşamasında “FAWN” adlı bir makineyi zaten ele almıştık. Bu makinede FTP protokolünün nasıl sömürülebileceğini anlatmıştık. FTP hakkında daha net bir genel bakış edinmek için Blog yazımı kesinlikle incelemenizi tavsiye ederim.

Görev 3: “Funnel” ekibindeki her yeni üyenin en kısa sürede değiştirmesi gereken varsayılan hesap parolası nedir?

Cevap: funnel123#!#

Çözüm:

“mail_backup” dizininin içeriğini listeleyerek, bu dizinin içinde iki dosya olduğunu görebiliriz: “password_policy.pdf” ve “welcome_28112022”.

Her iki dosyayı da ekran görüntüsünde gösterildiği gibi “get” komutunu kullanarak indirebiliriz.

“mail_backup” dizini altında bulunan dosyaların indirilmesi
“mail_backup” dizini altında bulunan dosyaların indirilmesi

Dosyaları indirdikten ve “passwordpolicy.pdf” dosyasının içeriğini incelediğimizde, “Funnel” ekibindeki her yeni üyenin en kısa sürede değiştirmesi gereken varsayılan hesap parolasının “funnel123#!#” olduğunu görebiliriz

funnel123#!#, hemen değiştirilmesi gereken varsayılan paroladır.
funnel123#!#, hemen değiştirilmesi gereken varsayılan paroladır.

Görev 4: Hangi kullanıcı henüz varsayılan parolasını değiştirmemiş?

Cevap: Christine

Çözüm:

Parola politikasına uymayan kullanıcıyı belirlemek için, indirdiğiniz diğer dosya olan “welcome_28112022” dosyasını açın. Dosyanın içeriği aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.

Yeni gelenlere “optimus, albert, andreas, christine ve maria” yönelik karşılama mesajı
Yeni gelenlere “optimus, albert, andreas, christine ve maria” yönelik karşılama mesajı

Bu dosya, funnel ekibine yeni katılanları karşılıyor. Hangisinin hesap parolasını değiştirmediğini belirlemek için, bu hesapları kullanarak FTP üzerinden giriş yapmayı deneyeceğiz ve hemen değiştirilmesi tavsiye edilen varsayılan parola olan “funnel123#!#” değerini deneyeceğiz.

Tek tek denediğimizde, başarılı bir giriş yaptığımız için “Christine”in parolasını değiştirmediğini göreceğiz.

Parola politikasına uymayan kullanıcı Christine.
Parola politikasına uymayan kullanıcı Christine.
İşi kolaylaştırmak için hydra gibi herhangi bir parola kırma aracı da deneyebilirsiniz. Bir parola listesi oluşturun ve varsayılan parolayı bu listeye ekleyerek 5 farklı kullanıcı için test edin.

Görev 5: TCP 5432 numaralı portta çalışan ve yalnızca localhost'ta dinleyen servis hangisidir?

Cevap: PostgreSQL

Çözüm:

Port belirlendiğine göre, servisi tespit etmek için Nmap'i bu belirli portta çalıştırabiliriz.

nmap -sV -p 5432 10.129.226.251
5432 numaralı portta çalışan servisin belirlenmesi. Bu, postgresql servisi olarak görünüyor ve kapalı durumda.
5432 numaralı portta çalışan servisin belirlenmesi. Bu, postgresql servisi olarak görünüyor ve kapalı durumda.
TCP 5432 numaralı portu genellikle, açık kaynaklı bir ilişkisel veritabanı yönetim sistemi olan PostgreSQL tarafından kullanılır. Yalnızca localhost'ta dinleyecek şekilde yapılandırıldığında, bu, PostgreSQL'in yalnızca yerel makineden gelen bağlantıları kabul edecek şekilde ayarlandığı ve böylece uzaktan bağlantıları engelleyerek güvenliği artırdığı anlamına gelir.

Görev 6: Daha önce belirtilen servise yerel makineden erişemediğiniz için, bir tünel oluşturup kendi makinenizden ona bağlanmanız gerekecek. Kullanılacak doğru tünelleme türü nedir? uzak port yönlendirme (remote port forwarding) mi yoksa yerel port yönlendirme (local port forwarding) mi?

Cevap: Yerel Port Yönlendirme (Local Port Forwarding)

Çözüm:

Önceki ekran görüntüsünde gösterildiği gibi, portun durumu kapalı ve ona uzaktan bağlanamıyoruz. Bunun nedeni, PostgreSQL'in herhangi bir uzaktan bağlantıyı engellemek için yalnızca localhost'ta dinleyecek şekilde yapılandırılmış olmasıdır.

Bu nedenle, ona SSH tünellemesi kullanarak bağlanmayı deneyeceğiz. Kullanılacak doğru tünelleme türünü belirlemek için şunları göz önünde bulundurun:

  • Yerel Port Yönlendirme (Local Port Forwarding): Bu, yerel makinenizdeki bir portu uzak bir makinedeki bir porta yönlendirmenizi sağlar. Uzak bir makinedeki bir servise kendi yerel makineniz üzerinden erişmek istediğinizde kullanışlıdır.
  • Uzak Port Yönlendirme (Remote Port Forwarding): Bu, uzak bir makinedeki bir portu yerel makinenizdeki bir porta yönlendirmenizi sağlar. Uzak bir makinenin, yerel makinenizde çalışan bir servise erişmesine izin vermek istediğinizde kullanışlıdır.
  • Dinamik Port Yönlendirme (Dynamic Port Forwarding): Ağ trafiğini bir SSH bağlantısı üzerinden yönlendirmenizi sağlayan bir tünel oluşturma yöntemidir. Bu yöntem, her servis için ayrı ayrı port yönlendirmeleri yapılandırmaya gerek kalmadan uzak bir ağdaki birden fazla servise veya uygulamaya erişmek için özellikle kullanışlıdır.
SSH, erişiminizin olmadığı uzak kaynaklara bağlanmanızı ya da genel (public) bir istemcinin, elinizdeki bir web sunucusu gibi bir iç kaynağa erişmesini sağlayan bir tekniktir.

Bunu biraz daha açıklayalım:

Öncelikle: Yerel Port Yönlendirme (Local Port Forwarding)

Bu makinede olduğu gibi, PostgreSQL veritabanı makinesi ağ dışından gelen herhangi bir uzaktan bağlantıya izin vermiyor. Nmap yaptığımızda servisin durumunun kapalı olmasının nedeni de budur. Bu nedenle, “saldırgan” ile PostgreSQL veritabanı arasında bir bağlantı kurmak için bir aracı (SSH Public Sunucusu) kullanacağım. Bu, “saldırgan olarak” benim, ona erişebilmek için PostgreSQL veritabanının içindeymiş gibi davranacağım anlamına gelir.

SSH -L [Local_Port]:[Remote_Host]:[Remote_Port] [User]@[SSH_Server]
SSH -L [Local_Port]:[Remote_Host]:[Remote_Port] [User]@[SSH_Server]

Diyagrama göre saldırgan, “localhost” üzerinden “1234” yerel portunu yapılandıracak ve onu PostgreSQL servisini sunan “5432” uzak portuna yönlendirecek. Bu tünelleme tekniği, uzak sunucuya SSH üzerinden bağlanmak için kullanılan kullanıcı adının ve bağlandığınız uzak sunucunun IP adresinin belirlenmesini gerektirir.

İkinci olarak: Uzak Port Yönlendirme (Remote Port Forwarding)

Örneğin, kendi web uygulama sunucunuz yerel makinenizde barındırılıyor ve belki test amacıyla uzaktaki birinin web sunucunuza erişmesini istiyorsunuz. Peki uzaktaki bir istemci web sunucunuza serbestçe nasıl erişebilir?.

Bu, Uzak Port Yönlendirme (Remote Port Forwarding) yoluyla yapılır. Uzak port yönlendirme, uzak sunucudaki bir portu yerel makinenizdeki bir porta yönlendirmenizi sağlar.

SSH -R [Remote_Port]:[Local_Host]:[Local_Port] [User]@[SSH_Server]
SSH -R [Remote_Port]:[Local_Host]:[Local_Port] [User]@[SSH_Server]

Uzak port yönlendirme, uzak sunucudaki bir portu yerel makinenizdeki bir porta yönlendirmenizi sağlar. Önce uzak portu, ardından yerel makinenizi (local host) ve yerel portunuzu belirleyeceksiniz.

Üçüncü olarak: Dinamik Port Yönlendirme (Dynamic Port Forwarding)

Dinamik Port Yönlendirme şu şekilde çalışır:

  1. SOCKS Proxy: Dinamik tünelleme genellikle bir SOCKS proxy olarak çalışır. Bir dinamik tünel kurduğunuzda, yerel makineniz bir SOCKS proxy sunucusu gibi davranır. SOCKS destekleyen uygulamalar ardından trafiklerini bu proxy üzerinden gönderebilir.
  2. Tek Bağlantı: Her servis için ayrı port yönlendirmeleri kurmak yerine, uzak sunucudaki farklı portlara birden fazla bağlantıyı yönetebilen tek bir SSH bağlantısı kurarsınız.
  3. Esneklik: Bu, hedef portun önceden bilinmediği ya da sık sık değişebildiği uygulamalar için kullanışlıdır; çünkü trafiğin yönlendirilmesinde daha fazla esneklik sağlar.
SSH –D [local port] [User]@[Remote_Host]
SSH –D [local port] [User]@[Remote_Host]

Görev 7: Bayrağı tutan veritabanının adı nedir?

Cevap: secrets

Çözüm:

Yerel port yönlendirme bize uzak bir ana bilgisayara “PostgreSQL” bağlanma imkânı vereceğinden, şu komutu yazacağız

ssh -L 1234:10.10.16.122:5432 christine@10.129.226.251

Burada:

  • 1234: yerel portu temsil eder
  • 10.10.16.122: uzak ana bilgisayarı “VPN HTB Makinesi” temsil eder
  • 5432: uzak ana bilgisayarı temsil eder
  • Christine: PostgreSQL veritabanı sunucusunda kimlik doğrulaması yapmak istediğim kullanıcı.
  • 10.129.226.251: uzak IP
Yerel makine ile PostgreSQL Sunucusu arasında yerel port yönlendirmenin kurulması.
Yerel makine ile PostgreSQL Sunucusu arasında yerel port yönlendirmenin kurulması.
Yerel ve uzak ana bilgisayar arasında bağlantı kuruldu.
Yerel ve uzak ana bilgisayar arasında bağlantı kuruldu.

Yerel ve uzak ana bilgisayar arasında Yerel Port Yönlendirme kuruldu. Kurduğumuz SSH tünellemesi üzerinden PostgreSQL veritabanına bağlanmayı deneyelim.

Terminale şu komutu yazın

psql -h localhost -U christine -p 1234
PostgreSQL veritabanına bağlanma.
PostgreSQL veritabanına bağlanma.

Artık kurduğumuz yerel port yönlendirme üzerinden PostgreSQL'e bağlandık.

  • -h: Yerel ana bilgisayarı belirtmek için.
  • -U: Uzak ana bilgisayarın kullanıcı adını belirtmek için.
  • -p: Bağlanmaya çalıştığımız yerel portu belirtmek için.

Bağlandıktan sonra, [\c] yazarak veritabanına bağlanabilir ve [\L] yazarak veritabanlarını listeleyebilirsiniz. Veritabanının adının secrets olduğunu göreceksiniz.

Görev 8: Yerel port yönlendirme yerine bir dinamik tünel kullanabilir miydiniz? Evet mi Hayır mı.

Cevap: Evet

Çözüm:

Dinamik port yönlendirmeyi test edip sonucu görelim; eğer kimlik doğrulaması gerektiriyorsa, dinamik port yönlendirme etkindir.

Dinamik Port Yönlendirme etkin.
Dinamik Port Yönlendirme etkin.

Görev 9: Bayrağın Gönderilmesi

Cevap: cf277664b1771217d7006acdea006db1

Çözüm:

[\c secrets] yazarak secrets veritabanına bağlanacağız ve içeriğini listeleyeceğiz. secrets veritabanının ilişkilerini (relations) listelemek için [\dt] yazın.

secrets veritabanının ilişkilerinin listelenmesi.
secrets veritabanının ilişkilerinin listelenmesi.

secrets veritabanındaki bayrağın içeriğini görüntülemek için şu komutu yazın

SELECT * FROM flag;
Bayrağın içeriğinin görüntülenmesi.
Bayrağın içeriğinin görüntülenmesi.

İşte komutun bir dökümü

  • SELECT: Bu SQL anahtar kelimesi, veritabanından hangi veri sütunlarını almak istediğinizi belirtmek için kullanılır.
  • : Yıldız işareti () belirtilen tablodaki tüm sütunları seçmek istediğinizi ifade eder. PostgreSQL'e, flag tablosundaki her satır için mevcut olan tüm sütunları döndürmesini söyler.
  • FROM: Bu anahtar kelime, verileri almak istediğiniz tabloyu belirtir.
  • flag: Bu, sorguladığınız tablonun adıdır. PostgreSQL'de, tırnak içine alınmışlarsa tablo adları büyük/küçük harfe duyarlıdır. Yani, flag ve Flag biri tırnak içinde oluşturulmuşsa farklı tablolar olarak değerlendirilir.
  • “;”: Noktalı virgül, SQL ifadesinin sonunu belirtir.

Bayrak: cf277664b1771217d7006acdea006db1

HTB — Tier 1 — Starting Point aşamasındaki funnel makinesinin çözümüyle ilgili blog yazımı okumaktan keyif aldığınızı umuyorum.

Başka bir yazıda görüşmek üzere!

[ #funnel ][ #Penetration Testing ][ #bug bounty ][ #Web Application Security ][ #Web Application Penetration Testing ][ #Kali Linux ][ #cyberalp0 ][ #cyberskii ]