OneCube
16.7K subscribers
30 photos
2 videos
4 files
90 links
Download Telegram
OneCube
البوست ده من البشمهندس ابراهيم حجازي و ده اللينك بتاعه https://www.facebook.com/share/p/1AzXzmE5WX/ إزاي تبدأ في مجال أمن المعلومات؟ أول خطوة هي انك تفهم الوظائف المختلفة في مجال أمن المعلومات عشان تقدر تحدد انت عايز تتخصص في إيه منها. ده فيديو عملته…
مهم تشوف البوست ده و تشوف الفديوهات لو مهتم بتخصص من دول
Red teaming
Pentesting
Bug hunting
Malware analysis
SOC

لو مش عارف عاوز تخصص ايه هو بيتكلم عن ده برضو ف فديو
161❤‍🔥1🔥1👌1💘1
OneCube pinned «البوست ده من البشمهندس ابراهيم حجازي و ده اللينك بتاعه https://www.facebook.com/share/p/1AzXzmE5WX/ إزاي تبدأ في مجال أمن المعلومات؟ أول خطوة هي انك تفهم الوظائف المختلفة في مجال أمن المعلومات عشان تقدر تحدد انت عايز تتخصص في إيه منها. ده فيديو عملته…»
يعني إيه URL؟


الـ URL ده زي العنوان اللي بتكتبه عشان تبعت جواب.
مثلا معانا اللينك ده

http://admin:password@example.com:80/dashboard.php?login=true#top

تعال نشرح اللينك ده براحة:

Scheme (http://): ده زي ما تقول طريقة التوصيل... بالعربية ولا بالدليفري.
User Info (admin:password@): لو الموقع عنده "بواب" بيطلب باسورد، ده الكود اللي هتقدمه عشان تعدي.
Host (
example.com): عنوان البيت اللي عايز تزوره.
Port (:80): دي شقة كام؟ لو مش محدد، غالبًا هي الشقة الأرضي (80).
Path (/dashboard.php): أهو ده المكان اللي عايز توصله جوة البيت، زي المطبخ بالضبط.
Query String (?login=true): لو عايز تسأل عن حاجة مخصوصة.
Fragments (
#top): الجزء اللي عايز تبدأ منه، زي ما تدخل وتقول: "فين الكرسي بتاعي؟".


تدفق HTTP:

أول ما تكتب عنوان الموقع في المتصفح، ده اللي بيحصل:
1. المتصفح يسأل: "يا DNS، فين عنوان البيت بتاع الموقع؟".
2. الـ DNS يقول: "استنى، ده عنوانه
93.184.215.14"
3. المتصفح يروح يخبط على الباب ويقول: "لو سمحت، أنا عايز الصفحة الرئيسية".
4. الموقع يرد: "خدها يا معلم، وعليها بوسة كود 200 OK!"

ملحوظة: لو لقيت كود "503"، ده معناه إن الخادم في إجازة وبيقولك "تعالى بكرة".


أداة cURL:
لو عايز تبعت طلبات للمواقع من غير دوشة المتصفح، عندك أداة اسمها cURL.
تستخدم cURL إزاي؟
لو عايز تشوف الموقع في شكله الخام:

$ curl http://testphp.vulnweb.com

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

لو عايز تحفظ الصفحة عندك:


$ curl -O http://testphp.vulnweb.com/index.html

ده كأنك بتاخد الأكل "تيك أواي" وتحطه في كيس.

لو عايز تحفظ الصفحة عندك من غير ما تظهر النتيجة:

$ curl -s -O http://testphp.vulnweb.com/index.html

هنا بقى cURL يقولك: "ماشي يا باشا، أنا هشتغل في هدوء."

لو عايز تعرف كل الخيارات:

$ curl -h


لحد دلوقتي كنا بنتعامل مع بروتوكول http في الأمثلة اللي فاتت.
دلوقتي ندخل على بروتوكول https.
لما بتستخدم أداة curl على بروتوكول https هو تلقائيًا بيعمل المصافحة الآمنة (SSL Handshake) وتشفير وفك تشفير البيانات. بس طبعًا ده مش هيغير أي حاجة من طريقة الاستخدام عن بروتوكول http وتقدر تسحب الصفحة بالأمر ده برضو:

$ curl https://example.com

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

$ curl -k https://example.com


كده هيتم تنفيذ الطلب بنجاح، وهتظهر النتيجة زي كده:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
...SNIP...

كل اللي عملته هنا هو إني تخطيت التحقق من أمان الشهادة باستخدام الخيار -k.
123👍4❤‍🔥2🔥21😍1🏆1🫡1💘1
19😁4👍3🔥21❤‍🔥1💘1
طلبات واستجابات HTTP


لما بنفتح موقع على النت، فيه حاجة بتحصل في الخلفية اسمها "طلبات واستجابات HTTP". ببساطة، متصفحك (أو أداة زي cURL) هو اللي بيبعت طلب للخادم (Server) عشان يجيبلك الصفحة أو الحاجة اللي عايزها.

الطلب (Request)
الطلب ده بيكون عبارة عن شوية معلومات:
1. الطريقة (Method): بتحدد نوع العملية زي GET (عشان تجيب بيانات) أو POST (لما تبعت بيانات).
2. المسار (Path): هو العنوان اللي عايز توصل له على الموقع، زي
/users/login.html.
3. الإصدار (Version): زي HTTP/1.1 (ده نوع البروتوكول اللي شغال بيه الطلب).

الرؤوس (Headers) بتكون بيانات إضافية زي User-Agent اللي بيقول للسيرفر نوع الجهاز أو البرنامج اللي بتستخدمه. وفي الآخر ممكن يكون فيه بيانات زي لو كنت بتبعت فورمة (Form) فيها معلومات.

الاستجابة (Response)
السيرفر لما يستلم طلبك، بيرد عليك بحاجة اسمها "Response".
- أول حاجة بيقولك حالة الطلب بكود زي 200 OK (يعني نجح) أو 401 Unauthorized (يعني مرفوض).
- بعد كده بيبعت بيانات زي Date (تاريخ الاستجابة) و
Content-Type (نوع البيانات المرسلة).
- وأخيرًا، ممكن تلاقي المحتوى نفسه زي صفحة HTML أو JSON (اللي هو بيانات).

---

استخدام cURL في انك تعرض الطلب و الاستجابه اللي بتبعتهم و تستلمهم من الموقع.

curl example.com -v

هتلاقي تفاصيل الطلب والاستجابة بالكامل. الطلب ممكن تلاقي فيه:

GET / HTTP/1.1 (الطلب).  

والاستجابة فيها:

401 Unauthorized (مش مسموح).  


لو عايز تفاصيل أكتر، استخدم -vvv بدل -v.
التفاصيل دي هتظهرلك حتي التعامل مع شهاده ال ssl/tls.

ده مثال لطلب المتصفح او الاداه بتبعته عشان تجيب الموقع.


GET / HTTP/2
Host: example.com
User-Agent: curl/8.9.1
Accept: */*

Request completely sent off
TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):

ده مثال للاستجابه اللي بتستقبلها.

HTTP/2 200 
age: 324568
cache-control: max-age=604800
content-type: text/html; charset=UTF-8
date: Sat, 04 Jan 2025 19:17:30 GMT
etag: "3147526947+gzip+ident"
expires: Sat, 11 Jan 2025 19:17:30 GMT
last-modified: Thu, 17 Oct 2019 07:18:26 GMT
server: ECAcc (bsb/27BB)
vary: Accept-Encoding
x-cache: HIT
content-length: 1256

<!doctype html>
<html>
<head>
<title>Example Domain</title>

<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
.............

طبعا ده مش الرد كله انا حطيت جزء بس عشان البوست ميبقاش طويل.

ملحوظه: لما تفتح موقع زي http://example.com بدل ما يكون https://example.com، المفروض الموقع يحولك تلقائيًا للنسخة الآمنة باستخدام HTTPS (لو محولش علي https ف دي تبقي ثغره ف الموقع اسمها Lack of HTTP Strict Transport Security - HSTS).
❤‍🔥178👍4👏4🔥1😍1💯1💘1
اللي مهتم بمجال DevOps دي Roadmap ليكم
https://github.com/mtahle/DevOps-Foundation-Roadmap

و ده جروب في ناس كتير شاطره ف المجال هتفيدكم جدا
https://t.me/aSysAdmins
8👍8❤‍🔥5🔥1🏆1💘1
شرح ال HTTP Headers


الـ HTTP Headers دي جزء مهم من عملية التواصل بين العميل (اللي هو المتصفح) والسيرفر (اللي هو الخادم). الـ Headers دي بتنقل معلومات بين الطرفين. في Headers بتكون خاصة بالطلبات أو الردود، وفيه كمان Headers مشتركة بين الطلبات والردود.

أنواع الـ HTTP Headers:

1. General Headers (الهيدر العامة):
دي بتكون موجودة في الطلبات والردود، ومش بتخص المحتوى اللي بتبعت أو بتستقبل، ولكن بتوصف الرسالة نفسها. مثال:
- Date: بيحتفظ بوقت وتاريخ إرسال الرسالة.
- Connection: بتحدد إذا كان الاتصال هيبقى مفتوح بعد ما الرسالة تخلص ولا لأ.

2. Entity Headers (الهيدر الخاصة بالمحتوى):
بتوصف نوع المحتوى اللي تم نقله في الرسالة، يعني مثلاً لو بعت صورة أو ملف PDF. ممكن تشوفها في الردود أو الطلبات زي:
- Content-Type: بتوضح نوع المحتوى زي "text/html" أو "application/pdf".
- Content-Length: بتحدد حجم المحتوى اللي تم نقله.
- Content-Encoding: بتحدد إذا كان المحتوى مضغوط ولا لأ (زي gzip).

3. Request Headers (هيدر الطلب):
دي هي الـ Headers اللي العميل (المتصفح) بيبعتها مع الطلب علشان توضح تفاصيل عن الطلب. زي:
- Host: بتحدد اسم الموقع أو الـ IP اللي العميل عايز يتواصل معاه.
- User-Agent: بتوضح معلومات عن المتصفح والـ OS اللي العميل بيستخدمهم.
- Cookie: بيبعت الـ Cookies مع الطلب علشان السيرفر يعرف العميل ده مين.

4. Response Headers (هيدر الرد):
دي الـ Headers اللي السيرفر بيرجعها مع الرد على العميل. زي:
- Server: بيقول إيه نوع السيرفر اللي رد.
- Set-Cookie: بيحدد الـ Cookies اللي لازم يخزنها العميل.
- WWW-Authenticate: لو الرد بيطلب مصادقة (Authentication).

5. Security Headers (هيدر الأمان):
في بعض الـ Headers دي اللي بتساعد في تأمين الاتصال والحد من الهجمات. زي:
- Content-Security-Policy: بيحدد السياسات الخاصة بالحماية، زي مثلاً إيه السكربتات المسموح ليها تشتغل على الصفحة.
- Strict-Transport-Security: بيجبر المتصفح يستخدم HTTPS بدل HTTP علشان تأمين البيانات.

في الجزء اللي فات شفنا إزاي باستخدام العلامة
-v مع cURL نقدر نعرف تفاصيل كاملة عن طلب واستجابة الـ HTTP. لكن لو عاوزين نشوف رؤوس الاستجابة بس (Headers)، ممكن نستخدم العلامة -I اللي بتعمل طلب نوعه HEAD وبتعرض رؤوس الاستجابة فقط. ولو عايزين نشوف الرؤوس مع جسم الاستجابة (زي الـ HTML) ممكن نستخدم العلامة -i. الفرق إن -I بيبعت طلب HEAD بس، لكن -i بيعرض الرؤوس مع أي طلب بنحدده.

مثال: استخدام علامة -I:

$ curl -I https://example.com

Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko)
Cookie: cookie1=298zf09hf012fh2; cookie2=u32t4o3tb3gg4
Accept: text/plain
Referer: https://example.com/
Authorization: BASIC cGFzc3dvcmQK

Date: Sun, 06 Aug 2020 08:49:37 GMT
Connection: keep-alive
Content-Length: 26012
Content-Type: text/html; charset=ISO-8859-4
Content-Encoding: gzip
Server: Apache/2.2.14 (Win32)
Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
WWW-Authenticate: BASIC realm="localhost"
Content-Security-Policy: script-src 'self'
Strict-Transport-Security: max-age=31536000
Referrer-Policy: origin


راجع الرؤوس اللي فوق، وحاول تفتكر دور كل واحد منها.

تعيين رؤوس الطلب (Request Headers)
اداة cURL بتسمح لنا نحدد رؤوس الطلب باستخدام العلامة -H. لكن فيه بعض الرؤوس ليها علامات مخصصة.
مثلاً، لو عايزين نغير قيمة User-Agent ممكن نستخدم العلامة -A كالتالي:

$ curl https://www.inlanefreight.com -A 'Mozilla/5.0'

ده هيغير رأس User-Agent للقيمة اللي اخترناها.

جرب تستخدم العلامتين -I أو -v مع المثال ده، وتأكد إن رأس User-Agent اتغير باستخدام -A.

بكده هتقدر تحلل أي طلب HTTP أو استجابة مباشرة من المتصفح!
🔥116👍6❤‍🔥31😍1💘1
شرح HTTP Methods and Codes



بروتوكول HTTP بيشتغل بطرق مختلفة عشان نقدر نوصل للمصادر أو البيانات اللي محتاجينها من السيرفر. الطرق دي بتسمح للمتصفح (زي جوجل كروم أو فايرفوكس) إنه يبعت معلومات أو ملفات للسيرفر، وكمان بتحدد للسيرفر إزاي يتعامل مع الطلب اللي بنبعته ويرد علينا إزاي.

إحنا شفنا شوية طرق مختلفة في طلبات HTTP لما جربناها قبل كده. لما بنستخدم cURL مع الخيار -v عشان نشوف تفاصيل الطلب بالكامل، بنلاقي السطر الأول فيه نوع الطريقة اللي استخدمناها (زي GET / HTTP/1.1). في أدوات المطور الموجودة في المتصفح، بنشوف الطريقة دي في عمود اسمه "Method". كمان في رد السيرفر، بنلاقي أكواد استجابة HTTP اللي بتقولنا حالة الطلب اللي بعتناه إذا كان ناجح أو فيه مشكلة.


طرق الطلبات (Request Methods)

في HTTP، فيه طرق مختلفة بنستخدمها عشان نطلب بيانات من السيرفر أو نبعتله بيانات. دول شوية طرق مشهورة:

طريقة GET: بنطلب حاجة معينة من السيرفر، زي لما تفتح صفحة ويب. ممكن كمان نبعت بيانات إضافية للسيرفر عن طريق الحاجات اللي بنكتبها بعد علامة الاستفهام في الرابط (زي ?param=value).

طريقة POST: بنبعت بيانات للسيرفر، زي لما تكتب في فورم تسجيل الدخول أو ترفع صورة. البيانات دي بتتبعت في جسم الطلب (Body) بعد الترويسات.

طريقة HEAD: بنطلب من السيرفر يرد علينا بنفس الترويسات اللي كان هيبعتها مع طلب GET، بس من غير ما يبعث جسم الطلب نفسه. مفيدة لو عايز تعرف حجم الملف قبل ما تنزله.

طريقة PUT: بنستخدمها عشان نعمل مورد جديد على السيرفر. لو استخدمناها من غير حماية كويسة، ممكن حد يرفع حاجات مضرة.

طريقة DELETE: زي ما الاسم بيقول، بنحذف مورد موجود على السيرفر. لو ما تأمنتش، ممكن تتسبب في مشاكل كبيرة زي حذف ملفات مهمة وتعطيل السيرفر (DoS).

طريقة OPTIONS: بنسأل السيرفر عن الطرق اللي بيدعمها، يعني بنطلب معلومات عنه.

طريقة PATCH: بنعمل تعديلات بسيطة على حاجة موجودة بدل ما نغيرها بالكامل.

القائمة دي فيها الطرق الأكثر شيوعًا، لكن فيه طرق تانية ممكن تكون متاحة حسب إعدادات السيرفر والتطبيق اللي بتستخدمه.

معلومة مهمة: معظم مواقع الويب بتستخدم طريقتين أساسيين هما GET وPOST. لو الموقع بيشتغل مع REST APIs، هيحتاج كمان PUT وDELETE عشان يقدر يحدث البيانات أو يحذفها من نقاط النهاية (endpoints).


أكواد الاستجابة (Response Codes)

أكواد حالة HTTP بتوضحلك إيه اللي حصل مع الطلب اللي بعتته للسيرفر. السيرفر ممكن يرد بخمس أنواع من الأكواد:

1xx: معلومات بس، ومش بتأثر على معالجة الطلب.
2xx: الطلب نجح تمام.
3xx: السيرفر بيعمل إعادة توجيه لعنوان تاني.
4xx: فيه مشكلة في الطلب من ناحية العميل، زي طلب حاجة مش موجودة أو تنسيق غلط.
5xx: فيه مشكلة في السيرفر نفسه.


أمثلة على الأكواد دي:

200 OK: الطلب نجح، والسيرفر رجع البيانات المطلوبة.
302 Found: بيحولك لعنوان تاني، زي لما تدخل على صفحة وتتنقل تلقائيًا للوحة التحكم بعد تسجيل الدخول.
400 Bad Request: الطلب فيه خطأ، زي طلب ناقص أو مش مكتوب بطريقة صحيحة.
403 Forbidden: معندكش صلاحية تشوف المورد ده، أو السيرفر اكتشف حاجة مشبوهة في المدخلات اللي بعتها.
404 Not Found: المورد اللي بتدور عليه مش موجود على السيرفر.
500 Internal Server Error: السيرفر حصل فيه مشكلة ومقدرش يتعامل مع الطلب.


فيه أكواد كتيرة تانية، وفيه خوادم زي Cloudflare وAWS بتستخدم أكواد خاصة بيها كمان. لو عايز تعرف اكواد اكتر، ممكن تشوف ده: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status .
❤‍🔥12👍61🔥1👌1😍1🏆1
طلبات GET


لما بنفتح عنوان URL، المتصفح بيستخدم طلب GET بشكل افتراضي عشان يجيب المحتوى أو الموارد اللي موجودة في السيرفر. الطلب ده زي ما يكون بيقول للسيرفر: "هاتيلي الصفحة دي". أول ما المتصفح يستلم الصفحة الرئيسية، ممكن يبعت طلبات تانية للسيرفر باستخدام طرق HTTP مختلفة زي POST، PUT، أو DELETE على حسب الوظائف اللي الصفحة بتقدمها.


المصادقة الأساسية HTTP Basic Auth

المصادقة الأساسية Basic Auth هي طريقة بسيطة للتحقق من هوية المستخدمين عند وصولهم لصفحة محمية. في الطريقة دي، المتصفح أو العميل بيطلب من المستخدم يدخل اسم مستخدم وكلمة مرور، وده بيتم إرسالهم مباشرة للسيرفر في رأس الطلب (HTTP Header).

المصادقة دي بتكون في شكل اسم مستخدم وكلمة مرور، واللي بيتم تشفيرهم بطريقة Base64، وبعد كده السيرفر بيقرر إذا كان هيسمح للمستخدم بالدخول أو لا بناءً على البيانات دي.

الميزة الرئيسية في المصادقة الأساسية هي إنها بتتم بشكل مباشر من خلال السيرفر، دون الحاجة لتفاعل مع التطبيق نفسه زي ما بيحصل مع طرق المصادقة التانية اللي بتعتمد على POST أو الجلسات (sessions).


إزاي المصادقة الأساسية بتشتغل؟

المستخدم بيبعت بيانات الاعتماد (اسم المستخدم وكلمة المرور) مع كل طلب.
السيرفر بيستخدم هذه البيانات عشان يتأكد من صحة المستخدم.
لو البيانات صحيحة، بيتم السماح بالوصول للمحتوى.
لو البيانات مش صحيحة، السيرفر بيرفض الوصول ويطلب إعادة المحاولة.

المصادقة دي بتستخدم لحماية الصفحات أو الأدلة على السيرفر بدون ما يتدخل التطبيق في عملية التحقق، وده بيخليها بسيطة لكنها في نفس الوقت مش دايمًا آمنة لو ما استخدمناش HTTPS عشان نأمن نقل البيانات.

لو حبينا نخش الصفحة باستخدام أمر cURL، ممكن نضيف الخيار -i عشان نعرض رؤوس الاستجابة مع المحتوى. هنعمل كده:
$ curl -i http://<SERVER_IP>:<PORT>/

في الاستجابة هنشوف كده:
HTTP/1.1 401 Authorization Required
Date: Mon, 21 Feb 2022 13:11:46 GMT
Server: Apache/2.4.41 (Ubuntu)
Cache-Control: no-cache, must-revalidate, max-age=0
WWW-Authenticate: Basic realm="Access denied"
Content-Length: 13
Content-Type: text/html; charset=UTF-8

Access denied

زي ما هنشوف، في الاستجابة مكتوب "Access denied" (دخول مرفوض) في المحتوى، وفيه برضه رأس WWW-Authenticate: Basic realm="Access denied"، وده بيأكد إن الصفحة دي بتستخدم المصادقة الأساسية HTTP Basic Auth.

لو عايزين نبعت بيانات الاعتماد باستخدام cURL، بنستخدم الخيار -u عشان نحدد اسم المستخدم وكلمة المرور زي كده:
$ curl -u admin:admin http://<SERVER_IP>:<PORT>/

المرة دي هنشوف المحتوى بتاع الصفحة في الاستجابة:
<!DOCTYPE html>
<html lang="en">

<head>
...SNIP...

فيه كمان طريقة تانية إننا نضيف بيانات الاعتماد في الرابط نفسه كده: username:password@URL، زي ما شرحنا في القسم الأول. لو جربنا نرسل نفس الطلب باستخدام cURL أو المتصفح، هنقدر نوصل للصفحة زي كده:
$ curl http://admin:admin@<SERVER_IP>:<PORT>/

وهنشوف نفس المحتوى في الاستجابة. كمان لو جربنا نفس الرابط في المتصفح، هيتم المصادقة بنجاح وهنشوف الصفحة.


رأس HTTP Authorization Header

لو أضفنا الخيار -v لأوامر cURL السابقة، هنعرف أكتر عن تفاصيل الطلب اللي بيتبعت، زي كده:
$ curl -v http://admin:admin@<SERVER_IP>:<PORT>/

الاستجابة هتكون زي دي:
*   Trying <SERVER_IP>:<PORT>...
* Connected to <SERVER_IP> (<SERVER_IP>) port PORT (#0)
* Server auth using Basic with user 'admin'
> GET / HTTP/1.1
> Host: <SERVER_IP>
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.77.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 21 Feb 2022 13:19:57 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Cache-Control: no-store, no-cache, must-revalidate
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 1453
< Content-Type: text/html; charset=UTF-8
<

<!DOCTYPE html>
<html lang="en">

<head>
...SNIP...

في الطلب ده، هنلاحظ إن فيه رأس اسمه Authorization فيه القيمة:
Basic YWRtaW46YWRtaW4=

والقيمة دي هي Base64 مشفرة للبيانات admin:admin. لو كنا بنتعامل مع أساليب مصادقة حديثة زي JWT (اللي هي رمز الوصول)، كان هيبقى نوع المصادقة هو Bearer ومش هيكون فيه قيمة صغيرة زي دي، بل هيبقى فيه رمز طويل مشفر.
❤‍🔥96👍6😍1🏆1💘1
إعداد رأس Authorization يدويًا

ممكن كمان نضيف رأس Authorization يدويًا من غير ما ندي بيانات الاعتماد بشكل مباشر، زي كده:
$ curl -H 'Authorization: Basic YWRtaW46YWRtaW4=' http://<SERVER_IP>:<PORT>/

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

في التطبيقات الحديثة، بيتم استخدام نماذج تسجيل الدخول اللي بتعتمد على لغات البرمجة الخلفية زي PHP. النماذج دي بتستخدم طلبات POST عشان تتحقق من المستخدمين، وبعد كده بترجع كوكيز (ملفات تعريف الارتباط) عشان تحافظ على الجلسة.


معاملات GET

بعد تسجيل الدخول بنجاح، هتلاقي ميزة بتسمحلك تدخل نص معين، والصفحة هتعرض النتيجة المناسبة.

الصفحة بتجيب البيانات منين؟
لما بتدخل النص وتضغط على البحث، الصفحة ممكن تتواصل مع السيرفر عشان تجيب البيانات المطلوبة. عشان تتأكد من ده، افتح أدوات المطور في المتصفح (DevTools) وروح على تبويب Network باستخدام [CTRL+SHIFT+E].
قبل ما تدخل أي نص، اضغط على أيقونة سلة المهملات لمسح الطلبات القديمة ومتابعة الجديدة بس (جرب علي موقع hiddenlockteam.com).

ملاحظة الطلبات الجديدة
لما تضغط على بحث، هتشوف طلب جديد بيتبعت للسيرفر، بيكون موجه لملف معين زي search.php (مش شرط يظهر امتداد الملف) مع معاملات GET في الرابط. المعاملات دي بتكون في صيغة:
?search=الكلمة

ده بيوضح إن الصفحة بتعتمد على طلب GET لجلب النتائج.



إرسال طلب GET باستخدام cURL
ممكن تبعت نفس الطلب باستخدام cURL بالشكل التالي:
$ curl 'http://<SERVER_IP>:<PORT>/search.php?search=النص' -H 'Authorization: Basic YWRtaW46YWRtaW4='

الاستجابة هتكون النتيجة اللي السيرفر بيرجعها بناءً على النص اللي أدخلته.


نسخ طلب GET باستخدام المتصفح
المتصفح بيوفر خيار لنسخ الطلب بسهولة. كليك يمين على الطلب في تبويب Network واختار Copy > Copy as cURL. تقدر تلصق الأمر في التيرمينال وتنفيذه عشان تشوف نفس الاستجابة. كمان تقدر تستخدم Copy as Fetch وتنفذه من Console.

عرض تفاصيل الاستجابة
لما تنفذ الطلب، الاستجابة هتظهر بالكامل. تقدر تضغط عليها وتشوف تفاصيل كل جزء عشان تفهم أكتر ازاي السيرفر بيرد على الطلبات.
👍9❤‍🔥33🔥21🏆1💘1
طلبات POST



في الجزء اللي فات، شفنا إزاي طلبات GET بتتستخدم في تطبيقات الويب عشان تعمل حاجات زي البحث أو الوصول لصفحات معينة. لكن لما تطبيقات الويب تحتاج تبعت ملفات أو تخلي بيانات المستخدم تبقى بعيد عن اللينك (URL)، بتستخدم طلبات POST.

الفرق بين GET وPOST هو إن GET بيحط البيانات اللي بتدخلها في اللينك اللي بتشوفه فوق في المتصفح، إنما POST بيخلي البيانات جوه جسم الطلب (HTTP Request body)، وده ليه ٣ مميزات:

1. مفيش تسجيل للبيانات (Logging): لأن طلبات POST ممكن تنقل ملفات كبيرة زي لما ترفع ملف على موقع، فمش عملي إن السيرفر يسجل كل البيانات دي في اللينك زي ما كان هيحصل لو استخدمت GET.
2. ترميز أقل (Less Encoding): اللينكات مصممة عشان تتشارك بسهولة، فلازم تكون مكتوبة بحروف معينة. بس POST بيخلي البيانات جوه جسم الطلب، فممكن تستخدم أي نوع بيانات حتى لو كانت صور أو ملفات، والترميز بيكون بس للفواصل بين البيانات.
3. تقدر تبعت بيانات أكتر: المتصفحات والخوادم بيحددوا حد أقصى لطول اللينك (URL)، وعادةً مش لازم تعدي 2000 حرف. لكن مع POST تقدر تبعت كميات أكبر من البيانات لأن الطول مش مشكلة زي GET.


نماذج تسجيل الدخول


لما نجرب ندخل علي صفحة باسم المستخدم admin وكلمة السر admin، بننجح في الدخول، وبيظهرلنا الصفحة.

لو مسحنا كل البيانات اللي في تبويب الشبكة (Network) في أدوات المطور في المتصفح وجربنا نسجل دخول تاني، هنلاقي طلبات كتير بتتبعت. نقدر نصفي الطلبات ونخليها بس اللي رايحة لخادم تطبيق الويب بتاعنا (يعني نستبعد الطلبات الخارجية)، وهنلاحظ طلب POST مبعوت بالشكل ده: web_requests_login_request

نقدر نضغط على الطلب ده، وبعدين نروح لتبويب Request عشان نشوف جسم الطلب (Body)، وبعد كده نضغط على زر Raw عشان نشوف البيانات اللي اتبعتت. هنلاقي البيانات المبعوتة شكلها كده:
username=admin&password=admin


دلوقتي معانا بيانات الطلب، نقدر نحاول نبعت طلب زي ده باستخدام cURL ونشوف هل هنقدر نسجل الدخول ولا لأ. زي ما عملنا قبل كده، ممكن نضغط كليك يمين على الطلب ونختار Copy>Copy as cURL. لكن مهم نتعلم إزاي نبني طلبات POST بإيدينا، فتعالوا نجرب نعمل كده.

هنستخدم الخيار -X POST عشان نبعت طلب POST. وبعدين نستخدم -d لإضافة البيانات اللي هنبعتها، زي المثال ده:
$ curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/

<!DOCTYPE html>
<html lang="en">

<head>

...SNIP...


لما نبص على كود الـ HTML، مش هنلاقي كود نموذج تسجيل الدخول، لكن هنشوف كود الصفحة بعد التسجيل.

ملاحظة: في نماذج تسجيل دخول كتير، ممكن يحصل إعادة توجيه لصفحة تانية لما ندخل بنجاح (زي /dashboard.php). لو عاوزين نتابع إعادة التوجيه دي باستخدام cURL، ممكن نستخدم الخيار -L.


الكوكيز (Cookies) بعد تسجيل الدخول


لما بنسجل دخول بنجاح، المتصفح بياخد حاجة اسمها كوكيز عشان يفضل فاكر إننا متسجلين دخول. ده بيسهل علينا استخدام الموقع من غير ما ندخل بياناتنا كل مرة. ممكن نستخدم الأمر -v أو -i مع cURL عشان نشوف الاستجابة، وهنلاقي جزء فيها بيقول Set-Cookie مع الكوكي اللي بتثبت إننا متسجلين:

$ curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/ -i
HTTP/1.1 200 OK
Date:
Server: Apache/2.4.41 (Ubuntu)
Set-Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1; path=/


دلوقتي، عندنا الكوكيز اللي بتأكد إننا متسجلين دخول. ممكن نستخدمها بدل ما نكتب اسم المستخدم والباسورد كل مرة. نعمل ده باستخدام الخيار -b في cURL كده:

$ curl -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/


هنلاقي إننا مسجلين دخول وبنوصل للبحث من غير ما نرجع نسجل تاني. كمان ممكن نستخدم الكوكي كـ Header بالطريقة دي:

$ curl -H 'Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/


لو جربنا بنفسنا في المتصفح، بنعمل Logout الأول ونرجع لصفحة تسجيل الدخول. بعدين نفتح أدوات المطور (DevTools) ونروح على علامة تبويب Storage باستخدام [SHIFT+F9]. بنشوف الكوكيز تحت Cookies ونختار موقعنا. لو مش مسجلين، الكوكي بتاع PHPSESSID مش هيكون فعال، وهنشوف صفحة تسجيل الدخول بدل البحث.

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

بالتالي، وجود كوكي صالح ممكن يخليك تدخل تطبيقات ويب كتير من غير كلمة سر، وده بيستخدم في بعض الهجمات زي XSS (Cross-Site Scripting).
4🔥4👍3❤‍🔥11💘1
التعامل مع بيانات JSON


لما بنستخدم وظيفة البحث في الموقع، ممكن نتابع الطلبات اللي بتتبعت باستخدام أدوات المطور في المتصفح. بنروح على علامة تبويب الشبكة (Network) ونضغط على سلة المهملات لتفريغ الطلبات القديمة. بعد كده، بنعمل بحث بأي مدينة ونشوف الطلبات اللي اتبعتت.

هنلاقي إن الطلب بيتبعت كـ POST لملف اسمه search.php، والبيانات اللي بيتعامل معاها مكتوبة بالشكل ده:
{"search":"london"}


البيانات دي مكتوبة بصيغة اسمها JSON، وعلشان الموقع يعرف يتعامل مع الصيغة دي، لازم يكون في رأس (Header) اسمه Content-Type متظبط على application/json. نقدر نتأكد من الكلام ده لو ضغطنا كليك يمين على الطلب واخترنا Copy>Copy Request Headers، وهنشوف معلومات الطلب زي كده:
Content-Type: application/json
Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1


دلوقتي هنكرر نفس الطلب باستخدام cURL، بس هنضيف الرأس اللي بيحدد نوع المحتوى ورأس الكوكيز عشان نوصل للبحث من غير ما نسجل دخول تاني:
$ curl -X POST -d '{"search":"london"}' -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' -H 'Content-Type: application/json' http://<SERVER_IP>:<PORT>/search.php


النتيجة هتكون:
["London (UK)"]


كده إحنا قدرنا نوصل لنتيجة البحث بشكل مباشر ومن غير ما نستخدم واجهة الموقع. الطريقة دي مفيدة جدًا لو بنجري اختبارات أمان أو بندور على أخطاء برمجية، لأنها أسرع بكتير من التعامل مع الموقع بشكل يدوي.
🔥8👍431❤‍🔥1💘1
CRUD API


شفنا في الأمثلة اللي فاتت تطبيق ويب للبحث عن المدن بيستخدم PHP parameters علشان يدور على اسم مدينة. في القسم ده، هنبص على إزاي تطبيق الويب ده ممكن يستخدم APIs علشان يعمل نفس الحاجة، وهنتعامل بشكل مباشر مع واجهة API endpoint.

الـ APIs


فيه أنواع كتير من الـ APIs. كتير منها بيستخدم للتعامل مع قواعد البيانات بحيث نقدر نحدد الجدول والسطر اللي عايزين نشتغل عليه في استعلام الـ API، وبعدين نستخدم طريقة HTTP المناسبة لتنفيذ العملية المطلوبة. على سبيل المثال، لو عندنا endpoint باسم api.php في المثال بتاعنا، وعايزين نعمل تحديث لجدول المدن (city table) في قاعدة البيانات، والسطر اللي هنحدثه هو المدينة اللي اسمها لندن، هيبقى الـ URL بالشكل ده:

curl -X PUT http://<SERVER_IP>:<PORT>/api.php/city/london
4👍4❤‍🔥1🔥1💘1
CRUD


زي ما شفنا، بسهولة نقدر نحدد الجدول والسطر اللي عايزين ننفذ عليه العملية باستخدام الـ APIs. بعد كده نقدر نستخدم طرق HTTP مختلفة لتنفيذ العمليات المطلوبة على السطر ده. بشكل عام، الـ APIs بتنفيذ أربع عمليات أساسية على الكيانات المطلوبة في قاعدة البيانات:

العمليات الأربعة اللي في الصورة هي الأساس في الـ CRUD APIs، وبتستخدم نفس الفكرة في REST APIs وأنواع تانية كتير من الـ APIs. طبعا مش كل الـ APIs بتشتغل بنفس الطريقة، والتحكم في صلاحيات المستخدم بيحدّد العمليات اللي نقدر ننفذها والنتائج اللي نقدر نشوفها.
51❤‍🔥1🔥1💘1
قراءة البيانات (Read)

أول حاجة بنعملها لما نتعامل مع API هي قراءة البيانات. زي ما اتكلمنا قبل كده، ممكن ببساطة نحدد اسم الجدول بعد رابط الـ API (زي /city) وبعد كده نحدد مصطلح البحث (زي /london) بالشكل ده:


مثال CRUD API:

$ curl http://<SERVER_IP>:<PORT>/api.php/city/london


النتيجة:

[{"city_name":"London","country_name":"(UK)"}]


النتيجة بتيجي على شكل نص JSON. علشان نخلي الناتج متنسق في صيغة JSON بشكل مناسب، ممكن نوجه الإخراج إلى أداة jq، ونستخدم الخيار -s مع curl لتجنب أي إخراج غير ضروري، زي كده:

مثال CRUD API باستخدام jq:

$ curl -s http://<SERVER_IP>:<PORT>/api.php/city/london | jq


النتيجة:

[
{
"city_name": "London",
"country_name": "(UK)"
}
]


دلوقتي حصلنا على نتيجة منظمة وجميلة. كمان نقدر نحدد مصطلح بحث ونشوف كل النتائج المتطابقة:

مثال بحث متعدد:

$ curl -s http://<SERVER_IP>:<PORT>/api.php/city/le | jq


النتيجة:

[
{
"city_name": "Leeds",
"country_name": "(UK)"
},
{
"city_name": "Dudley",
"country_name": "(UK)"
},
{
"city_name": "Leicester",
"country_name": "(UK)"
},
...SNIP...
]


وأخيرًا، لو مررنا سلسلة فارغة، نقدر نسترجع كل البيانات الموجودة في الجدول:

استرجاع كل الإدخالات:

$ curl -s http://<SERVER_IP>:<PORT>/api.php/city/ | jq


النتيجة:

[
{
"city_name": "London",
"country_name": "(UK)"
},
{
"city_name": "Birmingham",
"country_name": "(UK)"
},
{
"city_name": "Leeds",
"country_name": "(UK)"
},
...SNIP...
]
7👍2🔥1😍1💘1
تحديث البيانات (Update)


دلوقتي بعد ما عرفنا إزاي نقرأ ونضيف بيانات باستخدام الـ APIs، خلينا نتكلم عن طريقتين لسه ما استخدمناهمش: PUT وDELETE. زي ما ذكرنا في الأول، PUT بتستخدم لتحديث الإدخالات وتعديل تفاصيلها، بينما DELETE بتستخدم لحذف كيان معين.

ملاحظة
طريقة PATCH ممكن تُستخدم بدل PUT لتحديث جزئي للبيانات (زي تعديل city_name بس)، أما PUT بتحدث كل البيانات. ممكن نستخدم OPTIONS علشان نعرف أي طريقة مدعومة من السيرفر. هنا، هنركز على PUT لأنها مشابهة جدًا في الاستخدام لـ POST.

استخدام PUT
لازم نحدد اسم الكيان اللي هنحدثه في الـ URL، غير كده الـ API مش هيعرف إيه اللي محتاج يتعدل. بنغير طريقة الطلب لـ PUT ونبعت البيانات بتنسيق JSON زي المثال ده:

مثال CRUD API:

$ curl -X PUT http://<SERVER_IP>:<PORT>/api.php/city/london -d '{"city_name":"New_Rabbit_City", "country_name":"Rabbit"}' -H 'Content-Type: application/json'


هنا حددنا /city/london في الـ URL وبعتنا بيانات JSON فيها "city_name":"New_Rabbit_City". بعد التحديث، مدينة london مش هتبقى موجودة، وبدلها هيبقى فيه مدينة جديدة باسم New_Rabbit_City.

ملاحظة:
في بعض الـ APIs، ممكن تستخدم عملية التحديث لإنشاء إدخالات جديدة لو البيانات مش موجودة أصلا.
6❤‍🔥2👍1🔥1😍1💘1
حذف البيانات (DELETE)


أخيرا، خلينا نجرب نحذف مدينة، وهي عملية بسيطة زي قراءة المدينة. كل اللي علينا هو تحديد اسم المدينة في الـ API واستخدام طريقة طلب HTTP DELETE، كالتالي:

مثال CRUD API:

$ curl -X DELETE http://<SERVER_IP>:<PORT>/api.php/city/New_Rabbit_City


بعد كده، هنحاول نقرأ بيانات المدينة اللي حذفناها للتأكد إنها مش موجودة:

$ curl -s http://<SERVER_IP>:<PORT>/api.php/city/New_Rabbit_City | jq


النتيجة:

[]


زي ما شفنا، المحاولة لقراءة المدينة New_Rabbit_City بعد حذفها رجعت مصفوفة فاضية، يعني إن المدينة ما بقتش موجودة.

ملاحظة:
دلوقتي عرفنا نستخدم كل عمليات CRUD باستخدام cURL. في تطبيق ويب حقيقي، مش كل المستخدمين هيبقى ليهم صلاحية تعديل أو حذف البيانات. السماح للجميع بالتعديل أو الحذف بيُعتبر ثغرة أمنية. لازم يكون لكل مستخدم صلاحيات محددة لتحديد العمليات اللي يقدر يعملها. لتأكيد هوية المستخدم عند التعامل مع الـ API، بنستخدم ملفات تعريف ارتباط (cookies) أو ترويسات تصريح مثل JWT، زي ماشرحنا ف مقال قبل كدة.

و كده نكون شرحنا كل حاجة تقريبا في اداه cURL.
6❤‍🔥2👍2🔥1😍1💘1
بعد مافهمت طلبات الويب, دلوقتي هبدء اتكلم عن إزاي تتخطى مشكلة الخطا 403 (دي حاجه هتقابلك بالعبط و انت بتخترق موقع).

لو مش فاكر يعني إيه خطأ 403؟
لما يجي لك خطأ 403 وانت بتحاول تدخل على موقع، ده معناه إنك مش مسموح لك تدخل على الصفحة دي. بيكون ده إجراء أمني، لكن فيه إعدادات غلط ممكن تسمح للمهاجمين يتخطوا الحماية دي. لو إنت مختبر اختراق، لازم تعرف الحيل اللي بتساعدك تتجاوز القيود دي.

إيه أشهر أسباب الخطأ 403؟
1. حظر عناوين IP: بعض المواقع بتحظر الدخول لعناوين معينة.
2. تصفية حسب User-Agent: الموقع بيمنع الطلبات اللي شكلها جاي من أدوات معينة (زي أدوات الاختبار).
3. منع طرق HTTP معينة: زي لما الموقع يسمح باستخدام POST بس ويمنع GET.
4. أذونات ملفات غلط: بيكون فيه فايلات مش مسموح تتفتح بسبب إعدادات الأذونات.

إزاي نتجاوز الخطأ 403؟

1. تغيير الترويسات (Headers)
- غير الـ User-Agent اللي بتستخدمه، لأن الموقع ممكن يمنع أدوات زي Burp Suite او cURL.
- مثال باستخدام curl:

curl -A "Mozilla/5.0" http://example.com/secret/


2. جرّب طرق HTTP مختلفة
- جرب تستخدم طرق زي OPTIONS أو HEAD بدل الطرق العادية.
- مثال:

curl -X OPTIONS http://example.com/secret/


3. تشفير العناوين (URL Encoding)
- بدل ما تكتب /secret، اكتبها مشفرة كده %2Fsecret.

curl http://example.com/%2Fsecret/


4. استخدم رموز إضافية
- أحيانًا إضافة / أو . في آخر العنوان بتكسر الحماية.
- مثال:

http://example.com/secret/  
http://example.com/secret..;/
http://example.com/secret.



5. تغيير الأحرف الكبيرة والصغيرة في العنوان
- بعض المواقع بتفرق بين الحروف الكبيرة والصغيرة في العنوان. لو غيرت الحروف، ممكن تتخطى الحظر.
- مثال:

http://example.com/SeCrEt/


6. استخدام Proxy او VPN
- لو الموقع حظر عنوان IP بتاعك، ممكن تستخدم بروكسي أو VPN عشان تغير الـ IP.
- مثال باستخدام proxychains:

proxychains curl http://example.com/secret/


7. تغيير ترويسة Host
- ممكن تغير ترويسة الـ Host في الطلب علشان تعدي قيود بتعتمد على اسم الاستضافة.
- مثال:

curl -H "Host: alternative.example.com" http://example.com/secret/


8. تخطي الأدلة (Directory Traversal)
- استخدم تقنية الانتقال بين المجلدات للوصول لحاجة المفروض تكون ممنوعة.
- مثال:

curl http://example.com/../secret/


9. تغيير ترويسة Referer
- بعض المواقع بتعتمد على الترويسة دي لتأكيد الطلب جاي منين. لو غيرتها بشكل مناسب، ممكن تعدي الحظر.
- مثال:

curl -H "Referer: http://example.com/" http://example.com/secret/


10. البحث عن نسخ احتياطية أو نقاط نهاية بديلة
- ممكن تلاقي نسخ احتياطية لملفات أو نهايات URL تانية مش محمية.
- مثال:

curl http://example.com/secret.bak


11. التبديل بين HTTP وHTTPS
- أحيانا الموقع بيبقى عامل قيود على واحد من البروتوكولين، ولو جربت تستخدم البروتوكول التاني ممكن تتخطى الحظر.
- مثال:

http://example.com/secret/  
https://example.com/secret/


12. التجاوز باستخدام شبكات CDN أو التخزين المؤقت
- لو الموقع بيستخدم CDN، ممكن تلاقي نسخ مخزنة من صفحات محظورة لسه متاحة.
- مثال: جرب توصل للخادم الأصلي باستخدام عنوان IP بدل الدومين.


أدوات تساعدك في تخطي الخطأ 403 بشكل أوتوماتيكي


1. ffuf
- دي أداة بتعمل fuzzing، وده معناه إنها بتجرب مسارات كتيرة تلقائيًا.
- مثال:

ffuf -u http://example.com/FUZZ -w /path/to/wordlist.txt


2. Nmap
- استخدم سكريبت http-methods عشان تعرف الطرق اللي الخادم بيدعمها.
- مثال:

nmap --script http-methods -p80,443 example.com



لو في اداة من دول مش فاهمها كويس متقلقش هشرحهم قريب.
10❤‍🔥5👍4🔥21😍1💘1
شرح OSI Model


ال OSI Model هو اختصار لـ Open Systems Interconnection، وده عبارة عن نظام (أو موديل) اتعمل عشان يساعدنا نفهم إزاي الأجهزة في الشبكات بتتواصل مع بعضها.
تقدر تعتبره خارطة طريق بتشرح كل خطوة بتمر بيها البيانات لما تنتقل من جهاز لجهاز.


اتعمل ليه؟

1- تنظيم التواصل:
قبل ما يتعمل الـ OSI Model، كل شركة كانت بتعمل نظام خاص بيها للتواصل بين الأجهزة، وده كان عامل مشاكل كتير؛ الأجهزة من شركات مختلفة مش بتعرف "تتكلم مع بعض".
الـ OSI Model جه عشان يوحد الطريقة دي ويخلي كل الأجهزة تتفاهم مهما كانت الشركات اللي صنعتها.

2- تقسيم المهام:
تخيل لو البيانات اللي بتتنقل هي لعبة تركيب "Puzzle"، وكل جزء من اللعبة ليه دور معين. الموديل قسم العملية دي لـ 7 مستويات (Layers)، وكل مستوى بيعمل شغل معين.

3- سهولة الإصلاح والتطوير:
لما كل حاجة تكون متقسمة بشكل واضح، أي مشكلة تحصل هتعرف هي فين بالضبط. كمان لو عايزين نطوّر جزء معين، بنقدر نعمل كده من غير ما نبوّظ باقي النظام.


النموذج ده متقسم ل7 طبقات الطبقات دي زي ساندوتش، كل طبقة فوق التانية، وكل واحدة ليها دور معين. وهنمشي بالترتيب من تحت لفوق (يعني من الأساس لحد ما نوصل للمستخدم).

1. الطبقة الفيزيائية (Physical Layer)

دي أول طبقة في OSI Model، وبتتعامل مع الجزء الفيزيائي الملموس في الشبكة، زي الأسلاك، الإشارات، والأجهزة اللي بتوصل الشبكات ببعضها.

دور الطبقة الفيزيائية:
1. نقل البيانات كإشارات:
البيانات اللي بتكتبها أو بتستخدمها (زي الرسالة اللي بتقراها دلوقتي) بتتحول لإشارات (إما كهربائية أو ضوئية أو موجات راديو) عشان تتحرك من جهاز للتاني.
تخيلها زي الطريق اللي بتنقل فيه السيارات (البيانات هي العربيات، والطريق هو الـ Physical Layer).

2. الوسائط الناقلة:
الطبقة دي بتحدد إيه الوسيط المستخدم لنقل البيانات:
سلكي: زي كابلات Ethernet أو الألياف الضوئية.
لاسلكي: زي الواي فاي أو البلوتوث.

3. الإشارات:
مسؤولة عن تحويل البيانات لإشارات:
إشارات كهربائية: لما تستخدم كابلات نحاسية (Copper Cables).
إشارات ضوئية: لما تستخدم الألياف الضوئية (Fiber Optics).
موجات راديو: لما تتعامل مع الواي فاي.

4. سرعة النقل (Bandwidth):
بتحدد السرعة اللي البيانات تتحرك بيها (زي إنك تختار طريق سريع للعربيات أو طريق عادي).

وظائف الطبقة الفيزيائية:
التوصيل الفيزيائي: توصل الأجهزة ببعض فعليًا (كابلات، مودم، محولات).
الإرسال والاستقبال: تبعت الإشارات من جهاز وتستقبلها في جهاز تاني.
التشفير (Encoding): تحول البيانات الرقمية (0s و 1s) لإشارات يفهمها الكابل أو الشبكة.
تحديد السرعة: تحدد معدل نقل البيانات (مثل 100 Mbps أو 1 Gbps).


2. طبقة ربط البيانات (Data Link Layer)


وظائف الطبقة:
1. تجهيز البيانات:
بتقسم البيانات اللي جاية من الطبقة اللي فوقها (Network Layer) لقطع صغيرة اسمها Frames (الإطار).
كل Frame فيه جزء من البيانات ومعاه معلومات إضافية زي عناوين الأجهزة.

2. التأكد من صحة البيانات:
الطبقة دي بتضيف حاجة اسمها Error Detection (كشف الأخطاء) عشان تقدر تعرف لو البيانات اتبعتت بشكل صحيح أو لا.
لو حصلت مشكلة أثناء النقل، الجهاز يعيد إرسال الـ Frame المفقود.

3. تحديد الهوية:
كل جهاز في الشبكة عنده عنوان فريد اسمه MAC Address (زي البطاقة الشخصية للأجهزة)، والطبقة دي بتستخدمه عشان تعرف مين يبعت لمين.

4. تنظيم الوصول:
لو فيه أكتر من جهاز بيستخدم نفس الوسيط (زي كابل مشترك أو واي فاي)، الطبقة دي بتعمل نظام عشان البيانات ما تتصادمش (Collision).

تقسيم الطبقة:
الطبقة دي بتنقسم لجزئين:
1. Logical Link Control (LLC):
الجزء ده مسؤول عن التحكم في تدفق البيانات وكشف الأخطاء.
بيشتغل مع البروتوكولات اللي فوقه (زي IP).

2. Media Access Control (MAC):
الجزء ده مسؤول عن العناوين الفيزيائية (MAC Address) وتنظيم إرسال البيانات في الشبكة.



3. طبقة الشبكة (Network Layer)


وظائف Network Layer:
1. تحديد العناوين (Addressing):
الطبقة دي بتستخدم حاجة اسمها IP Address لتحديد مين اللي بيبعت البيانات ومين اللي هياخدها.
يعني كل جهاز على الشبكة لازم يكون عنده عنوان IP مميز.

2. التوجيه (Routing):
مسؤولة عن تحديد أفضل طريق تمشي فيه البيانات من المرسل للمستقبل.
لو فيه أكتر من طريق، الطبقة دي بتختار الأسرع أو الأفضل.

3. تقسيم البيانات (Packetizing):
الطبقة دي بتستلم Frames من الطبقة اللي فوق (Data Link Layer)، وتشتغل على إعادة تغليف البيانات.

4. نقل البيانات بين الشبكات المختلفة:
الطبقة دي بتسهل التواصل بين شبكات مختلفة (زي LAN وWAN) من خلال الـ Router.
6👍31🔥1👌1😐1🫡1
إزاي Network Layer بتشتغل؟
1- البيانات اللي جاية من الطبقة اللي تحت (Data Link Layer) بتتفك من الـ Frame وتتحول لـ Packets.
2- كل Packet بياخد عنوان IP للجهاز المرسل وعنوان IP للجهاز المستقبل.
3- الطبقة دي تحدد أفضل طريق للـ Packets بناءً على الشبكة.
4- لو الـ Packets محتاجة تعدي على أكتر من شبكة (مثلاً، راوترات مختلفة)، الطبقة دي بتساعدها توصل للهدف.

بروتوكولات Network Layer:
1. IP (Internet Protocol):
- البروتوكول الأساسي اللي بيشتغل في الطبقة دي.
- عندنا نوعين:
- IPv4: الشكل التقليدي (زي 192.168.1.1).
- IPv6: الشكل الأحدث والأطول.

2. ICMP (Internet Control Message Protocol):
- بيستخدم عشان يبلغ عن مشاكل زي لو فيه Packet ضاعت.
- أداة زي الـ Ping بتعتمد على البروتوكول ده.

3. ARP (Address Resolution Protocol):
- بيحول العناوين من IP Address لـ MAC Address لما يحتاج يوصل لجهاز معين.


باقي الشرح ف يوم تاني. 🫡
16👍2👌21🔥1🏆1💘1