0
02128428905

آموزش ساخت شل معکوس (reverse shell) با زبان C

 

سلام خدمت تمامی کاربران عزیز وبسایت تیم امنیتی اولترا

 

بیشتر فریم ورک های تست نفوذ مثل متاسپلویت و امپایر معمولا میان سرور و هسته رو با یک زبان اسکریپت نویسی مثل پایتون یا روبی و… مینویسن ولی پیلود یا همون سورس کلاینت رو میان با زبان هایی مثل سی یا سی پلاس پلاس و… مینویسن ما هم توی این اموزش میام سرور رو با پایتون مینویسم و کد کلاینت رو با سی مینویسیم

 

 

 

در عکس بالا در خط ۱ ماژول سوکت رو فرخوانی کردیم که کلاس socket در اون وجود داره در خط ۲ یک شی از کلاس socket تعریف کردیم وقتی هیچی پارامتری وارد نمیکنیم دیفالت میاد ایپی ورژن چهار رو انتخاب میکنه و پروتکل tcp در خط ۳ با استفاده از متد bind ایپی و پورتی که میخوایم لیسن کنیم رو مشخص کردیم در خط ۴ با استفاده از متد listen مشخص کردیم که فقط یک کلاینت به ما وصل بشه و در خط ۵ با استفاده از متد accpept منتظر میمونیم که کلاینت کانکت بشه در خط ۶ هم ایپی و پورتی که کلاینت کانکت شده رو چاپ میکنیم در خط ۷ یک حلقه بی نهایت تعریف کردیم و در خط ۸ یک دستور از کاربر میگیریم چون ورودی تابع send از نوع bytes هست با استفاده متد encode اون رو به bytes تبدیل میکنیم و میفرستیم برا کلاینت در خط ۱۰ هم منتظر میمونم که نتیجه اجرا دستور فرستاده بشه و بعد چاپش کنیم

 

این کد سرور بود که خیلی ساده بود 🙂 حالا باید کد کلاینت رو رو بنویسیم

 

 

در خط اول کتابخانه stdio که برای ورودی و خروجی استاندارد استفاده میشه رو فراخوانی کردیم برای کار با حافظه پویا به توابع malloc و free نیاز داریم پس باید کتابخانه stdlib رو فرخوانی کنیم که در خظ ۲ این کارو کردیم در خط ۳ کتابخانه string.h که برای کار با استرینگ ها هستش رو فراخوانی کردیم در خط ۴ in.h رو فرخوانی کردیم که در این هدر ما به sockaddr_in برا تعریف سوکت نیاز داریم در خط ۵ هم socket.h رو فراخوانی کردیم که توابع این کتابخانه برای دریافت و فرستادن دیتا مورد استفاده قرار میگیرند

 

حالا باید سوکت خودمون رو تعریف کنیم

 

 

در خط ۹ متغیر از نوع int تعریف کردیم مقداری که این متغیر قرار بگیره یک هندل برای سوکت هست که ما با استفاده از این مقدار میتونیم به ایپی و پورتی که مشخص کردیم دیتا بفرستیم یا بگیریم در خط ۱۰ با استفاده از تابع socket دو مقدر AF_INET که یعنی ایپی ورژن چهار و SOCK_STREAM رو به تابع فرستیم و تابع هندلی رو میفرسته و در متغیر s قرار میگیره

 

در ادامه باید ایپی و پورت دلخواه وصل بشیم

 

 

در خط ۱۱ و ۱۲ دو متغیر تعریف کردیم که مقدارشون ایپی و پورت هست که میخوایم بهش وصل بشیم برای ست کردن ایپی و پورت از تابع connect استفاده میکنیم که پارامتر های اون هندل سوکت و ساختار sockaddr هستش پس ما باید متغیر از جنس sockaddr تعریف کنیم که این کارو رو در خط ۱۳ انجام دادیم در خط ۱۴ نوع ایپی و در خط ۱۵ ایپی که میخوایم بهش وصل بشیم و در خط ۱۶ پورت رو ست کردیم در خط ۱۷ هم با استفاده از تابع connect به سرور وصل میشیم

 

حالا باید کدی بنویسیم که دستور رو از سرور بگیره اجرا کنه و نتیجه رو بفرسته برای سرور

 

 

در خط ۱۹ دو اشاره گر از جنس از char تعریف کردیم و در خط ۲۰ و ۲۱ یک کیلوبایت از حافظه هیپ رو بهشون اختصاص دادیم در خط ۲۲ هم اشاره گری از جنس FILE تعریف کردیم که برای کار با فایل های استفاده میشه در خط ۲۳ یک حلقه بینهایت تعریف کردیم و در خط ۲۵ دستور رو از سرور میگیریم و در cmd ذخیره میکنیم در خط ۲۶ دستور رو اجرا میکنیم و خروجی تابع popen که یک FILE* هست رو در fp میگذاره در خط ۲۷ خروجی رو با استفاده تابع fgets میخونیم و در buf ذخیره میکنیم در خط ۲۸ هم خروجی میفرستیم در خط ۲۹ و ۳۰ هم خروجی و دستوری که فرستاده شد رو پاک میکنیم

 

حالا بیایم کدهایی که نوشتیم رو اجرا کنیم 🙂

 

 

 

امیدوارم که از این آموزش هم لذت کافی رو برده باشید

 

امتیاز به این پست از 1 تا 5
در حال ارسال
نظرات کاربر
3.5 (2 آرا)
دیدگاه کاربران
  • mohammad 24 ژانویه 2021

    عالی بود 👌👌

  • HIDEN 28 ژانویه 2021

    ممنون

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دوستان عزیزی که بسته های آموزشی ما رو خریداری کردن برای اطلاع از آپدیت ها و پشتیبانی در کانال اطلاع رسانی عضو شوندکلیک کنید