Advertisement
dev017

attack.py

Aug 11th, 2023
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. def hy_init_attack_params(attack):
  2.     """
  3.    Initializes the given attack parameter structure and applies the default values.
  4.    """
  5.     attack.ip_v_asm = HY_AD_T_IP_V4
  6.     attack.ip_ttl = 128
  7.     attack.pay = None
  8.     attack.icmp_unr_code = ICMP_UNREACH_NET
  9.     attack.pppoe_disc_code = HY_PPPOE_CODE_PADI
  10.     attack.hsrp_state_code = HY_HSRP_STATE_INIT
  11.  
  12. def hy_get_attack_type_value(name):
  13.     """
  14.    Returns the type value of the given attack name.
  15.    """
  16.     if name == "arp-request":
  17.         return HY_AT_T_ARP_REQUEST
  18.     elif name == "arp-reply":
  19.         return HY_AT_T_ARP_REPLY
  20.     elif name == "pppoe-discover":
  21.         return HY_AT_T_PPPOE_DISCOVER
  22.     elif name == "icmp-echo":
  23.         return HY_AT_T_ICMP_ECHO
  24.     elif name == "icmp-unreach-tcp":
  25.         return HY_AT_T_ICMP_UNREACH_TCP
  26.     elif name == "tcp":
  27.         return HY_AT_T_TCP
  28.     elif name == "udp":
  29.         return HY_AT_T_UDP
  30.     elif name == "dns-query":
  31.         return HY_AT_T_DNS_QUERY
  32.     elif name == "dhcp-discover":
  33.         return HY_AT_T_DHCP_DISCOVER
  34.     elif name == "dhcp-request":
  35.         return HY_AT_T_DHCP_REQUEST
  36.     elif name == "dhcp-release":
  37.         return HY_AT_T_DHCP_RELEASE
  38.     elif name == "hsrp-hello":
  39.         return HY_AT_T_HSRP_HELLO
  40.     elif name == "hsrp-coup":
  41.         return HY_AT_T_HSRP_COUP
  42.     elif name == "hsrp-resign":
  43.         return HY_AT_T_HSRP_RESIGN
  44.     else:
  45.         return HY_AT_T_UNKNOWN
  46.  
  47. def hy_get_attack_name(type):
  48.     """
  49.    Returns the name of the given attack type.
  50.    """
  51.     if type == HY_AT_T_ARP_REQUEST:
  52.         return "arp-request"
  53.     elif type == HY_AT_T_ARP_REPLY:
  54.         return "arp-reply"
  55.     elif type == HY_AT_T_PPPOE_DISCOVER:
  56.         return "pppoe-discover"
  57.     elif type == HY_AT_T_ICMP_ECHO:
  58.         return "icmp-echo"
  59.     elif type == HY_AT_T_ICMP_UNREACH_TCP:
  60.         return "icmp-unreach-tcp"
  61.     elif type == HY_AT_T_TCP:
  62.         return "tcp"
  63.     elif type == HY_AT_T_UDP:
  64.         return "udp"
  65.     elif type == HY_AT_T_DNS_QUERY:
  66.         return "dns-query"
  67.     elif type == HY_AT_T_DHCP_DISCOVER:
  68.         return "dhcp-discover"
  69.     elif type == HY_AT_T_DHCP_REQUEST:
  70.         return "dhcp-request"
  71.     elif type == HY_AT_T_DHCP_RELEASE:
  72.         return "dhcp-release"
  73.     elif type == HY_AT_T_HSRP_HELLO:
  74.         return "hsrp-hello"
  75.     elif type == HY_AT_T_HSRP_COUP:
  76.         return "hsrp-coup"
  77.     elif type == HY_AT_T_HSRP_RESIGN:
  78.         return "hsrp-resign"
  79.     else:
  80.         return "Unknown"
  81.  
  82. def hy_get_attack_result_string(result):
  83.     """
  84.    Returns a string containing a result comparison based on the given attack results.
  85.    """
  86.     sec = 0
  87.     msec = 0
  88.     ret = ""
  89.     ret += str(result.pkt_cnt) + " packets sent "
  90.     if not result.tc_flg & HY_TC_PKT_CNT:
  91.         ret += "(" + str(result.tot_byt) + " bytes) "
  92.     if result.dur_msec > 0:
  93.         sec = result.dur_msec // 1000
  94.         msec = result.dur_msec - (sec * 1000)
  95.         ret += "in " + str(sec) + "." + str(msec) + " seconds"
  96.     else:
  97.         ret += "in less than 0.1 seconds"
  98.     return ret
  99.  
  100. def hy_attack(attack, pcap_dsc, is_remote_call, result):
  101.     """
  102.    Executes the given attack.
  103.    """
  104.     prm = hy_attack_loop_t()
  105.     prm.pkt_lmt = 0
  106.     prm.dsc = pcap_dsc
  107.     prm.att = attack
  108.     prm.res = result
  109.     prm.pkt_buf = None
  110.     prm.run_stat = HY_RUN_STAT_RUNNING
  111.     result.ret = HY_ER_OK
  112.     if is_remote_call == 0:
  113.         hy_output(stdout, HY_OUT_T_TASK, 0, "Launching attack")
  114.         if attack.cld_run == 1:
  115.             hy_output(stdout, HY_OUT_T_NOTE, 0, "This is a cold run, no data will be sent")
  116.     result = hy_attack_result_t()
  117.     if attack.type == HY_AT_T_UNKNOWN:
  118.         result.ret = HY_ER_AT_T_UNKNOWN
  119.         return
  120.     if len(attack.src_pat.src) == 0:
  121.         result.ret = HY_ER_NO_SRC_PT_GIVEN
  122.         return
  123.     if len(attack.dst_pat.src) == 0:
  124.         result.ret = HY_ER_NO_DST_PT_GIVEN
  125.         return
  126.     if attack.type == HY_AT_T_ARP_REPLY or attack.type == HY_AT_T_ARP_REQUEST or attack.type == HY_AT_T_ICMP_UNREACH_TCP:
  127.         if len(attack.sec_src_pat.src) == 0:
  128.             if attack.type == HY_AT_T_ARP_REPLY or attack.type == HY_AT_T_ARP_REQUEST:
  129.                 result.ret = HY_ER_NO_SND_PT_GIVEN
  130.                 return
  131.             elif attack.type == HY_AT_T_ICMP_UNREACH_TCP:
  132.                 result.ret = HY_ER_NO_TCP_SRC_PT_GIVEN
  133.                 return
  134.             elif attack.type == HY_AT_T_HSRP_HELLO or attack.type == HY_AT_T_HSRP_COUP or attack.type == HY_AT_T_HSRP_RESIGN:
  135.                 result.ret = HY_ER_NO_VIR_PT_GIVEN
  136.                 return
  137.             else:
  138.                 result.ret = HY_ER_UNKNOWN
  139.                 return
  140.     if attack.type == HY_AT_T_ARP_REPLY or attack.type == HY_AT_T_ARP_REQUEST or attack.type == HY_AT_T_ICMP_UNREACH_TCP or attack.type == HY_AT_T_DHCP_REQUEST or attack.type == HY_AT_T_DHCP_RELEASE:
  141.         if len(attack.sec_dst_pat.src) == 0:
  142.             if attack.type == HY_AT_T_ARP_REPLY or attack.type == HY_AT_T_ARP_REQUEST:
  143.                 result.ret = HY_ER_NO_TRG_PT_GIVEN
  144.                 return
  145.             elif attack.type == HY_AT_T_ICMP_UNREACH_TCP:
  146.                 result.ret = HY_ER_NO_TCP_DST_PT_GIVEN
  147.                 return
  148.             elif attack.type == HY_AT_T_DHCP_REQUEST or attack.type == HY_AT_T_DHCP_RELEASE:
  149.                 result.ret = HY_ER_NO_SRV_IP_GIVEN
  150.                 return
  151.             else:
  152.                 result.ret = HY_ER_UNKNOWN
  153.                 return
  154.     if attack.min_cnt > 0 or attack.max_cnt > 0:
  155.         prm.pkt_lmt = hy_random(attack.min_cnt, attack.max_cnt)
  156.         if prm.pkt_lmt < 1:
  157.             prm.pkt_lmt = 1
  158.     else:
  159.         prm.pkt_lmt = 0
  160.     if thr = hy_win32_attack_loop(prm) == None:
  161.         result.ret = HY_ER_CREATE_THREAD
  162.         return
  163.     hy_handle_attack_blocking(prm)
  164.     if prm.pkt_buf != None:
  165.         free(prm.pkt_buf)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement