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
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

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
0Day.Today | Learn Exploit | Zero World | Dark web |
در مورد ادامه ی این حملات دوباره صحبت کنیم ؟
تا الان شل کد کلاسیک و این سه حمله رو تعریف کردیم :
ROP
JOP
BROP

دریغ از اینکه . . .
COP
COOP
SROP
DOP
DROP
JIT-ROP
Return-to-libc
Heap Spraying
Heap Feng Shui

اینا هنوز موندن
😁62
امشب مقاله داریم
21
𝗟 𝗲 𝗮 𝗿 𝗻 ‌ ‌ 𝗘 𝘅 𝗽 𝗹 𝗼 𝗶 𝘁
𝗥 ‌ ‌ ‌𝗬 ‌ ‌‌ 𝗦 ‌‌ ‌ 𝗢 ‌ ‌‌ 𝗡

خب اقا رسیدیم به ادامه ی حملات
و اینکه توی این پارت علاوه بر توضیح بقیه حملات ، بهترین حمله توی 2026 که بهترین اثر گذاری و بهترین بای پس امنیتی رو داشته باشه گفته میشه حتما با دقت بخونید و روی ROP به شدت مانور بدید
از حمله ی COP شروع میکنم که مخفف شده ی Call-Oriented Programming هست و
این حمله شبیه ROP هست ولی به‌ جای استفاده از دستور ret، از توابع موجود توی باینری یا کتابخونه ها به‌ صورت مستقیم استفاده میکنه ، ببین به صورت کلی زنجیره ای از فراخونی توابع ساخته میشه که می‌تونه عملیات پیچیده انجام بده و محدودیت‌های ROP رو دور بزنه
حمله ی COOP مخفف شده ی Counterfeit Object-Oriented Programming هست و این حمله مخصوص برنامه‌ های شی‌ گراست یعنی چی ؟ یعنی ما میتونیم با سواستفاده از اشیاعه جعلی همون counterfeit objects و متدهای مجازی virtual methods، جریان اجرای برنامه رو کنترل کنیم و در اصل به‌ جای gadgets که مبتنی بر ret هست ، از جدول‌های vtable و متد های کلاس‌ ها برای اجرای کد دلخواه استفاده کنیم
حمله ی SROP مخفف Sigreturn-Oriented Programming
این حمله از مکانیزم سیگنال توی سیستم‌ عامل سواستفاده میکنه حالا ما میتونیم یه فریم جعلی سیگنال روی استک قرار بدیم و با اجرای sigreturn میتونیم رجیستر ها رو به مقادیر دلخواهمون تغییر بدیم این روشم اجازه میده که بدون نیاز به gadgets زیاد، کنترل کامل روی رجیسترها داشته باشیم
حمله ی DOP مخفف Data-Oriented Programming
برخلاف ROP یا JOP که جریان کنترل رو تغییر میدن، این حمله روی داده‌ها تمرکز داره. مهاجم با تغییر داده‌های حساس در حافظه و استفاده از توابع قانونی برنامه، می‌تونه عملیات مخرب انجام بده بدون اینکه جریان کنترل تغییر کنه. این حمله شناسایی رو سخت‌تر می‌کنه
حمله ی DROP که مخفف Dynamic Return-Oriented Programming هست و میتونیم بگیم که این همون نسخه‌ی پیشرفته‌ تر ROP هست که زنجیره ی gadgets به‌ صورت پویا تو زمان اجرا ساخته میشه و حالا این باعث میشه دفاع‌ هایی مثل ASLR سخت‌ تر بتونن جلوی حمله رو بگیرن چون زنجیره ثابت نیست و تو هر بار اجرا شدن تغییر می‌کنه🤣
حمله یJIT-ROP مخفف Just-In-Time ROP هست که این حمله با ترکیب تکنیک‌ های JIT compilation و ROP انجام میشه ما میتونیم تو زمان اجرا gadgets رو کشف کنیم و زنجیره رو بسازیم و این روش مخصوص دور زدن دفاع‌ هایی مثل CFI هست چون زنجیره به‌ صورت لحظه‌ای ساخته میشه و قابل پیش‌بینی نیست
حمله ی Return-to-libc که یکی از قدیمی‌ترین حملات code-reuse هستش و به‌ جای تزریق کد میتونیم ادرس توابع کتابخونه‌ ی استاندارد مثل system() رو روی استک قرار بدیم و با پارامتر مناسب مثلا /bin/sh، اجرای شل رو به دست بیاریم و این روش برای دور زدن DEP/NX خیلی استفاده میشه
حملات Heap Spraying همون HS این تکنیک بیشتر توی مرورگر ها و محیط‌های جاوااسکریپت دیده میشه که ما میتونیم حجم زیادی از داده ی مخرب رو توی heap پخش کنیم تا احتمال اینکه ادرس پرش به داده‌ ی مخرب بخوره بالا بره 😂این روش رو خیلی برای آماده سازی اکسپلویت به کار میبرن
و در اخر حمله ی Heap Feng Shui که میتونیم بگیک ی تکنیک پیشرفته برای مدیریت و چینش حافظه heap هست و میتونیم با تخصیص و ازاد سازی دقیق بلوک‌های حافظه، ساختار heap رو به شکلی تنظیم کنیم که داده‌ های مخرب تو جای مناسب قرار بگیرن و این کار موفقیتش توی حمله‌ های مبتنی بر heap خیلی زیاده
تا الان علاوه بر حملات شل کد کلاسیک ما ۱۲ نوع حمله دیگه هم گفتیم حالا وقت انتخاب بهترین حمله هست که کدوم بهتره
معیار ما اینه که حمله ی انتخابی باید توی امسال یعنی 2026 راحت کار بکنه و منسوخ نشده باشه و بیشترین بای پس از سطوح دفاعی رو داشته باشه و بیشترین احتمال اجرا رو هم داشته باشه
برای PC :
بهترین حملاتی که تو 2026 کار بکنه و مخفی سازی بالایی داشته باشه و بیشترین بای پس از مکانیزم های دفاعی داشته باشه و بیشترین احتمال اجرا رو داشته باشه حملاته:
حملات COOP و JIT-ROP هست
و برای اندروید :
حملات ROP و JOP و Heap feng Shui هست

@LearnExploit

@MR_RYSON
4