در ادامه ی پست قبل - ارتباط دو شبکه ی مجزا در اینترنت با استفاده از پایتون :: Mr Python | مستر پایتون

در ادامه ی پست قبل - ارتباط دو شبکه ی مجزا در اینترنت با استفاده از پایتون

  • ۱۷۸۲

در ادامه ی پست قبل - ارتباط دو شبکه ی مجزا در اینترنت با استفاده از پایتون

درود به همه !

 

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

قانون :‌ ماده729ـ هرکس به طور غیرمجاز به داده ها یا سامانه های رایانه ای یا مخابراتی که به وسیله تدابیر امنیتی حفاظت شده است دسترسی یابد، به حبس از نود و یک روز تا یک سال یا جزای نقدی از پنج میلیون (5.000.000) ریال تا بیست میلیون (20.000.000) ریال یا هر دو مجازات محکوم خواهدشد.

خب پیش نیاز این پست ، پست قبلی هستش پس اگه پست قبلی رو نخوندین حتما برین و اول پست قبل رو بخونین .

سورس پست قبل به صورت زیر بود :

from http.server import SimpleHTTPRequestHandler as handler
from socketserver import TCPServer

httpd = TCPServer(("" ,8000) , handler) # Make Handler on port 8000

httpd.serve_forever() # Start Handler

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

طرز دسترسی به سیستم هدف این بود که هکر وارد مرورگر خود میشد و در قسمت آدرس بار مرورگر ، IP سیستم هدف به همراه پورتی که وب سرور روی آن اجرا بود را وارد میکرد و در نتیجه وصل میشد به وب سرور . اما IP سیستم هدف یک IP لوکال یا محلی بود یعنی هکر باید در همان شبکه ای که سیستم هدف واقع است ، قرار داشته باشد . خب این موضوع کار را مشکل میکند . شاید در پروژه ای موقعیت طوری باشد که هکر و سیستم هدف در دو شبکه ی مجزا باشند !‌ آن وقت چه باید کرد ؟؟

راه حل این مشکل ، port forwarding است .

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

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

port forwarding به طور خلاصه روشی است که ما میتوانیم به هر یک از دستگاه های داخل شبکه یک IP عمومی اختصاص دهیم و درنتیجه بتوانیم از طریق اینترنت جهانی به آن دستگاه دسترسی داشته باشیم .

برای اینکه بتوانیم اسکریپتی که در پست قبل نوشتیم رو ، در سطح اینترنت جهانی به کار ببریم باید port forwarding انجام دهیم . برای انجام پورت فورواردینگ روش های مختلفی هست . برای مثال میتوانید در خود تنظیمات روتر شبکه اینکار را انجام دهید ولی ما امروز برای انجام پورت فورواردینگ از ابزاری به نام ngrok استفاده میکنیم .

ابزار ngrok وقتی در یک سیستم اجرا میشود ، میتواند یک آی پی آدرس عمومی به همان سیستم اختصاص دهد . در ادامه این ابزار رو تست میکنیم و بهتر متوجه میشید .

ابزار ngrok برای سیستم عامل های مختلف موجود هستش . برای دانلود به ‌آدرس زیر مراجعه کنید :

https://ngrok.com/download

اگر سیستم ویندوزی دارید میتوانید با انتخاب گزینه ی windows در لینک بالا ، نسخه ی ویندوزی این ابزار رو دانلود کنید . همینطور اگر سیستم لینوکسی دارید میتوانید با انتخاب گزینه ی linux نسخه ی لینوکسی ابزار رو دانلود کنید ولی برای نصب در لینوکس میتوانید از خود پکیج منیجر لینوکس هم استفاده کنید . برای مثال میتوانید با دستور زیر این ابزار را در اوبونتو نصب کنید :

MrPython@debian:~$ sudo apt install ngrok

پس از نصب این ابزار میریم سراغ تستمون . در ابتدا وب سروری که در پست قبل نوشتیم رو اجرا میکنیم :

طبق سورسی که نوشته بودیم وب سرور روی پورت ۸۰۰۰ اجرا میشد . حال با اجرای دستور زیر در خط فرمان سیستم هدف ، ابزار ngrok یک لینک  Public به پورت ۸۰۰۰ روی سیستم هدف اختصاص میده:

MrPython@debian:~$ ngrok http 8000

پس از اجرای دستور بالا ، خط فرمان به شکل زیر در می آید . همینطور که میبینید لینک Public که ابزار اختصاص داده در تصویر مشخص شده .:

خب حالا تا وقتی که این دستور در حال اجرا هستش میتونید از لینک  public که در تصویر بالا مشخص شده  برای دسترسی به وب سرور ایجاد شده استفاده کنید. چون لینک public است میتوان از هر شبکه ی دیگری آن را باز کرد و پس از باز کردن لینک ، مانند تصویر زیر به وب سرور دسترسی پیدا خواهیم کرد :

خب این از طرز کار اولیه ی ابزار ngrok بود که وقتی دستور مربوطه به ngrok در بالا رو در سیستم هدف  اجرا کردیم ، یک لینک public برای ما درست کرد که ترافیک http انتقال میده و وصله به پورت ۸۰۰۰ روی سیستم هدف. همینطور میتوانیم با دستور های زیر به ترتیب ترافیک های tcp , ftp و ... رو نیز انتقال بدیم :(البته بگم برای استفاده از پروتکل های دیگر مثل tcp باید در ابتدا در خود سایت ngrok اکانت بسازید و سپس یک authentication token بگیرید و در ابزار ثبت کنید .)

MrPython@debian:~$ ngrok ftp 8000
MrPython@debian:~$ ngrok tcp 8000
MrPython@debian:~$ ngrok <Protocol> <PORT>

اما تا اینجا ابزار ngrok رو در ترمینال یا خط فرمان استفاده میکردیم

برای یادگیری بیشتر ngrok از رفرنس اصلی ngrok در اینترنت استفاده کنید . در پایتون کتابخونه ای به نام pyngrok موجود هستش که به ما اجازه میدهد از ngrok در پایتون نیز استفاده کنیم . برای نصب این کتابخانه از pip استفاده میکنیم :

نصب pyngrok در لینوکس :

MrPython@debian:~$ sudo pip3 install pyngrok

نصب pyngrok در ویندوز :

C:\> pip install pyngrok

 تکه کد زیر یک لینک public برای پورت ۸۰۰۰ میسازد :

from pyngrok import ngrok

# usage : ngrok.connect(PORT , PROTOCOL)

public_url = ngrok.connect(8000,"http")

print("Public URL : " + public_url)

ngrok.disconnect(public_url) # Disconnect From NGROK

توضیح سورس کد : در ابتدا از کتابخونه ی pyngrok ، کلاس ngrok رو ایمپورت کردیم .

سپس در خط بعد با استفاده از تابع connect یک لینک عمومی برای پورت ۸۰۰۰ و پروتکل http ایجاد کردیم و ریختیم داخل متغییر public_url .

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

برای یادگیری بیشتر در مورد کتابخونه ی pyngrok به رفرنس اصلیش مراجعه کنید . لینک زیر :

https://pyngrok.readthedocs.io/en/latest/

تا اینجا فهمیدیم کاربرد ابزار ngrok چیه و پورت فورواردینگ چه شکلیه . میتونید تکه کد بالا که با استفاده از pyngrok پورت فورواردینگ انجام میداد رو با اسکریپت های خود ترکیب کنید . این ابزار در نوشتن پیلود های reverse_tcp میتواند کاربرد فوق العاده ای داشته باشد . درمورد پیلود reverse_tcp بخونید :‌ (آموزش ساخت پیلود Reverse_TCP در پایتون)

 

و در نهایت : (هرگونه سوء استفاده بر عهده کاربر میباشد .)

 

یا حق !

Telegram Channel : @mrpythonblog

  • آموزشتون عالی بود👏

    من با این اموزش به جز کنترل کامپیوتر به یکار دیگه هم کمکم کرد چون من یه وب سرور ساده با فلاسک در پایتون ساخته بودم و میخاستم با یه دستگاه ازش استفاده کنم 

    بعد اومدم با همین روش ادرس پابلیک ساختم و پورتم وصل کردم و ...

    در کل خیلی خوب بود

    پاسخ:
    درود . ممنونم و خواهش میکنم .
    خوشحالم مفید واقع شده :)
  • سلام من خیلی از شبکه و ای پی سردر نمیارم 

    برا همین یه سوال دارم

    توی پست کیلاگر که باsocketکلید ها رو ارسال میکرد باید ای پی هکر خصوصی باشه با عمومی؟

    یا باید مثل همین پست هکر ای پی عمومی بسازه؟

    اگر میشه توضیح بدین

    پاسخ:
    درود بر شما . 
    ببینید اگر میخواید در زمینه های هکینگ جلو برید حتما باید مباحث شبکه رو دنبال کنید و یاد بگیرید . 
    ولی در کل ببینید ما دونوع آی پی میتونیم داشته باشیم . 1 - آیپی خصوصی 2 - آیپی عمومی . هر کامپیوتر یا هر دستگاه شبکه داخل شبکه ی داخلی خودش یک آی پی خصوصی داره که از رنج های خاصی از آی پی ها هستند مثلا (192.168.....  یا 10.0....  و غیره) . این آیپی ها در حالت عادی فقط داخل شبکه ی داخلی برای کامپیوتر های دیگه قابل دسترسی هستند . ولی در اصل هر کامپیوتر میتونه یک آی پی عمومی یا public هم داشته باشه که این آی پی از طریق کل فضای اینترنت میتونه برای همه قابل دسترسی باشه . ولی نکته ای که هست اینه که امروزه اینطوری نیست که هر کدوم از کامپیوترامون یه آی پی عمومی داشته باشن چون آی پی های ورژن 4 رو به اتمام هستند . در این روز ها با استفاده از پروتکلی به نام NAT کل شبکه ی داخلی یک خونه میتونه یه آیپی پابلیک داشته باشه که تمام دستگاه های داخل اون شبکه داخلی از همین آی پی برا ارتباط با بیرون شبکه داخلی خودشون استفاده میکنن . 
    حالا با استفاده از روشی با عنوان پورت فورواردینگ میتونیم آی پی های خصوصی داخل یک شبکه رو مانند آی پی های عمومی در سطح اینترنت قابل دسترسی کنیم . 
    در این روش معمولا هکر میاد روی آی پی خودش در شبکه پورت فورواردینگ انجام میده و اسکریپت هایی مثل پیلود های reverse_tcp رو میتونه اجرا کنه . 

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

    من انچنان با پایتون اشنایی خوبی ندارم

    خاطرم هست توی یه دوره اموزشی برنامه هایی که مینوشتیم رو کنارش پیش نیاز هاشو با خود برنامه (برنامه مخرب) مچ میکردیم مثلا

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

    الان هم همین مورد هست برنامه های پایتون رو چطوری هدف اجرا کنه وقتی پایتون نصب نداره؟

     

    پاسخ:
    درود بر شما . ببینید اسکریپت های پایتون که ما مینویسیم فقط فایل های اسکریپتی و متنی ساده هستند و تا وقتی که خود پایتون روی سیستم هدف نصب نباشه این اسکریپت ها قابل اجرا نیستند . ولی هر سیستم عاملی یه سری فایل اجرایی واسه خودش داره . مثلا توی ویندوز فایل های اجرایی با فرمت .exe شناخته میشن . برای اینکه شما کاری کنی که اسکریپتت بتونه روی هر سیستم عاملی اجرا بشه باید اونو تبدیل به بسته ی اجرایی برای سیستم عامل هدف کنی . مثلا فایل اسکریپت که فرمتش py هست رو تبدیل به فایل اجرایی exe کنی . اینطوری دیگه نیازی نیست پایتون روی سیستم هدف نصب باشه و .... 
    برای تبدیل اسکریپت پایتون به فایل اجرایی میتونین آموزش زیر رو ببینید :‌ https://mrpython.blog.ir/post/24
  • درود مهندس

    من با ngrok اشنایی داشتم از قبل منتهی از طریق توکن کار کرده بودم اما اینجا شما روش جالبی گفتین فقط ی نکته نامفهومه واسم :

    توی این خط از اموزش شما چیکار کردین دقیقا؟

    =====

    حال با اجرای دستور زیر در خط فرمان سیستم هدف ، ابزار ngrok یک لینک  Public به پورت ۸۰۰۰ روی سیستم هدف اختصاص میده:

    MrPython@debian:~$ ngrok http 8000

    =====

    مگه پورت 8000 پورتی نیست که وب سرور روی سیستم قربانی باز میکنه تا از این طریق با وب سرور ارتباط بگیریم؟ اگر درست میگم پس ngrok از کجا توی این دستور میفهمه که به کدوم کلاینت باید ای پی پابلیک رو اختصاص بده؟!!

    نمیدونم متوجه شدین یا نه بزارین بیشتر سعی کنم D:

    ان جی روک اینجا میاد یه ای پی به از طریق پورت 8000 به قربانی میده اما چطوری میفهمه قربانی کیه؟

    پاسخ:
    درود بر شما . 
    خسته نباشین 
    ببینید اگه منظورتون استفاده از ngrok برای ساخت پیلود کنترل سیستم هدف هستش باید بگم که ngrok روی سیستم قربانی اجرا نمیشه . ما از پیلود reverse tcp استفاده میکنیم . یعنی هکر میاد با استفاده از ngrok روی یک پورت دلخواه روی سیستم خودش یه لینک پابلیک میسازه . بعد ویروسی مینویسه که وقتی اجرا میشه روی سیستم هدف ، سیستمش وصل میشه به همون لینکی که ngrok برای هکر ساخته . یعنی این روند برعکسه به جای اینکه هکر به قربانی وصل بشه ، قزبانی به هکر وصل میشه . این روش خوبی های زیادی داره . مثلا اینکه فایروال ها کمتر میتونن این روشو تشخیص بدن چون خود سیستم هدف وصل شده به هکر . 
  • سلام وقتتون بخیر . یه سوالی خیلی وقته زهنمو درگیر کرده از خیلیا پرسیدم به نتیجه ای نرسیدم . راستش این ngrok به دلم نمیشینه و میخوام به صورت مستقیم با کامپیوتر هدف ارتباط برقرار کنم ینی بدون استفاده از ngrok مثل همین مرورگر ها یا مثلا نرم افزار تلگرام .  اینا که از ngrok استفاده نمیکن درسته؟ پس چه جوری کار میکنن؟ ممنون میشم به توضیح کاملی بدین

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

    اگه میخواین این مفاهیم رو بیشتر درک کنین پیشنهاد میکنم دوره های پایه شبکه رو ببینید .

    ngrok  یا هر روش ارتباطی دیگه نیازمند این هستش که شما درک نسبتا خوبی از مباحث شبکه داشته باشید . 
  • رسما ....

    من خودمو داشتم برای پورت فرواردینگ میکشتم :|||

    عاقا عالی عالییییییییییییییییییییییییییییییییییییییییییییییییییییییییییی

    البته من استفاده بد نمیکنم:) هر چند وقت یک بار هم یه نگاهی به قانون جرایم رایانه ای میندازم :))

    بچه هایی مثل همین آقا رضایی که به شما پیام دادند منو میشناسند. تا بحال کسی رو هک نکردم و اصلا دوست هم ندازم هک کنم :)

    بگذریم. من فقط مشکلم همین نحوه استفاده ngrok بود که به لطف شما حله حله :) میشه به سادگی هم یه ایمیل زد و ... که آدرس و مشخصات رو بفرسته :)

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