انجمن تیم امنیتی ایران سایبر

Buffer Over Flow

شروع موضوع توسط Shadow_white ‏10/2/16 در انجمن Vulnerability Laboratory

  1. لطفا فایل های خود را جهت ماندگاری در انجمن اپلود کنید در صورت مشاهده لینک اپلود خروجی , تاپیک حذف خواهد شد .
    بستن اطلاعیه
بستن اطلاعیه


درود مهمان گرامي؛

مهمان گرامي، براي مشاهده تالار با امکانات کامل ميبايست از طريق ايــن ليـــنک ثبت نام کنيد .

حامی مسابقات و برگزار کننده دوره های پیشرفته ارزیابی امنیت برای سازمان ها فتح پرچم (CTF)
برچسب ها:
  1. Shadow_white
    کاربرتازه وارد

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏9/2/16
    ارسال ها:
    21
    تشکر شده:
    58
    جنسیت:
    Name:
    Shadow
    Main os:
    Kali
    سلام ، با اجازه اساتید میخوام با آسیب پذیری سرریز بافر توی نرم افزار ها آشناتون کنم
    دوستان اگر نظر، انتقاد ، یا پیشنهادی داشتند پخ کنند
     
    Mr_Security، MOHAMAD-NOFOZI، 0x3a و 2 نفر دیگر از این ارسال تشکر کرده اند.
  2. Shadow_white
    کاربرتازه وارد

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏9/2/16
    ارسال ها:
    21
    تشکر شده:
    58
    جنسیت:
    Name:
    Shadow
    Main os:
    Kali
    Buffer over flow از ﻗﺪﻳﻤﻴﺘﺮﻳﻦ ﻣﺸﻜﻼت اﻣﻨﻴﺘﻲ ﺳﻴﺴﺘﻤﻬﺎي کاﻣﭙﻴﻮﺗﺮي ﺑﻮدﻩ . در ﺣﺎل ﺣﺎﺿﺮ اﮔﺮ ﺑﻪ ﺿﻌﻔﻬﺎي اﻣﻨﻴﺘﻲ ﻧﺮم اﻓﺰارهﺎي ﻣﺨﺘﻠﻒ که در ﺳﺎﻳﺘﻬﺎﻳﻲ ﻣﺜﻞ SecurityFocus ﺛﺒﺖ ﺷﺪﻩ اﻧﺪ ،ﻧﮕﺎهﻲ ﺑندازید، ﻣﺘﻮﺟﻪ ﻣشید که ﺣﺪاﻗﻞ 1/3 از اﻳﻦ ﺿﻌﻔﻬﺎ ﻣﺮﺑﻮط ﺑﻪ Buffer Overflow ﻣﻲ ﺷﻮﻧﺪ.اﻳﻦ ﻣﺸﻜﻞ در ﺗﻤﺎم ﺳﻴﺴﺘﻢ هﺎي ﻋﺎﻣﻞ دﻳﺪﻩ ﺷﺪﻩ .در اﻳﻦ تاپیک ﺑﺎ ﻳﻚ ﻣﺜﺎل ﺳﺎدﻩ ، ﻣﻮﺿﻮع Buffer Overflow و ﭼﮕﻮﻧﮕﻲ اﺳﺘﻔﺎدﻩ هکرها از ﺁن ﺟﻬﺖ ﻧﻔﻮذ ﺑﻪ ﺳﻴﺴﺘﻢ هﺎي کاﻣﭙﻴﻮﺗﺮي ﺑﺮرﺳﻲ میکنیم
     
    JOK3R، Mr_Security، 0x3a و 2 نفر دیگر از این ارسال تشکر کرده اند.
  3. Shadow_white
    کاربرتازه وارد

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏9/2/16
    ارسال ها:
    21
    تشکر شده:
    58
    جنسیت:
    Name:
    Shadow
    Main os:
    Kali
    کد:
    #include <stdio.h>
    int insecure_func (char *big) {
    char insecure_buff[100];       strcpy(insecure_buff,big); return 0;
    }
    int main (int argc, char *argv[]) { char input_buff[1024];
    gets(input_buff);
    insecure_func(input_buff); return 0;
    }
    
    این ﺑﺮﻧﺎﻣﻪ اﺑﺘﺪا رﺷﺘﻪ ورودي از ﺻﻔﺤﻪ کلید را در ﺁراﻳﻪ input_buff ﻗﺮار میده ﺳﭙﺲ هنگامی که ﺗﺎﺑﻊ insecure_func ﺑﺎ ﻓﺮﺳﺘﺎدن input_buff ﻓﺮاﺧﻮاﻧﻲ میشه ، اﻳﻦ ﺗﺎﺑﻊ ﻣﻘﺪار ﻣﻮﺟﻮد در input_buff رادر insecure_buff کپی میکنه .ﻧﻜﺘﻪ اﺻﻠﻲ کوچکتر ﺑﻮدن اﻧﺪازﻩ insecure_buff از input_buff اﺳﺖ. ﺑﻄﻮرﻳﻜﻪ اﮔﺮ input_buff ﺑﻴﺸﺘﺮ از 100 کاراکتر داشته باشه ، insecure_buff سرریز یا overflow خواهد شد
     
    JOK3R، Mr_Security، 0x3a و 2 نفر دیگر از این ارسال تشکر کرده اند.
  4. Shadow_white
    کاربرتازه وارد

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏9/2/16
    ارسال ها:
    21
    تشکر شده:
    58
    جنسیت:
    Name:
    Shadow
    Main os:
    Kali
    برنامه همونطور که مشخصه به زبان c است، حالا اگر برنامه رو کامپایل و اجرا کنید ، اگر بیشتر از 100 کاراکتر به ورودی بدید با یه پیغام خطا مواحه میشید شبیه به این عکس
     

    پیوست ها:

    • A9R3738.png
      اندازه فایل:
      کیلوبایت 77.7
      دانلودها:
      5
    JOK3R، Mr_Security، MOHAMAD-NOFOZI و 2 نفر دیگر از این ارسال تشکر کرده اند.
  5. Shadow_white
    کاربرتازه وارد

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏9/2/16
    ارسال ها:
    21
    تشکر شده:
    58
    جنسیت:
    Name:
    Shadow
    Main os:
    Kali
    ﺑﺒﻴﻨﻴﻢ ﭼﻪ اﺗﻔﺎﻗﻲ اﻓﺘﺎدﻩ:
    هر ﮔﺎﻩ ﻳﻚ ﺗﺎﺑﻊ از درون ﻳﻚ روال دیگه ﻓﺮاﺧﻮاﻧﻲ ﻣﻴﺸه ، ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺁدرس ﺑﺮﮔﺸﺖ ﺑﻪ روال ﻓﻌﻠﻲ را در ﻣﺤﻠﻲ از ﺣﺎﻓﻈﻪ ﺑﻪ ﻧﺎم "ﭘﺸﺘﻪ" ﻗﺮار دادﻩ و کنترل را ﺑﻪ روال ﻓﺮاﺧﻮاﻧﻲ ﺷﺪﻩ میده . به این ﺗﺮﺗﻴﺐ ﭘﺲ از ﭘﺎﻳﺎن روال مذکور ، ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺎ ﺑﺎزﻳﺎﺑﻲ ادرس ﺑﺮﮔﺸﺖ از Stack دوﺑﺎرﻩ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ راﻩ ﺑﻪ روال اﺻﻠﻲ میده . در ﻣﺜﺎل ﺑﺎﻻ ﺁدرس ﺑﺮﮔﺸﺖ ﻗﺒﻞ از وﻗﻮع ﺳﺮرﻳﺰو ﭘﻴﺶ از اﺟﺮاي دﺳﺘﻮر (strcpy) ﺑﻪ دﺳﺘﻮر return 0 اﺷﺎرﻩ داره


    ﭘﺸﺘﻪ (stack) همیشه ﺑﻪ ﺳﻤﺖ ﺁدرﺳﻬﺎي ﭘﺎﻳﻴﻦ ﺗﺮ رﺷﺪ میکنه ، هنگام ﺷﺮوع اﺟﺮاي ﺑﺮﻧﺎﻣﻪ، ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ 100 ﺑﺎﻳﺖ ﺑﺮاي ﺑﺎﻓﺮ insecure_buff کنار میذاره، واضحه که اﺟﺮا ﺷﺪن دﺳﺘﻮر strcpy در ﺣﺎﻟﺘﻲ که اﻧﺪازﻩ رﺷﺘﻪ ﻣﻮﺟﻮد در برنامه ﺑﺰرﮔﺘﺮ از insecure_buff ﺑﺎﺷﺪ ﺑﺎﻋﺚ ﺗﻐﻴﻴﺮ ﺁدرس ﺑﺮﮔﺸﺖ (return address) خواهد شد
    اگه کمی دﻗﺖ کنید ، ﻣﻲ ﻓﻬﻤﻴﺪ که ﭼﺮا ﺁدرس ﺑﺮﮔﺸﺖ ﺑﻌﺪ از ﺳﺮﻳﺰ x616161610 (داخل عکس مشخص کردم )
    x061 کد اﺳﻜﻲ کاراکتر 'a' در ﻣﺒﻨﺎي 16 که ﺗﻮﺳﻂ دﺳﺘﻮر strcpy ﻗﺮار ﺑﻮدﻩ ﺑﻪ ﺑﺎﻓﺮ insecure_buff کپی بشه.
     
    JOK3R، Mr_Security، 0x3a و یک نفر دیگر از این ارسال تشکر کرده اند.
  6. Shadow_white
    کاربرتازه وارد

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏9/2/16
    ارسال ها:
    21
    تشکر شده:
    58
    جنسیت:
    Name:
    Shadow
    Main os:
    Kali
    باز هم سلام ، از دوستان عذر خواهی میکنم که دیر تاپیک رو آپدیت میکنم یه مقدار درگیرم ، اساتید اگر علاقه داشتن کمک بکنن که تاپیک جامعی بشه 93.gif
    خب ﺗﺎ اﻳﻨﺠﺎ ﻋﻠﺖ و ﭼﮕﻮﻧﮕﻲ ﺑﺮوز overflow stack ﻣﺸﺨﺺ ﺷﺪ. اﻣﺎ چطور اﻳﻦ ﻣﺸﻜﻞ ﺑﺮاي ﻧﻔﻮذ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﻮرد اﺳﺘﻔﺎدﻩ ﻗﺮار ﻣﻲ گیره؟ ﻣﻲ داﻧﻴﻢ که ﺗﻤﺎم ﺑﺮﻧﺎﻣﻪ هﺎ و رواﻟﻬﺎﻳﻲ که روي ﻳﻚ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ در ﺣﺎل اﺟﺮا هستند، در ﺁﺧﺮﻳﻦ ﻻﻳﻪ، ﭼﻴﺰي ﺟﺰ کدهای ﻣﺎﺷﻴﻦ ﻧﻴﺴﺘﻨﺪ که ﭘﺸﺖ یر هم خوانده و اﺟﺮا ﻣﻲ ﺷﻮﻧﺪ. CPU کامپیوتر ﺁدرس ﺣﺎﻓﻈﻪ ﻣﺮﺑﻮط ﺑﻪ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﻌﺪي را در ﻃﻮل اﺟﺮاي ﺑﺮﻧﺎﻣﻪ از رﺟﻴﺴﺘﺮ EIP ﺧﻮاﻧﺪﻩ و کنترل اﺟﺮاي ﺑﺮﻧﺎﻣﻪ را ﺑﻪ ﺁن ﺁدرس ﻣﻨﺘﻘﻞ ﻣﻲ کند. ﺣﺎلا اگر بتونیم ﺁدرس ﻣﻮﺟﻮد در اﻳﻦ رﺟﻴﺴﺘﺮ را در هر ﻣﺮﺣﻠﻪ اي از اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻣﻘﺪار دﻳﮕﺮي ﺗﻐﻴﻴﺮ بدیم،
    CPU ﺑﺪون درﻧﮓ اﺟﺮاي ﺑﻘﻴﻪ ﺑﺮﻧﺎﻣﻪ را از اﻳﻦ ﺁدرس ﺟﺪﻳﺪ اداﻣﻪ خواهد داد. فرض کنید در ﻣﺤﻞ ﺁدرس ﺟﺪﻳﺪ ﻳﻚ backdoor ﻳﺎ ﺳﺮوﻳﺲ ﭘﻨﻬﺎﻧﻲ وﻳﺎ هر ﻧﻮع کد ﻣﺨﺮب دیگه ای ﻗﺮار داﺷﺘﻪ ﺑﺎشه. ﻧﺘﻴﺠﻪ اﻳﻦ میشه که کامپیوتر اﻳﻦ کد را ﺑﺠﺎي کد ﺑﺮﻧﺎﻣﻪ اﺻﻠﻲ که ﻣﺴﻴﺮش ﺗﻮﺳﻂ ﻣﺎ ﻋﻮض ﺷﺪﻩ، اﺟﺮا خواهد ﻧﻤﻮد و ﺑﺪﻳﻦ ﺗﺮﺗﻴﺐ هکر میتونه ﺑﺎ اﺳﺘﻔﺎدﻩ از backdoor ﻳﺎ کد ﻣﺤﺮب اﺟﺮا ﺷﺪﻩ، کنترل ﺳﻴﺴﺘﻢ ﻣﺰﺑﻮر را به دست بکیره . ﺑﻨﺎﺑﺮاﻳﻦ هکر ﺑﺮاي رﺳﻴﺪن ﺑﻪ هدف ﺧﻮد ﺑﺎﻳﺪ دو ﻣﺴﺎﻟﻪ را ﺣﻞ کنه. اول پیدا کردن راهی ﺑﺮاي اﻳﺠﺎد overflow در ﺳﻴﺴﺘﻢ هدف . ﺑﺮاي اﻳﻨﻜﺎر هکر ، ﺳﺮوﻳﺴﻬﺎ و ﺑﺮﻧﺎﻣﻪ های در ﺣﺎل اﺟﺮا روي ﺳﻴﺴﺘﻢ هدف مثل Ftp Server ،Mail Server ، Server Web و ... را ﺑﺮاي ﻳﺎﻓﺘﻦ روﺷﻲ ﺟﻬﺖ overflow آﺮدن هر کدوم از تینها ﺁزﻣﺎﻳﺶ میکند. ﻣﺮﺣﻠﻪ دوم اﺳﺘﻔﺎدﻩ از ﺑﺮﻧﺎﻣﻪ overflow ﺷﺪﻩ ﺑﺮاي اﺟﺮاي کد دﻟﺨﻮاﻩ.
     
    JOK3R، 0x3a و Sir.h4m1D از این ارسال تشکر کرده اند.
بارگذاری...
به انجمن تخصصی امنیت ایران سایبر خوش آمدید . برای مشاهده تمامی تالار ها و امکانات ثبت نام کنید .