#OS_Binraries ( Windows & Linux )
آیا علاقمند هستید تا Executer های سیستم عامل های لینوکس و ویندوز رو بشناسید؟

و راه حل های خلاقانه در خصوص چگونگی پیاده سازی پیلودها بر بستر نوع API یا ساختار رفتاری آنها طراحی کنید تا با استفاده از این روش بسیاری از مکانیزم های Detection رو دور زده و یک اجرای shell بصورت Evasion رو شاهد باشید,

البته ناگفته نمونه که این منبع میتونه در خصوص نوشتن برخی Post Explotation های کار آمد هم مؤثر عمل کنه...

#Windows
https://lolbas-project.github.io

#Linux
https://gtfobins.github.io

@Unk9vvN
#Syscall #Linux_Kernel x64 (HelloWorld)
در بحث طراحی اکسپلویت الزاماتی از قبیل فهم چگونگی ارتباط درایورها در کرنل برای ما بسیار حیاطی و محسوس هستش, از همین روی در قالب یک مثال بصورت خلاصه وار چگونگی پیاده سازی تماس های syscall یا system call به کرنل رو تشریح خواهم کرد,

برای مثال ما یک سوال از کاربر پرسیده و جواب او را در صفحه چاپ خواهیم کرد, خب برای اینکار نیازه که به syscall های sys_read و sys_write و sys_exit اشاره کرد, مورد بعدی اینه که هر system call ثبات هایی رو بعنوان input های خودش تعیین میکنه که در syscall های مورد استفاده ما به این صورت خواهد بود

ثبات rax به منظور دریافت آیدی syscall هستش
ثبات rdi به منظور دریافت وضعیت input/output بودن syscall هستش
ثبات rsi به منظور دریافت آدرس بافری که میبایست write یا read بشه
و نهایتا ثبات rdx به منظور طول کاراکترهای منظور شده در rsi که اشاره به define byte مربوطه ما داره رو به syscall اعلام خواهد کرد

همانطور که در تصویر پست توضیح دادم (البته بدلیل استفاده از کلمات english در توضیحات فارسی, جمله کمی به هم ریخته) syscall ها مرتب فراخوانی شده اند.

@Unk9vvN
#Use_After_Free #Linux
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک struct با نام UAFME یک تابع درونش بصورت void تعریف شده که از نوع اشاره گر هستش اما در ادامه دو تابع دیگه رو داریم با نام های ()good و ()bad که یک تابع ()print درون هر کدوم تعریف شده و یک string رو قراره چاپ بکنه

اما در تابع اصلی یعنی ()main میبینیم که همون اول کار از ساختمان UAFME یک شیُ ساخته میشه که بصورت اشاره گر بوده و حافظه رو بواسطه تابع ()malloc رزرو کرده با اندازه ساختمان UAFME

اما در ادامه شیُ مربوطه یعنی malloc1* اشاره داره به تابع درون ساختمان یعنی vulnfunc که مقدار تابع good بهش پاس داده شده، در ادامه تابع ()vulnfunc فراخوانی میشه، اینجا با این تابع که در حافظه Heap هستش تماس برقرار میشه

این شیُ بواسطه تابع ()free آزاد شده است، اما در ادامه متغییر دومی که بصورت اشاره گر با نام malloc2* تعریف شده که مقدار 0 رو داره و در ادامه تابع bad بهش پاس داده شده، اینجا چون اندازه اشاره گر مربوطه به اندازه متغییر malloc2 هستش، به همون قسمت قبل در حافظه ارجاع داده شده.

@Unk9vvN
#TripleCross #eBPF #Rootkit #Linux
در بحث طراحی Rootkit تکنیک ها و مدل های مختلفی وجود دارد که میتواند موجب ماندگاری آن شود.

یکی از این روش ها استفاده از فناوری extended Berkeley Packet Filters است که از نسخه 3.18 هسته لینوکس اضافه شده است و اجازه میدهد تا اجرای کد در هسته سیستم عامل، بدون نیاز به Load ماژول در هسته انجام شود.

البته فناوری eBPF برای فیلترینگ Packet و نظارت بر شبکه طراحی شده است، اما بستر خیلی خوبی نیز برای اجرای کد میتواند باشد، چرا که منابع انحصاری هسته و امکان ردیابی فعالیت های سمت کاربر را میتواند انجام دهد.

برای مثال TripleCross یک Rootkit مبتنی بر eBPF است و قابلیت هایی مانند ماژول تزریق کتابخانه و اجرای کد در حافظه مجازی، اجرای کد در سطح هسته و به موجب آن ارتقاء سطح دسترسی برای یک Process سمت کاربر، امکان فعال سازی Backdoor در سطح root و غیره را دارد.

اما مهاجمین بواسطه Patch کردن و Overwrite مقادیر Tracepoints ها، بخشی از ساختمان های این فناوری بواسطه Rootkit های خود، موفق شدند از این فناوری بر علیه خود سیستم عامل استفاده کنند.

@Unk9vvN