SpareNet Servers Advertising & Link Exchange

اطلاعیه

بستن
هیچ اطلاعیه ای هنوز ایجاد نشده است .

جلوگیری از ایجاد باگ در PHP

بستن
X
 
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
نوشته‌های جدید

  • جلوگیری از ایجاد باگ در PHP

    سلام خدمت دوستان عزیز

    خوب امروز تصمیم گرفتم با کمک دوستان عزیز در این تاپیک روش های جلو گیری از ایجاد باگ در PHP رو بررسی کنیم

    دوستان لطفا حمایت و کمک کنند تا یه تاپیک جامع راجب این مبحث داشته باشیم

    =======================================

    دوستان با تجربه تیم لطفا شرکت کنن تو این تاپیک

    امیدوارم که این تاپیک به درد دوستان بخوره

    موفق باشید

    =======================================
    [align=center]IranHack Security Team
    My Home
    YAhoo : Faridmahdavi00
    Net-Line.ir


    Coming Soon Android[/align]

  • #2
    RE: جلوگیری از ایجاد باگ در PHP

    در پست اول من میخوام بهتون طریقه پچ کردن باگ cross site scripting یا همون xss رو اموزش بدم.

    این باگ یکی از شایع ترین باگ ها در بین تموم سایت هاست. مثلا چند وقت پیش گوگل همین باگ رو داشت.(بیشتر در بین سایت های سرچ و کلان در قسمت سرچ سایت ها این مشکل وجود داره)

    با استفاده ازین باگ هکر میتونه دستورات اچ تی ام ال و جاوا اسکریپت رو روی سایت و یا روی سیستم قربانی اجرا کنه. توضیح بسه

    اول توضیح میدیم این باگ چطوری در php ایجاد میشه.

    وقتی ما یک مقدار رو بدون *****( چه از طریق پست . چه از طریق گت) روی صفحه وب پرینت کنیم این باگ ایجاد میشه. به مثال زیر توجه کنید:

    کد:
    <?php
    if(isset($_GET['search'])){
        print $_GET['search'];
    }
    ?>
    <form action="" method="GET">
    <input type="text" name="search">
    <input type="submit" value="search">
    </form>
    ما یک فرم داریم که ما از طریق اون یک مقدار رو به صورت GET به همون صفحه ارسال میکنیم و کد php اگر مقدار search به صورت گت مقداردهی شده بو هرچی که در $_GET['search'] ذخیره شده باشه رو پرینت میکنه تو صفحه وب ما.خب من میام داخل تکس باکس مینویسم: 

    کد:
    <div style="background:green;">iranhack </div
    دکمه سرچ رو میزنم. ااااااااااااا! چرا اینطوری شد؟؟؟؟؟؟؟مگه نباید تو صفحه برای ما

    کد:
    <div style="background:Green;">iranhack</div>
    رو پرینت میکرد اما اینطوری نشد. به جاش یک دایو برای ما در صفحه ایجاد کرد با پسزمینه سبز و محتوای iranhack. به این طریق هکر میتونه دستورات خودش رو به صورت کدهای html با javascript به سایت ما تزریق کنه....

    ما در این جا برای پچ کردن 2 را داریم
    1- استفاده از تابع های PHP
    2- تعیین نوع ورودی

    روش اول :
    در روش اول که استفاده از تابع های پی اچ پی است ما به ترتیب زیر عمل میکنیم.

    برای این منظور دو تابع در پیش رو داریم. htmlentities یا htmlspecialchars

    کار این تابع ها این است که مقدار ورودی به ان هارا به صورت یک رشته ساده در می اورد و از اجرا دستورات html یا javascript جلوگیری میکند.
    ما کدمون جایی که مقدار $_GET['search'] رو در متغییر $str ذخیره میکنیم به صورت زیر تغییر میدهم:

    کد:
    $str=htmlentities($_GET['search']);
    یا

    کد:
    $str=htmlspecialchars($_GET['search']);
    روش دوم :
    در روش دوم ما میگیم داخل متغییر ما چه تو متغییری ذخیره بشه (برای ورودی های عددی کاربرد دارد)

    به طور مثال فرض کنید شما برای یک دانشگاه فرم بالا رو نوشتین که با شماره دانشجویی کار میکنه. یعنی ما در تکس باکس شماره داشجویی یک دانشجو رو وارد میکنیم.
    به این ترتیب ما فقط میخوایم عدد مورد نظر ما پرینت بشه.پس کدمون رو به صورت زیر تغییر میدیم:

    کد:
    $str=(int) $_GET['search'];
    در این روش ما به متغییر $str میفهمونیم که نقط میتونی مقدار عددی رو در خودت ذخیره کنی.

    موفق باشید.
    [align=center]IranHack Security Team
    My Home
    YAhoo : Faridmahdavi00
    Net-Line.ir


    Coming Soon Android[/align]

    نظر


    • #3
      Remote File Inclution

      سلام در این قسمت به معرفی و پچ باگ RFI
      این باگ همون طور که از اسمش مشخصه یک فایل رو روی سایت که باگ توش هست اینکلود میکنه.
      باگ مورد بحث ما از طریق یکی ارسیال یک مقدار بدون بررسی های امنیتی به یکی از تابع های زیر ایجاد میشود 
      کد:
      include
      include_once
      require
      require_once
      به کد زیر توجه کنید:
      کد:
      <?php
      if(isset($_GET['file'])){
          include($_GET['file']);
      }
      ?>
      <a herf="?file=profile.php">profile</a>
      <a herf="file=editor.php">editor</a>
      در این کد ما 2 لینک داریم که یک کد کارو به صفحه پروفایل راهنمایی میکنه ، لینک دیگه هم مارو به ادیتور یا همون ویرایشگر.
      در کد میبینیم که مقدار ما به صورت GET به صفحه ارسال شده قسمت پی اچ پی کد هم وقتی $_GET['file'] مقداردهی شده باشه میاد و کد زیر رو اجرا میکنه :
      کد:
      include($_GET['file'])
      ما در این صفحه دوتا مقدار را میتوانیم به $_GET['file'] نسبت بدهیم.
      profile.php
      یا
      editor.php

      اما توجه کنید چون مقدار در URL سایت هست چرا نتونیم اونو به صورتی که دوست دارم عوض کنیم، مثلا از طریقش میشه از سایت مورد نظر شل گرفت.

      خب میرسیم سر پچ کردن باگ.

      راه برای پچ کردن این باگ زیاده اما من به گفتن یک روش مطمئن بسنده میکنم.

      در این روش پچ ما میایم تموم صفحه های مورد نظرمون رو که میخوایم اینکلود بشه در یک ارایه قرار میدیم.بعد با یک دستور شرطی به اسکریپتمون میگیم اگه مقدار ورودی در ارایه نبود صفحه رو انکلود نکن.توجه کنید:
      کد:
      <?php
      $file=$_GET['file'];
      $filearray=array('editor.php','profile.php');
      if(in_array($file,$filearray)){
          include($_GET['file']);
          }else{
          print"Fixed By Admin :p!!!";
          }
      ?>
      <a herf="file=profile.php">profile</a>
      <a herf="file=editor.php">editor</a>
      الان اگه به $_GET['file'] مقداری جز مقدار درون ارایه بدیم اسکریپت اون رو اینکلود نمیکنه و پرینت میکنه Fixed By admin !!!

      [font]توضیح تکمیلی :[/font]

      تابع in_array دوتا ارگومان داره :
      کد:
      in_array(meghdar morede barresi , arraye morede nazar )
      ارگومان اول مقداری رو شامل میشه که باید بررسی بشه در ارایه ما هست یا نه

      ارگومان دوم هم که ارایه ما هست.
      ================================================== =================================================
      دوتا روش دیگه هم یادم امد که واستون میگم اما این روش ها قابل بایپس شدن هستن.
      اولین روش اینکه خاموش کردن allow_url_fopen از طریق ویرایش کردن php.ini به ترتیب زیر:
      کد:
      allow_url_fopen = off
      روش دوم استفاده از تابع str_replace :
      در این روش ما کاراکتر \ رو جایگزین کاراکتر / میکنیم تا ادرس شلی که نفوذگر در یو ار ال وارد میکنه اجرا نشه.
      به ترتیب زیر :
      کد:
      $file=$_GET['file'];
      $file=str_replace('/','\\',$file);
      موفق باشید
      [align=center]IranHack Security Team
      My Home
      YAhoo : Faridmahdavi00
      Net-Line.ir


      Coming Soon Android[/align]

      نظر


      • #4
        Local File Inclusion یا LFI

        با پچ کردن یک باگ دیگه در خدمتتون هستیم.

        یک توضیح مختصر در مورد این باگ میدم. اگه این باگ در اسکریپت ما باشه هکر میتونه به وسیله اون بیاد و اطلاعات حیاتی هاست و برنامه ما رو بخونه.

        این باگ تقریبا مثل باگ قبلی ایجاد میشه به کد زیر دقت کنید : 
        کد:
        <?php
        if(isset($_GET['color'])){
            $file=$_GET['color'];
            include("themes/". $file .".php");
        }
        در این مثال مثلا یک سی ام اس هست که میخواد تم رو بر وفق مراد کاربرد تعیین کنه و این کد رو نوشته. و گزینه های
        green - black - red or....
        رو برای کاربر گذاشته. حالا امدیمو هکر چون مقدار در یو ار ال مشخص هست اومد و فهمید که میتونه راحت به اسکریپت ما نفوذ کنه و فایل های حیاتی مثل passwd رو خوند.
        ما باید از این اتفاق جلوگیری کنیم.

        روش های پچ

        روش اول : هکر اگه بخواد فایلی مثل passwd رو پیدا کنه باید به صورت زیر عمل کنه:
        کد:
        ../etc/passwd
        یا
        کد:
        ..%5cetc%5cpasswd
        یا
        کد:
        ..%2fetc%2fpasswd
        پس اگه ما کاراکتر های "/" و "\" و "." و "%" رو با یک مقدار دیگه جایگزین کنیم هکر دیگه نمیتونه کاری از پیش ببر. به ترتیب زیر عمل میکنیم:
        کد:
        <?php
        if(isset($_GET['color'])){
            $file=$_GET['color'];
            $file=editget($file);
            include("themes/".$file.".php");
        }
        function editget($v){
            $v=str_replace("/","*",$v);
        کد:
            $v=str_replace("\\","*",$v);
            $v=str_replace(".","*",$v);
            $v=str_replace("%","*",$v);
            return $v;
        }
        ?>
        کد:
           
         
        روش دوم : در این روش که مثل پچ کردن باگ قبلی هست ما یک مقدار خاصی رو میزاریم اجرا کنه.
        کد:
        <?php
        if(isset($_GET['color'])){
            $file=$_GET['color'];
            $filearray=array('green','black','red');
        if(in_array($file,$filearray)){
             include(:themes/". $file.".php");
        }else{
        print "Patch Bug iht !!!!!!!";
        }
        ?>
        خب آموزش این جلسه هم به پایان رسید

        موفق باشید.


         
        [align=center]IranHack Security Team
        My Home
        YAhoo : Faridmahdavi00
        Net-Line.ir


        Coming Soon Android[/align]

        نظر


        • #5
          Local File Disclosure

          بعضی مواقع صاحب های سایت ها و پرتال ها نیاز به این دارن که ببینن فایلی که رو هاستشون اپلود کردن و رو سایت گذاشتن چند دفعه دانلود شده. برای اینکار میان هر فایلشون رو تو دیتابیس اطلاعاتش رو ثبت میکنن. بعد یک صفحه میسازن که وقتی اسم فایل دانلودی رو بهش میدی به تعداد دانلود یک واحد اضافه میکنه و بعد فایل رو واسه دل به ما میده.

          حالا ما الان نمیخوایم وارد مبحث اتصال به دیتابیس بپردازیم. یک مثال ساده مینویسم توجه کنید.
          کد:
          <?php
          if(isset($_GET['file'])){
                   $file=$_GET['file'];
                   header("Content-type: application/Download");
                   header("Content-Disposition: attachment; filename=".basename($file));
                   @readfile($file);
                   echo $file;
                   die();
                   }
          ?>
          در این کد ما اگه به $_GET['file'] مقدار بدیم اون مقدار رو واسه ما دانلود میکنه. خب شما میگید چه مشکلی پیش میاد دانلود کنه؟؟؟؟؟؟؟!!!!!!
          بطور مثال ما این کد رو با اسم dl.php ذخیره کردیم و میخوام از طریق این یک فایل دانلود کنیم. ما به یو ار ال مقدار زیر رو میدیم که بازدید کننده اون رو دانلود کنه:
          کد:
          http://site/dl.php?file=exm.zip
          بازدید کننده رو لینکی که بهش میدیم کلید میکنه و فیل exm.zip رو کد واسه بازدید کننده اماده به دانلود میکنه.

          حالا یک هکر طرز کار اسکریپت رو میفهمه و میاد یو ار ال رو به صورت زیر تغییر میده
          کد:
          http://site/dl.php?file=dl.php
          با این کار فایل dl.php واسه هکر دانلود میشه. به همین طریق هکر میتونه فایل های حیاتی ما رو بسرقت ببر و سایت ما رو هک کنه.

          روش های پچ :

          روش اول : در روش اول پچ ما میتونیم فایل های حیاتی سایتمون رو در یک ارایه قرار بدیم و بگیم اگه این فایل ها رو اجازه دانلود نده. یا میتونیم فایل هایی که واسه دانلود گذاشتیم رو تو یک ارایه قرار بدیم و بگیم اون ها رو دانلود کنه.به کد زیر توجه کنید.
          کد:
          <?php
          $iglist=aaray('config.php','dl.php','post.php');
          if(isset($_GET['file'])){
                   $file=$_GET['file'];
          if(! in_array($file, $iglist)){   
          کد:
                   header("Content-type: application/Download");
                   header("Content-Disposition: attachment; filename=".basename($file));
                   @readfile($file);
                   echo $file;
                   die();
                   }else{
                   echo "Bug patch";
                   }
                  }
          ?>
           این کد یک ارایه داره به اسم ایگ لیست. اگه مقداری که به کد وارد بشه با یکی از اعضا ارایه برابر باشه فایل رو دانلود نمیکنه.

          روش دوم : در روش دوم ما بجای اینکه از اسکریپت اسم فایل رو بگیریم دانلود کنیم یک عدد میگیریم بر طبق اون عدد فایل دانلود میکنیم. به کد زیر توجه کنید:
          کد:
          <?php
          if(isset($_GET['file'])){
                   $fileget=(int) $_GET['File'];
                   switch ($fileget){
                   case '1':$file="exm.zip";break;
                   case '2':$file="exm2.zip";break;
                   Default:$file='exmdefault.zip";break;
                  }
          کد:
                   header("Content-type: application/Download");
                   header("Content-Disposition: attachment; filename=".basename($file));
                   @readfile($file);
                   echo $file;
                   die();
                   }
          ?>
          از بس تایپ کردم خسته شدم [img]images/smilies/Smileys/18.gif[/img]

          خب امیدوارم این آموزش مفید باشه

          موفق باشید[img]images/smilies/Smileys/8.gif[/img]
           
          [align=center]IranHack Security Team
          My Home
          YAhoo : Faridmahdavi00
          Net-Line.ir


          Coming Soon Android[/align]

          نظر

          صبر کنید ..
          X