ارتقا سطح دسترسی در لینوکس
توی این پست درمورد ارتقا سطح دسترسی در لینوکس صحبت میکنم و میبینیم که چطور میشه از ی shell به عنوان هر نوع کاربری که سطحش از root کمتره به root برسیم و سطح دسترسیمون رو در صورت امکان ارتقا بدیم.
منابع
از بهترین منابع هایی که درمورد ارتقا سطح دسترسی لینوکس میشه پیدا کرد و استفاده کرد، قبل از هر چیز گوگله و بعضی مواقع پیش میاد که ی سرویس یا ی نرم افزار وجود داره و شاید اون نرم افزار یا سرویس ی حفره امنیتی داشته باشه یا شاید ی قابلیت داشته باشه که بشه ازش سو استفاده کرد تا سطح دسترسیمون رو ارتقا بدیم. در این صورت باید با گوگل کردن و تحقیق زیاد بفهمیم که داریم با چی کار میکنیم.
دوتا از منابع ای که باید حتما بدونین چین و در بیشتر موارد استفاده میشن، یکیشون gftobins هست و یکی دیگه هم PayloadsAllTheThings که درموردشون بعدا صحبت میکنم.
با استفاده از این وبسایت میشه روش های جامع تری پیدا کرد و یک وبسایت جامع ای برای تست نفوذه.
دوتا ابزار هم برای راحت تر انجام دادن کارایی که در ادامه میگم و هم برای دقت بیشتر هست که یکیشون linPEAS که برای پیدا کردن تمام چیزایی که در ادامه درموردشون صحبت میکنم و یکی از بهترین ابزار هاست در این زمینه، و یکی دیگه هم linux exploit suggester که برای پیدا کردن اکسپلویت های کرنل هست.
حالا میرسیم به بخش اینکه چطور یک سری موارد که باعث میشن دسترسیمون رو ارتقا بدیم پیدا کنیم.
کرنل
کرنل یا همون هسته سیستم عامل در صورت به روز نبودن امکان اکسپلویت کردنش هست اما برای اینکه بفهمیم چه اکسپولیتی نیازه و اصلا اکسپلویتی نوشته شده باید اطلاعاتی کسب کنیم ازش.
برای پیدا کردن اطلاعات درمورد کرنل که شامل ورژنش میشه میتونیم از دستورات زیر استفاده کنیم:
uname -a
cat /etc/issue
cat /proc/version
و بعد باید به صورت دستی با استفاده از گوگل یا هر موتور جسجتوی دیگه ای ببینیم اکسپلویتی برای این ورژن از کرنل وجود داره یا نه و اگه وجود داره درموردش تحقیق میکنیم و با استفاده از اون اکسپلویت سطح دسترسیمونو ارتقا میدیم.
هشدار: این نوع از ارتقا سطح دسترسی لینوکس، ممکنه باعث کرش شدن سیستم بشه پس باید به عنوان اخرین راه ازش استفاده کرد اگه راه دیگه ای وجود نداشت.
سرویس هایی که با دسترسی root در حال اجرا هستن
همونجوری که تیتر میگه، سرویس هایی که با دسترسی root در حال اجرا هستن ممکنه بشه ازشون استفاده کرد که به root برسیم، مثل سرویس mysql و یا samba.
برای پیدا کردن اطلاعات اینکه چه سرویسی در حال اجراست میشه از دستور زیر استفاده کرد:
ps aux
پیدا کردن رمز عبور در فایل ها
ممکنه کاربر های یک سیستم به صورت تصادفی و یا از قصد (معمولا) رمز عبوری رو تو ی فایل که قابل خوندنه و هیچ رمز نگاری هم نشده ذخیره کنن! در این صورت میشه با پیدا کردن یک کلمه در تمام فایلا با استفاده از دستور find در لینوکس، ببینیم اون کلمه در هیچ فایلی وجود داره یا نه، مثلا کلمه password یا pass.
و هم ممکنه رمز هایی که وجود دارن اصلا تغییر داده نباشن و همون رمز پیش فرض باشن که در این صورت طبق سرویس یا هرچیزی که هست با استفاده از ی موتور جستجو ببینیم که چه اطلاعاتی برای ورود به صورت پیش فرض برای اون وجود داره.
و حالا اینجاست که سر و کله PayloadsAllTheThings پیدا میشه! توی این ریپوزیتوری و بخش ارتقا سطح دسترسی لینوکس میشه دستوراتی رو پیدا کرد که برای پیدا کردن رمز عبور قابل استفاده هستن:
همونطور که میبینین این دستورات وجود داره و میشه ازشون استفاده کرد. ی دستور دیگه هم که شاید اطلاعاتی بده دستور history هست که میشه دستوراتی که کاربر اجرا کرده بود رو دید.
فایل های دارای SUID
فایل هایی که SUID یا Set User ID روشون وجود داره، کاربر عادی میتونه با دسترسی root و یا هر کاربری که این دسترسی رو گذاشته، فایل رو اجرا کنه!
برای پیدا کردن این فایل ها میشه دوباره از دستور find استفاده کرد که در ریپوزیتوری هم به این شکل وجود داره:
وقتی که این فایل ها پیدا شدن میشه با رفتن به سایت gftobins (اینجاست که این وبسایت به کار میاد) چک کنیم که آیا قابل سو استفاده کردن هست یا نه، و اگه باشه نشون داده میشه و راهش هم داخل وبسایتش هست و میشه از اون راه استفاده کرد. مثلا فرض کنیم دستور bash دارای SUID هست و در این صورت میشه به سایت gftobins رفت و این دستور رو جستجو کرد و اگه براش چیزی وجود داره میاره بالا:
خیلی ساده با دستور bash -p میشه به دسترسی root برسیم!
این چیز ها پیش میاد چون کاربر ها و مدیرا نمیدونن که وقتی برای یک فایل SUID میزارن یا دسترسی بیشتری به اون فایل میدن شاید قابل اکسپولیت کردن باشه!
در صورت پیدا نشدن ی دستور توی این سایت، به این معنا نیست که این دستور قابل سو استفاده کردن نیست، برای مطمعن شدن باید از گوگل استفاده کرد و تحقیق کرد درمورد اون دستور اگه دستور غیر عادی هست.
سو استفاده از sudo
معمولا کاربر root یک سری دسترسی به کاربرهای پایین خودش میده که میتونن دستوری رو به بدون نیاز به رمز عبور با دسترسی root اجرا کنن که این دستور ها با دستور زیر معلوم میشن:
sudo -l
اینجا هم میشه از وبسایت gftobins استفاده کرد و ببینیم که میشه از ی دستور سو استفاده کرد یا نه.
و باز هم مثل قبلی، نبودن ی دستور توی gftobins به معنا غیر قابل سو استفاده کردن ازش نیست.
فرض میکنیم دستور bash رو میشه با sudo اجرا کرد، برین به وبسایت gftobins و ببینین میتونین ازش سو استفاده کنین یا نه.
تایمر ها
معمولا کاربر ها توی سیستم برای اینکه یک دستور رو هر چند وقت یکبار اجرا کنن از تایمر ها به عنوان job استفاده میکنن و بعضی مواقع میشه ازشون سو استفاده کرد اگه بد تنظیم یا نوشته شده باشن.
برای پیدا کردن تایمر ها میشه از وبسایت PayloadsAllTheThings استفاده کرد:
توجه کنید که دو نوع از این تایمر ها وجود داره.
بعد از پیدا کردنشون باید ببینیم که قابل سو استفاده کردن هست یا که نیست و یکی از شایع ترین بد تنظیم شدنشون اینه به جای اینکه از absolute path استفاده کنن از relative path استفاده میکنن و میشه با قرار دادن یک اسکریپت یا فایل با توجه به اسکریپتی که توی تایمر وجود داشت از این بد تنظیم شدن سو استفاده کرد.
متغیر PATH
متغیر PATH در لینوکس باعث میشه یک اسکریپت یا ابزار رو بدون نوشتن آدرس کاملش اجرا کردن، مثلا اگه ی ابزار داخل /home/user/ وجود داشته باشه و این آدرس به این متغیر اضافه بشه، وقتی اسم ابزار رو بنویسیم سیستم به تربیت آدرس هایی که داخل متغیر وجود داره رو چک میکنه و میبینه که ابزار داخل کدوم یکی از ادرس ها هست، اینجارو توجه کنید، هر آدرسی که اول از بقیه این ابزار توش پیدا بشه، از همونجا این ابزار اجرا میشه، یعنی اگه قبل آدرس /home/user/، آدرس /home/malicious/ وجود داشته باشه و داخل این فولدر همون ابزاری که ما اسمشو نوشتیم وجود داشته باشه از همین فولدر اجرا میشه با اینکه ما میخواستیم از فولدر user این رو اجرا کنیم. برای اجرا کردنش از فولدر /home/user/ باید آدرس کامل رو بدیم.
حفره امنیتی هم به همین بستگی داره، اگه جایی که آدرس کامل وجود نداشته باشه و توی PATH یک ادرس وجود داشته باشه که توسط کاربری که داریم قابل نوشتن باشه قبل اینکه ابزار اصلی رو پیدا کنه، میشه با استفاده ازش و با توجه به عملکردی که اون ابزاری که این ابزار رو فراخوانی میکنه، میشه ازش سو استفاده کرد.
درایو های mount نشده
ممکنه توی سیستم ی درایو وجود داشته باشه که mount نشده و ما نتونستیم ببینیمش، برای اینکه بفهمیم همچین درایوی وجود داره میتونیم دو دستور اجرا کنیم:
mount -l
cat /etc/fstab
با استفاده از این دو دستور میشه فهمید که درایوی وجود داره یا نه. اگه وجود داشت mountاش میکنیم و بعد دوباره تکنیک های بالا رو اجرا میکنیم و میبینیم میشه ازش سو استفاده کرد یا نه.
پیدا کردن به صورت خودکار
برای اینکه این کارها به صورت خودکار انجام بشه میشه از ابزار هایی استفاده کرد.
یکیشون linPEAS هست که تموم روش های بالا به علاوه چیزای بیشتر و دقیق تر رو انجام میده و گزارش میده و میشه با دیدن اون گزارش چیزای جالبی پیدا کرد و بعد با جستجوی بیشتر توی اینترنت ازشون سو استفاده کنیم.
ابزار linux exploit suggester صرفا برای پیدا کردن اکسپولیت ها برای کرنل هست.
هردوی این ابزار ها باید داخل سیستم مورد حمله اپلود بشن و ازشون اونجا استفاده شه.
به زودی ی ویدیو درمورد ارتقا سطح دسترسی لینوکس با استفاده از یک room در پلتفرم tryhackme ظبط میکنم که به صورت عملی هم این روش هارو ببینید.
مقالات و ویدیو ها در این کانال تلگرام پست میشه.
مطلبی دیگر از این انتشارات
خب دیگه بیاین سلام کنیم به دنیای جاوا اسکریپت :)
مطلبی دیگر از این انتشارات
مدل فرآیند یا Process model در مهندسی نرم افزار
مطلبی دیگر از این انتشارات
تنسورفلو:چطور loss function خودمون رو بسازیم؟