Yavuzlar
Ana sayfaTelegram
  • Yavuzlar
  • VulnLab
  • CodinLab
  • 📚EĞİTİM
    • PHP
      • XAMPP kurulumu
      • VS Code Kurulum
      • 1.0 PHP Nedir
      • 1.1 Dosya Oluşturma
      • 1.2 Syntax (Yazım Kuralları)
      • 1.3 PHP'de Echo ve Print
      • 1.4 PHP'deki yorumlar
      • 1.5 PHP Değişkenleri
      • 1.6 Operatörler (Operators)
      • 1.7 Veri Türünü Alma
      • 1.8 PHP'de String
      • 1.9 PHP'de Sabitler
      • 2.0 PHP'de If Else Elseif
      • 2.1 Switch Case
      • 2.2 PHP'de Döngüler
      • 2.3 PHP'de Diziler (Arrays)
      • 2.4 PHP'de Süper Global Değişkenleri
      • 2.5 PHP'de Cookie (Çerez) Ve Session (Oturum) Yöntemleri
      • 2.6 Form işlemleri
    • C++
      • 1.0 Temeller
        • 1.1 Dosya Oluşturma
        • 1.2 Syntax (Yazım Kuralları)
        • 1.3 Yorum Satırları
        • 1.4 C++ Değişkenleri
          • 1.4.1 Değişken Türleri
        • 1.5 Operatörler (Operators)
        • 1.6 Namespace
        • 1.7 Kullanıcı Girdisi (User Input)
        • 1.8 C++ Stringleri (C++ Strings)
        • 1.9 Matematik (Math) Fonksiyonları
        • 1.10 Booleans
        • 1.11 If Else
        • 1.12 Switch
        • 1.13 While Döngüsü
          • 1.13.1 Do While Döngüsü
        • 1.14 For Döngüsü
        • 1.15 Break/Continue
        • 1.16 Diziler
        • 1.17 Structures
        • 1.18 Enums
        • 1.19 References
        • 1.20 Pointers
      • 2.0 Fonksiyonlar
      • 3.0 Sınıflar
        • 3.1 OOP
        • 3.2 Sınıflar ve Objeler
        • 3.3 Sınıf Methodları
        • 3.4 Yapıcılar (Constructors)
        • 3.5 Erişim Belirleyicileri (Access Specifiers)
        • 3.6 Kapsülleme (Encapsulation)
        • 3.7 Inheritance
        • 3.8 Polimorfizm (Polymorphism)
        • 3.9 Dosyalar (Files)
        • 3.10 İstisnalar (Exceptions)
        • 3.11 Tarih ve Zaman (Date and Time)
      • 4.0 Veri Yapıları (Data Structures)
        • 4.1 Veri Yapıları ve STL
        • 4.2 Vektörler (Vectors)
        • 4.3 Listeler (Lists)
        • 4.4 Yığınlar (Stacks)
        • 4.5 Kuyruklar (Queues)
        • 4.6 Deque (Çift Uçlu Kuyruk)
        • 4.7 Küme (Set)
        • 4.8 Maps
        • 4.9 Iterator
        • 4.10 Algoritmalar
  • 🛠️ARAÇLAR
    • Aircrack-ng
    • Airgeddon
    • Arjun
    • BeEF
    • Bettercap
    • Docker
    • Gelişmiş Wireshark Kullanımı (Advanced Wireshark Usage)
    • Google Dorks
    • Hping3
    • John the Ripper
    • Metasploit Framework
    • Netcat
    • Nmap
    • OSINT Framework
    • PEASS-ng
    • Sublist3r
    • XSS Scanner
    • Wireshark
    • ZAP
    • HYDRA
  • 🖥️İŞLETİM SİSTEMLERİ
    • Linux101
    • MBR
  • 🔑KRİPTOLOJİ
    • Dijital Sertifika ve İmzalar
    • Sezar Şifrelemesi
    • Steganografi
    • Veri Şifreleme (Data Encryption)
  • 🔏Network
    • Domain Name Server (DNS)
    • Firewall Nedir? Nasıl Çalışır ?
    • Ortadaki Adam Saldırısı (Man In The Middle Attack)
    • OSI Modeli
    • Sanal Özel Ağlar (VPN)
    • World Wide Web (WWW)
  • 🔐PRIVILEGED
    • Docker Escape
  • 📨Protokoller
    • ARP
    • DHCP
    • FTP
    • HTTP/HTTPS
    • SSH
    • TCP/IP
    • UDP
    • Wİ-Fİ Güvenlik Protokolleri (WEP/WPA/WPA2/WPA3)
  • 💻SİBER TEHDİT İSTİHBARATI
    • Gelişmiş Siber Tehdit İstihbaratı Nedir?
  • 🔒WEB GÜVENLİĞİ
    • 403 ByPass
    • API Güvenliği (API Security)
    • Broken Access Control
    • Bulut Güvenliği (Cloud Security)
    • Command Injection
    • Cross Origin Resource Sharing
    • Cross Site Request Forgery (CSRF)
    • Cyber Kill Chain
    • DDoS Saldırıları
    • File Upload Zafiyeti Nedir?
    • HTTP Request Smuggling
    • Insecure Direct Object Reference (IDOR)
    • Incident Response
    • Local File Inclusion (LFI)
    • NoSQL Injection
    • Pentest 101
    • Race Condition
    • Server Side Request Forgery (SSRF)
    • Server Side Template Injection (SSTI)
    • Spring4Shell
    • Two Factor Authentication Bypass
    • XML External Entity Attack (XEE)
  • 🤖YAPAY ZEKA
    • ChatGPT for Hacking
    • Siber Güvenlik ve Yapay Zeka
    • Yapay Zeka ile Sahte Fotoğraf Tespiti
  • 🌐YAZILIM
    • Düzenli İfadeler (Regular Expressions)
    • Elasticsearch Nedir?
    • Front-end Teknolojileri
    • Golang'da Arayüzler (Interfaces)
    • Go'da Concurrency ve Uygulamaları
    • Güvenli Kodlama (Secure Coding)
    • Java Overloading vs Overriding
    • JSON Web Token (JWT)
    • Material-UI
    • NextJS Nedir?
    • ReactJS Kancalar (Hooks)
    • ReactJS Nedir?
    • Redux Toolkit
    • SOLID Yazılım Geliştirme Prensipleri
    • SQL 101
    • UI / UX Nedir?
    • Veri Taşıma Nedir? (Database Migration)
    • Versiyon Kontrol Sistemleri ve GIT
  • 🔷DİĞER
    • Bug Bounty (Hata Ödülü) Nedir?
    • Popüler Yazılımların Kurulumları
      • Ubuntu Server 24.04 LTS Kurulumu
      • Ubuntu için Güncel Docker Engine Kurlumu
    • Güvenlik Operasyonları Merkezi Nedir?
    • Honeypot (Bal Küpü)
    • IoT Güvenliği Nedir?
    • ShellShock Exploit
    • Yük Dengeleyici (Load Balancer) Nedir?
Powered by GitBook
On this page
  • ShellShock Exploit Nedir?
  • Bash Nedir?
  • ShellShock Açığının Kaynağı
  • ShellShock Sömürü Vektörleri
  • 1- CGI Tabanlı Web Sunucusu
  • 2-OPENSSH Sunucusu
  • DHCP Sistemleri
  • Sonuç

Was this helpful?

  1. DİĞER

ShellShock Exploit

PreviousIoT Güvenliği Nedir?NextYük Dengeleyici (Load Balancer) Nedir?

Last updated 4 months ago

Was this helpful?

ShellShock Exploit Nedir?

"Shellshock" ya da "Bash Bug" olarak bilinen zafiyet özellikle Unix tabanlı işletim sistemlerini ve Linux'u etkileyen bir açıktır. Bu açık, Bash adlı kabuk (shell) programında bulunan bir zafiyetten kaynaklanmaktadır. 2014 yılında keşfedilmiş olup geniş çapta yaygın olan bu işletim sistemlerini etkileyebilecek güce sahipti.

ShellShock, saldırganların kötü niyetli komutlarını hedef sistemde çalıştırmasına izin veren bir açık olarak kabul edilir. Bu tür bir açık, saldırganın sistemlere yetki kazanmalarına veya hassas bilgilere erişim sağlamalarına olanak tanır. Özellikle de sunucular için büyük bir tehdit oluşturdu ve birçok sistem yönetici için ciddi bir güvenlik riskini beraberinde getirdi.

ShellShock, makalemizin başından da anlayacağımız üzere bir Bash açığıdır. Bu yüzden ilk olarak Bash nedir? bununla başlayalım.

Bash Nedir?

Bash veya Boune-Again Shell terminal veya komut yorumlayıcısı olarak adlandırılan alana yazılan komutları yorumlayan komut yorumlayıcısır. Örnek olarak "ls" komutunu verebiliriz ve aşağıdaki resimlerdende göreceğimiz gibi bir komut yorumlayıcısı olduğunu kanıtlıyoruz.

Ayrıca Linux işletim sistemimizde mevcut olan Bash kabuklarını da görüntüleyebiliyoruz.

ShellShock Açığının Kaynağı

Her şeyden önce Bash nedir? , ne işe yarar? bununla ilgili kısa bir bilgi edindik. Şimdi bu zafiyetimizin kaynağının ne olduğuna bakalım. Açıklığın ana nedeni, özellikle ortam değişkenlerinin belirli tipteki komutları işlemesine izin vermesi nedeniyle ortaya çıkmıştır. Bu durum, saldırganların ortam değişkenleri aracılığıyla sistemde çalışan uygulamalar üzerinden komut yürütmesine olanak tanır.

Bu güvenlik açığının ana nedeni özetle, Bash'in ortam değişkenlerinde saklanan komutları çalıştırabilme yeteneğidir.

Biraz kafa karıştırıcı anlayabiliyorum o yüzden her şeyi açıklayarak gitmeye özen gösteriyorum. Buradaki "Ortam Değişkeni" dediğimiz olay nedir buna bakalım.

Bash ortam değişkenleri, bir işletim sistemi kabuğunda (shell) çalışan süreçlerin davranışlarını ve yapılandırmalarını belirlemek için kullanılan ad-değer çiftleridir. Ortam değişkenleri, genellikle büyük harflerle yazılan ve belirli işlevler için kullanılan özel değişkenlerdir. Bu değişkenler, bir kullanıcı oturumu boyunca veya belirli bir süreç tarafından erişilebilir ve değiştirilebilir.

Ortam değişkenleri, hem sistem genelinde (global) hem de oturum başına (local) tanımlanabilir. Örneğin, bir kullanıcı oturumu başlatıldığında belirli varsayılan ortam değişkenleri otomatik olarak ayarlanır. Bunlar, sistem yapılandırma dosyaları (örneğin, /etc/profile) ve kullanıcıya özel yapılandırma dosyaları (örneğin, ~/.bashrc veya ~/.profile) aracılığıyla ayarlanabilir.

Yaygın Ortam Değişkenleri

  • PATH: Yürütülebilir dosyaların aranacağı dizinlerin listesini belirtir. Bu değişken, kullanıcı bir komut girdiğinde işletim sisteminin bu komutun yerini bulabilmesi için kullanılır.

  • HOME: Kullanıcının ev dizinini belirtir.

  • USER: Şu anki kullanıcı adını belirtir.

  • SHELL: Kullanıcının varsayılan kabuğunu belirtir.

  • LANG veya LC_ değişkenleri*: Sistem dil ve yerel ayarlarını belirtir.

  • PWD: Mevcut çalışma dizinini belirtir.

gibi örnekler verebiliriz.

Şimdi devam edelim ve bununla ilgili bir örnek yapalım. Bu örnek aslında bizim sistemimiz de herhangi bir Bash açığı var mı bununla ilgili bir kontrol de sağlamaktadır.

Sistemimde şu anda herhangi bir Bash açığı bulunmamaktadır. Ancak, yukarıda yazdığımız komutu tek tek açıklayalım ve kafamız karışmasın.

env Komutu:

Öncelikle, env komutu Unix tabanlı sistemlerde ortam değişkenlerini görüntülemek veya bir komutu belirli bir ortam değişkenleri kümesiyle çalıştırmak için kullanılır. Bu komut, belirli bir komutu çalıştırırken geçici olarak ortam değişkenlerini ayarlamaya olanak tanır. Bu tanımdan da anlayacağımız üzere, env komutu ile "x" adında bir ortam değişkeni tanımlıyoruz.

Fonksiyon Tanımlaması:

Daha sonrasında, kafamızı karıştıran kısım () { :;}; bu betiğimiz. Bu betiği tek tek açıklayalım. env komutu ile "x" değişkenine bir değer atıyoruz, bu değer () yani fonksiyon tanımlamasıdır.

Fonksiyon Gövdesi:

{ :;}; bu kısım ise fonksiyonun gövdesini belirler. İçerisindeki : işareti, Bash'de no-op yani hiçbir şey yapmayan bir komuttur. ; ile bu komutu sonlandırıyoruz.

Bash -c:

Bash -c ise burada Bash'e hemen ardından gelen komut dizisini çalıştırmasını söyler.

Buraya kadar anladığımızı düşünüyorum. Eğer sistemde herhangi bir bash zafiyeti olsaydı, bizim oluşturmuş olduğumuz "x" ortam değişkeni ile komut yürütebilecektik. Yani ekranda "this is a test" yerine "aciklik_mevcut" yazacaktı.

ShellShock Sömürü Vektörleri

ShellShock'un bir bash açığı olduğunu öğrendik. Peki bu açığı nasıl sömürebiliriz biraz da bu konuya değinelim.

1- CGI Tabanlı Web Sunucusu

İlk sömürü vektörlerimizden biri CGI tabanlı web sunucularıdır. Ancak önce CGI nedir ona bakalım. CGI (Common Gateway Interface), web sunucuları ile harici programlar arasında iletişimi sağlayan bir protokol ve ara yüz standardıdır. CGI, web tarayıcılarından gelen istekleri işleyerek dinamik web sayfaları oluşturmak için kullanılır. Örneğin, bir kullanıcının bir web formunu doldurduğunda ve gönderdiğinde, form verilerini işleyen ve sonuçları kullanıcıya sunan bir CGI betiği çalıştırılabilir. CGI, bu tür kullanıcı etkileşimlerini işlemek için çok yönlü bir yol sunar.

Yukarıdaki örneği görsel bir şekilde anlamaya çalışalım. İlk olarak, kullanıcı bir HTTP Request isteği gönderiyor ve bu istek sunucuya ulaşıyor. Ardından, sunucu bu isteği CGI Programına gönderiyor ve CGI Programı veritabanına bir sorgu gönderiyor. Sonrasında işler tam tersine dönüyor; Veritabanı CGI programına cevap göndererek, CGI Programı da sunucuya isteklerini ileterek en son sunucu, tarayıcıya yani kullanıcıya HTTP Response'u gösteriyor. İşte tam burada yukarıda bahsettiğimiz gibi, bir form olsaydı ve kullanıcı web formunu doldurduğunda ve gönderdiğinde, form verilerini işleyen ve sonuçları kullanıcıya sunan bir CGI betiği çalıştırılsaydı, bu açıktan yararlanılabilirdi.

2-OPENSSH Sunucusu

Makalemden anlaşılacağı üzere tek tek ve yavaş yavaş ilerliyorum bu yüzden öncelikle OpenSSH hakkında bilgilendirme yapacağım. SSH, veya Secure Shell, kullanıcılara sunucularını internet üzerinden kontrol etmelerini ve düzenlemelerini sağlayan uzak yönetim protokolüdür. SSH, şifreleme tekniğini kullanarak uzaktaki sunucuya giden ve uzaktaki sunucudan gelen tüm iletişimlerin şifrelendiğinden emin olur. Ayrıca, uzak bir kullanıcının kimliğini doğrulamak, istemciden ana bilgisayara girişleri aktarmak ve çıktıyı istemciye geri göndermek için bir mekanizma sağlar.

Tanımdan anladığımız üzere, SSH uzaktan kontrol mekanizması sağlar. Ancak, bu ShellShock zafiyetimizin kökeni olarak karşımıza çıkıyor. Bir SSH sunucusuna bağlanmak için ne yapmamız gerektiğine bakalım. Mantıklı olarak, uzaktan kontrol etmemiz için bir bağlantı göndermemiz gerekiyor. Örnek olarak:

ssh remote_username@remote_host

bu şekilde bir bağlantı gönderebiliriz. Peki, bunun bağlantıyla ve bizim ShellShock zafiyetimizle ne ilgisi var? Yukarıda CGI tabanlı programlamada bahsetmiştik, bir CGI betiği çalıştırabilir diye. Burada ise saldırgan, SSH sunucusuna bağlanırken sunucuda ShellShock yani bash zafiyeti varsa, bunu kullanarak gerekli verileri elde edebilir. Peki bunu nasıl yapabilir bununla ilgili de hemen örnek verelim.

SSH {USER}@{HOST} '() { :; }; /USR/BİN/İD'

Saldırgan eğer bir Bash açığı varsa makalemizin başında da anlattığım gibi bu zafiyetten yararlanarak id bilgilerine ulaşım sağlayabilir.

DHCP Sistemleri

Diğer bir sömürü vektörü olan DHCP sistemleri ile devam edelim. DHCP, Dinamik Ana Bilgisayar Yapılandırma Protokolü anlamına gelir. İnternet Protokolü (IP) ağlarında kullanılan bir ağ yönetimi protokolüdür. Bu protokolde, bir DHCP sunucusu ağdaki her aygıta dinamik olarak bir IP adresi ve diğer ağ yapılandırma parametrelerini atar, böylece aygıtlar diğer IP ağlarıyla iletişim kurabilirler.

Hemen tekrardan DHCP ile ShellShock arasındaki ilişkiye bakalım. DHCP sistemleri genellikle Unix tabanlı işletim sistemlerinde çalışır. Bu da bizi ShellShock zafiyeti için bir adım ileriye götürüyor. Ayrıca, DHCP ile aynı ağda bulunan tüm kullanıcıların komut satırına erişebilmesi, bu zafiyetin daha da tehlikeli hale gelmesine neden olur. Söz konusu zafiyeti istismar etmek için bir payload çalıştırıldığında, ciddi güvenlik sorunları ortaya çıkabilir.

Payload: Siber güvenlik terimlerinden biridir ve genellikle kötü niyetli amaçlar için kullanılan bir yazılım veya veri parçasını ifade eder. Genellikle bir saldırganın hedef sistemde belirli bir eylemi gerçekleştirmesini sağlamak için tasarlanmış olan, genellikle zararlı bir kod içeren bir dosya veya komut dizisidir.

Bu sömürü vektörü ile ilgili örneğimizde aşşağıdaki resimde bulabilirsiniz.

Burada ek ayarlar kısmına 114 servisinde bir komut dizisi gönderiyoruz. Artık bu komut dizilerine aşina olduk diyebiliriz. Yukarıda bahsetmiştik aslında burada karşı tarafın komut dizesine bir payload yolluyoruz.

Bu gördüğümüz resimde ise bizim göndermiş olduğumuz payloadın karşı tarafın komut dizisinde çalıştığını görebiliyoruz. Burada 'foo' yazdırmak yerine neler yapılabileceğini düşünebiliyor musunuz?

Sonuç

Makelimizin sonuna gelmiş bulunmaktayız. Bu makaleden anlayacağımız üzere ShellShock yani Bash açığı oldukça zararlı bir zafiyet olarak karşımıza gelmektedir. Burada yaygın olarak kullanılan sömürü vektörlerinden bahsettik. Umarım bu makale yardımcı olmuştur. Son olarak böyle bir zafiyetle karşı karşıya kalmak istemiyorsanız güncellemelerinizi yapmayı unutmayın...

🔷
Yunusedemirci - OverviewGitHub
Bu yazı Yunusemre Demirci tarafından hazırlanmıştır.
Logo