رفتن به مطلب
بازگشایی انجمن! ×
GuardIran

آسیب پذیری Format String


Reza.Black

پست های پیشنهاد شده

به نام خدا 

با سلام

این آسیب پذیری یکی از آسیب پذیری های معروف و بسیار مورد توجه Black Hackers هست.

و در واقع یک تکنیک خاص برای نفوذ به برنامه محسوب میشه.

ما توابع فرمت متنوعی داریم که اساس کار اون ها دریافت رشته ی فرمت به صورت اولین آگومان ورودی هست.

یکی از این توابع تابع مهم ;()printf هست و وقتی که رشته ای رو در داخل اون قرار میدم اون رو برای من چاپ می کنه.

مثل   ;("printf ("Reza

این تابع با برخورد به یه کاراکتر موسوم به null متوجه ی انتهای رشته میشه.

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

و معمولا جهت چاپ آرگومان بعدی تابع با مقدار متناظر به کار میرن

مثل

d% که برای مبنای ده یا دسیمال 

x% که برای مبنای شانزده یا هگزا دسیمال

s% که برای رشته

n% که تعداد بایت های نوشته شده هست

پارامتری مثل d% داده های خودش رو به صورت فقط داده دریافت می کنه ولی پارامتری مثل s% داده های خودش رو به صورت اشاره گری به داده دریافت می کنه.

رفتار پارامتر s% به نوعی هست که همیشه انتظار دریافت یک آدرس از حافظه رو داره از دیدگاه افرادی که کار اکسپلویت نویسی انجام میدن هر نوع شکل دستوری که 

باعث دسترسی ما به حافظه بشه حالا چه به صورت مستقیم و یا غیر مستقیم می تونه باعث ایجاد رخنه در برنامه بشه و دونستن این نکته بسیار مهم هست.

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

خوب حالا داستان اصلی چیه؟

اگه به برنامه های بعضی از برنامه نویس ها دقت کرده باشید زمان به کار گیری تابع فرمت از شکل های مختلف اون استفاده می کنن.

مثل :

;("printf ("%s, string

و یا 

;(printf (string

هر دو دارای عملکرد یکسانی هستن ولی نه در واقعیت

روش اول که آدرس رشته ی فرمت رو دریافت می کنه و روش دوم فقط آدرس رشته رو به تابع فرمت منتقل می کنه.

ما یه برنامه ی ساده داریم که میتونیم کمی تست انجام بدیم.

 

This is the hidden content, please

 

در مورد ساختارش توضیح اضافه نمی دم چون که ساده هستش.

برنامه رو کامپایل و مجوزهای مالکیت و اجرایی برای اون تعیین می کنیم و اجراش می کنیم.

 

This is the hidden content, please

 

هر دو شکل به خوبی کار میکنن حالا با اضافه کردن پارامتر فرمت به رشته ببینیم چه اتفاقی می افته؟

همونطور هم که قبلا گفتم هر پارامتر فرمت منتظر انتقال به یک متغیر متناظر هست.

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

 

This is the hidden content, please

 

اگه با ساختار ماشین آشنا باشید می تونید ببینید که که ما با یک کلمه ی 4 بایتی که به صورت هگزا دسیمال هست سر و کار داریم.

کاری به پارامتر فرمت x% ندارم ولی یادتون باشه که هر چیزی در حافظه به صورت هگز ذخیره میشه. ok

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

و در این مورد از تکنیک جانشینی فرامین استفاده می کنیم که اشاره به محتوای دستور داره

 

This is the hidden content, please

 

شاید خروجی نامفهوم باشه ولی همین خروجی نامفهوم می تونه اطلاعات خوبی به ما بده.

فقط به بایت هایی که مکررا تکرار شدن دقت کنید.

زمانی که تو هر برنامه ایی بایت هایی به صورت مدام تکرار میشن نشون دهنده ی یک عمل خاص و مهم هستن.

بایت های 0x2e, 0x78, 0x38, 0x30, 0x25 خیلی تابلو هستن.

پس تستش می کنیم.

 

This is the hidden content, please

 

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

ترتیب بایت ها هم به صورت معکوس بود که این هم به خاطر معماری Little Endian در ساختار ماشین هست.

خوب تا همینجا کافیه قصد من فقط آشنایی شما بود.

این آسیب پذیری با سایر آسیب پذیری ها کمی متفاوت هست و روش نفوذ با استفاده از اون منحصر به فرد.

از منبع مهمی برای این آموزش استفاده کردم که ذکر می کنم.

البته در خلال توضیحاتی که دادم به نکات مهمی اشاره کردم که تجربی بود.

و می تونه مورد توجه دوستانی که به این علم و هنر علاقه مند هستن قرار بگیره.

موفق باشید.

 

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

 

 

This is the hidden content, please
This is the hidden content, please

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • ایجاد مورد جدید...