#OS_Binraries ( Windows & Linux )
آیا علاقمند هستید تا Executer های سیستم عامل های لینوکس و ویندوز رو بشناسید؟
و راه حل های خلاقانه در خصوص چگونگی پیاده سازی پیلودها بر بستر نوع API یا ساختار رفتاری آنها طراحی کنید تا با استفاده از این روش بسیاری از مکانیزم های Detection رو دور زده و یک اجرای shell بصورت Evasion رو شاهد باشید,
البته ناگفته نمونه که این منبع میتونه در خصوص نوشتن برخی Post Explotation های کار آمد هم مؤثر عمل کنه...
#Windows
https://lolbas-project.github.io
#Linux
https://gtfobins.github.io
@Unk9vvN
آیا علاقمند هستید تا 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
در بحث طراحی اکسپلویت الزاماتی از قبیل فهم چگونگی ارتباط درایورها در کرنل برای ما بسیار حیاطی و محسوس هستش, از همین روی در قالب یک مثال بصورت خلاصه وار چگونگی پیاده سازی تماس های 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 با نام
اما در تابع اصلی یعنی
اما در ادامه شیُ مربوطه یعنی
این شیُ بواسطه تابع
@Unk9vvN
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک 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
در بحث طراحی Rootkit تکنیک ها و مدل های مختلفی وجود دارد که میتواند موجب ماندگاری آن شود.
یکی از این روش ها استفاده از فناوری extended Berkeley Packet Filters است که از نسخه 3.18 هسته لینوکس اضافه شده است و اجازه میدهد تا اجرای کد در هسته سیستم عامل، بدون نیاز به Load ماژول در هسته انجام شود.
البته فناوری eBPF برای فیلترینگ Packet و نظارت بر شبکه طراحی شده است، اما بستر خیلی خوبی نیز برای اجرای کد میتواند باشد، چرا که منابع انحصاری هسته و امکان ردیابی فعالیت های سمت کاربر را میتواند انجام دهد.
برای مثال TripleCross یک Rootkit مبتنی بر eBPF است و قابلیت هایی مانند ماژول تزریق کتابخانه و اجرای کد در حافظه مجازی، اجرای کد در سطح هسته و به موجب آن ارتقاء سطح دسترسی برای یک Process سمت کاربر، امکان فعال سازی Backdoor در سطح root و غیره را دارد.
اما مهاجمین بواسطه Patch کردن و Overwrite مقادیر Tracepoints ها، بخشی از ساختمان های این فناوری بواسطه Rootkit های خود، موفق شدند از این فناوری بر علیه خود سیستم عامل استفاده کنند.
@Unk9vvN