discord icon
سرور دیسکورد گاردایران
Reza.Black

آسیب پذیری Format String

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

به نام خدا 

با سلام

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

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

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

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

مثل   ;("printf ("Reza

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

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

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

مثل

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

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

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

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

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

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

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

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

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

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

مثل :

;("printf ("%s, string

و یا 

;(printf (string

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

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

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

 

Capture1.PNG.d81dc864f901c7db739f016a4d29b7d6.PNG

 

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

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

 

Capture2.PNG.3d5fa7f9ffc67f5048170a0114ebc304.PNG

 

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

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

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

 

Capture3.PNG.57a25b300d7695026b87c939287dafd3.PNG

 

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

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

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

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

 

Capture4.PNG.a709937e5f7773e5df53722570480d0d.PNG

 

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

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

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

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

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

 

Capture5.PNG.388ab8fd964b21f73ec52342655a8849.PNG

 

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

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

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

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

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

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

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

موفق باشید.

 

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

 

 

fomrat_string.rar fomrat_string.rar

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


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

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

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

ورود به حساب کاربری