BGAPTS-I: Senaryolu Pentest Örneği

Bu yazı BGA Pentest ekibi tarafından Mart ayında gerçekleştirilmiş uluslarası bir firmaya yönelik “full scope pentest” çalışmasına ait yöntem ve süreçleri anlatmaktadır.

Burada yazılan adımlar konuya hakim olanlar için ileri seviye teknik konular olmasa da BGA Pentest ekibinin konuya yaklaşımını göstermesi açısından paylaşılmaktadır.

Çalışma Başlangıcı

Öncelikle pentest yaptıracak firma “sizden pentest istiyorum”, vulnerability assessment değil, dolayısıyla Nessus ve metasploit vs çıktılarını değil gerçekten dışardan sızmaya yolaçacak açıklıkları bulun diyerek başladı söze. Bunun anlamı açıktı, bulduğunuz zafiyetleri değerlendirerek kontrollü olarak dışardan ne yapılabiliyor raporda bunu görmek istiyoruz. “Raporu 150-200 sayfa tutarak sıradan bilgileri eklemeyin”. Bu, bizim de Türkiye yerleştirmeye çalıştığımız bir yöntem olduğu için hay hay diyerek hemen işe koyulduk.

Pentest Kapsamı

Pentest çalışması bizim “full scope pentest” olarak adlandırdığımız ve dışardan -kurum ismi haricinde herhangi bir bilgi almadan- sisteme zarar vermeyecek her yolun denenerek içeriye sızılması şeklinde belirlendi.

Genellikle pentest çalışmalarında kapsam belirleme yapılırken müşteri kapsamı kendisi belirlerse sonuçlar sağlıklı çıkmaz. Bunun temel nedeni genellikle kapsam olarak verilen sunucu/uygulamaların haricinde mutlaka daha az güvenli, açık barındıran sistemlerin olması.

Adım Adım Pentest Çalışması

1. Adım

Hedef olarak verilen site Google ve Shodan gibi arama motorları kullanılarak detaylı araştırıldı.

Örnek araştırma kriterleri:

site:example.com filetype:php
site:example.com filetype:asp
site:example.com filetype:aspx

site:example.com filetype:php admin
site:example.com filetype:php login

ve benzeri kelimeler kullanılarak hedef sisteme ait Google’a düşmüş url’ler belirlenmeye çalışıldı.

Bu adım sonrasında hedef sisteme ait uygulama yazılımının hangi dizinde olduğuna dair çıktılar elde edildi. Buradan uygulamanın Windows sistem üzerinde PHP kullanılarak geliştirildiği belirlendi.

Zafiyet Analizi

Bir sonraki adımda web uygulaması detaylı bir şekilde analiz edilerek güvenlik zafiyetleri belirlenmeye çalışıldı. Elle yapılan denemeler (Tamper Data, Owasp Zap ve Burp kullanıldı ) bazı karekterlerin (‘ vs) engellendiğini belirledik ve buna uygun şekilde denenecek karekterler çeşitli encoding teknikleri kullanılarak hedef sisteme gönderildi.

Sayfalardan birinde uygulamanın aldığı değerleri doğrudan veritabanına ilettiği (SQLi) ve doğrulama için Netsparker yazılımı kullanıldı. Netsparker yazılımı da başarılı bir şekilde hedef uygulamada SQLi olduğunu belirledikten sonra iş bu zafiyeti kullanarak veritabanından verileri bulmaya kaldı.

Veritabanından verileri çekmek için sqlmap yazılımı kullanıldı. Toplamda 3000’e yakın istek sonrası hedef sistemde kullanılan veritabanı bilgileri, database isimleri gibi bilgiler elde edildi. Bu bilgilerden bir tanesi hedef sistemde kullanılan yönetim yazılımlarından birine ait çıkınca hedef sisteme Dirbuster gibi bir yazılım kullanarak ilgili hangi alt dizinde yüklü olduğu belirlendi.

Veritabanında bulunan kullanıcı adı ve parola bilgileri (parola bilgileri hashli) kullanılarak uygulama arabirimine giriş yapıldı. Hashli parolayı bulmak için elde edilen hash değeri JTR programı ve hashcat yazılımlarıyla kırılmaya çalışıldı, aynı zamanda findmyhash yazılımı kullanılarak internet üzerindeki halka açık parola kırma sitelerinin arşivleri denendi ve buradaki arşivlerden birinde hash değerinin kırılmış haline rastlandı.

Bir sonraki adım arabirimine girilen uygulamayı kullanarak hedef sisteme basit bir arka kapı (web shell ) eklemek olacaktır. Bunun için dosya sistemi üzerinde herkes tarafından yazılabilir bir dizin bilgisi gerekiyordu. Bu aşamada ilk adımda bilgi toplama amaçlı yapılan keşif çalışmasının çıktısı kullanıldı (Genellikle resim vs gibi dizinler herkes tarafından yazılabilir şekilde bırakılmaktadır.) Buraya mysql’deki into outfile fonksiyonu kullanarak bir satırlık “PHP shell ” eklendi ve sistemde ilk olarak dir komuru çalıştırıldı.

Komutun çıktısı geldiğine göre artık hedef sistemde komut çalıştırabilir hale gelmiş olduk. Bir sonraki adımda hedef sistemde hangi kullanıcı adı ile komut çalıştırıldığını öğrenmek için whoami komutu çalıştırıldı. Ve tahmin ettiğimiz gibi hedef üzerinde tam yetkili bir kullanıcı tarafından çalıştırılmış WAMP olduğunu gördük. (Windows üzerinde hazır WAMP sistemlerini kullanmanın en kötü yanı)

Post Exploitation Aşaması

Hedef sistem Windows olduğu için netcat vs gibi yazılımlar sistemde yüklü değildi. Nmap taraması yapılarak dışardan içeri herhangi bir portun açık olup olmadığı belirlendi, dışarda içeri iki portun açık olduğu sonucu çıktı (22, 80). Bir sonraki adımda Firewall arkasında olduğunu düşündüğümüz Windows makineden internete hangi porların açık olduğunu belirlemeye çalıştık – ki buradan revershe shell için hangi portu tercih edeceğimize karar verecektik- Windows makineden internete doğru hiçbir portun açık olmadığını belirledik.

Ardından UDP ve ICMP üzerinden gerçekleştirdiğimiz denemeler de olumsuzlukla sonuçlandı. Karşımızda sıkı bir güvenlik politikasına sahip zayıf durumda bir sistem vardı. DNS tünelleme yapabilir miyiz diye dns sorgularının internet çıkıp çıkmadığını denediğimizde ise su ana kadar hic değişmeyen sonuc bizi bekliyordu, dns tünelleme yapabilir haldeydik.

Yine mysql’deki into outfile özelliği kullanılarak hedef sisteme dosya upload edebileceğimiz basit bir php scripti ekledik ve kendi sistemimizde oluşturduğumuz meterpreter ajanını karşı sisteme yükledik ve çalıştırmayı denedik. Burada karşımıza ciddi iki sorun çıktı. Bunlardan ilki meterpreter hangi portu dinleyecek veya revershell olarak dışardaki hangi porta bağlanacak, diğer problem de hedef sistemde yüklü olan Symantec Endpoint yazılımıydı. İkinci sorunu aşmak çok kolay oldu, ajan yazılıma Symantec’i bypass edecek ufak bir iki özellik ekleyerek yakalanmasının önüne geçmeye çalıştık, aynı zamanda php üzerinde sistemde çalışan symantec yazılımı belirlenerek (tasklist), taskkill komutu ile sonlandırıldı.

1. problemi çözmenin iki yolu vardı. Bunlardan biri dnscat yazılımını hedef sisteme upload ederek dns paketleri üzerinden sistemde komut çalıştırmak. Önce dnscat yazılımını upload ederek sisteme cmd.exe üzerinden erişim elde edildi ve bu yöntemin çalıştığı doğrulandı. Ardından kalıcı olabilmesi için meterpreter ajan yazılımı 22.portu dinleyecek sekilde tekrar oluşturularak sisteme upload edildi. Sistemde 22. portu dinleyen ve aktif bağlantının olmadığı tenha bir zamanda (03:30 sıralarında)22. portu dinleyen uygulama netstat -an -p tcp -b komutu ile belirlenerek taskkill komutu ile sonlandırıldı fakat uygulama daemon şeklinde çalıştığı için tekrar portu dinlemeye alıyordu. Bu sıkıtıyı çözmek için de Windows komut satırının arka arkaya komut çalıştırma özelliği kullanıldı.

taskkill /IM proses_ismi /F & taskkill /IM symantec /F & meterpreter.exe

ve ardından meterpreter’a bağlantı kurarak hedef sistem üzerinde sınırsız işlem yapabilme hakkı elde edildi.

Bu adımdan sonra makinenin domaine üye olup olmadığı belirlendi ve hashdump komutu kullanılarak varolan sistem kullanıcılarının parola hash değerleri elde edildi. Yine hashcat ve JTR devreye girerek bu parola hashlerini çözmeye çalıştı.

Bir yandan da hedef sistemde meterpreter keylogger fonksiyonu çalıştırılarak (daha once firmadan bu tip işlemlerin yapılıp yapılmayacağı konusunda bilgi alınmıştır) sisteme bağlanacak adminlerin giriş işlemleri yakalanmaya çalışıldı.

Hedef sistemde daha rahat hareket edebilmek için tüm portlar kapalı olsa da meterpreter oturumu üzerinden RDP almaya çalıştık ve portfwd komutu kullanarak meterpreter üzerinden hedef sisteme RDP ile bağlandık.

Yine route ve autoroute özellikleri kullanılarak DMZ bölgesindeki diğer makinelere aynı parola hashleri kullanarak (Pass The Hash) denemeler gerçekleştirildi ve aynı local admin parolasının kullanıldığı sistemler ele geçirildi.


Ardından hedef ağa ait tüm sistemler teker teker ele geçirilerek raporlandı .

Bu yazıda anlatılan pentest çalışması 4 kişilik farklı konularda uzman ekip tarafından gerçekleştirildi ve toplamda 2 gün sürdü. Firma hızlıca bilgilendirilerek açıklıkların kapatılması sağlandı.

Bir sonraki gerçek hayat pentest senaryosunda görüşmek üzere
BGA pentest ekibi @bgakademisi