Skip to content

Commit

Permalink
اضافه شدن دسته osint و رفع چند ایراد توی رایتاپهای کریپتو (#23)
Browse files Browse the repository at this point in the history
* osint challenges

* Osint  category

دسته osint باچند تا رایتاپ اضافه کردم

بعضی از ابدیت ها هم روی چند تا ایراد رایتاپ کریپتو اصلاح شد
  • Loading branch information
HIGH0101 authored Apr 15, 2024
1 parent 9b27616 commit 17e5eee
Show file tree
Hide file tree
Showing 33 changed files with 261 additions and 26 deletions.
6 changes: 3 additions & 3 deletions docs/crypto/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ tags:

# رمزنگاری

رمزنگاری به هنر نوشتن رمزها و کدهای مخفی گفته می‌شود. رمزهای عبور، اطلاعات بانکی، ارسال و دریافت پیام در پیام‌رسان‌ها و هر چیزی که شامل انتقال و ذخیره اطلاعات حساس در دنیای اینترنتی امروز باشد نیاز به رمزنگاری دارد.
همان‌طور که هیچ الگوریتم یا سیستمی کاملا امن نیست، رمزنگاری‌های موجود (متقارن، نامتقارن،امضای دیجیتال) نیز ممکن است دارای نقص‌هایی باشند. هدف چالش‌های رمزنگاری در مسابقه‌های CTF ایجاد آشنایی با این نقص‌ها و بالا بردن دانش افراد در زمینه مفاهیم پایه‌ای رمزنگاری یعنی مباحث ریاضی آن‌ها است.
رمزنگاری به هنر نوشتن رمزها و کدهای مخفی گفته می‌شود. رمزهای عبور، اطلاعات بانکی، ارسال و دریافت پیام در پیام‌رسان‌ها و هر چیزی که شامل **انتقال و ذخیره اطلاعات** در دنیای اینترنتی امروز باشد نیاز به **رمزنگاری** دارد.
همان‌طور که هیچ الگوریتم یا سیستمی کاملا امن نیست، رمزنگاری‌های موجود (متقارن، نامتقارن، امضای دیجیتال) نیز ممکن است دارای نقص‌هایی باشند. هدف چالش‌های رمزنگاری در مسابقه‌های CTF ایجاد آشنایی با این نقص‌ها و بالا بردن دانش افراد در زمینه مفاهیم پایه‌ای رمزنگاری یعنی مباحث ریاضی آن‌ها است.
این چالش‌ها شامل **شکستن الگوریتم رمزنگاری**، **رمزگشایی متون رمزی** یا **دور زدن الگوریتم‌های رمزنگاری** در سامانه‌ها و پروتکل‌های مختلف است که به درستی پیاده نشده‌اند. با این حال، بسیاری از این چالش‌ها تنها به استفاده نادرست از الگوریتم‌های رمزنگاری می‌پردازند که نیاز به دانش عمیقی از روابط ریاضی آنها ندارد.

<center>
Expand All @@ -25,7 +25,7 @@ tags:

### ۱- مبتنی بر مفاهیم ریاضی

این چالش‌ها صرفا به مفاهیم پایه‌ای ریاضی متمرکز هستند و نیاز به حل یک مسئله ریاضی برای آن چالش رمزنگاری دارند. برای بدست آوردن پرچم در این نوع چالش‌ها، شما نیاز به داشتن دانش کافی در مباحث ریاضیات رمزنگاری مانند محاسبات پیمانه‌ای، لگاریتم‌های گسسته، معادلات چندجمله‌ای، منحنی‌های بیضوی و ریاضیات مشبک (Lattice) دارید.
این چالش‌ها صرفا به مفاهیم پایه‌ای ریاضی متمرکز هستند و نیاز به حل یک مسئله ریاضی برای آن چالش رمزنگاری دارند. برای بدست آوردن پرچم در این نوع چالش‌ها، شما نیاز به داشتن دانش کافی در مباحث ریاضیات رمزنگاری مانند محاسبات پیمانه‌ای، لگاریتم‌های گسسته، معادلات چندجمله‌ای، منحنی‌های بیضوی و ریاضیات مشبکه (Lattice) دارید.

### ۲- مبتنی بر خطای پیاده‌سازی

Expand Down
2 changes: 1 addition & 1 deletion docs/crypto/source/index.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# منابع یادگیری رمزنکاری
# منابع یادگیری رمزنگاری

##
## کتاب
15 changes: 8 additions & 7 deletions docs/crypto/writeups/vSCTF/Redundancy.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ tags:
- vSCTF-2023
- Crypto
- RSA
- Extended Euclidean
- Fixed-pad
- sage
- Polynomial Ring
- Extended gcd
- Partial known m
- Coppersmith
- Sage
---

# چالش Redundancy
Expand Down Expand Up @@ -48,7 +48,7 @@ c1 = 900306254436146896001421847063640466917373504486634296586966038216626312328
c2 = 2546072448640808612556238065690407010381885201320761372614998667179031247594621466783076820338223816545993779457675793555900878984022886823043416655251600929530018123073858500887780064339665319391244085462799327306580227414809334236098388514789401395708999589289970455742049539846184453090569082144704220108709060216465897683931008575383253420528012257869329475086084346328436404376300397163706384908585243637028839505661432353166021577388901987667955042566919645080401328362001267759995517247132976744463557149680150697522052163536029888394019138507753598600096770531185804183946347241540134230811866880904134661137
```

با بررسی اولیه کد می فهمیم که متن فلگ دو بار با استفاده از دو کلید عمومی $e1$ ،e2 و پیمانه یکسان n با الگوریتم رمزنگاری RSA رمز شده اند. با دقت در کد متوجه می شویم که تولید p و q صحیح انجام شده و نمی توان با تجزیه کردن ([factorization](https://en.wikipedia.org/wiki/Integer_factorization)) عدد n کلید خصوصی را بدست آورد. با توجه به اینکه مقادیر رمز یعنی c1 و c2 را در این چالش به ما داده شده، با اندکی جستجو در اینترنت، به این [لینک](https://crypto.stackexchange.com/questions/1614/rsa-cracking-the-same-message-is-sent-to-two-different-people-problem/1616#1616) رسیدیم که به ما کمک کرد. متوجه شدیم در صورت داشتن دو متن رمزشده، شرط $gcd(e1,e2)=1$ و مقدار n و m یکسان می توان با استفاده از الگوریتم تعمیم اقلیدسی [EEA](https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm) به رشته m یعنی فلگ رسید، اما در این چالش مقدار $gcd(e1,e2)=5$ است. با این حال می دانیم که 2 و 3 ضرایبی از e1 و e2 هستند نسبت به هم اول هستند و شرط $gcd(2,3)=1$ در آن صدق می کند. پس می توانیم با روش توضیح داده شده در لینک قبلی حداقل توان های 2 و 3 را با روش زیر حذف و به $c=m^5$ برسیم.
با بررسی اولیه کد می فهمیم که متن فلگ دو بار با استفاده از دو کلید عمومی $e1$ ،e2 و پیمانه یکسان n با الگوریتم رمزنگاری RSA رمز شده اند. با دقت در کد متوجه می شویم که تولید p و q صحیح انجام شده و نمی توان با تجزیه کردن ([factorization](https://en.wikipedia.org/wiki/Integer_factorization)) عدد n کلید خصوصی را بدست آورد. با توجه به اینکه مقادیر رمز یعنی c1 و c2 را در این چالش به ما داده شده، با اندکی جستجو در اینترنت، به این [لینک](https://crypto.stackexchange.com/questions/1614/rsa-cracking-the-same-message-is-sent-to-two-different-people-problem/1616#1616) رسیدیم که به ما کمک کرد. متوجه شدیم در صورت داشتن دو متن رمزشده، شرط $gcd(e1,e2)=1$ و مقدار n و m یکسان می توان با استفاده از الگوریتم تعمیم اقلیدسی [EEA](https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm) به رشته m یعنی فلگ رسید، اما در این چالش مقدار $gcd(e1,e2)=5$ است. با این حال می دانیم که 2 و 3 ضرایبی از e1 و e2 هستند نسبت به هم اول هستند و شرط $gcd(2,3)=1$ در آن صدق می کند. پس می توانیم با روش توضیح داده شده در لینک قبلی حداقل تاثیر توان های 2 و 3 را با روش زیر حذف و به $c=m^5$ برسیم.


$$
Expand All @@ -74,7 +74,7 @@ assert m.bit_length() == (64*8) == 512

```

با اندکی دقت در کد پایتون سوال متوجه شدیم که مقدار پیام m دارای مقداری متن اضافی ثابت قبل از فلگ اصلی است که باعث می شود هنگام تبدیل m به عدد، ارقام آن تا حد زیادی ثابت باقی بماند. بنابراین می توانیم m را به صورت جمع دو عدد m1 و m2 مانند فرمول زیر بنویسیم. در این حالت چون m1 همیشه مقدار ثابتی است، آن را خواهیم داشت.
با اندکی دقت در کد پایتون سوال متوجه شدیم که مقدار پیام ```m``` دارای مقداری متن اضافی ثابت قبل از فلگ اصلی است که باعث می شود هنگام تبدیل ```m```به عدد، ارقام آن تا حد زیادی ثابت باقی بماند. بنابراین می توانیم ```m``` را به صورت جمع دو عدد $m1$ و $m2$ مانند فرمول زیر بنویسیم. در این حالت چون $m1$ همیشه مقدار ثابتی است، آن را خواهیم داشت.

$$
C\equiv m^5 \ mod \ n
Expand All @@ -84,7 +84,8 @@ $$
C\equiv \left (m{1} + m{2} \right)^{5} mod \ n
$$

در این رابطه ریاضی مقادیر C، m1 و n مشخص است. چون طول فلگ اصلی (m2) کمتر از 16 کاراکتر است باید در یک حلقه طول های مختلف (1-15) را برای آن امتحان می کردیم اما چون حدس زدیم که طول آن 15 خواهد بود و یک کارکتر "{" در انتهای آن است، مستقیم مقدار 16 را برای قراردادن در m در نظر گرفتیم. حال برای بدست آوردن مقدار m2 که فلگ چالش است از معادلات حلقه چندجمله ای [(polynomial ring)](https://en.wikipedia.org/wiki/Polynomial_ring) استفاده می کنیم. [sage](https://www.sagemath.org/) یک ابزار توانمند برای حل این معادلات پیشرفته است که به زبان پایتون توسعه یافته است. در نهایت با استفاده از کد زیر در sage یا import کردن کتابخانه آن می توان مقدار فلگ را بدست آورد.

در این رابطه ریاضی مقادیر $C$ ،$m1$ ،$n$ مشخص است و همچنین **طول** $m2$ داریم که این دقیقا شرایط حمله روش‌های [Coppersmith](https://en.wikipedia.org/wiki/Coppersmith%27s_attack) را به وجود می آورد. چون طول فلگ اصلی ($m2$) کمتر از 16 کاراکتر است باید در یک حلقه طول های مختلف (1-15) را برای آن امتحان می‌کردیم اما چون حدس زدیم که طول آن 15 خواهد بود و یک کارکتر "{" در انتهای آن است، مستقیم مقدار 16 را برای قراردادن در m در نظر گرفتیم. حال برای بدست آوردن مقدار $m2$ که فلگ چالش است از معادلات حلقه چندجمله ای [(polynomial ring)](https://en.wikipedia.org/wiki/Polynomial_ring) استفاده می کنیم (از روش LLL هم می توانیم ریشه‌های این معادله رو بدست بیاریم). [sage](https://www.sagemath.org/) یک ابزار توانمند برای حل این معادلات پیشرفته است که به زبان پایتون توسعه یافته است. در نهایت با استفاده از کد زیر در sage یا import کردن کتابخانه آن می توان مقدار فلگ را بدست آورد.



Expand Down
2 changes: 1 addition & 1 deletion docs/getStarted/contribution.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# نحوه همکاری
ما همه از کسانی که بخواهند با ما همکاری داشته باشند به گرمی استقبال می‌کنیم.
این همکاری می‌تواند در قالب مشارکت در بخش‌های خلاصه شود:
این همکاری می‌تواند در قالب مشارکت در بخش‌های زیر خلاصه شود:

- **نوشتن رایتاپ:**

Expand Down
4 changes: 2 additions & 2 deletions docs/getStarted/template.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ tags:

# نحوه نوشتن با فرمت Markdown

برای نوشتن رایتاپ با فرمت md می‌توانید از نرم‌افزار متن باز [Joplin](https://joplinapp.org) در ویندوز استفاده کنید. این
نرم‌افزار یادداشت برداری فرمت md و زبان فارسی را پشتیبانی می‌کند و نوشته‌ها در آن از راست به چپ نمایش داده می‌شوند.
برای نوشتن رایتاپ با فرمت md می‌توانید از نرم‌افزار یادداشت‌برداری متن باز [Joplin](https://joplinapp.org) در ویندوز استفاده کنید. این
نرم‌افزار، فرمت md و زبان فارسی را پشتیبانی می‌کند و نوشته‌ها در آن از راست به چپ نمایش داده می‌شوند.
پس از دانلود و نصب نرم‌افزار Joplin, می‌توانید جهت سهولت در نوشتن رایتاپ‌های خود، از این [نمونه رایتاپ](./Sample-writeup.zip){:download} به عنوان قالبی برای نگارش استفاده کنید.
در ادامه این بخش، انواع عناصر نوشتاری Markdown همراه با نمایش آن در سایت در دو تب جداگانه توضیح داده شده که می‌توانید از آن‌ها در نوشته‌های خود استفاده کنید. استفاده از این عناصر می‌تواند باعث ارتقا ساختار و خوانایی رایتاپ شما گردد.

Expand Down
2 changes: 1 addition & 1 deletion docs/getStarted/writing-method.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ tags:

شاید برای شما سوال شود که writeup چیست و نوشتن آن چه تاثیری خواهد داشت. writeup یا معادل فارسی آن "**نگاشته** یا **نوشته**" در دنیای امنیت، **گزارشی از نحوه حل مسئله** است که نویسنده گام به گام رویدادها و آزمایشات خود را برای حل یک چالش امنیتی بیان می‌کند. این گزارش علاوه بر اینکه کمک بسیاری به خوانندگان و افزایش تجربه آن‌ها در حل مسائل جدید می‌کند می‌تواند باعث افزایش درک خود نویسنده از آن چالش نیز شود.

این بخش به عنوان نکات نگارشی در رایتاپ نویسی توسط تیم پیشنهاد می‌شود تا نوشته‌ها به صورت یک شکل، منظم و استاندارد ارائه شوند. برای نگارش، نویسنده باید از فرمت ایجاد متن [Markdown](https://en.wikipedia.org/wiki/Markdown) یا به اختصار md استفاده کند که نحوه نگارش در این فرمت همراه با عناصر آن و مثال در [اینجا](https://flagmotori.github.io/writeups/introduction/template/) توضیح داده شده است.
این بخش به عنوان نکات نگارشی در رایتاپ نویسی توسط تیم پیشنهاد می‌شود تا نوشته‌ها به صورت یک شکل، منظم و استاندارد ارائه شوند. برای نگارش، نویسنده باید از فرمت ایجاد متن [Markdown](https://en.wikipedia.org/wiki/Markdown) یا به اختصار md استفاده کند که نحوه نگارش در این فرمت همراه با عناصر آن و مثال در [اینجا](https://flagmotori.github.io/writeups/getStarted/template/) توضیح داده شده است.
البته با خواندن چند رایتاپ قالب نوشتاری مناسب را متوجه خواهید شد.
با این حال لازم است که موارد زیر را در هنگام نگارش نوشته‌ی خود لحاظ کنید:

Expand Down
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ icon: fontawesome/regular/flag

امروزه بسیاری از رایتاپ‌ها در حوزه امنیت اغلب به زبان انگلیسی نوشته و منتشر می‌شوند. از آنجایی که ممکن است مطالعه محتوای انگلیسی برای بسیاری از افراد دشوار باشد، تصمیم گرفتیم رایتاپ‌ها را به زبان فارسی منتشر کنیم تا مخاطبین فارسی زبان فرایند حل چالش‌های مسابقات CTF را بهتر درک کنند. ما در تیم فلگ موتوری بر این باوریم که ارائه این رایتاپ‌ها و در دسترس قرار دادن آن‌ها برای همگان، می‌تواند کمبود منابع فارسی در زمینه امنیت را تا حدی جبران کند.

علاوه بر این، کوشیدیم تا بستری جذاب را برای خواندن رایتاپ فراهم کنیم. بدین منظور امکان سفارشی‌سازی برخی قسمت‌ها در سایت تعبیه شده تا تجربه متفاوتی از مطالعه رایتاپ بر اساس سلیقه شخصی خود شکل دهید. برای شخصی‌سازی سایت میتوانید به [این صفحه](getStarted/customization.md) بروید.
علاوه بر این، کوشیدیم تا بستری جذاب را برای خواندن رایتاپ فراهم کنیم. بدین منظور امکان سفارشی‌سازی برخی قسمت‌ها در سایت تعبیه شده تا تجربه متفاوتی از مطالعه رایتاپ بر اساس سلیقه شخصی خود شکل دهید. برای شخصی‌سازی سایت می‌توانید به [این صفحه](getStarted/customization.md) بروید.

10 changes: 10 additions & 0 deletions docs/osint/Tools/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# ابزارهای مفید برای حل چالش ها

سایت های آرشیو :

archive.ph

archive.org


:triangular_flag_on_post:
Loading

0 comments on commit 17e5eee

Please sign in to comment.