0Day.Today | Learn Exploit | Zero World | Dark web | – Telegram
0Day.Today | Learn Exploit | Zero World | Dark web |
22K subscribers
1.26K photos
140 videos
494 files
1.32K links
☝️Iп Tнε Nαмε Oғ GOD☝️

Web Exploiting
& Server Hacking
Shell & Admin panel Access

priv8 Google hacking Dorks
new vul & bugs discovering & Tut


❗️0 day is today❗️

تبلیغات : @LearnExploitAds

IR0Day.Today
Download Telegram
Breaking_Harmony_NEXT.pdf
12.2 MB
وقتی HarmonyOS هک می‌شود! تست تهاجمی اپ‌های HarmonyOS NEXT با Harm0nyz3r

در این ارائه، امنیت HarmonyOS NEXT به‌صورت عملی زیر ذره‌بین رفته؛ جایی که با استفاده از فریم‌ورک اختصاصی Harm0nyz3r و اپلیکیشن آسیب‌پذیر DVHA، سطح حمله اپ‌ها شناسایی شده و اکسپلویت‌ها به‌صورت زنده اجرا می‌شن. نگاهی واقعی به تهدیدات، ضعف‌ها و آینده امنیت اکوسیستم HarmonyOS.



#HarmonyOS
#HarmonyOS_NEXT
#Mobile_Security
#Offensive_Security
#BlackHat2025
#AppSec
#Pentest
#ReverseEngineering
#Exploit


@LearnExploit
@IR0DayBax
1
𝗥 ‌ ‌ ‌ ‌𝗬 ‌ ‌‌ ‌ 𝗦 ‌‌ ‌ ‌ 𝗢 ‌ ‌‌ ‌ 𝗡

IN THE NAME OF DARK JUSTICE


Part 3


ببین خب برد ESP زیاد داریم برای مثال همون ESP32 رو براتون تحلیل میکنیم ،
ببین esp32 دیگه داستانش یکم سخت تره ،
کلا لیست پایین فایل هاییه که به صورت نهایی روی esp وجود داره
ROM Bootloader (داخل خوده چیپه)
Bootloader : 0x1000
partition-table : 0x8000
ota_data_initial : 0xE000
factory app : 0x10000
ota_0 همون app0 : 0x210000
ota_1 همون app1 : 0x410000
nvs : 0x9000
spiffs : 0x610000
nvs_keys : طبقه جدوله
phy_init_data : داخل پارتیشن PHY
coredump : پارتیشن جداست یا متغیره
littlefs : همون جای SPIFFS
fatfs partition : متغیره
storage : متغیره
efuse_emulation : متغیره
secure_bootloader : 0x0 / 0x1000
encrypted partition : متغیره

حالا توی شل کد در مورد این حافظه ها خیلی بیشتر صحبت میکنیم
حالا ترتیب نقشه فلش کردن
0x0000      ---- ROM Boot (خب این غیرقابل تغییره)
0x1000 ---- bootloader
0x8000 ---- partition table
0xE000 ---- ota_data_initial

0x10000 ---- factory app
0x210000 ---- ota_0
0x410000 ---- ota_1

0x610000 ---- spiffs / littlefs / fatfs
0x7FFFFF ---- اخر فلش کردنمون

که معمولا اینا رو خودشون دارن به صورت پیشفرض و ما باید سه تا فایل بوتلودر ، پارتیشن و اپ رو فلش کنیم
حالا توضیحات توی پارت بعدی
End PART
3🤝21
𝗥 ‌ ‌ ‌ ‌𝗬 ‌ ‌‌ ‌ 𝗦 ‌‌ ‌ ‌ 𝗢 ‌ ‌‌ ‌ 𝗡

IN THE NAME OF DARK JUSTICE

Part 4

حالا توضیحات هر فایل که کاراییش چیه و چه کار میکنه :

1 : ROM Bootloader
که داخل خوده چیپه
ببین این کد به‌صورت سخت‌افزاری داخل ماسک-ROM خود ESP32 قرار داده شده و هیچ‌وقت قابل تغییر نیستش و اولین چیزیه که بعد از روشن شدن ران می‌شه حتا قبل از بوت‌لودر، حالا وظیفش اینه که فلش خارجی رو چک کنه وضعیت بوت را بخونه و کنترل رو به بوت‌لودر.bin بده
2 : bootloader
ببین میتونیم بگیم بوت‌لودر برنامه‌ریز چرا چون اولین فایل قابل‌فلش که ESP32 اجرا می‌کنه و ادرسش همیشه 0x1000 هست
و کارش چیه ؟ جدول پارتیشن رو می‌خونه تا تصمیم بگیره که کدوم برنامه (factory یا ota_0 یا ota_1) اجرا بشه حالا اگه سیستم OTA فعال باشه بوت‌لودر آخرین اسلات سالم رو پیدا و بوت می‌کنه و در صورت فعال بودنه Secure Boot امضای دیجیتال رو چک می‌کنه
3 : partition-table
همون جدول پارتیشن ها
یه فایل مهمی که ساختار کامل فلش رو مشخص می‌کنه مثل نقشه شهر برای حافظه، و اینکه تعیین می‌کنه که هر پارتیشن از کجا شروع بشه و چه اندازه داره و نوعش چیه مثل app / data / nvs / spiffs و ...
و نکته مهم اینه که بدون وجود این فایل بوت‌لودر نمیدونه که فریمورها، NVS، فایل‌سیستم و … کجا هستن پس فایل مهمیه
4 : ota_data_initial
این فایل همون اطلاعات OTA هست و توی ادرس 0xE000 هسشت و وضعیت اخرین فریمور سالم رو سیو میکنه و تو زمان اپدیت OTA ، این بخش مشخص می‌کنه که آقا بعد از ریستش ، کدوم پارتیشن app بوت بشه، حالا اگه تو آپدیت جدید مشکلی رخ بده بوت‌لودر با کمک این پارتیشن می‌تونه به نسخه قبلی بک بزنه
5 : factory app
این اصلی ترین فایله میتونیم توی دو کلمه ی اپلیکیشن کارخونه یا برنامه اصلی خلاصش کنیم و این اولین فریمور قابل‌اجرای فرده که بعد از بوت‌لودر اجرا می‌شه و اگه OTA وجود نداشته باشه همیشه همین اپلیکیشن اجرا می‌شه و محتویاتش شامل کد برنامه، دستورات CPU، داده‌ها، جداول، کتابخانه‌ها و پروتکل‌ها و ... هستش
6 : app0 / ota_0
این نسخه دوم برنامه فرد موقع استفاده از سیستم OTA هستش و وقتی اپدیت می‌دیم برنامه جدید از اینجا فلش می‌شه و بعد از ریست اجرا میشه حالا اگه اجرای اون با کرش یا خطا مواجه بشه بوت‌لودر به نسخه factory یا ota1 بک میزنه
7 : app1 / ota_1
نسخه سوم برنامه برای داشتن حالت سه اسلات (factory + ota0 + ota1) دقیقا این سه تا و برای اپدیت‌ های پشت‌سرهم که نیاز به فضای دو نسخه قبلی دارند کاملا مفیده و کمک میکنه و بوت‌لودر به کمک ota_data تصمیم می‌گیره که اقا کدام اسلات سالمه
8 : NVS
رسیدیم به NVS یا همون Non-Volatile Storage ، ببین این حافظه KV همون کلید و مقداره که تنظیمات دائمی تو اون سیو میشن
و مواردی که توش سیو میشن شامل WiFi SSID، رمزها، توکن، کالیبراسیون سنسورها و هر داده‌ و اطلاعاتیه که برنامه سیو میکنه
ساختار داخلیش هم مبتنی بر WAL و Journal که دیتا رو از خرابی و قطعی محافظت میکنه
9 : NVS Keys
ببین این کلید های رمزگذاری NVS هست که
مختص Secure NVS و شامل کلیدهای AES است همون چیزایی که توی مقاله ی وای فای wpa ها و... خوندیم 😂
اگه NVS رمزگذاری بشه این پارتیشن باید وجود داشته باشه و امنیت داده‌های حساس مثل توکن API یا پسورد را افزایش می‌ده
10 : phy_init_data
این همون داده‌های PHY وای‌فایو بلوتوثه که شامل پارامترهای تنظیمات سخت‌افزار RF برای وای‌فای و BLE هستش و تعیین می‌کنه که فرستنده و گیرنده چجوری تنظیم بشه همون قدرت، فیلتر و کالیبره ،، و بدون این پارتیشن، WiFi اتصال پیدا نمی‌کنه یا بسیار ناپایدار می‌شه
11 : coredump
این ریپورتره در اصل کارش گزارش کرش سیستمه و در صورت فعال‌سازیش زمانی که ESP32 کرش میکنه وضعیت CPU و حافظه را در این پارتیشن ذخیره می‌کنه و بیشتر برای دیباگ تخصصی با ابزارهایی مثل gdb استفاده می‌شه و در اصل بخوام بگم اینجوریه که به توسعه‌دهنده اجازه می‌ده که بفهمه دقیقن تو لحظه کرش چه اتفاقی افتاده
12 : spiffs
این فایل‌سیستمه SPIFFS هستش که یه فایل‌سیستمیه سبک برای ذخیره فایل‌های کوچیک مثل HTML، CSS، JSON، عکس و دیتای سنسوره و به‌صورت Raw تو یه پارتیشن نوشته می‌شه که معمولا از 0x610000 به بالاعه دیگه ، ولی برای ذخیره داده‌های استاتیک وب‌سرور و فایل‌های پیکربندی عالیه
13 : littlefs
اینم فایل‌ سیستم LITTLEFS هست که جایگزین SPIFFS با سرعت و دوام بیشتره و از نظر ساختار، Map-Based و مقاوم در برابر خاموشی ناگهانیه میتونیم بگیم که برای پروژه‌های مهم و نوشته‌های زیاد بهتر از SPIFFS یه و از این استفاده بشه بهتره
2🤝21
14 : FATFS partition
این پارتیشن فته (FAT) که برای ذخیره‌سازی حجم زیاد و امکان خوندن با ویندوز و لینوکسه و مناسب برای SDcard درون‌ فلش یا داده‌های زیاد مثل صدا و ویدیوعه ببین این طراحی استاندارد FAT16 و FAT32عه و ابزارهای زیادی از اون ساپورت میکنن
15 : storage partition
پارتیشن ذخیره سازی عمومیه که بخش خالی داده‌ای که برنامه میتونه ازادانه استفاده بکنه و معمولا برای دیتابیس‌ها، فایل‌های بزرگ یا کش استفاده می‌شه و اندازه و موقعیت اون تو partition table قابل تنظیمه
16 : efuse_emulation
اگر efuse سخت‌افزاری محدود باشه ESP32 برخی داده‌ها رو‌ توی پارتیشن مخصوص شبیه‌سازی می‌کنه و تا حدودی میتونیم بگیم مثل حافظه دائمی امضاها و کلیدهای امنیتی عمل می‌کنه اینم بگم که برای Secure Boot و Flash Encryption خیلی مهمه
17 : secure_bootloader
ببین این یه نوع چسی اومدنه 😂😂
من که نمیزنم ولی خب این ی نسخه امن و رمزگذاری‌شده ی bootloader.bin برای دستگاه‌های حرفه‌ایه و کاراییش اینه که قبل از اجرا، امضای دیجیتال برنامه‌ها را چک می‌کنه و مانع از اجرای برنامه‌های غیرمجاز یا دستکاری‌شده می‌شه
18 : encrypted app partitions
این اینکریپتد اپ پارتیشن نسخه رمزگذاری‌ شده ی فریمورهای برنامه زمانی که Flash Encryption فعاله هستش و موقع بوت، به‌صورت on-the-fly رمزگشایی می‌شه که خیلی خوبه و اگر کسی فلش رو بخونه فقط و فقط داده رمز شده می‌بینه که‌ اونم بعدا راحت دیکریپت میشه😂😂
❤‍🔥21👍1🆒1
سلام خدمت دوستداران علم ، معرفی نمیکنم ولی متخصص الکترونیک و سایبری هستم نرم افزار در کنار سخت افزار قراره از این به بعد علاوه بر تیم عدالت تاریک و چنل خودم ، توی اینجا هم آموزش و آسیب پذیری هایی که کمتر پاب شده رو چه به صورت مقاله چه با ویدیو ارائه بدم، ری اکشنتون انرژی زیادی برای ادامه ی این مسیر میده ، و تشکر ویژه از اونر چنل که باهاشون همکاری داشتیم ، چنل دوباره قراره بره اولای لیست تلگرام پس حمایت فراموش نشه ،
ME : @XCEE_H3R
@LearnExploit
@MR_RYSON
❤‍🔥422🔥1👏1
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

رسیدیم دیگه به آخر داستان یعنی RAM ،
بیشتر نفوذ ها از همین جلو می‌ره ، حالا اصلا رم چی هست ؟ یه قطعه‌ی سخت‌افزاریه که روی مادربورد نصب میشه ، حالا چون توی گوشی قضیه فرق میکنه و مدار یکه هست روی مدار خورده شده ، و ظرفیتشون 4GB، 8GB، 16GB و… و این همون حافظه هست که برنامه‌ ها موقع اجرا استفاده می‌کنن ببین تو وقتی یه برنامه ای رو اجرا میکنی سیستم‌ عامل برنامه رو از حافظه داخلی همون استورج می‌خونه و اون رو داخل RAM کپی میکنه و CPU و GPU فقط از RAM داده‌ها رو می‌خونن، حالا برات سواله چرا اصلا رم ؟ چرا اس اس دی یا هارد یا چیز دیگه ای نه ؟ اگر سیستم بخواد مستقیم از حافظه داخلی کار بکنه برنامه‌ها چندین ثانیه تا یه دقیقه برای هر عملیات مکث می‌کردن و گوشی و کامپیوتر عملا غیرقابل‌ استفاده میشد ، حالا براتون سواله که SSD که سریعه ، ولی رم در لحظه چند ده نانو ثانیه سرعتشه و نکته دوم رم برای داده های لحظه ایه که در لحظه باید حساب شن در اصل RAM مثل یه دفتر یادداشت موقت سی پی یو هست و اطلاعاتی که در لحظه نیاز داریه ولی حافظه ی داخلی برای ذخیره سازی همیشگی و لحظه ای نیست و یعنی سرعت بالای RAM نتیجه همینه که داده رو موقت نگه میداره و بعد از خاموش شدن همه چی پاک میشه ولی storage باید داده رو برای همیشه نگه داره و این کار سرعت رو خیلی پایین میاره بعدشم اس اس دی یه حافظه بلند مدته و سرعتش کمتره این کاربرد و تعریف رم
حالا موقعی که ما یه برنامه رو ران میکنیم رم قسمتی از خودشو مثلا یه حجمی رو ، به اون برنامه میده برای بخش های مختلف برنامه ، توی ویندوز این قسمت ها به :
Thread Stack
Private Heap
Process Heap
Virtual Address Space
Code Segment (Text)
Initialized Data Segment
Uninitialized Data Segment (BSS)
PE Image Mapping
DLL Mapped Sections
Memory-mapped Files
Shared Memory Sections
Paged Pool
Non-Paged Pool
Kernel Stack
System Cache
Pagefile-backed Memory
Working Set
Session Space

و توی اندروید به :
Stack (Java)
Stack (Native)
Java Heap
Native Heap
Code Segment (Text)
Data Segment
BSS Segment
Memory-mapped Area (mmap)
Shared Libraries
Binder Buffers
Ashmem
ION Buffers
Gralloc Buffers
DMA Buffers
JIT Cache
ART / Dalvik Metadata
Zygote Shared Pages
Page Cache
Kernel Memory
Slab Allocator
vmalloc Area

اینا هر کدوم کارای بهش های مختلف اپلیکیشن و تابع هاشونو و ... هر کدوم کار خاص خودش رو میکنه اما کدوم مورد خطر شل کده ؟
توی اندروید فقط با
Native Stack
Native Heap

کار داریم و توی ویندوز فقط با
Thread Stack
Process Heap

کار داریم ، حالا این بخش هایی که در بالا گفتم در اصل زیرمجموعه ی 6 بخش هستند که در پارت بعدی میبینیم

@LearnExploit
@MR_RYSON
#LearnExploit
#RYSON
#shell
4❤‍🔥1
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

Part 2

ما توی اندروید 6 تا بخش رو داریم از جمله:
Text Segment
Data Segment
Heap
Memory-mapped Area
Stack
Kernel space

که کرنل اسپیس داخل فضای ادرس نیست ولی مصرف RAM سیستم هست
حالا این 6 بخش اصلی هر کدوم زیر مجموعه ای دارن که توی لیست زیر میتونید کل قسمت های رم رو نگاه کنید :

1 : Text Segment :
‌‌ ‌‌ ‌ ‌*App Code‌ ‌‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌
‌‌ ‌ ‌ ‌ ‌ ‌ ‌*Shared Libraries
‌‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌*ART / JIT Code
‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌*Read-Only Data (RODATA)
2 : Data Segment همون Global / Static
‌‌ ‌ ‌ ‌*Initialized Data
‌‌ ‌ ‌ ‌ ‌*BSS
‌ ‌ ‌ *Read-Only Data (RODATA)

3 : Heap
‌‌ ‌ ‌ ‌*Java Heap
‌‌ ‌ ‌ ‌ *Native Heap

4 : Memory-mapped Area
‌ ‌*mmap
‌‌ ‌ ‌*Ashmem
‌ ‌ ‌*Binder Buffers
‌ ‌ ‌‌ ‌ ‌ ‌*ION / DMA / Gralloc
‌‌ ‌ ‌ ‌ ‌ ‌ ‌‌ ‌*Zygote Shared Pages
‌‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌*Page Cache
‌‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ *JIT Cache

5 : Stack
‌ ‌*Java Stack
‌ ‌ ‌ ‌‌ ‌ ‌*Native Stack

6 : Kernel Space جزو فضای ادرس نیست
‌*Kernel Memory
‌‌ ‌ ‌ ‌*Slab Allocator
‌‌ ‌ ‌ ‌ ‌ ‌ *vmalloc Area

برای ویندوز هم شبیه اندرویده حالا باید توضیحات این 6 رو بدونید که هر کدوم چیه و چه کار میکنه و . . .
توی پارت بعدی
@LearnExploit
@MR_RYSON
#LearnExploit
#RYSON
#shell
#RAM
#RAMoverflow
3
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

اول از همه شما باید 6 بخش اصلی رم رو بشناسید ، حالا زیرمجموعه هاشو توضیح بدم طولانی میشه ولی کاری که هر بخش انجام میده رو خیلی ساده میگم

بخش کد برنامه Text Segment چیه وقتی برنامه تبدیل به صفر و یک میشه همون کد ماشین و باینری این کد ها باید جایی تو RAM قرار بگیرن تا CPU اونارو اجرا کنه پس سیستم‌عامل اونارو تو یه بخش ثابت از RAM میزاره و کارش خلاصه اینه که CPU از اینجا دستور می‌خونه و این بخش تنها بخش قابل اجرا است حالا این برنامه ای که میگیم چیه یه سری دستوره که به گوشی و کامپیوتر میگه چه کاری انجام بده مثل برو جلو و برگرد عقب و عددها رو جمع کن و متن چاپ کن و رنگ صفحه رو عوض کن و .... این دستورها باید توسط CPU اجرا بشن حالا این بخش سه چهار تا گذینه داره که رید اونلی دیتا رو بدونید بد نیست ، بخش Read-Only Data همون چیز های ثابته مثلا : GAME OVER یا Version 1.0 این‌ها قرار نیست تغییر کنن پس سیستم میزارشون تو بخشی که فقط قابل خوندنه مثل نوشتن یک متن با خودکار روی یک کاغذ که پاک نمیشه ، حالا توی برنامه ها و بازی ها همینه ، همیشه توی همشون متن هایی تعریف شدن که قرار نیست تغییر کنن
حالا Data Segment چیه ببین یه بخش از حافظه‌ ی برنامست که مخصوص متغیرهای global و static ساخته میشه ، متغیرهای global / static اگه برنامه‌ای داشته باشی که یه عدد همیشه نگه داشته‌ بشه مثلا تعداد امتیاز = ۰ یا اسم کاربر = "Ali" این‌ها باید از اول تا آخر کار برنامه زنده بمونن و پویا باشن پس سیستم‌عامل این‌ها رو در بخشی ذخیره می‌کند که همیشه موجوده
حالا دیتا سگمنت دو تا بخش داره:
بخش Initialized Data برای متغیرهایی که مقدار اولیه دارن
و بخش BSS که برای متغیرهایی که مقدار اولیه ندارن در اصل سیستم خودش صفرشون میکنه
حالا هیپ چیه ؟ ، هیپ ناحیه‌ای از حافظست برای داده‌هایی که طول عمرشون و اندازشون معلوم نیست میخواد بمونه یا نه مثلا وقتی توی اینستا یه عکس باز می‌کنی اندازه‌اش معلوم نیست و بزرگه و عکسا دائم میان و میرن پس باید توی یه جای بزرگی ذخیره بشن که اونم هیپه ، و داده هایی که بین بخش‌های مختلف برنامه به اشتراک گذاشته میشن و اینم بگیم که اختصاص و ازادسازی حافظه روی هیپ دستی انجام میشه و هیپ انعطاف‌پذیره و بزرگ‌تر از استکه، ولی کندتر و مستعد fragmentation و memory leak هست و عمر داده مستقل از فراخونی توابعه
استک چیه ؟ استک حافظه ایه که به ازای هر فراخوانی تابع استفاده میشه و هر بار که تابع صدا زده می‌شه، یک Stack Frame ساخته می‌شه که شامل متغیرهای محلی و پارامترها و ادرس بازگشت میشه ، و وقتی وقتی تابع تموم می‌شه، کل فریم یک‌جا آزاد و پاک میشه ، و مدیریتش کاملا خودکاره، خیلی سریع و اندازه‌اش محدوده و به‌صورت LIFO رشد و جمع می‌شه و معمولا به سمت ادرس‌ های پایین‌تر رشد میکنه خیلی ساده برات بگم استک جای داده‌های کوچک و موقتیه مثل جمع دو عدد توی توابع یه بازی این‌ها فقط در لحظه استفاده میشن و چند میلی‌ثانیه بعد پاک می‌شن پس می‌رن روی استک یه فضای سریع و کوچیک ،
بخش Memory-mapped Area
که همون ناحیه‌ ی map شدست و این بخش جاییه که برنامه می‌تونه فایل‌ها یا منابع خارجی رو مستقیم به حافظه خودش وصل کنه و به زبون ساده فرض کن یه فایل داری مثلا یه عکس یا کتابخونه ی سیستمی ، به‌ جای اینکه کلش رو بخونی و توی RAM کپی کنی، سیستم‌ عامل میگه که اقا باشه، من این فایل رو مثل یه تیکه از حافظه بهت نشون می‌دم و این کار باعث میشه برنامه خیلی سریع‌ تر و بهینه‌ تر به داده‌ها دسترسی داشته باشه
بخش فضای کرنل ، Kernel Space
این بخش مخصوص خود سیستم‌ عامله، نه برنامه‌ ها و ساده بگم سیستم‌عامل همون کرنل باید کنترل کامل روی سخت‌افزار و مدیریت حافظه داشته باشه برای همین یه بخش جدا از حافظه داره که فقط خودش می‌تونه بهش دسترسی داشته باشه و برنامه‌های معمولی نمی‌تونن مستقیم وارد کرنل اسپیس بشن، چون خطرناکه و ممکنه کل سیستم کرش کنه حالا چرا جزو ۶ بخش حافظست ولی از رم جداست ؟ چون برای سیستم عامل کرنل هست و برنامه های مثل هیپ نمیتونن بهش دسترسی داشته باشن
اگر حافظه بندی تلگرام رو مثل بزنیم میتونیم بگیم
کدهای خود تلگرام میشه قسمتی از Text
کتابخونه های libwebp و libjpeg میشن جزوی از Memory-mapped
چت‌ها و نام‌ها و ... جزوی از Data/Heap هستن و عکس‌هایی که باز میشه از بخش Heap هست و متغیرهای موقت داخل توابع تلگرام جزوی از Stack هستن
توی پارت بعدی میریم سراغ مفاهیم ، اصطلاح ها ، انواع حمله و ....
@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
#shell
#RAM
#RAM_overflow
3
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

Part 3

رسیدیم به پارت سه اینجا باید با اصطلاحایی که مربوط به آدرس ها و حملات و نوع حمله و ... آشنا بشید و معنی هاشون رو بدونید
بریم سراغ بافر
بافر یا Buffer یعنی یه فضای موقت تو حافظه که برنامه برای ذخیره داده ازش استفاده می‌کنه مثلا وقتی یک رشته string وارد برنامه می‌کنی، برنامه اون رو داخل یه بافر ذخیره می‌کنه ،
حالا اورفلو یعنی چی ، یعنی سرریز کردن ، زیاد شدن ، بیش از حد شدن ، بیرون ریختن داده

ببین حالا Buffer Overflow چیه اینجوری بگم که وقتی داده‌ای که وارد بافر می‌کنی بیشتر از ظرفیتش باشه باعث میشه که داده از بافر سرریز کنه و وارد بخش‌های دیگه‌ ی حافظه بشه اقا مثل اینکه بافر مثل یه لیوانه و داده زیاد همون آب اضافست وقتی بریزی سرریز میشه و این سرریز می‌تونه داده‌های دیگر برنامه یا حتی جریان اجرای برنامه رو خراب کنه پس بافراور فلو یعنی سرریز شدن داده و بیشتر شدنش از اون حافظه ای که براش تعیین شده یه مثال بزنم از بافر اورفلو
مثلا یه بافر ده بایتی داریم مثلا :
[A][B][C][D][E][F][G][H][I][J]
اگر 30 بایت داخلش بریزیم
[A][B][C][D][E][F][G][H][I][J][X][X][X][X]و...
این ۲۰ بایت اضافه وارد بخشای دیگه ی RAM می‌شه، مثل متغیرهای دیگر یا حتی ادرس‌ های استک این همون سرریز دیتا توی حافظه ی رمه،،
حالا ما دو نوع اورفلو داریم که در زیرتمومش رو توضیخ میدیم
1 : Buffer Overflow

* : Stack Buffer Overflow
همونطور که از اسمش معلومه روی Stack اتفاق میوفته جایی که متغیرهای محلی و پارامترهای تابع ذخیره میشن حالا دقیقا چه اتفاقی میوفته ؟ ببین وقتی داده‌ای بیشتر از اندازه‌ی بافر مثلا آرایه ، روی استک نوشته بشه، داده‌های اضافی می‌تونن روی بخش‌های دیگه‌ی استک مثل آدرس برگشت تابع که در ادامه میگیمش ، بریزن و وقتی ریخته شد ما میتونیم مسیر اجرای برنامه رو تغییر بدیم مثلا مسیر اجرای کد مخرب اگر هم بخوام براتون مثال بزنم این کد سی رو نگاه کن

char buf[10];
gets(buf); همینجا اگه بیشتر از ده تا کاراکتر وارد بشه باعث بافر اورفلو میشه

* : Heap Buffer Overflow
این حمله هم روی Heap اتفاق میوفته جایی که حافظه‌ی دینامیک با malloc/new گرفته میشه و وقتی داده‌ای بیشتر از اندازه‌ی حافظه‌ی تعیین شده نوشته بشه، داده‌های اضافی می‌تونن روی بخش‌های دیگه‌ی Heap یا Metadata بریزن و باعث خراب شدن ساختار مدیریت حافظه یا دسترسی به داده‌های دیگه میشه کد C زیر رو نگاه کن

char *buf = malloc(10);
strcpy(buf, "خب اگر نگاه کنی میفهمی که اینجا این رشته خیلی طولانیه"); که در نهایت باعث بافر اورفلو میشه

* Global / Static Overflow
این نوع بافر اورفلو روی Data Segment اتفاق میوفته جایی که متغیرهای global و static ذخیره میشن حالا اگه داده‌ ای بیشتر از اندازه‌ی تعریف‌شده برای متغیر global/static نوشته بشه، می‌تونه روی داده‌های دیگه تو Data Segment که قبلا توضیح دادیم بریزه و باعث تغییر داده‌های مهم برنامه یا ایجاد رفتار غیرمنتظره مثل

static char msg[5] = "ry";
strcpy(msg, "Ryson"); اینجا باعث بافر اورفلو روی بخش استاتیک میشه

* : Off-by-One Overflow
ببین وقتی برنامه‌نویس به اشتباه یه واحد بیشتر یا کمتر از اندازه‌ی واقعی آرایه یا بافر استفاده کنه بهش Off-by-One میگن که در واقع یه خطای مرزی به نام Boundary Error هست که این خطا می‌تونه باعث بشه حتی فقط ی بایت خارج از محدوده نوشته بشه و همین یک بایت اضافه می‌تونه داده‌های مجاور رو خراب کنه این نوع خطا معمولا روی Stack یا Heap اتفاق میوفته چون بافرها اغلب اونجا ذخیره میشن به این صورت :

char buf[10];
for (int i = 0; i <= 10; i++) {
buf[i] = 'A';
}

اینجا اشتباهه
چون اندیس‌های مجاز این بافر از 0 تا 9 هستن
و شرط حلقه باید کمتر از اندازه‌ی واقعی بافر باشه
@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
#shell
#RAM
#RAM_overflow
2🔥1
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

رسیدیم به نوع دوم و اخر اورفلو
2 : Arithmetic Overflow

اریتیمتیک اورفلو به سرریز شدن تو عملیات‌ های ریاضی گفته میشه مثل جمع، تفریق، ضرب و .... وقتی نتیجه‌ ی یه محاسبه از محدوده ای که نوع داده می‌تونه نگه داره بیشتر یا کمتر بشه ، اریتیمتیک اورفلو اتفاق میوفته ، این نوع اورفلو می‌تونه روی متغیرهای عددی signed یا unsigned هم رخ بده و توی متغیرهای unsigned
وقتی مقدار از حداکثر یا حداقل رد میشه عدد به صورت wrap around برمی‌گرده اما توی متغیرهای signed اریتیمتیک اورفلو میتونه باعث رفتار نامشخص یا Undefined Behavior بشه و حالا این نوع اورفلو علاوه بر اینکه باعث محاسبات اشتباه میشه می‌تونه تو محاسبه‌ ی اندازه‌ی بافر، offset یا تعداد تکرار حلقه‌ها و ... باعث ایجاد بافر اورفلو یا آسیب‌پذیری‌های دیگه بشه مثلا

unsigned int x = 4000000000;
x = x + 10;

که نتیجه‌ی محاسبه از محدوده‌ی نوع داده خارج شده
و باعث اریتیمتیک اورفلو میشه
حالا اریتیمتیک اورفلو یه نوع اصلی داره اونم اینتجر اورفلو هست که :
* Integer Overflow
خب اینتجر اورفلو زیرمجموعه ی اریتیمتیک اورفلو که مربوط به سرریز عددی هست اما بافراورفلو مربوط به سرریز بافر هست
این هم دو نوع داره که :
نوع اول Signed Integer Overflow که مربوط به سرریز اعداد علامت‌داره
ولی نوع دوم Unsigned Integer Overflow مربوط به سرریز اعداد بدون علامت یا wrap around هست و یه نکته داره اینه که علاوه بر سرریز عددی می‌تونه باعث بافر اورفلو هم بشه این نوع توی عملیات ریاضی روی متغیرهای عددی اجرا میشه که وقتی نتیجه‌ ی محاسبه بزرگ‌تر از محدوده‌ی نوع داده باشه، مقدار به اصلاح می‌پیچه که بهش میگن wrap around که در نهایت می‌تونه باعث محاسبات اشتباه یا حتی اسیب‌پذیری بشه مثلا تو محاسبه‌ ی اندازه‌ی بافر برای این هم مثال بزنیم که قابل فهم تر باشه

unsigned char x = 255;
x = x + 1; که مساوی صفر میشه و نتیجش اورفلو شدنه

@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
#shell
#RAM
#RAM_overflow
11🔥1
این سه تا باگ و خطا رو ببینید که میتونن به حملات تبدیل بشن ، که بعدش بریم سراغ اینکه که دقیقا چه اتفاقی میوفته بعد از اجرای شل کد
Format String Bug
ببین وقتی رشته‌ی فرمت مثل printf, scanf و ...به صورت مستقیم از ورودی کاربر گرفته بشه این اتفاق میوفته و توی Stack هست چون پارامترهای تابع روی استک ذخیره میشن و میتونیم با %x, %n و ... داده‌های حافظه رو بخونیم یا تغییر بدیم مثل

char input[100];
gets(input);
printf(input);
اینجا الان داستانه چون باید
printf("%s", input)
باشه

Use-After-Free
مخففش میشه UAF و وقتی برنامه بعد از آزاد کردن حافظه free دوباره از اون اشاره‌گر استفاده کنه اتفاق میوفته توی Heap هم هست چون حافظه‌ی دینامیک اونجا مدیریت میشه و میتونه داده‌های قدیمی یا داده‌های جدید برنامه‌های دیگه رو بخونه و بنویسه مثل :

char *p = malloc(10);
free(p);
strcpy(p, "RYSON");
اینجا هم مشکله استفاده بعد از ازادسازی هستش

Double Free
وقتی یه اشاره‌گر دوبار آزاد بشه همون free به وجود میاد این هم توی Heap هست و باعث میشه که ساختار مدیریت حافظه خراب بشه و میتونه باعثه اجرای شل کد بشه مثل

char *p = malloc(10);
free(p);
free(p);
اینجا دوباره آزاد شده

اینا همشون همگی جزو Memory Safety Bugs هستن یعنی باگ هایی که باعث میشن برنامه خارج از محدوده‌ی امن حافظه کار بکنه

به صورت کلی این ها :
Stack Buffer Overflow
Heap Buffer Overflow
Integer Overflow
Off-by-One
Global / Static Overflow
Format String Bug
Use-After-Free
Double Free

بیشتر هیپ و استک رو خراب میکنن

@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
#shell
#RAM
#RAM_overflow
❤‍🔥21
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

Underflow

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

1 : Buffer Underflow
وقتیه که برنامه انتظار داره داده‌ ای توی بافر باشه اما کمتر از اون رو میگیره و دریافت میکنه خوندن از قبل بافر باعث دسترسی به حافظه‌ی خارج از محدوده میشه
2 : Integer Underflow
وقتی یه عدد صحیح مثلا unsigned int کمتر از صفر بشه و به مقدار خیلی بزرگ تبدیل بشه انتجر اندرفلو اتفاق میوفته و این می‌تونه باعث تخصیص حافظه‌ ی اشتباه یا محاسبات نادرست و اشتباه بشه
3 : Stack Underflow
برای وقتیه که از Stack داده‌ ای برداشته میشه در حالی که چیزی توی اون وجود نداره و می‌تونه باعث دسترسی به ادرس‌ های محدود شده بشه یا باعث بازنویسی داده‌ های کنترلی بشه
4 : Heap Underflow
این وقتی اتفاق میوفته که اشاره‌گر یا عملیات روی Heap به عقب حرکت بکنه و برگرده و داده‌های متادیتا یا بلوک‌های دیگر را تغییر بده و این تغییر میتونه باعث نوشتن یا خوندن توی ادرس‌ های دلخواهمون بشه

البته میتونیم بگیم دقیقا مثل اورفلو میمونه هیپ و استک هم زیرمجموعه ی بافراورفلو هستن اینم بگم هم از اورفلو هم اندرفلو انواع خیلی بیشتری داریم ولی اینا معروف ترین و اصلی ترینشونه
@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
#shell
#RAM
#RAM_overflow
1👍1👏1
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

END PART RAM & SHELLCODE

ببین شل کد بعد از انجام اورفلو میاد سراغ اوررایت کردن
حالا اوررایت چیه
ببین اور رایت همون overwrite یعنی رونویسی ، بازنویسی

یعنی روی stack میاد باعث اوررایت شدن Return Address و Frame Pointer میشه و توی هیپ باعث اوررایت شدن Function Pointer و vtable و Heap Metadata میشه ، حالا اینا چین ؟ بیا تا توضیح بدم

1 : Stack :
* Return Address
توی استک یه داریم Return Address که اسمش روشه ، ادرسیه که بعد از تموم شدن یه تابع، CPU باید بهش برگرده حالا اگه عوض بشه برنامه به جای دلخواه میپره که میاد به سمت شل کد ما
* Frame Pointer
فریم پوینتر یا همون Base Pointer اینم دوباره توی استک هست و به صورت کلی اشاره‌گر به ابتدای Stack Frame تابع هستش و با خراب شدنش باعث دسترسی اشتباه به متغیرها میشه و بعضی وقتا مسیر رسیدن به Return Address هستش
2 : Heap
و اما Function Pointer چیه ببین این میتونه توی Heap / Global / Stack و این سه تا باشه و متغیریه که ادرس یه تابع رو نگه میداره و اگر مقدارش عوض بشه تابع دلخواه صدا زده می‌شه و توی callback ها و struct ها خیلی رایجه
vtable
وی تیبل یا vtable مخفف Virtual Table و توی هیپ توی سی پلاس پلاسه و میتونیم بگیم جدولی از ادرس متدهای virtual یک کلاسه حالا اگه pointer به vtable عوض بشه ، متد جعلی اجرا میشه و هدف اصلی Heap Overflow هاست
رسیدیم به Heap Metadata که داخل Heap کنار بلوک‌هاست و هیپ متادیتا همون اطلاعات مدیریتی حافظه مثل size, next, prev, flags و .. هست و خراب کردنش میتونه باعث کنترل malloc/free بشه و مسیر رسیدن به Function Pointer و Arbitrary Write هست
حالا هک با شل کد چجوری اتفاق میوفته ؟
ببین شل کد کلاسیک از اون همه بخش های فقط بخش هیپ و استک و شاید هم متغیر های استاتیک و گلوبال رو مورد هدف قرار بده حالا چجوری،
خیلی خیلی خلاصه بگم شل کد بعد از اینکه یه جایی از حافظه مثل استک یا هیپ باگ داشت اجرا بشه اورفلو انجام باعث سرریز شدن بافر میشه حالا بزار اینجا دقیق تر باشیم اگر کد رو جوری بنویسیم که داده طوری باشه که بعد از سرریز کردن آدرسی که توی داده اضافی نوشته بودیم بریزه روی Return Address یا و.. باعث اوررایت شدنش میشه بزار اینجوری بگم :
[Buffer: 32 bytes][Saved EBP][Return Address]
این رو فرض کن ، الان
این 32 بایت رو کسشر مینویسیم یه چیز بی‌معنی فقط و فقط برای پر کردن بافر 4 بایت هم برای بازنویسی EBP میتونیم بزنیم که اختیاریه بزنی بهتره و 4 بایت هم ادرس شل‌ کد مثلا 0xDEADBEEF و وقتی CPU دستور RET رو اجرا میکنه به جای برگشت به تابع اصلی، میپره به 0xDEADBEEF مثال کد واقعیش به این صورته :

section .text
global _start

_start:
sub esp, 32
push ebp
mov ebp, esp
mov dword [ebp + 4], 0xDEADBEEF
xor eax, eax
push eax
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
mov ecx, eax
mov edx, eax
mov al, 11
int 0x80
xor eax, eax
inc eax
xor ebx, ebx
int 0x80

یا مثلا فرض کن یه تابعی یک بافر 32 بایتی داره حالا اگه ما 64 بایت بفرستیم بایت‌های 33 تا 36 دقیقا روی Return Address و بقیه چیزا مثل Function Pointer و .... می‌نشینن مثل بالا که گفتم این چند بایت رو طوری انتخاب میکنیم که برابر با ادرس محل شل‌کد توی حافظه باشن وقتی تابع تموم بشه و CPU بخواد به ادرس ذخیره‌شده برگرده، به جای ادرس اصلی، به محل شل‌کد میره همین ، توی اندرفلو هم به این صورته که باعث میشه داده‌ های قبل از بافر یا بلوک حافظه بازنویسی و اوررایت بشن حالا ممکنه که یا Return Address، Frame Pointer، Function Pointer یا vtable تغییر بکنه
یه بار مرور میکنیم ، شل کد میره روی تارگت ، اول اورفلو یا اندرفلو میزنه تا داده بک بزنه یا سرریز کنه به بقیه ، و باعث تغییر آدرس ها مثل Return Address، Frame Pointer، Function Pointer, vtable میشه و باعث میشه به جای آدرس اصلی ، به آدرس شل کد بره و باعث اجرای شل بشه
تموم ،،،
حالا شل کد کلاسیک خیلی وقته با ASLR و Stack canary و DEP / NX bit جلوش گرفته شده و منسوخ شده که اینا هم راه بای پس و دوز زدن دارن ولی حملات جدید تر مثل

mprotect
VirtualProtect
ret2libc
ROP
JOP
Logic bugs

اومده و جاشونو گرفته که بعدا مقاله هاشونو مینویسیم ،
تشکر که تا پایان این اموزش همراهی کردین و میدونم که مقاله سنگین بود ،

𝗥 ‌‌ ‌ ‌ ‌𝗬 ‌ ‌ 𝗦 ‌‌ ‌‌ ‌ 𝗢 ‌ ‌‌ ‌ ‌ 𝗡

@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
#shell
#RAM
#RAM_overflow
3👍1
ساخته شده توسط تیم عدالت تاریک ، ۱۱ نوع حمله و حمله ۱۱ ترکیبی از ده حمله ، رو دستش نیست جزئیات به زودی . . .
❤‍🔥7👍1
در مورد حملات جدید شل کد که گفتم و روش های بای پس از سطوح دفاعی در برابر شل کد بگیم ؟
Anonymous Poll
90%
YEAH🌐
10%
No❤️
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

IN THE NAME OF DARK JUSTICE

خواستار این پارت جذاب بودید ، نوشتم و توضیح دادم و تمام و کمال خیلی ساده گفتم که بفهمید
ببین ما چند نوع سطح داریم که جلوی اجرای شل کد رو میگیرن
سامانه‌های امنیت شبکه و میزبان:

امنیت EDR دقیقا مخفف Endpoint Detection & Response میتونم بگم یه راهکار امنیتیه که تو سطح میزبان همون endpoint هست و اینکه علاوه بر اینکه میتونه لاگ ها و رفتارای سیستم رو جمع اوری کنه ، قابلیت تحلیل پیشرفته و واکنش خودکار داره ، یکم اگر دقیق باشیم EDR معمولا حاوی behavioral analysis و threat hunting و incident response هست و تفاوتش با انتی‌ ویروس سنتی لوکال اینه که اقا فقط به امضا ها متکی نیستش و رفتار مشکوک رو هم بررسی میکنه
توی شل کد این پردازش های مشکوک و دسترسی به حافظه یا شبکه رو شناسایی و بلاک میکنه
رسیدیم به IDS که همون مخفف Intrusion Detection System هست و ببین میتونم بگم که یه نوع سامانه‌ ایه که نفوذ به ترافیک شبکه رو تشخیص میده و یا فعالیتای میزبان رو مانیتور میکنه و وقتی الگو های حمله مثل signature-based یا anomaly-based رو ببینه هشدار میده ، IDS یع حالت passive هم داره که و جلوی حمله را نمیگیره حالا بعدا میگم که تو کجا استفاده میشه
اگر شل کد از طریق شبکه با یه اکسپلویت تزریق بشه با الگو های شناخته شده ای که داره میتونه تشخیص بده ولی فقط هشدار میده نمیتونه جلوشو بگیره
ای پی اس IPS که مخففIntrusion Prevention System هست و بیین خیلی شبیه IDS هست ولی با قابلیت active prevention یعنی چی ؟ یعنی اقا به جز تشخیص نفوذ ، میتونه بسته‌ های مخرب رو هم drop بکنه یا ارتباط رو قطع بکنه یا rule جدید اعمال بکنه IPS معمولا inline تو مسیر ترافیک قرار میگیره ، ببین یکم از IDS میتونیم بگیم قوی تره
شل کد اگر زده بشه این بسته های حاوی شل کد رو حذف میکنه و نمیزاره که به endpoint برسه

𝗥 ‌‌ ‌ ‌ ‌𝗬 ‌ ‌ 𝗦 ‌‌ ‌‌ ‌ 𝗢 ‌ ‌‌ ‌ ‌ 𝗡

@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
1
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

بریم برای دو سطح دفاعی دیگه ،
امنیت نرم‌افزار و کد :

دفاع Code Signing ببین کد سیگنینگ از امضای دیجیتال برای تضمین authenticity و integrity نرم‌افزار استفاده میکنه و دولوپر با کلید پراویت خودش کد رو امضا میکنه و یوزر با کلید پاب خودش اون رو اعتبارسنجی میکنه و این کار نمیزاره کد مخرب اجرا بشه
نوع CFI که مخفف Control Flow Integrity هست که میتونیم بگیم نوعی تکنیکیه که توی سطح کامپایلر و زمان اجرا هست که جریان کنترل برنامه یا همون control flow graph رو چک میکنه حالا اگه ما بخوایم با حمله‌هایی مثل ROP مسیر اجرای برنامه را تغییر بدیم CFI جلوی اون‌ رو میگیره ولی بازم راه برای اجرا هست که میگم
مکانیزم‌ های دفاعی تو حافظه :

آقا رسیدیم به ASLR که به قاتل شل کد کلاسیک معروفه حالا مخفف همون Address Space Layout Randomization هست که بر میداره ادرس‌ های حافظه مثل stack, heap, libraries رو تو هر اجرای برنامه به صورت تصادفی تغییر میده که این کار حملاتی مثل buffer overflow و return-to-libc رو سخت میکنه اما غیرممکنه نه، داستانش هم اینه که ما نمیتونیم ادرس دقیق پیلود رو بزنیم
بریم سراغ Stack Canary
ببین استک کنری یه مقدار تصادفی که canary value بهش میگن رو قبل از return address توی stack قرار میده و اگه حمله stack buffer overflow بزنیم این مقدار تغییر میکنه و سیستم میفهمه که داستان چیه و جلوی اجرای مخرب رو میگیره
دپ ان ایکس بیت DEP / NX bit که اصلاح کاملش میشه Data Execution Prevention یه مکانیزمی تو سطح سخت‌افزار و سیستم‌عامله که بخش‌ هایی از حافظه مثل stack و heap رو غیرقابل اجرا میکنه ، NX bit تو CPU مشخص میکنه که یه صفحه حافظه فقط داده هستش و نمیتونه کد رو اجرا کنه ، و جلوی اجرای شل‌ کد گرفته میشه

𝗥 ‌‌ ‌ ‌ ‌𝗬 ‌ ‌ 𝗦 ‌‌ ‌‌ ‌ 𝗢 ‌ ‌‌ ‌ ‌ 𝗡

@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
1
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

رسیدیم به بهش جذاب ماجرا ، سه حمله ی JOP ,ROP , BROP که جدید اومدن و جایگذین شل کد کلاسیک شدن ،

حملات ROP
مخفف Return-Oriented Programming هست و حمله‌ایه که با سواستفاده از buffer overflow و تغییر آدرس بازگشت return address که قبلا صحبت کردبم انجام میشه حالا اینجا ما به‌ جای تزریق مستقیم شل‌کد، از قطعات کوچیک کد موجود تو باینری یا کتابخونه‌ ها استفاده میکنیم ، اسم این قطعات gadgets هست و معمولا با دستور ret تموم میشن ، و قشنگی کار اینه که این مخصوص دور زدن مکانیزم‌ هایی مثل DEP/NX bit که جلوی اجرای کد تزریق‌شده رو میگیرن هست و با کنار هم گذاشتن gadgets میتونیم عملیات پیچیده و حتی محاسبات کامل Turing-complete رو انجام بدیم
حمله یBROP همون Blind Return-Oriented Programming
ببین این حمله نسخه‌ی پیشرفته تره حمله ی ROP هست و از اون قوی تره ما حتی بدون داشتن باینری هدف میتونیم exploit بسازیم حالا چطوری ؟ از طریق stack reading مقدار stack canary و ادرس‌ ها رو راحت میشه حدس زد و با استفاده از crash یا ادامه اجرای سرویس مقدار درست رو پیدا میکنیم بعدش هم با پیدا کردن stop gadgets و write syscall، باینری رو از حافظه به سمت خودمون dump می کنیم بعد از اون میتونیم مثل ROP معمولی زنجیره بسازیم و کنترل کامل سیستم را بگیریم ، و بیشتر مخصوص سرویس‌های شبکه‌ ای هست که بعد از crash دوباره اجرا می‌شوند مثل nginx یا MySQL
حمله ی Jump-Oriented Programming که به JOP معروفه ، این حمله یه کلاس جدید از حملات code-reuse هست که برای دور زدن دفاع‌ های ضد ROP ساخته شده حالا فرقش با ROP چیه ؟ ROP هر gadget با دستور ret تموم میکنه ولی تو JOP به‌ جای ret از پرش‌های غیرمستقیم نثل jmp [reg] یا مشابه استفاده میشه ، روش هم به این صورته که یه dispatcher gadget وجود داره که وظیفه داره که اجرای برنامه را بین gadgets مختلف هدایت بکنه ، هر gadget یه عملیات ساده انجام میده مثل اپلود مقدار تو رجیستر و با زنجیره‌ سازی این پرش‌ها، ما میتونیم مثل ROP عملیات پیچیده انجام بدیم‌ و خوبیش اینه که چون به ret وابسته نیست، بسیاری از دفاع‌ های مبتنی بر تشخیص الگوهای return رو دور میزنه
و رسما میتونم بگم BROP الان از همشون قوی تره ،چه از لحاظ مخفی سازی چه قدرت اجرا و چه جدید بودن کلا الان بهترین روش برای اجرای کد همین حمله هستش

𝗥 ‌‌ ‌ ‌ ‌𝗬 ‌ ‌ 𝗦 ‌‌ ‌‌ ‌ 𝗢 ‌ ‌‌ ‌ ‌ 𝗡

@LearnExploit

@MR_RYSON

#LearnExploit
#RYSON
2
LEARN EXPLOIT AND R Y S O N
2
آقا بعضیا اومدن پیوی من میگن این اطلاعات بازیگرا و فوتبالیست ها رو دوباره بزن بزار ، داداش شما اصلا جنبه نداری من یه دو سه بار توی چنل خودم گذاشتم رفتن بگایی درست کردن همین چند شب پیش هم گذاشتم دوباره رفتن بگایی کردن ، وقتی میبینم داستان اینه نمیزارم
11