The Commit
Kanalga Telegram’da o‘tish
توسعه میدیم و توی راه توسعه چالش ها و مشکلات رو به اشتراک میزاریم (: @TheLinuxGP
Ko'proq ko'rsatish472
Obunachilar
+124 soatlar
+97 kun
+3130 kun
Postlar arxiv
472
این خیلی باحاله
گام به گام با انیمیشن هر پروتکل رو توضیح میده که چطور کار میکنه
https://protocol-explorer-alpha.vercel.app/
472
یه مدتیه داریم روی یه پروژه شخصی به اسم ZirGozar کار میکنم.
زیرگذر یه کلاینت دسکتاپ برای Xray هست که با Go و Wails توسعه دادیم. هدف این بوده که استفاده از Xray رو سادهتر کنیم؛ بدون درگیری با دستورات ترمینال و تنظیمات پیچیده، فقط کانفیگت رو وارد کنی و متصل بشی.
پروژه برای Windows، Linux و macOS توسعه داده شده و قراره تجربهای ساده و یکپارچه روی هر سه سیستمعامل ارائه بده.
هنوز کلی جای پیشرفت داره، ولی خوشحالم که تونستم این ایده رو به یه محصول واقعی تبدیل کنم.
🔗 GitHub: github.com/MamdMehrabi/ZirGozar
472
چطور هزاران دستگاه در یک شبکه محلی (LAN) میتونن با استفاده از یک IP عمومی به اینترنت متصل بشن؟
برای درک این موضوع، فرض کنین چندین دستگاه مثل لپتاپ، تلفن همراه و کامپیوتر به یک روتر متصل هستن. هر کدوم از این دستگاهها IP خصوصی خودشون رو دارن.
مثلا:
Laptop: 192.168.1.10
Phone: 192.168.1.11
Desktop: 192.168.1.12
این آدرسها برای شناسایی دستگاهها در شبکه محلی استفاده میشن، اما در اینترنت عمومی قابل مسیریابی نیستن.
اینجاست که NAT وارد عمل میشه.
فرض کنین لپتاپ ما میخواد به سرور گوگل متصل بشه. بستهای که ارسال میکنه شامل دو آدرس IP هست:
- آدرس مبدا (Source IP): آدرس دستگاهی که بسته رو ارسال میکنه.
- آدرس مقصد (Destination IP): آدرس سروری که بسته به سمت اون ارسال میشه.
برای مثال:
Source IP: 192.168.1.10
Destination IP: 142.250.185.46
وقتی این بسته به روتر میرسه، روتر آدرس مبدا رو با IP عمومی خودش جایگزین میکنه. آدرس مقصد تغییری نمیکنه.
فرض کنین IP عمومی روتر 203.0.113.5 باشه. بعد از انجام NAT، اطلاعات بسته به این شکل درمیاد:
Source IP: 203.0.113.5
Destination IP: 142.250.185.46
حالا بسته با IP عمومی روتر به سمت سرور گوگل ارسال میشه و پاسخ هم به همین IP عمومی برمیگرده.
اما یه سوال وجود داره: اگه چند دستگاه بهصورت همزمان به اینترنت متصل بشن روتر چطور تشخیص میده هر پاسخ متعلق به کدوم دستگاهه؟
اینجا مفهوم PAT یا Port Address Translation مطرح میشه.
اینجا روتر علاوه بر آدرس IP، شماره پورت مبدا رو هم تغییر میده تا بتونه ارتباطات مختلف رو از طریق یک IP عمومی مدیریت کنه.
برای مثال، فرض کنین لپتاپ و تلفن همراه هر دو از پورت مبدا یکسانی برای اتصال به یک سرور استفاده میکنن:
Laptop:
192.168.1.10:51500
Phone:
192.168.1.11:51500
روتر میتونه این دو ارتباط رو به شکل زیر ترجمه کنه:
Laptop:
203.0.113.5:40001
Phone:
203.0.113.5:40002
به این ترتیب، هر دو دستگاه از یک IP عمومی استفاده میکنن، اما پورتهای متفاوتی دارن.
روتر اطلاعات این ترجمهها رو در جدولی به نام NAT Translation Table نگه میداره. وقتی پاسخها از اینترنت برمیگردن، با بررسی اطلاعات ارتباط، مقصد داخلی هر بسته رو پیدا میکنه و اون رو به دستگاه مربوطه تحویل میده.
این روش که بهش PAT یا NAT Overload هم گفته میشه، یکی از مکانیزمهاییه که امکان اشتراک یک IP عمومی بین تعداد زیادی دستگاه رو فراهم میکنه.
472
Repost from Kamandlou
🚨 از خراب شدن SSH توسط AI تا گرفتن Root RCE از طریق S-UI!
چند روز پیش داشتم با OpenCode روی یکی از سرورهام کار میکردم. قرار بود یه سری تنظیمات شبکه و SSH انجام بده، ولی AI با تغییر اشتباه تنظیمات
ssh.socket در Ubuntu 24.04 عملاً دسترسی SSH سرور رو قطع کرد!
مشکل اینجا بود که به کنسول VPS هم دسترسی نداشتم و تنها چیزی که همچنان در دسترس بود، پنل S-UI v1.3.7 بود.
برای برگردوندن دسترسی، شروع کردیم به بررسی سورسکد S-UI و APIهای اون. نتیجه خیلی جالبتر از چیزی شد که انتظار داشتم!
🔍 آسیبپذیری چی بود؟
Authenticated Arbitrary File Write + Log Injection → Root Remote Code Execution (RCE)
در بررسی متوجه شدیم که S-UI اجازه تغییر تنظیمات هسته Sing-box رو از طریق API میده.
یکی از این تنظیمات، پارامتر log.output هست که مسیر فایل خروجی لاگ رو مشخص میکنه.
مشکل این بود که مسیر فایل بهاندازه کافی محدود نشده بود و هسته Sing-box هم با سطح دسترسی Root اجرا میشد.
بنابراین میشد از طریق تنظیمات پنل، هسته رو وادار کرد که فایل لاگ رو در مسیری خارج از دایرکتوری معمول برنامه ایجاد کنه.
اما صرفاً نوشتن فایل برای اجرای کد کافی نبود!
⚙️ زنجیره Exploit
1. Arbitrary File Write
با تغییر log.output در کانفیگ Sing-box، خروجی لاگ به یک فایل با پسوند .pth در مسیر کتابخانههای Python هدایت شد.
2. Log Injection
در مرحله بعد، از فیلد tag مربوط به Inboundها استفاده شد.
این فیلد امکان وارد کردن کاراکتر Newline رو داشت و مقدارش میتونست وارد خروجی لاگ بشه.
در نتیجه، امکان تزریق یک خط حاوی دستور Python به فایل لاگ ایجاد شد.
3. Python .pth Execution
فایلهای .pth در مسیرهای پردازششده توسط ماژول site پایتون رفتار خاصی دارن.
خطوطی از این فایلها که با import شروع میشن، هنگام راهاندازی مفسر Python میتونن اجرا بشن.
اینجا با ترکیب File Write و Log Injection، فایل خروجی لاگ به یک نقطه اجرای کد تبدیل شد.
4. Triggering RCE
روی همون سرور یک ربات تلگرام داشتم که برای پردازش لینکهای SoundCloud از yt-dlp استفاده میکرد.
yt-dlp یک برنامه Python-based هست و در این سناریو اجرای اون باعث پردازش فایل .pth شد.
با ارسال یک لینک به ربات، کدی که داخل فایل قرار گرفته بود اجرا شد و دستورات مربوط به تعمیر سرویس SSH رو با دسترسی Root اجرا کرد!
✅ نتیجه
فایل تنظیمات اشتباه ssh.socket حذف شد، تنظیمات systemd مجدداً بارگذاری شدند و سرویس SSH دوباره بالا اومد.
بعد از اون تونستم مجدداً از طریق پورت 22 به سرور SSH بزنم.
یعنی عملاً برای برگردوندن دسترسی سرور خودم، از طریق یک زنجیره آسیبپذیری در S-UI به Root RCE رسیدم!
⚠️ نکته امنیتی
این آسیبپذیری روی S-UI نسخه v1.3.7 مشاهده شد.
این یک Unauthenticated RCE نبود؛ در سناریوی تستشده، دسترسی احرازشده به API مدیریتی پنل وجود داشت.
همچنین اجرای کد به وجود یک فرآیند Python با سطح دسترسی مناسب وابسته بود.
با این حال، زنجیرهای که از یک تنظیم ظاهراً ساده لاگ شروع بشه و به اجرای کد در سطح سیستمعامل برسه، مسئله امنیتی مهمیه.
این اتفاق دوباره یادآوری کرد که:
- دادن دسترسی Root به AI Agent بدون کنترل تغییرات چقدر میتونه خطرناک باشه.
- اجرای پنلهای مدیریتی با دسترسی Root چه ریسکهایی ایجاد میکنه.
- اعتبارسنجی مسیر فایلها و ورودیهایی که وارد لاگ میشن چقدر اهمیت داره.
خلاصه اینکه هوش مصنوعی اول دسترسی SSH سرورم رو خراب کرد، بعد برای جبران اشتباهش از یه زنجیره آسیبپذیری استفاده کرد تا دوباره دسترسی Root رو برگردونه! :)
#CyberSecurity #RCE #Linux #BugBounty #AI #SUI
@Kamandlou472
اگر یه کلاینت xray یا کلا کلاینت برای دور زدن فیلترینگ مینوشتین چه اسمی براش میزاشتین ( خودم هیچ ایده ای ندارم دیگه )
472
اگر دوست دارین یه مروری به اینترنت ایران داشته باشین حتما اینو پیشنهاد میدم خیلی زیبا توضیح داده شده چه اتفاقاتی افتاده.
472
دوستان چیزی از طرف من تایید یا رد نشده و فقط دوست داشتم کمک کوچیکی کرده باشم پس اگر شما میخواید کمک کنین لطف کنین برین پیوی و مدارک دقیق تری ازشون دریافت کنین که ناراحتی پیش نیاد این وسط.
472
Repost from Course One
سلام عزیزانم پدرم بیماری شدید قلبی داره و داخل قلبش لخته وجود داره. حالش خیلی وخیمه و باید هرچه زودتر عمل قلب باز بشه، اما توان مالی برای هزینههای درمانش رو نداریم. من یه خواهر کوچیکتر دارم و جز پدرم کسی رو نداریم. از شما مردم مهربون خواهش میکنم برای نجات جون پدرم هر کمکی که میتونید انجام بدید. حتی کمکهای کوچیک شما برای ما امید بزرگیه. 🙏🏻 من حتی پدرم تو قلبش باتری هم داره قلبشون با باتری کار میکنه چند ماه پیش هم عمل شدن انژیو شدن ولی درمان نشدن کامل پول عملش ۷۰میلیون تومانه شما رو به عزیزترین کسانتون قسم دعا و کمک کنید به ما پدرم درمان بشه من تو این دنیا جز پدرم کسی دیگه ای رو ندارم شب روز دعاتون میکنم خیلی ممنونم ازتون شماره کارت به اسم پدرم محرم معصومی 6104331182780537 6037991770752156 6037997924427918 اگر کمک دیگع ای خواستید بکنید تو بیمارستان تو همه چی به این آیدی پیام بدید دخترشون هستم @Masoomiisaa
472
کلاهبرداری جدید ( قبلا بوده به روش های مختلف )
تحت هیچ شرایطی برای کسی کریپتو نخرین ( ارز دیجیتال )
توی لایو جرجندی بودم یه فردی بود که بهش گفته بودن ما براتون ریال میزنیم شما تبدیل به کریپتو کنین و این دوستمون با نام و کارت خودش این کارو انجام داده و متاسفانه مبلغی که به کارتش زده شده فیشینگ و دزدی بوده و الان پای خودش گیره این وسط و پولی هم که تبدیل شده رفته.
472
یکی از چیزایی که موقع تایپ کردن فارسی و انگلیسی اذیتکنندهست اینه که یه جمله رو کامل بنویسیم و آخرش بفهمیم کیبورد روی زبان اشتباهی بوده
این مخزن یه ابزار کوچیک برای macOS داره که این اشتباه رو تشخیص میده و با فشردن Tab متن رو به زبان درست تبدیل میکنه. بدون اینکه لازم باشه پاکش کنیم و دوباره بنویسیم.
لینک مخزن گیتهاب:
https://github.com/sina-developer/LayoutFixer
472
یکی از چیزایی که توی طراحی API یا اندپوینت مهمه ولی کم بهش توجه میشه، تفکیک درست خطاهای احراز هویت و مجوزه.
401 یعنی "تو کی هستی؟" — اعتبارنامه ندادی یا منقضی شده ( Unauthorized )
403 یعنی "میدونم کی هستی، ولی اجازهی این کارو نداری" ( Forbidden )
چرا مهمه؟ چون کلاینت باید بدونه دوباره لاگین کنه (401) یا دسترسیش رو ارتقا بده (403). اگه همه رو 401 برگردونی، کلاینت توی حلقهی بیپایان گیر میکنه (:
یه نکتهی امنیتی هم هست: برای منابعی که کاربر نباید بدونه وجود دارن، بهتره 404 بدی نه 403.
این تفکیک باعث میشه کلاینت بدونه باید دوباره لاگین کنه یا دسترسیش رو ارتقا بده — و از حلقهی بیپایان توکنگیری جلوگیری میشه.
472
فک کن روی ترافیکی که میدی ضریب بزنی ( همین کار یعنی ته حروم زادگی )
بعدشم همون ترافیکی که میدی رو گرونش کنی ( فحش خوبی براش بلد نیستم )
472
الان یه ویدیو در مورد اورکلاک کردن و تنظیم فن گرافیک انویدیا توی لینوکس گرفتم دوست داشتین ببینین
مخصوصا اون دوستانی که گرافیکشون توی لینوکس تحت فشاره ( گیم یا ران کردن llm )
مشاهدهی ویدیو
472
یکی از چیزایی که توی یادگیری DevOps سخته اینه که بین این همه ابزار و تکنولوژی بدونی چی رو باید یاد بگیری و از کجا شروع کنی.
این مخزن یه مسیر ۹۰ روزه برای یادگیری Cloud Engineering داره؛ از Linux و Networking گرفته تا AWS، Docker، Kubernetes، Terraform و CI/CD.
در کنارش تمرین و پروژه هم داره تا فقط درگیر خوندن مطالب و دیدن آموزشها نباشین.
داشتن یه مسیر مشخص خیلی بهتر از اینه که هر روز سراغ یه ابزار جدید بریم و ندونیم چطور باید چیزهایی که یاد گرفتیم رو کنار هم قرار بدیم. لینک مخزن گیتهاب:
https://github.com/ahmadjawad533/90-days-of-cloud-engineering
472
حتماً براتون پیش اومده که بعد از نصب ویندوز کنار لینوکس، ویندوز میاد اولویت بوت رو میدزده و دیگه خبری از منوی GRUB نیست! یا برعکس، میخواید یه توزیع خاص مثل ParchLinux همیشه اولویت اول باشه.
امروز یه چالش کوچیک ولی خیلی کاربردی رو با efibootmgr حل کردیم.
فرض کنید توی ترمینال این دستور رو میزنید تا ببینیم وضعیت چیه:
sudo efibootmgr
توی خروجی یه چیزی شبیه به این میبینیم:
BootCurrent: 0005 (یعنی الان از ParchLinux بالا اومدیم) BootOrder: 0002,0005,0001,0000 (ترتیب فعلی بوت) Boot0001: مربوط به GRUB اصلیه. Boot0000: مربوط به Windows Boot Manager.خب، اینجا ویندوز اولویت آخر رو داره، ولی ما میخوایم GRUB (یعنی همون 0001) همیشه اول لیست باشه تا منوی بوت لینوکس بیاد. راهحل چیه؟ کافیه توی ترمینال این دستور رو بزنید:
sudo efibootmgr -o 0001,0002,0005,0000این دستور دقیقا چیکار میکنه؟ سوییچ -o مخفف --bootorder هست و به سیستم میگه لیست جدید بوت رو با این ترتیب تنظیم کن. ما عدد 0001 (GRUB) رو بردیم اول لیست، بعد بقیه رو چیدیم و ویندوز (0000) رو گذاشتیم آخر. نکته مهم: اعداد Boot روی هر سیستمی ممکنه فرق داشته باشه، پس حتماً از خروجی efibootmgr خودتون اعداد رو بردارید! یه ترفند باحال دیگه: اگه نمیخواید اولویت همیشگی رو عوض کنید و فقط میخواید فقط برای بوت بعدی GRUB بیاد بالا، از این دستور استفاده کنید: sudo efibootmgr -n 0001 (برای وقتی که فقط یه بار میخواید وارد لینوکس بشید و بعدش برگرده به حالت قبل، عالیه!) بعد از اجرای دستور، یه بار دیگه sudo efibootmgr رو بزنید تا مطمئن بشید BootOrder به درستی تغییر کرده.
472
اگر شما هم دوس دارین دسترسی برای قابلیت Serverless تلگرام رو بگیرین کافیه از طریق بات @BotFather یه بات بسازین و بعدش مینی اپ بات فادرو بیارین و باتی که ساختین رو انتخاب کنین و گزینه serverless رو فعال کنین تا برین توی لیست انتظار که بعدا تایید کنه دسترسیتونو
