Showing posts with label challenges. Show all posts
Showing posts with label challenges. Show all posts
Saturday, September 3, 2016

SQL Truncation




كل منا يعرف ما هي وظيفة الــDatabase و طبعا صممنا تطبيقات و مواقع تعتمد عليها في تخزين و استرجاع البيانات 
اليوم في هذا المقال سوف نناقش واحدة من اخطر ثغرات قواعد البيانات و هي الـSQL Truncation

       ما هي الــSQL Truncation:
         هي خاصية في mysql وظفتها  حذف النص المدخل الي قواعد البيانات اكبر من 20  حرف 
          تحتوي علي مساحة فارغة كبيرة بينها  اي ان قواعد البيانات تقوم بحذف اذا كان المدخل اكبر من 20 حرف 


          الثغرة :


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

        admin                 xxxxxxxxxxxx في هذه الحالة تقوم الــDatabase بحذف النص الزائد و 
         حفظ كلمة admin في قواعد البيانات




        الان ناخذ مثال عملي علي هذا الموضوع و هو عبارة عن تحدي CTF 

       Root-me

     التحدي عبارة عن تسجيل الدخول باستخدام كلمة admin و لكن نحن لا نعلم ماهي كلمة السر 
     فكر معي فكر فكر 
     اذا قرات بداية المقال تكلمنا عن هذه الثغرة و تقوم قواعد البيانات بحذف المساحة الزائدة عن 20 جميل
      و يحفظ المستخدم الجديد باسم بعد حذف

      المساحة ما رايك في عمل تسجيل لمستخدم جديد بنفس اسم admin اضافة الي مساحة اكبر من 20 ماذا يحدث 

       يحدث تحديث لكلمة السر لمستخدم و هنا تاتي الخطورة




                كما في الصورة يمكننا اضافة مستخدم جديد و سوف بيانات التسجيل كالاتي 



                الاسم admin                 xxxxxxxxxxxx

                  كلمة السر PikachLOLOLO




              تمت عملية التسجيل و تم حفظ البيانات الان 




                   الان ندخل كلمة السر التي قمنا بتسجيل الحساب بها و هي PikachLOLOLO



                        تم الحصول علي الــflag 

                        flag : J41m3Qu4nD54Tr0nc


                               المصادر
http://resources.infosecinstitute.com/sql-truncation-attack/


Friday, July 8, 2016

PHP Serialization challenge

PHP Serialization











كل عام و انتم بالف خير و عيد سعيد و كل الامنيات محققة
اليوم مع حل تحدي جديد التحدي هو تحدي من مجموعة من تحديات في مسابقة root-me.org  هو موقع يحتوي علي مجموعة كبيرة من التحديات المتنوعة .

الان نعد الي التحدي الذي امامنا رابط التحدي  قبل رابط التحدي عليك دخول الرابط هذا الان نفتح الرابط
المتطلبات php interpreter و burpsuite .
من الصورة يظهر لنا يجب تسجيل الدخول يجب ان يكون admin حقو لو جربت guest لن يفيد في شئ 




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


<?php
define
('INCLUDEOK'true);session_start();

if(isset(
$_GET['showsource'])){
    
show_source(__FILE__);
    die;
}
/******** AUTHENTICATION *******/
// login / passwords in a PHP array (sha256 for passwords) !
require_once('./passwd.inc.php');


if(!isset(
$_SESSION['login']) || !$_SESSION['login']) {
    
$_SESSION['login'] = "";
    
// form posted ?
    
if($_POST['login'] && $_POST['password']){
        
$data['login'] = $_POST['login'];
        
$data['password'] = hash('sha256'$_POST['password']);
    }
    
// autologin cookie ?
    
else if($_COOKIE['autologin']){
        
$data unserialize($_COOKIE['autologin']);
        
$autologin "autologin";
    }

    
// check password !
    
if ($data['password'] == $auth$data['login'] ] ) {
        
$_SESSION['login'] = $data['login'];

        
// set cookie for autologin if requested
        
if($_POST['autologin'] === "1"){
            
setcookie('autologin'serialize($data));
        }
    }
    else {
        
// error message
        
$message "Error : $autologin authentication failed !";
    }
}
/*********************************/?>



<?php// message ?if(!empty($message))
    echo 
"<p><em>$message</em></p>";// admin ?if($_SESSION['login'] === "superadmin"){
    require_once(
'admin.inc.php');
}
// user ?elseif (isset($_SESSION['login']) && $_SESSION['login'] !== ""){
    require_once(
'user.inc.php');
}
// not authenticated ? else {?><?php}

if(isset(
$_SESSION['login']) && $_SESSION['login'] !== ""){
    echo 
"<p><a href='disconnect.php'>Disconnect</a></p>";
}
?>


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

https://tom.vg/2013/09/wordpress-php-object-injection/
https://crowdshield.com/blog.php?name=exploiting-php-serialization-object-injection-vulnerabilities
https://www.notsosecure.com/remote-code-execution-via-php-unserialize/
https://www.notsosecure.com/remote-code-execution-via-php-unserialize/


الان نرجع الي الكود مرة اخر لنحدد اسم المتسخدم superadmin تعمل هذا الدوال مع الcookie من اجل تمكين المستخدم الاتصال اعتماد علي البيانات التي تستخدمها الدالتان التي ترسل عندما يدخل المستخد كلمة الاسم و اسم المستخدم 
ترسل هذا البيانات علي شكلك مصفوفة
جميل الان نملك اسم المستخدم نرسل انت نرسل هذا البيانات عن طريق الparameter 
autologin حتي نتمكن من التسجيل الان نعد الي موضوعنا لدينا الاسم يمكن جعل كلمة السر true اي صحيحة ونتمكن تسجيل الدخول لكن كيف هذا نرجع الي محرر الــphp 
نكتب كود بسيط جدا




شرح الكود
اولاُ انشاء مصفوفة تحتوي علي الاسم و كلمة السر هي القيمة True بعد ذلك بنقوم بانشاء متغير يحتفظ بقيمة الدالة التي مرر ليها المصفوفة و بعد ذلك عمل urlencode من اجل ارسال البيانات عن طريق الcookie autologin الان 
هذا هو نتاج الكود
a%3A2%3A%7Bs%3A5%3A%22login%22%3Bs%3A10%3A%22superadmin%22%3Bs%3A8%3A%22password%22%3Bb%3A1%3B%7D

نفتح الموقع عن طريق الــBurp suite

الان نقوم بتعدل الــcookie


الان كما نلاحظ قمنا بتغير القيم الموجود في الــ request الي القيم التي لدينا
الان نرسل الطلب 



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

كلمة السر هي  !NoUserInputInPHPSerialization





الي اللقاء مع تحدي جديد
Wednesday, June 8, 2016

RFI To RCE zixem challenge

RFI To RCE





 RCE و الحصول عن طريقها علي  RFI   يوم جميل و تحدي جميل تحدي اليوم عبارة عن ثغرة  

وهي ثغرة معروف لدي  المبرمجين في بعض الاحيان ياخذ الكسل بعض المبرمجين في تضمين دالة دون عمل اي  filter لمحتوي parameter الذي عن طريقة الصفحة من اشهر الدوال التي تقوم بعمل اضافة محتوي صفحة من صفحة اخير هي الدالة include و require التي تقوم بضافة محتوي صفحة الي اخير و هي انواع local و هي تسمح ليك فقط باضافة المتحوي الذي يوجد في الموقع ويكون هذا النوع موجود اذا قام المبرمج بعض تعديل بيسط في ملف الphp.ini و النوع الثاني هو Remote وهو اخطر الانواع و يعتبر من الانواع التي تعطي المخترق الصلاحية للاضافة محتوي يحتوي علي دوالة تمكنة من اختراق السيرفر و التحكم الكامل به و ويمكن النوعين السابقين المخترق علي تصفح ملفات الموقع و الملفات الحساسة التي تحتوي علي كلمات سر 
و سوف نعطي مثال علي نوع هذه الدوال 

في الصورة اعلاه صورة مبسطه لعمل الدالة include و كيفية عملها الان نعد الي التحدي 





جميل شديد هذا هو المطلوب منك تنفيذ الدالة phpinfo عن طريقة الرابط هذا و تضمين الرابط داخل الــparameter 
page



الصورة اعلاه توضح محتوي الرابط المطلوب منك وضعة في الصفحة جميل جدا 

الان علينا تجرب الرابط المعطي لنا


تبا لم يعمل معنا و تم رصد محاولة اختراق 

الان كما تلاحظ معني في صورة التحدي انه يعطيك hint بسيط منك اجل مساعدك 


رائع الصورة توضح ان هنالك نوع من عملية الــfilter موضحة في الصورة الان علينا تحليل ما موجود في الصورة من كود 
انه بعد data , http,https,ftp 
واي شئ متبوع يتم رصد المحاولة كما نعمل هذا النوع صعب تخطية لانه يتضمن جميل الارقام و الحروف كبيرة و صغيرة
الان فكره معي كيف يمكننا تخطي هذا النوع كما نلاحظ لا جود لاي نوع من الرموز الخاضة هنا
لكن هل كل الرمز تعمل مع كود الــphp طبعا لا 
بعد تجرب جميع الرموز الخاصة المتعلقة بلغة php اخيرا وجد الرمز الذي يمكننا من تخطيها هو @ نضع الرمز بعد // كما هو معلوم اي شي بعد هذه العلامة تتم عليه عملية filter 



Done 
عربي باي