النتائج 1 إلى 5 من 5

الموضوع: أرجوا مساعدتى بالثغره الأمنيه التاليه (سكربت رفع الملفات)

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2004
    المشاركات
    309

    أرجوا مساعدتى بالثغره الأمنيه التاليه (سكربت رفع الملفات)



    السلام عليكم

    مأخرا كنت قد عملت على تصميم وتعديل سكربت لرفع الملفات
    بحيث يتم رفع الملف واضافة اسم الملف بقاعدة البيانات

    لسهولة الرجوع له لحقا وللإداره

    ولكن للأسف الأسكربت أدى إلى اختراق الموقع وخسارة جميع ملفاتى وأعمالى بالموقع.


    الأسكربت المستخدم هو

    كود PHP:
    <?php
                           session_start
    ();  
                   
         include (
    "site/resource/functions.php");         
         include (
    "site/resource/config.php"); 
         include (
    "upload_style.php");         
            
         
    $conn connect_db($database,$db_server,$db_user,$db_pass);

    ////////////////////////////////////////START THE CODE/////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////file_max_size/////////////////////////////////
         
    $sqlx "SELECT * FROM "$db_prefix"config WHERE name ='visitors_max_size'";
         
    $result mysql_query($sqlx);
         if (
    $result){
             if (
    $data mysql_fetch_array($result)){    
    $visitors_max_size $data[info];
    }}
    //////////////////PULL INFO FROM PREVIOUS PAGE///////////////////////////////////////
    $max_size $visitors_max_size *1024;  // Maximum filesize ( bytes )
    $category  $_POST["category"];
    $file_name  $_POST["file_name"];
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    $submit $_POST"upload" ];
    $files  $_FILES"content" ];
    $php    $_SERVER"PHP_SELF" ];
    $size   $files"size" ];
    $type   $files"type" ];
    $name   $files"name" ]; 
    $temp   $files"tmp_name" ];
    //-----------------
    //.........................
    if ($submit ==""){    // HERE IF USER DID NOT CLICK ON UPLOAD BUTTON ONLY PRESS ENTER
    $submit "Upload";
    }
    //-----------------
    if ($file_name == ""){    // HERE IF USER DID NOT ADD ANY PIC NAME THEN CURRENT PICTURE NAME WILL BE ADDED FOR EXAMPLE XXXX.JPG
    $file_name $name;
    }

    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
         
    $sql "SELECT * FROM "$db_prefix"config WHERE name ='site URL'";
         
    $result mysql_query($sql);
         if (
    $result){
             if (
    $data mysql_fetch_array($result)){    
             
    $site_URL $data[info];
             }}
    ////////////////////////////////////////////////////////////////////
         
    $sql "SELECT * FROM "$db_prefix"config WHERE name ='visitors_upload-download_paths'";

         
    $result mysql_query($sql);
         if (
    $result){
             if (
    $data mysql_fetch_array($result)){    
        
        
    $upload_path $data[info];
        
    $download_path $data[notes];        
    }}
    ////////////////////////////////////////////////////////////////    

    $today_date=date("Y-m-d"); 
    $path $upload_path;

    $filesize $size /1024;

    if(
    $filesize 1000){
    $filesize round($filesize);
    $filesize "$filesize KB";

    }elseif(
    $filesize >= 1000 && $filesize 1048576){    // MORE THAN 1MB AND LESS THAN 1GB
    $filesize $filesize /1024;
    $filesize round($filesize);
    $filesize "$filesize MB";

    }else{     
    // NO WAY TO HAVE IMAGE WITH THIS SIZE BUT STILL PUT IT (MEAN IMAGE 1GB +)
    $filesize $filesize /1048576;
    $filesize round($filesize);
    $filesize "$filesize GB";
    }

    //////////////////////////////////
    ///////////////////
    upload_header();
    ///////////////////
    /////////////////////NEW NAME//////////////////////////////////
    $att strrchr($name,'.'); // لإضهار إمتداد الملف المختار
    $newname date("j_n_Y")."_".date("h_i_s_A").$att;
    /////////////////////NEW NAME//////////////////////////////////

    if( isset($submit$files ) && $size ) {

    // ALL ALLOW TYPES ARE ON THE CONFIG.PHP $mimes is on the config.php

      
    if( $size <= $max_size ) {
        
        
    $search in_array$type$visitors_allow_type );
             if( 
    $search == true && move_uploaded_file$temp"$path$newname) ) {
            
    $output "تم رفع الملف بنجاح";
                }else{
            
    $output "لا يجوز رفع مثل هذا الملف";
                
                }
     } else {
        
    $output "الملف كبيرة جداً"; }
    }else{

    $output "لم يتم تحميل الملف";

    }

    ///////////////////////////////////////////
    echo "
    <p>&nbsp;</p>
    <p align='center'><font face='Tahoma' size='2'>&nbsp;
    $output</font></p><p align='center'>


    "
    ;



    if(
    $output == "تم رفع الملف بنجاح"){

            
    $sql "INSERT INTO "$db_prefix"visitors_upload VALUES('','".$newname."','".$file_name."','".$category."','".$type."','".$size."','','','".$today_date."','')";
            
    $result mysql_query($sql);
    //////////////
         
    $sql "SELECT * FROM "$db_prefix"visitors_upload WHERE name ='".$newname."';";
         
    $result mysql_query($sql);
        
     if (
    $result){

             if (
    $data mysql_fetch_array($result)){
             
    $fileID=$data[id];
    }}

    /////////////////UPDATE THE NEW URL FIELD AFTER GOT THE ID/////       
    //  $new_url = "$site_URL$download_path/dl.php?id=$fileID";
      
    $new_url "dl.php?id=$fileID";
      
      
      
    $sql "UPDATE "$db_prefix"visitors_upload SET new_url= '".$new_url."' WHERE id="$fileID";";
      
    $result mysql_query($sql);
    ///////////////////////////////////////////////////////////////
            


        
    $search in_array$type$mimes ); // HERE TO DISPLAY THE PICTURE IF IT WAS PICTURE &&&&& TO GIVE USERS DIRECT LINK IF IT'S IMAGE OTHERWISE DOWNLOAD PAGE
        
    if($search == true){    
            print
    "
            <p align='center'><img border='0' src='
    $path$newname' width='200' height='160'></p>
            "
    ;
            
    $download_url "$site_URL/$path$newname";
        }else{
            
    $download_url "$site_URL$download_path$new_url";
        
        }


                
    print 
    "
                        

        <div align='center'>
        <table border='1' width='50%' dir='ltr' bgcolor='#9AE7FF' cellspacing='1'>
        <tr><td><p align='center'><b>
    $file_name</b></td>
        <td width='25%'>
        <p align='right'><b><font face='Tahoma' size='2'>أسم الملف</font></b></td></tr>
        <tr><td>
        <p align='center'><span lang='en-us'><b><font face='Tahoma' size='2'>
    $category</font></b></span></td>
        <td width='25%'>
        <p align='right'><b><font face='Tahoma' size='2'>تصنيف الملف</font></b></td>
        </tr><tr>
        <td align='center'>

            <p align='right'>
            <input type='text' name='T1' size='80' value='
    $download_url'></p>

        </td>
        <td width='25%'>
        <p align='right'><b><font face='Tahoma' size='2'>رابط التحميل</font></b></td>
        </tr><tr><td>
        <p align='center'><b>
    $type</b></td>
        <td width='25%'>
        <p align='right'><b><font face='Tahoma' size='2'>نوع الملف</font></b></td>
        </tr><tr><td>
        <p align='center'><b><span lang='en-us'>
    $filesize</span></b></td>
        <td width='25%'>
        <p align='right'><b><font face='Tahoma' size='2'>حجم الملف</font></b></td>
        </tr></table></div>        
            
    "
    ;



         }
       

    print
    "
            <br>
            <div align='center'>
            <table border='0' width='25%' cellspacing='1'>
            <tr><td width='50%' align='center'>
            <form method='POST' action='index.php'>
            <p><input type='submit' value='إضافة ملف جديد' name='B2' style='font-family: Tahoma; font-size: 10pt'></p>
            </form></td></tr></table>
            </div>
            
    "
    ;

    ///////////////////
    upload_footer();
    ///////////////////
    //////////////////////////////////////////END THE CODE///////////////////////////////////////////////////////////////////////////////////////                             
                                 

        
    mysql_free_result($result);
         
    close_conn_db($conn);

    أرجوا الإفادة اين الثغره الأمنيه الموجوده بالأسكربت ومساعدتى بتعديلها





    __________________
    أخوكم نورالعين


  2. #2


    هناك أشياء غير واضحة اخى الكريم مثل هذه المصفوفة
    كود PHP:
    $visitors_allow_type 
    عموما لتأمين نفسك من اسكريبت الرفع
    أولا : اسقط أى ملف تنفيذى php,php5,...
    ثانيا: أمن نفسك ضد Sql injection
    ثالثا : ضع ملف htaccess فى مجلد Uploads يمنع تنفيذ أى كود php (حتى لو تمكن أحد من اختراق الاسكريبت ورفع ملف لن يتمكن من استغلاله)
    كود PHP:
    AddHandler cgi-script .php .pl .jsp .asp .sh .cgi
    Options 
    -ExecCGI 
    اعتقد هذا مثال على مثل هذا الملف وستجد أمثلة أفضل بها كل الامتدادات التى يجب أن تمنعها
    وبالتوفيق






  3. #3


    اتوقع من خلال $_POST
    استخدم mysql_real_escape_string
    عن Sql Injection

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

    http://www.youtube.com/watch?v=3Veq9...2&feature=plcp





    __________________

    سوالف سوفت المعلومة تأتي اولاً
    نحو محتوى عربي افضل
    قريباً....

  4. #4
    عضو سوبر نشيط
    تاريخ التسجيل
    Jul 2002
    المشاركات
    977


    هناك إجراءات أمنيه مهمه منها
    أولا: التحقق من mime type الخاص بالملف
    ثانيا: التحقق من إمتداد الملف وأنه ضمن الإمتدادات المسموحة

    فيما مضى كنت مهتماً بالإختراق وأعرف أساليب المخترقين المتقدمة

    سأوضح لك كيف يتلاعب المخترق بأكواد الحمايه لو كانت موجوده:-

    قبل الرفع: يقوم المخترق بوضع هذه الكلمة (GIF89a) في رأس أكواد الشل
    وهذه الطريقة تجعل الـmime type الخاص بالشل هو image/gif وهكذا يتحايل على الإجراء الأمني الأول
    كما يجعل إمتداده .gif مثلا shell.gif وهكذا يتحايل على الإجراء الأمني الثاني

    أثناء الرفع: يقوم بإستخدام إضافة فايرفوكس أسمها tamper data تمكنه من تبديل الإمتداد من gif إلى php
    ويخرج له رابط الشل بكل بساطة هكذا shell.php

    الحلول عديده للغاية:
    منها جعل الأكواد الأمنية تتحقق من الملف وفحصه ( بعد ) الرفع وليس أثناء الرفع فقط
    وإذا كان شل فإن الرابط لايخرج للزائر ويتم حذفه

    حل آخر هو أن لاتجعل الإسم والإمتداد على حالها كما هي في جهاز الزائر بل يقوم الكود بإعادة تسمية للملف وإعادة تسمية إمتداده أيضا
    ولو طبق هذا الإجراء وتمكن المخترق من التحايل بالفعل على أكواد التحقق سيفشل في إستعراض الشل بإمتداد php

    والحل المضمون هو ملف الهاتكسس اللي وضعه SamyMassoud مهم جدا
    حتى لو نجح المخترق من رفع الشل لن يستفيد منه شيئاً

    ,, والله اعلم






  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2004
    المشاركات
    309


    اسف على التأخير بالرد

    لقد عملت على ازالة الموقع بشكل كامل وعدم رفعه مره اخرى حتى اتمكن من اصلاح المشكله ومن ثم انشغلت بأمور أخرى

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

    لربما بعد أعادة تشغيل الموقع اضع رابطه هنا
    لكي نرى لربما نستطيع أختراقه مره أخرى او على الأقل لمحاولة التأكد من ان الثغره الأمنيه تم ازالتها


    وشكرا





    __________________
    أخوكم نورالعين





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض