نویسنده: بابک حسینی نژاد

عضویت در خبرنامه
شبکه های اجتماعی
آخرین نظرات
  • ۲۲ ارديبهشت ۰۲، ۱۴:۵۱ - سردار علائی
    سرور
  • ۲۲ ارديبهشت ۰۲، ۱۴:۴۹ - سردار علائی
    سرور

 

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

 

 مترجم های (Interpreter) زبان های اسکریپتی مانند پرل و پایتون بصورت پیش در توزیع های مختلف لینوکس موجود می باشند. کالی هم از این قاعده مستثنا نیست. مترجم مربوط به زبان پایتون در کالی در دایرکتوری /usr/bin/python قرار دارد.

  • کارایی

خوب اسکریپتی که می خواهیم بنویسیم مانند دستور netcat که در اینجا توضیح دادیم عمل می کند. یعنی می خواهیم با کمک آن به یک پورت خاص مثلا پورت 80 روی یک سیستم فعال در شبکه مثلا  192.168.1.50 متصل شویم تا از باز یا بسته بودن آن مطلع شویم. 

 

  • نوشتن اسکریپت

مراحل زیر را دنبال کنید:

  1. ابتدا یک فایل جدید با نام  pythonscript.py در دایرکتوری Home و با استفاده از ویرایشگر nano* می سازیم:
 root@kali:~# nano pythonscript.sh

*قبلا هم گفتم که این فایل رو می تونید توی هر ویرایشگری که دوست دارید بنویسید.

  1. در خط اول محل مترجم پایتون را وارد می کنیم:
#!/usr/bin/python 
  1.  با دستورات زیر دو متغییر به نام های ip و port برای گرفتن آدرس سیستم و پورتی که می خواهیم امتحان کنیم ایجاد می کنیم و از کاربر می خواهیم که آنها را وارد کند. فایل را بصورت زیر ویرایش کنید:
#!/usr/bin/python
ip = raw_input("Enter the ip: ")
port = input("Enter the port: ")

 همانطور که مشاهده می کنید از دو دستور raw_input و input استفاده کرده ایم. دستور raw_input در پایتون برای گرفتن مقادیر بصورت String و input برای گرفتن مقادیر بصورت عددی (INT) است. در خط سوم هم چون می خواهیم مقدار پورت را بصورت عددی ذخیره کنیم از input استفاده می کنیم.

  1. حالا فایل را بصورت زیر ویرایش می کنیم تا اسکریپت ما بتواند با متغییر های ذخیره شده به سیستم مورد نظر متصل شده و باز یا بسته بودن پورت را چک کند:   
#!/usr/bin/python

import socket

ip = raw_input("Enter the ip: ")
port = input("Enter the port: ")

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if s.connect_ex((ip, port)):
        print "Port", port, "is closed"
else:
        print "Port", port, "is open"

 

در خط دوم از دستورت import برای وارد کردن کتابخانه socket استفاده کرده ایم. کتابخانه socket در پایتون برای انجام کارهای مربوط به شبکه مثل باز کردن یک سوکت بکار گرفته می شود.

 

در خط پنجم با استفاده از کتابخانه socket یک سوکت TCP برای ارتباط با شبکه روی کامپیوتر خود باز کرده و در متغییر ذخیره می کنیم*.

*دستور socket.socket(socket.AF_INET, socket.SOCK_STREAM) برای باز کردن یک سوکت TCP در پایتون استفاده می شود.

 

در خط ششم از یک دستور شرطی (if...else) استفاده کرده ایم که به یک پورت روی ip داده شده متصل می شود و باز یا بسته بودن آن را چک می کند. همانطور که می بینید برای این کار از دستور connect_ex استفاده کرده ایم.

برای بهتر متوجه شدن دستور شرطی بالا این نکته را در نظر بگیرید که سوکت باز شده و ذخیره شده در s، می تواند جهت اتصال به پورت روی ip تعیین شده از دو دستور connect و connect_ex در پایتون استفاده کند. این دو دستور یک کار را انجام می دهند و تنها تفاوت آنها این است که:

 

  • دستور connect در صورت اتصال هیچ و در صورت عدم اتصال یک نوشته یا string را به کاربر بر می گرداند.
  • ولی دستور connect_ex در صورت عدم اتصال یک کد خطا و در صورت اتصال عدد 0 را برای ما می فرستد.

 

چون ما می خواهیم در صورت اتصال هم از وضعیت سوکت مطلع شویم از دستور connect_ex استفاده می کنیم. حالا اگر خروجی ما در خط ششم 0 بود با "Port <شماره پورت> is open" و اگر چیز دیگری بود با "Port <شماره پورت> is closed" روبرو می شویم. 

 

خط هفتم و نهم هم همانطور که مشاهده می کنید وضعیت پورت را با دستور print * در ترمینال نمایش می دهند.

*دستور print مشابه دستور echo در BASH است.

  1. فایل خود را با CTRL+X ذخیره کنید.

 

  1. قبل از اجرا و امتحان فایل باید دسترسی فایل را هم به اجرایی برای مالک تغییر دهیم (اطلاعات بیشتر) پس دستور زیر را در ترمینال وارد می کنیم:
 root@kali:~# chmod 744 pythonscript.py
  1. حالا فایل را اجرا کنید. من می خواهم پورت 80 روی آدرس  192.168.1.53 را امتحان کنم:   
root@kali:~# ./pythonscript.py
Enter the ip: 192.168.1.53
Enter the port: 80

پورت 80 روی این سیستم باز است پس خروجی باید به شکل زیر باشد:

  1. اگر یک پورت بسته مثل 81 را وارد کنید خروجی به شکل زیر است: 

 

 

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

نظرات (۵)

 سلام   این اموزش ها برای هک مفیده یا نه؟ شنیدم میگن شل نوشتن خیلی سخته:|
راهکاری دارین؟ مرسی اگه زود جواب بدین
درود برادر
من هیچ پورتیو نمیتونم باز کنم
هیچ جاییم آموزش درست نزاشتن.
اگ ممکنه براتون زحمت این آموزشم برامون بکشید ممنون میشم ازتون.
سلام جناب حسینی نژاد
ممنون بابت مطالبی که میزارید و آموزش قدم به قدم که یادگیریو خیلی راحت میکنه واسمون.
خواستم بگم توی این مطلب فایلیو که ابتدا گفتید باز کنیم اشتباها SH. تایپ کردید و در انتها از PY. استفاده کردید.

با سلام و تشکر از مطالب آموزشی

if s.connect_ex((ip, port)):
     print "Port", port, "is closed"
else:
        print "Port", port, "is open"

این پبغام در هنگام اجرای کد صادر میشه
SyntaxError: Missing parentheses in call to 'print'
خواهشا راهنمایی بفرمایین؟
پاسخ:
شما احتمالا پایتون ورژن 3 به بالا استفاده می کنید. در پایتون 3 دستور print به تابع ()print تبدیل شده.
برای دیدن ورژن پایتون از دستور زیر استفاده کنید:
python --version

برای حل مشکل باید دستور کد رو به صورت زیر بنویسید:
        ("print ("Port", port, "is closed
:else
        ("print ("Port", port, "is open
در اصل محتویات print رو توی دو تا پرانتز گذاشتیم.

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