|
14 | 14 | NTDSHashes, |
15 | 15 | ) |
16 | 16 | from impacket.nmb import NetBIOSError, NetBIOSTimeout |
17 | | -from impacket.dcerpc.v5 import transport, lsat, lsad, scmr |
| 17 | +from impacket.dcerpc.v5 import transport, lsat, lsad, scmr, rrp |
18 | 18 | from impacket.dcerpc.v5.rpcrt import DCERPCException |
19 | 19 | from impacket.dcerpc.v5.transport import DCERPCTransportFactory, SMBTransport |
20 | 20 | from impacket.dcerpc.v5.rpcrt import RPC_C_AUTHN_GSS_NEGOTIATE |
@@ -833,6 +833,74 @@ def shares(self): |
833 | 833 | continue |
834 | 834 | self.logger.highlight(f"{name:<15} {','.join(perms):<15} {remark}") |
835 | 835 | return permissions |
| 836 | + |
| 837 | + def interfaces(self): |
| 838 | + """ |
| 839 | + Retrieve the list of network interfaces info (Name, IP Address, Subnet Mask, Default Gateway) from remote Windows registry' |
| 840 | + Made by: @Sant0rryu, @NeffIsBack |
| 841 | + """ |
| 842 | + try: |
| 843 | + remoteOps = RemoteOperations(self.conn, False) |
| 844 | + remoteOps.enableRegistry() |
| 845 | + |
| 846 | + if remoteOps._RemoteOperations__rrp: |
| 847 | + reg_handle = rrp.hOpenLocalMachine(remoteOps._RemoteOperations__rrp)["phKey"] |
| 848 | + key_handle = rrp.hBaseRegOpenKey(remoteOps._RemoteOperations__rrp, reg_handle, "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces")["phkResult"] |
| 849 | + sub_key_list = rrp.hBaseRegQueryInfoKey(remoteOps._RemoteOperations__rrp, key_handle)["lpcSubKeys"] |
| 850 | + sub_keys = [rrp.hBaseRegEnumKey(remoteOps._RemoteOperations__rrp, key_handle, i)["lpNameOut"][:-1] for i in range(sub_key_list)] |
| 851 | + |
| 852 | + self.logger.highlight(f"{'-Name-':<11} | {'-IP Address-':<15} | {'-SubnetMask-':<15} | {'-Gateway-':<15} | -DHCP-") |
| 853 | + for sub_key in sub_keys: |
| 854 | + interface = {} |
| 855 | + try: |
| 856 | + interface_key = f"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{sub_key}" |
| 857 | + interface_handle = rrp.hBaseRegOpenKey(remoteOps._RemoteOperations__rrp, reg_handle, interface_key)["phkResult"] |
| 858 | + |
| 859 | + # Retrieve Interace Name |
| 860 | + interface_name_key = f"SYSTEM\\ControlSet001\\Control\\Network\\{{4D36E972-E325-11CE-BFC1-08002BE10318}}\\{sub_key}\\Connection" |
| 861 | + interface_name_handle = rrp.hBaseRegOpenKey(remoteOps._RemoteOperations__rrp, reg_handle, interface_name_key)["phkResult"] |
| 862 | + interface_name = rrp.hBaseRegQueryValue(remoteOps._RemoteOperations__rrp, interface_name_handle, "Name")[1].rstrip("\x00") |
| 863 | + interface["Name"] = str(interface_name) |
| 864 | + if "Kernel" in interface_name: |
| 865 | + continue |
| 866 | + |
| 867 | + # Retrieve DHCP |
| 868 | + try: |
| 869 | + dhcp_enabled = rrp.hBaseRegQueryValue(remoteOps._RemoteOperations__rrp, interface_handle, "EnableDHCP")[1] |
| 870 | + except DCERPCException: |
| 871 | + dhcp_enabled = False |
| 872 | + interface["DHCP"] = bool(dhcp_enabled) |
| 873 | + |
| 874 | + # Retrieve IPAddress |
| 875 | + try: |
| 876 | + ip_address = rrp.hBaseRegQueryValue(remoteOps._RemoteOperations__rrp, interface_handle, "DhcpIPAddress" if dhcp_enabled else "IPAddress")[1].rstrip("\x00").replace("\x00", ", ") |
| 877 | + except DCERPCException: |
| 878 | + ip_address = None |
| 879 | + interface["IPAddress"] = ip_address if ip_address else None |
| 880 | + |
| 881 | + # Retrieve SubnetMask |
| 882 | + try: |
| 883 | + subnetmask = rrp.hBaseRegQueryValue(remoteOps._RemoteOperations__rrp, interface_handle, "SubnetMask")[1].rstrip("\x00").replace("\x00", ", ") |
| 884 | + except DCERPCException: |
| 885 | + subnetmask = None |
| 886 | + interface["SubnetMask"] = subnetmask if subnetmask else None |
| 887 | + |
| 888 | + # Retrieve DefaultGateway |
| 889 | + try: |
| 890 | + default_gateway = rrp.hBaseRegQueryValue(remoteOps._RemoteOperations__rrp, interface_handle, "DhcpDefaultGateway")[1].rstrip("\x00").replace("\x00", ", ") |
| 891 | + except DCERPCException: |
| 892 | + default_gateway = None |
| 893 | + interface["DefaultGateway"] = default_gateway if default_gateway else None |
| 894 | + |
| 895 | + self.logger.highlight(f"{interface['Name']:<11} | {interface['IPAddress']!s:<15} | {interface['SubnetMask']!s:<15} | {interface['DefaultGateway']!s:<15} | {interface['DHCP']}") |
| 896 | + |
| 897 | + except DCERPCException as e: |
| 898 | + self.logger.info(f"Failed to retrieve the network interface info for {sub_key}: {e!s}") |
| 899 | + |
| 900 | + with contextlib.suppress(Exception): |
| 901 | + remoteOps.finish() |
| 902 | + except DCERPCException as e: |
| 903 | + self.logger.error(f"Failed to connect to the target: {e!s}") |
836 | 904 |
|
837 | 905 | def get_dc_ips(self): |
838 | 906 | dc_ips = [dc[1] for dc in self.db.get_domain_controllers(domain=self.domain)] |
|
0 commit comments