اختبار الاختراق بلغة البايثون – الجزء الأول





كلمة Hacker : تعني “مبرمج محترف” وهو الشخص القادر على فهم النظام والبرامج بشكل عميق وتحديد الثغرات وكتابة الاستغلال المناسب وليس الشخص الذي يرتكب جرائم إلكترونية مثل إيقاف أنظمة الكمبيوتر أو اختراق خصوصيات الناس وإلحاق الأذى بهم.
الأفلام والعروض التلفزيونية تجعل عملية الاختراق تبدو مثيرة من خلال عمليات إدخال التعليمات وظهور سيل من الأصفار والواحدات على الشاشة.
هم يجعلون عملية الاختراق تبدو كشيء يجب أن تكون عبقري لتتعلمه.
هم يجعلون الاختراق يبدو كالسحر، هو ليس سحر، هو يعتمد على أجهزة الكمبيوتر وكل عمل يقوم به الكمبيوتر هو عمل مبني على قاعدة منطقية يمكن تعلمها وفهمها.
ليس من الصعب التعلم.
هذه السلسة من المقالات ستجعل منك مبرمج محترف قادر على كتابة برامج اختبار الاختراق و الاستغلال بلغة البرمجة بايثون.
في هذه السلسلة أنا افترض أنك على معرفة سابقة بأساسيات البرمجة بلغة البايثون
لكي تتجاوز مرحلة استخدام أدوات اختبار الاختراق وتستطيع كتابة أدوات اختبار الاختراق و الاستغلال الخاصة بك يجب أن تكون مبرمج محترف.
لغة البرمجة بايثون هي لغة الهكرز المفضلة من أجل كتابة سكريبتات الاستغلال وبرامج وأدوات  الاختراق.
البداية سوف تكون مع أساسيات برمجة الشبكات بلغة البايثون
سوف نستخدم الإصدار python 2.7.9 لأن المكتبات اللازمة لهذه البرامج مازالت غير متوفرة بشكل كامل في الإصدار python 3 .
إذا كنت تستخدم نظام كالي لينكس فلن تكون بحاجة للقيام بأي شيء لأن python 2.7 موجود بشكل تلقائي في كالي لينكس أما إذا كنت تستخدم نظام التشغيل ويندوز فيجب عليك تحميل python2.7.9 من موقع بايثون الرسمي.
أول شيء يجب أن تتعرف عليه في برمجة الشبكات بلغة البايثون هو Socket والطرق methods الخاصة بها وهذا ما سنتعرف عليه في هذا المقال.
وفي المقالات القادمة سوف نقوم بكتابة برامج بلغة البايثون تقوم بعملية جمع المعلومات وفحص المنافذ المفتوحة والبحث عن الثغرات واستغلالها  و برامج لاختبار اختراق الشبكات اللاسلكية واختبار اختراق تطبيقات الويب.

ما هو Socket:

أنا أتكلم عن INET (IPv4) socket وعن STREAM (TCP) socket
إذا كنت لا تعرف هذه البرتوكولات فيجب عليك أن تمضي بعض الوقت التعرف عليها أولاً.
Network sockets تحوي على عناوين IP وأرقام المنافذ.
Socket هو طريقة للاتصال بين أجهزة الكمبيوتر.
من أجل خلق socket بلغة البايثون نقوم باستخدام التابع ()socket.socket الموجود في الموديول socket module باستخدام  التعليمة التالية:
(s = socket.socket (socket_family, socket_type, protocol=0
حيث:
  • socket_family: AF_INET
AF_INET: هو للإشارة لاستخدام العنونة IPv4
  • Socket_type : socket.SOCK_DGRAM OR socket.SOCK_STREAM
SOCK_DGRAM: للإشارة أن البرتوكول المستخدم هو UDP
SOCK_STREAM: للإشارة أن البرتوكول المستخدم هو TCP
“client” socket تستخدم للإشارة إلى المستخدم (متصفح المستخدم) أما “server” socket للإشارة إلى السيرفر (سيرفر الويب).

Server socket methods:

  • (bind(address: هذه الطريقة تستخدم من أجل الاتصال بعنوان  (IP , port) و يجب أن يتم فتح socket  قبل الاتصال.
  • (listen(q: هذه الطريقة تبدأ الانصات لمدة q ثانية.
  • ()accept : هذه الطريقة تستخدم من أجل قبول الاتصال من المستخدم وقبل استخدام هذه الطريقة يجب استدعاء كل من
(socket.bind(address) and socket.listen(q وهذه الطريقة تعيد قيمتين هما client_socket and address
حيث:
client_socket  هي socket object جديد يستخدم من أجل إرسال واستقبال البيانات عبر الاتصال.
address هو عنوان المستخدم.

 method Client socket:

يوجد طريقة واحدة خاصة ب client socket وهي:
  • (connect(address: هذه الطريقة تمكن المستخدم من الاتصال بالسيرفر والعنوان المستخدم في هذه الطريقة هو عنوان السيرفر.

طرق  socket العامة:

  • (recv(bufsize: هذه الطريقة تستقبل رسالة TCP من socket والبارامتر bufsize الذي يتم تمريره لها هو لتعريف الحد الأقصى للبيانات التي يمكن استقبالها في وقت واحد.
  • (recvfrom(bufsize: هذه الطريقة تستقبل البيانات من socket وهي تعيد زوج من القيم: أول قيمة هي البيانات المستقبلة والقيمة الثانية هي عنوان socket الخاص بالمرسل
  • (recvfrom_into(buffer: هذه الطريقة تأخذ البيانات من socket وتعيد زوج من القيم (nbytes, address)
حيث : nbyets هو عدد البايتات المستقبلة.
address هو عنوان socket المرسل.
  • (send(bytes: هذه الطريقة تستخدم من أجل إرسال البيانات وقبل إرسال البيانات يجب ان تتأكد من أن socket متصل مع جهاز بعيد وهذه الطريقة تعيد عدد بايتات البيانات المرسلة.
  • (sendto(data, address: هذه الطريقة تستخدم من أجل إرسال البيانات إلى socket وبشكل عام سوف نستخدم هذه الطريقة مع UDP لأن UDP لا يتأكد من تسليم البيانات connectionless protocol لذلك فإن socket لن يكون مضراً لأن يتصل مع الجهاز البعيد.
address هو عنوان الجهاز البعيد وهذه الطريقة تعيد عدد بايتات البيانات المرسلة.
  • (sendall(data: هذه الطريقة تقوم بإرسال كل البيانات وقبل إرسال البيانات يجب ان تتأكد ان socket متصل مع الجهاز البعيد وهذه الطريقة تستمر بإرسال البيانات إلى أن يحدث خطأ وعندها يتم استدعاء ()socket.close من أجل اغلاق socket.

القسم العلمي:

سوف نقوم بكتابة برنامج server-side program يقوم بالاتصال بالمستخدم ويرسل رسالة له
server1.py program
1111111111

في البداية قمنا باستدعاء socket module وقمنا بتعريف عنوان الجهاز وهو عنوان السيرفر ورقم المنفذ المستخدم بعملية الاتصال.
socket.AF_INET هي للإشارة أن البرتوكول المستخدم هو IPv4.
socket.SOCK_STREAM هي للإشارة انه اتصال عبر برتوكول .TCP
التعليمة ((s.bind((host,port  من أجل ربط socket بالجهاز.
التعليمة  (s.listen(2 من أجل انتظار المستخدم ليقوم بالاتصال.
التعليمة ()conn , addr = s.accept تعيد قيمتان ويتم حفظهما في المتغيران conn and addr حيث أن المتغير conn يحوي على client socket.
التابع ()conn.send يرسل رسالة إلى المستخدم.
وأخيراً ()conn.close تقوم بإغلاق socket.
وعند تنفيذ هذا البرنامج يصبح السيرفر في وضع الإنصات وينتظر المستخدم لكي يتصل به.

لنرى الكود من طرف المستخدم
client1.py program
222222222222222
في الكود السابق استخدمنا الطريقة ((s.connect((host,port التي تمكن المستخدم من الاتصال بالسيرفر والطريقة (s.recv(1024 التي تستقبل الرسالة المرسلة من السيرفر.
نتيجة تنفيذ كلا البرنامجين تظهر في الشكل التالي:
3333333333333333
النتيجة السابقة تظهر أن السيرفر وافق على الاتصال مع 192.168.0.11
عندما يريد السيرفر ارسال رسالة إلى المستخدم يتم ذلك باستخدام conn socket التي تحوي على عنوان IP ورقم المنفذ.
الشكل التالي يظهر كيف أن المستخدم وافق على الاتصال مع السيرفر وكيف أن السيرفر في وضع الإنصات وأن المستخدم اتصل مع السيرفر.
4444444444444444

يمكن توسيع العملية من خلال استخدام حلقة while في طرف السيرفر كما في البرنامج التالي:
server2.py program
5555555555555
البرنامج هو نفس البرنامج السابق ولكن قمنا فقط بإضافة حلقة while
عند تشغيل server2.py من طرف السيرفر وتشغيل cliene1.py من قبل طرف المستخدم تكون النتيجة كالتالي:

استخدام طرق socket لجمع المعلومات عن الهدف:

الآن وبعد أن تعرفنا على socket وعلى كيفية عملها بين السيرفر والمستخدم يمكننا كتابة برامج بسيطة بلغة البايثون مفيدة في جمع المعلومات خلال عملية اختبار الاختراق.
  • الطريقة ()gethostname تقوم بعرض اسم الجهاز
جرب المثال التالي:
777777777777
  • الطريقة (gethostbyname(hostname تقوم بتحويل اسم الجهاز إلى عنوان IP الخاص به.
جرب المثال التالي:
8888888888888
يمكن الحصول على عنوان IP للجهاز من خلال التعليمة التالية:
999999999999999
بدل أن نقوم بكتابة اسم الجهاز قمنا باستدعاء الطريقة ()socket.gethostname التي تقوم بإعادة اسم الجهاز.
يمكن استخدام هذه الطريقة للحصول على عنوان IP الخاص بأي موقع كما في المثال التالي:
1010101010
كما تلاحظ يمكننا استخدام لغة البايثون لكتابة برنامج يقوم بعملية  DNS lookup
  • الطريقة (gethostbyname_ex(name تقوم بتحويل اسم الجهاز إلى عنوان IPv4 ولكن ميزة هذه الطريقة هو أنها تقوم بإعطاء كل عناوين IP الخاصة باسم دومين معين.
جرب المثال التالي:
11

والمثال التالي:
12
كما تلاحظ فإن هذه الطريقة قامت بإعادة عدة عناوين IP خاصة باسم دومين واحد.
  • الطريقة ([getservbyname(servicename [ , protocol_name تقوم بتحويل اسم برتوكول إلى رقم المنفذ المقابل له.
جرب المثال التالي:
13
الطريقة ([socket.getservbyport(port [ , protocol_name تقوم بتحويل رقم المنفذ إلى اسم الخدمة المقابلة له.
جرب المثال التالي:
14
  • الطريقة (connect_ex(address تعيد في حال نجاح عملية الاتصال القيمة ‘0’ وفي حال فشل الاتصال تعيد رقم يشير إلى رمز الخطأ.
يمكن الاستفادة من هذه الطريقة من أجل فحص المنافذ المفتوحة.
جرب المثال التالي:
connect_ex.py program
15
وستكون النتيجة كالتالي:
16
نتيجة تنفيذ البرنامج تظهر أن المنافذ 155 , 445 هي منافذ مفتوحة.
هذا البرنامج هو فاحص بسيط للمنافذ port scanner


في المقال القادم سوف نقوم بالتعمق بشكل أكبر وكتابة برامج بلغة البايثون تقوم بعملية الاستطلاع وجمع المعلومات من خلال فحص عناوين IP ومعرفة الأجهزة المتصلة ومعرفة الخدمات التي تعمل على هذه الأجهزة.

  

بدايتي مع الشبكات من الصفر الي مستوي الاحتراف 



بسم الله الرحمن الرحيم 


" قَالَ رَبِّ اشْرَحْ لِي صَدْرِي وَيَسِّرْ لِي أَمْرِي وَاحْلُلْ عُقْدَةً مِّن لِّسَانِي يَفْقَهُوا قَوْلِي "


 صدق الله العظيم 


في البداية وقبل كل شئ العنون بيحمل الكثير الكثير من الأسألة وناس كتير جدا ممكن تقولي اكيد انت متعرفش اي حاجة 
خالص خالص 
في كل الاحوال دا رأي حضرتك رأي الشخصي ان انا صح وكلامي اكيد ناس كتير قدام هتفهمو 

طيب مضمون العنوان او العنون دا هيكون عبارة عن اي واي الي هيكون بعد كدة واي الي هندرسو ان شاء الله 

ان شاء الله هندرس الشبكات كلها كل حاجة في الشبكات تخص مجال السكيورتي كل حاجة 

ايوة كل حاجة وان شاء الله هنمشي علي التركات الي تحت دي كل لما نخلص تراك هنرفعو علي اليتيوب وانعيد رفعو علي اي 
موقع تحميل وليكن مديافير او دروب بوكس او اي موقع هنتفق علية قدام

طيب الي اتركات الي هنمشي عليها ان شاء الله 
تابع معي 







في مجال الشبكات لازم ندرس الاساسيات يعني اي اساسيات يعني البديات القواعد الي هنمشي عليها او القواعد الي هتثبت في عقل كل واحد يعني اي شبكات نبداء بشبكات بسيطة جدا جدا جدا يعني اي يعني هنتعلم  +N طيب تمام هنبداء ب الكورس دا لأنو هيبداء معانا بلأساسيات وعلشان نتابع الكورس دا الدروس بتاعتو هتبتدي من هنا : 

+N














طيب اي الي بعد +N طبعا في شركات كتير جدا مهتمة بمجال الشبكات دي ومن افضلها شركة سيسكو ومجال او اكادمية سيسكو عندها ٣ مستويات للشبكات كل مستوي بمرحلة من المراحل بتبداء تدرب عليها لحد ما تتقنها وبعد ما تتقن المستوي دا بتبداء تجهز نفسك للأختبارات نوضحها مع بعض :








تمام نبداء نعرف هندرس اي في المجال دا ودا مجال هندسة الشبكات وان شاء الله بداية لينا كلنا ليا انا قبل قبل اي واحد لأني مجرد مبتداء الدروس الي هتمكنها منها هيتم رفعها هنا :- 

ال CCENT  تقريبا ليست مهمة لهذة الدرجة لأنها مجرد زي ما بنقول اي مقدمة للي هندرسو في المسوتويات دي 
في البداية وقبل كل حاجة اول مستوي هو CCNA  والمستوي دا في اكتر من مجال اهم مجال فيهم والي هنمشي علية في المستويات القادمة كلها   Routing & Switching  المجال دا هندرسو في ال ٣ مراحل اة نسيت اوضح اي هية تركات سيسكو 

اول تراك : Associate  مبتداء :) :


والمستوي دا في   Routing & Switching  اساسي لزم حتما ولابد ندرسو وبعد كدة نحدد التخصص الي هنشتغل علية .



تاني مجال موجود Voice  تقنية الصوت الي منها تقدر حضرتك تخلي الشركة كلها تكلم بعض في التليفون عن طرق الانترنت ودا وهيوفر علي الشركة مبالغ ضخمة جدا يعني تصور بدل ما الشركة تخصر الوفات في انها تستخدم شبكة التليفون الارضي او التليفونات تصور في اليوم بيتم كام مكالمة جوة الشركة نفسها او بين فرع الشركة دي وفرع في مكان تاني اكيد التقنية دي هتوفر علي الشركات مبالغ 




تالت حاجة في تقنية الويرلس Wireless  طبع التقنية دي غنية عن التعريف وي تقنية جديدة هنتكلم عليها قدام ان شاء الله 




رابع مجال في المجالات دي هوة ال Data  Center ودا من المجالات المهمة جدا جدا جدا في مجال الشبكات لأنو المسؤال عن تنظيم وادارة الشركة او المكان الي متواجدة فية 




خامس مجال ودا تخصصنا ان شاء الله هوة مجال ال Security  ودا هنتكلم فية تفصليا في المحاضرات الي جاية ان شاء الله 
ودي مجرد نبذة مختصرة عنو
التخصص دا هندرس فية ازاي نقدر نأمن الروترات والسوتشات بتاعتنا ازاي اقدر اوقف عمليات الاختراق الي ممكن المكان الي انا مسؤل عنو يتعرض للهجمات من قبل بعض الشركات الماعدية او اي شركة تانية بتنافسني في السوق او اي واحد تاني بيفكر مثلا انو يسرق المعلومات لأي غرض من الاغراض ازاي اقدر اامن الرسائل الي الي بتم جوة الشركة او لو في بينات بتاعتي جوة الشركة علشان محدش يخربلي شغلي .





تاني مستوي من مستويات سيسكو هوة Professional

ينطبق علية تمام كل حرف وكل كلمة في مستوي ال مبتداء بس الي بيختلف انك بتدرس حاجة اعلي حاجة اهم انت خلاص مبقتش مبتداء انت بتنتقل من مستوي مبتداء الي مستوي محترف في المجال دا او في التخصص دا كا Network Engineer  طيب تمام عرفن خطتنا في المدة الي جاية دي ان شاء الله اذا هيكون كا الأتي 

+N 

CCNA  R & S 

CCNA  Security 

CCNP  R &S 

CCNP  Security 

وان شاء الله اذا شاء الرحمن وتوفقنا في الانتقال الي مستوي الخبير هنكون وصلنا لمرحالة عالية جدا جدا في مجال الشبكات اسأل الله ان يوفقنا جميعا 

دي كانت مقدمة طويلة عريضة زي ما بنقول :)  بس كان لازم حتما ولابد نتكلم فيها علشان منضيعش وقتنا في المحاضرات الي جاية ان شاء الله 

تمام لحد هنا هنقف ونكمل او نبداء في اول درس من دروس الشبكات او زي ما بنقول بدايتي في مجال الشبكات من الصفر الي مستوي الاحتراف 

في امان الله والسلام عليكم ورحمة الله وبركاتة :) 

Android Studio tutorial



أندرويد
 هو نظام مجاني ومفتوح المصدر مبني على نواة لينكس صُمّم أساسًا للأجهزة ذات شاشات اللمس كالهواتف الذكية والحواسب اللوحية, يتم تطوير الأندرويد من قبل التحالف المفتوح للهواتف النقالة الذي تديره شركة جوجل.
اشترت جوجل نظام أندرويد من المطورين الأساسيين للنظام في سنة 2005، في حين كان الإعلان الرسمي عنه في 5 نوفمبر 2007، بالتزامن مع انطلاق التحالف المفتوح للهواتف النقالة.
طرحت جوجل نظام أندرويد كنظام مفتوح المصدر تحت رخصة أباتشي، مشروع أندرويد مفتوح المصدر (AOSP) هو الفريق المسؤول عن تطوير وتحديث وإصلاح النظام.
لدى الأندرويد مجتمع ضخم من المطورين الذين يقومون بكتابة وتطوير البرامج والتطبيقات للأندرويد، ويعتمدون بشكل أساسي على الكتابة بلغة الجافا.
جوجل بلاي وهو متجر متاح علي الإنترنت وكتطبيق على هواتف أندرويد يُدار بواسطة جوجل. في سبتمبر 2012، وصل عدد التطبيقات المتواجدة بالمتجر 675,000 تطبيق وعدد التنزيلات 25 مليار تنزيل.
يعد الأندرويد حاليًا النظام الأكثر انتشارًا بـأكثر من مليار جهاز مُفعّل ونسبة مشاركة بالسوق بنسبة 64% حسب إحصاءات مارس 2013



بداية النظام

تأسست أندرويد (Android) في بالو ألتو، كاليفورنيا (Palo Alto, California) في أكتوبر 2003 من قبل أندي روبين (Andy Rubin) المؤسس المشارك Danger)، وريتش مينر (Rich Miner) المؤسس المشارك Wildfire Communications, Inc.)، ونيك سيرز(NickSears) (أحد نوَاب رئيس T-Mobile) وكريس وايت (Chris White) رئيس تصميم الواجهات في (WebTV) لتطوير "أجهزة نقالة أكثر ذكاء ومعرفةً بمكان مالكها وتفضيلاته الخاصة". كما قال أندي روبين (Andy Rubin) . كانت نوايا الشركة أن تطور نظام تشغيل متقدم للكاميرات الرقمية، وعندما تبين أن سوق الكاميرات الرقمية ليس كبير بما فيه الكفاية، حولوا جهودهم لإنتاج نظام تشغيل للهواتف الذكية لمنافسة انظمة سيمبيان (Symbian) وويندوز موبايل (Windows Mobile) (لم يكن نظام iOS الخاص بتشغيل أجهزةIPhone موجودا في ذلك الوقت). وعلى الرغم من الإنجازات التي قام بها المؤسسين والموظفين في وقت مبكر، إلا أنهم كانوا يعملون سرا، ولم يكشفوا إلا عن أنهم يعملون على برمجيات للهواتف النقالة



شراء جوجل للنظام

في أغسطس 2005، قامت شركة جوجل بشراء النظام من الشركة المالكة وضم المؤسسين السابقين وعلى رأسهم المهندس أندرو روبن الذي استمر بالعمل على تطوير النظام، ويعتبر هو المسؤول المباشر عن وصول نظام أندرويد إلى النجاح الذي نشهده حالياً.

التطبيقات

متجر جوجل بلاي هو متجر على الويب للبرامج تديره جوجل لأجهزة أندرويد، التطبيق "Google play" مثبت على معظم أجهزة أندرويد، حتى اغسطس 2013 هناك 900,000 تطبيق وجدت في المتجر. جوجل لديها العديد من البرامج في المتجر منها Googles وEarth وSkymap وBBM

على عكس معظم الأنظمة الأخرى، يسمح نظام الأندرويد بتنصيب متاجر تطبيقات بديلة، من أشهر هذه المتاجر متجر أمازون المسمى Amazon Appstore

المجانية

يعتبر نظام أندرويد أكثر نظام مجاني حيث التطبيقات المجانية فيه يفوق عددها التطبيقات المدفوعة.
الويدجيت
هي تطبيقات صغيرة توجد على واجهة المستخدم مثل : تطبيق حي لحالة الطقس في الوقت الحالي، صندوق البريد الإلكتروني للمستخدم

التخزين

يستخدم الأندرويد لتخزين البيانات نظام إدارة قواعد البيانات إس كيو لايت وكذلك النسخ الخفيفة من قواعدالبيانات المترابطة. كما أنه يستخدم خدمات جوجل السحابية.
نظم الاتصال
يدعم الأندرويد:
  • GPS
  • GSM وEDGE
  • IDEN
  • CDMA
  • UMTS
  • LTE
  • EV-DO
  • WiMAX
  • Wifi
  • Bluetooth
  • NFC

Android Studio tutorial دورة اندرويد استوديو


ولقد قام المهندس الرئع محمد عيسي بتقديم دورة اكثر من رئعة في مجل الاندرويد استديو 
لن اتكلم عنها كثير فيكي فقط مقدمها اترككم مع الدورة 

الجروب الرسمي للدورة حيث يمكنكم متابعت كل ما هو جديد هنا 
قناة اليوتيوب ايضا هنا ستجدون عليها دورات كثيرة بخصوص البرمجة واللنكس والشبكات وغيرها 

اترككم مع الدورة 




لمتابعة باقي الدورة ان لم يعمل معك الرابط من هنا 


المرجِع الكامل لأسَّاليب حقن قواعد البيانات المٌتقدِّمة لـ Black Rose 


 

يعتبر هذا الكتاب من الكتب المهمة جدا في لغة SQL حيث
انة يعلمك طريقة حقن قواعد البينات من الصفر تدريجيا الي مستوي الاحتراف 



 


كما يمكنكم تحميل لاكتاب من هنا