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





الي اللقاء مع تحدي جديد

0 comments :

Post a Comment

عربي باي