توضیح تصویر
  • 98XXXXXXXXXX+
  • mynymhmd2@gmail.com
  • TEHRAN-IRAN
  • 98914XXXXXXX+
تیم دکترسکیوریتی

Dr.Security Team

Android - Windows - Linux

توضیح تصویر

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

آموزش ساخت شل معکوس (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 ذخیره میکنیم در خط ۲۸ هم خروجی میفرستیم در خط ۲۹ و ۳۰ هم خروجی و دستوری که فرستاده شد رو پاک میکنیم

 

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

 

 

 

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

 
سفارش محصول
ابتدا یکبار کدامنیتی را تعویض سپس وارد کنید
 
 
تنها امکان ارسال نظر خصوصی وجود دارد
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
نظر شما به هیچ وجه امکان عمومی شدن در قسمت نظرات را ندارد، و تنها راه پاسخگویی به آن نیز از طریق پست الکترونیک می‌باشد. بنابراین در صورتیکه مایل به دریافت پاسخ هستید، پست الکترونیک خود را وارد کنید.