Linux Privilege Escalation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
आइए उस OS के बारे में कुछ जानकारी प्राप्त करना शुरू करें जो चल रहा है
यदि आपके पास PATH
वेरिएबल के अंदर किसी भी फ़ोल्डर पर लिखने की अनुमति है, तो आप कुछ लाइब्रेरी या बाइनरी को हाईजैक करने में सक्षम हो सकते हैं:
दिलचस्प जानकारी, पासवर्ड या API कुंजी क्या पर्यावरण चर में हैं?
कर्नेल संस्करण की जांच करें और यदि कोई ऐसा एक्सप्लॉइट है जिसका उपयोग विशेषाधिकार बढ़ाने के लिए किया जा सकता है।
आप एक अच्छा कमजोर कर्नेल सूची और कुछ पहले से compiled exploits यहाँ पा सकते हैं: https://github.com/lucyoa/kernel-exploits और exploitdb sploits. अन्य साइटें जहाँ आप कुछ compiled exploits पा सकते हैं: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
उस वेब से सभी कमजोर कर्नेल संस्करणों को निकालने के लिए आप कर सकते हैं:
Kernel exploits खोजने में मदद करने के लिए उपकरण हैं:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (शिकार पर निष्पादित करें, केवल kernel 2.x के लिए exploits की जांच करता है)
हमेशा Google में kernel संस्करण खोजें, शायद आपका kernel संस्करण किसी kernel exploit में लिखा हो और फिर आप सुनिश्चित होंगे कि यह exploit मान्य है।
Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8
जो कमजोर sudo संस्करणों पर आधारित है जो प्रकट होते हैं:
आप इस grep का उपयोग करके जांच सकते हैं कि sudo संस्करण कमजोर है या नहीं।
From @sickrov
HTB के smasher2 बॉक्स के लिए एक उदाहरण देखें कि इस vuln का कैसे शोषण किया जा सकता है
ASLR (Address Space Layout Randomization) एक सुरक्षा तकनीक है जो प्रोग्राम के मेमोरी पते को यादृच्छिक बनाकर हमलों को रोकने में मदद करती है। यह सुनिश्चित करता है कि हमलावरों के लिए ज्ञात पते पर कोड निष्पादित करना कठिन हो जाता है।
यदि आप एक डॉकर कंटेनर के अंदर हैं, तो आप इससे भागने की कोशिश कर सकते हैं:
Docker Securityजांचें क्या माउंटेड और अनमाउंटेड है, कहाँ और क्यों। यदि कुछ अनमाउंटेड है, तो आप इसे माउंट करने और निजी जानकारी की जांच करने की कोशिश कर सकते हैं।
उपयोगी बाइनरीज़ की गणना करें
Also, check if कोई भी कंपाइलर स्थापित है. यह उपयोगी है यदि आपको कुछ कर्नेल एक्सप्लॉइट का उपयोग करने की आवश्यकता है क्योंकि इसे उस मशीन पर संकलित करना अनुशंसित है जहाँ आप इसका उपयोग करने जा रहे हैं (या एक समान मशीन पर)
स्थापित पैकेज और सेवाओं के संस्करण की जांच करें। शायद कुछ पुराना Nagios संस्करण (उदाहरण के लिए) है जिसे विशेषाधिकार बढ़ाने के लिए शोषण किया जा सकता है... यह अनुशंसा की जाती है कि अधिक संदिग्ध स्थापित सॉफ़्टवेयर के संस्करण की मैन्युअल रूप से जांच करें।
यदि आपके पास मशीन तक SSH पहुंच है, तो आप openVAS का उपयोग करके मशीन के अंदर स्थापित पुराने और कमजोर सॉफ़्टवेयर की जांच कर सकते हैं।
ध्यान दें कि ये कमांड बहुत सारी जानकारी दिखाएंगे जो ज्यादातर बेकार होगी, इसलिए कुछ एप्लिकेशन जैसे OpenVAS या समान का उपयोग करने की सिफारिश की जाती है जो जांचेंगे कि क्या कोई स्थापित सॉफ़्टवेयर संस्करण ज्ञात शोषणों के लिए कमजोर है
देखें कि कौन सी प्रक्रियाएँ निष्पादित की जा रही हैं और जांचें कि क्या कोई प्रक्रिया उससे अधिक विशेषाधिकार रखती है जितनी उसे होनी चाहिए (शायद एक टॉमकैट जिसे रूट द्वारा निष्पादित किया जा रहा है?)
हमेशा संभावित [electron/cef/chromium debuggers] के लिए जांचें जो चल रहे हैं, आप इसका दुरुपयोग करके विशेषाधिकार बढ़ा सकते हैं](electron-cef-chromium-debugger-abuse.md)। Linpeas इनकी पहचान --inspect
पैरामीटर को प्रक्रिया की कमांड लाइन में चेक करके करते हैं।
साथ ही प्रक्रियाओं के बाइनरी पर अपने विशेषाधिकारों की जांच करें, शायद आप किसी का ओवरराइट कर सकते हैं।
आप प्रक्रियाओं की निगरानी के लिए pspy जैसे उपकरणों का उपयोग कर सकते हैं। यह अक्सर चल रही कमजोर प्रक्रियाओं की पहचान करने के लिए बहुत उपयोगी हो सकता है या जब आवश्यकताओं का एक सेट पूरा होता है।
कुछ सर्वर की सेवाएं मेमोरी के अंदर स्पष्ट पाठ में क्रेडेंशियल्स को सहेजती हैं। सामान्यतः, आपको अन्य उपयोगकर्ताओं से संबंधित प्रक्रियाओं की मेमोरी पढ़ने के लिए रूट विशेषाधिकार की आवश्यकता होगी, इसलिए यह आमतौर पर तब अधिक उपयोगी होता है जब आप पहले से ही रूट हैं और अधिक क्रेडेंशियल्स खोजने की कोशिश कर रहे हैं। हालांकि, याद रखें कि एक नियमित उपयोगकर्ता के रूप में आप उन प्रक्रियाओं की मेमोरी पढ़ सकते हैं जो आपके स्वामित्व में हैं।
ध्यान दें कि आजकल अधिकांश मशीनें डिफ़ॉल्ट रूप से ptrace की अनुमति नहीं देतीं जिसका अर्थ है कि आप अपने विशेषाधिकारहीन उपयोगकर्ता से संबंधित अन्य प्रक्रियाओं को डंप नहीं कर सकते।
फाइल /proc/sys/kernel/yama/ptrace_scope ptrace की पहुंच को नियंत्रित करती है:
kernel.yama.ptrace_scope = 0: सभी प्रक्रियाओं को डिबग किया जा सकता है, जब तक कि उनके पास समान uid हो। यह ptracing के काम करने का पारंपरिक तरीका है।
kernel.yama.ptrace_scope = 1: केवल एक माता-पिता प्रक्रिया को डिबग किया जा सकता है।
kernel.yama.ptrace_scope = 2: केवल व्यवस्थापक ptrace का उपयोग कर सकता है, क्योंकि इसके लिए CAP_SYS_PTRACE क्षमता की आवश्यकता होती है।
kernel.yama.ptrace_scope = 3: कोई प्रक्रियाएं ptrace के साथ ट्रेस नहीं की जा सकतीं। एक बार सेट होने पर, ptracing को फिर से सक्षम करने के लिए एक रिबूट की आवश्यकता होती है।
यदि आपके पास एक FTP सेवा (उदाहरण के लिए) की मेमोरी तक पहुंच है, तो आप Heap प्राप्त कर सकते हैं और इसके क्रेडेंशियल्स के अंदर खोज कर सकते हैं।
किसी दिए गए प्रक्रिया आईडी के लिए, मैप्स दिखाते हैं कि मेमोरी उस प्रक्रिया के वर्चुअल एड्रेस स्पेस के भीतर कैसे मैप की गई है; यह प्रत्येक मैप की गई क्षेत्र के अनुमतियों को भी दिखाता है। मेम प्सेउडो फ़ाइल प्रक्रियाओं की मेमोरी को स्वयं उजागर करती है। मैप्स फ़ाइल से हम जानते हैं कि कौन सी मेमोरी क्षेत्र पढ़ने योग्य हैं और उनके ऑफसेट। हम इस जानकारी का उपयोग मेम फ़ाइल में खोजने और सभी पढ़ने योग्य क्षेत्रों को फ़ाइल में डंप करने के लिए करते हैं।
/dev/mem
सिस्टम की भौतिक मेमोरी तक पहुँच प्रदान करता है, न कि आभासी मेमोरी तक। कर्नेल की आभासी पता स्थान को /dev/kmem का उपयोग करके एक्सेस किया जा सकता है।
आम तौर पर, /dev/mem
केवल root और kmem समूह द्वारा पढ़ा जा सकता है।
ProcDump एक Linux में Sysinternals टूल्स के क्लासिक ProcDump टूल का पुनः कल्पना है जो Windows के लिए है। इसे https://github.com/Sysinternals/ProcDump-for-Linux पर प्राप्त करें।
एक प्रक्रिया की मेमोरी को डंप करने के लिए आप उपयोग कर सकते हैं:
https://github.com/hajzer/bash-memory-dump (root) - _आप मैन्युअल रूप से रूट आवश्यकताओं को हटा सकते हैं और अपने द्वारा स्वामित्व वाली प्रक्रिया को डंप कर सकते हैं
Script A.5 from https://www.delaat.net/rp/2016-2017/p97/report.pdf (रूट की आवश्यकता है)
यदि आप पाते हैं कि प्रमाणीकरण प्रक्रिया चल रही है:
आप प्रक्रिया को डंप कर सकते हैं (प्रक्रिया की मेमोरी को डंप करने के विभिन्न तरीकों को खोजने के लिए पिछले अनुभागों को देखें) और मेमोरी के अंदर क्रेडेंशियल्स के लिए खोज कर सकते हैं:
यह उपकरण https://github.com/huntergregal/mimipenguin मेमोरी से स्पष्ट पाठ क्रेडेंशियल्स और कुछ अच्छी तरह से ज्ञात फ़ाइलों से चोरी करेगा। इसे सही तरीके से काम करने के लिए रूट विशेषाधिकारों की आवश्यकता होती है।
GDM पासवर्ड (Kali डेस्कटॉप, Debian डेस्कटॉप)
gdm-password
Gnome कीरिंग (Ubuntu डेस्कटॉप, ArchLinux डेस्कटॉप)
gnome-keyring-daemon
LightDM (Ubuntu डेस्कटॉप)
lightdm
VSFTPd (सक्रिय FTP कनेक्शन)
vsftpd
Apache2 (सक्रिय HTTP बेसिक ऑथ सत्र)
apache2
OpenSSH (सक्रिय SSH सत्र - Sudo उपयोग)
sshd:
जांचें कि क्या कोई निर्धारित कार्य कमजोर है। शायद आप एक स्क्रिप्ट का लाभ उठा सकते हैं जो रूट द्वारा निष्पादित की जा रही है (वाइल्डकार्ड vuln? क्या रूट द्वारा उपयोग की जाने वाली फ़ाइलों को संशोधित कर सकते हैं? क्या सिम्लिंक्स का उपयोग कर सकते हैं? क्या रूट द्वारा उपयोग की जाने वाली निर्देशिका में विशिष्ट फ़ाइलें बना सकते हैं?)।
उदाहरण के लिए, /etc/crontab के अंदर आप PATH पा सकते हैं: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(ध्यान दें कि उपयोगकर्ता "user" के पास /home/user पर लिखने के अधिकार हैं)
यदि इस क्रॉनटैब के अंदर रूट उपयोगकर्ता बिना पथ सेट किए किसी कमांड या स्क्रिप्ट को निष्पादित करने की कोशिश करता है। उदाहरण के लिए: * * * * root overwrite.sh तो, आप इसका उपयोग करके एक रूट शेल प्राप्त कर सकते हैं:
यदि एक स्क्रिप्ट जिसे रूट द्वारा निष्पादित किया जाता है, एक कमांड के अंदर “*” है, तो आप इसका उपयोग अप्रत्याशित चीजें करने के लिए कर सकते हैं (जैसे privesc)। उदाहरण:
यदि वाइल्डकार्ड के पहले एक पथ है जैसे /some/path/* , तो यह संवेदनशील नहीं है (यहां तक कि ./* भी नहीं है)।
अधिक वाइल्डकार्ड शोषण चालों के लिए निम्नलिखित पृष्ठ पढ़ें:
Wildcards Spare tricksयदि आप एक क्रोन स्क्रिप्ट को संशोधित कर सकते हैं जो रूट द्वारा निष्पादित होती है, तो आप बहुत आसानी से एक शेल प्राप्त कर सकते हैं:
यदि रूट द्वारा निष्पादित स्क्रिप्ट एक निर्देशिका का उपयोग करती है जहाँ आपके पास पूर्ण पहुंच है, तो शायद उस फ़ोल्डर को हटाना और एक सिम्लिंक फ़ोल्डर बनाना उपयोगी हो सकता है जो एक स्क्रिप्ट को नियंत्रित करता है जो आपके द्वारा नियंत्रित है।
आप प्रक्रियाओं की निगरानी कर सकते हैं ताकि उन प्रक्रियाओं की खोज की जा सके जो हर 1, 2 या 5 मिनट में चल रही हैं। शायद आप इसका लाभ उठा सकते हैं और विशेषाधिकार बढ़ा सकते हैं।
उदाहरण के लिए, 1 मिनट के लिए हर 0.1 सेकंड की निगरानी करने के लिए, कम चलाए गए कमांड के अनुसार क्रमबद्ध करें और उन कमांड को हटा दें जो सबसे अधिक चलाए गए हैं, आप कर सकते हैं:
आप भी pspy का उपयोग कर सकते हैं (यह हर प्रक्रिया की निगरानी करेगा और सूचीबद्ध करेगा जो शुरू होती है)।
एक क्रोनजॉब बनाना संभव है एक टिप्पणी के बाद कैरिज रिटर्न डालकर (बिना न्यूलाइन कैरेक्टर के), और क्रोन जॉब काम करेगा। उदाहरण (कैरिज रिटर्न कैरेक्टर पर ध्यान दें):
जांचें कि क्या आप किसी .service
फ़ाइल को लिख सकते हैं, यदि आप कर सकते हैं, तो आप इसे संशोधित कर सकते हैं ताकि यह आपका बैकडोर चलाए जब सेवा शुरू होती है, फिर से शुरू होती है या रोक दी जाती है (शायद आपको मशीन के पुनःबूट होने का इंतजार करना पड़े)।
उदाहरण के लिए, .service फ़ाइल के अंदर अपने बैकडोर को ExecStart=/tmp/script.sh
के साथ बनाएं।
याद रखें कि यदि आपके पास सेवाओं द्वारा निष्पादित बाइनरी पर लिखने की अनुमति है, तो आप उन्हें बैकडोर के लिए बदल सकते हैं ताकि जब सेवाएं फिर से निष्पादित हों, तो बैकडोर निष्पादित होंगे।
आप systemd द्वारा उपयोग किए जाने वाले PATH को देख सकते हैं:
यदि आप पाते हैं कि आप पथ के किसी भी फ़ोल्डर में लिख सकते हैं, तो आप अधिकार बढ़ाने में सक्षम हो सकते हैं। आपको सेवा कॉन्फ़िगरेशन फ़ाइलों में उपयोग किए जा रहे सापेक्ष पथों की खोज करनी होगी जैसे:
फिर, एक executables बनाएं जिसका नाम उस सापेक्ष पथ बाइनरी के समान हो जो आप लिख सकते हैं, और जब सेवा को कमजोर क्रिया (Start, Stop, Reload) को निष्पादित करने के लिए कहा जाता है, तो आपका backdoor निष्पादित होगा (अधिकारहीन उपयोगकर्ता आमतौर पर सेवाओं को शुरू/रोक नहीं सकते हैं लेकिन जांचें कि क्या आप sudo -l
का उपयोग कर सकते हैं)।
सेवाओं के बारे में अधिक जानें man systemd.service
के साथ।
Timers systemd यूनिट फ़ाइलें हैं जिनका नाम **.timer**
में समाप्त होता है जो **.service**
फ़ाइलों या घटनाओं को नियंत्रित करता है। Timers को क्रॉन के विकल्प के रूप में उपयोग किया जा सकता है क्योंकि इनमें कैलेंडर समय घटनाओं और मोनोटोनिक समय घटनाओं के लिए अंतर्निहित समर्थन होता है और इन्हें असिंक्रोनस रूप से चलाया जा सकता है।
आप सभी टाइमर्स को सूचीबद्ध कर सकते हैं:
यदि आप एक टाइमर को संशोधित कर सकते हैं, तो आप इसे systemd.unit के कुछ उदाहरणों (जैसे .service
या .target
) को निष्पादित करने के लिए बना सकते हैं।
In the documentation you can read what the Unit is:
जब यह टाइमर समाप्त होता है, तो सक्रिय करने के लिए यूनिट। तर्क एक यूनिट नाम है, जिसका उपसर्ग ".timer" नहीं है। यदि निर्दिष्ट नहीं किया गया है, तो यह मान उस सेवा पर डिफ़ॉल्ट होता है जिसका नाम टाइमर यूनिट के समान होता है, सिवाय उपसर्ग के। (ऊपर देखें।) यह अनुशंसा की जाती है कि सक्रिय की गई यूनिट का नाम और टाइमर यूनिट का नाम समान रूप से नामित किया जाए, सिवाय उपसर्ग के।
इसलिए, इस अनुमति का दुरुपयोग करने के लिए आपको चाहिए:
कुछ systemd यूनिट (जैसे .service
) खोजें जो एक लिखने योग्य बाइनरी को निष्पादित कर रही है
कुछ systemd यूनिट खोजें जो एक सापेक्ष पथ को निष्पादित कर रही है और आपके पास systemd PATH पर लिखने की अनुमति है (उस निष्पादन योग्य की नकल करने के लिए)
man systemd.timer
के साथ टाइमर्स के बारे में अधिक जानें।
टाइमर को सक्षम करने के लिए आपको रूट अनुमतियाँ चाहिए और निष्पादित करना होगा:
Note the timer is activated by creating a symlink to it on /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Unix Domain Sockets (UDS) प्रक्रिया संचार को समान या विभिन्न मशीनों पर क्लाइंट-सेर्वर मॉडल के भीतर सक्षम करते हैं। वे इंटर-कंप्यूटर संचार के लिए मानक Unix वर्णनकर्ता फ़ाइलों का उपयोग करते हैं और .socket
फ़ाइलों के माध्यम से सेटअप किए जाते हैं।
Sockets को .socket
फ़ाइलों का उपयोग करके कॉन्फ़िगर किया जा सकता है।
man systemd.socket
के साथ सॉकेट के बारे में अधिक जानें। इस फ़ाइल के अंदर, कई दिलचस्प पैरामीटर कॉन्फ़िगर किए जा सकते हैं:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: ये विकल्प अलग हैं लेकिन एक सारांश का उपयोग यह इंगित करने के लिए किया जाता है कि यह सॉकेट पर कहां सुनने जा रहा है (AF_UNIX सॉकेट फ़ाइल का पथ, सुनने के लिए IPv4/6 और/या पोर्ट नंबर, आदि)
Accept
: एक बूलियन तर्क लेता है। यदि सत्य, तो प्रत्येक आने वाले कनेक्शन के लिए एक सेवा उदाहरण उत्पन्न होता है और केवल कनेक्शन सॉकेट इसे पास किया जाता है। यदि झूठ, तो सभी सुनने वाले सॉकेट स्वयं शुरू की गई सेवा इकाई को पास किए जाते हैं, और सभी कनेक्शनों के लिए केवल एक सेवा इकाई उत्पन्न होती है। यह मान डाटाग्राम सॉकेट और FIFOs के लिए अनदेखा किया जाता है जहां एकल सेवा इकाई बिना शर्त सभी आने वाले ट्रैफ़िक को संभालती है। डिफ़ॉल्ट रूप से झूठा है। प्रदर्शन कारणों से, नए डेमनों को केवल Accept=no
के लिए उपयुक्त तरीके से लिखने की सिफारिश की जाती है।
ExecStartPre
, ExecStartPost
: एक या एक से अधिक कमांड लाइनों को लेता है, जो सुनने वाले सॉकेट/FIFOs के निर्माण और बंधन से पहले या बाद में निष्पादित होते हैं। कमांड लाइन का पहला टोकन एक पूर्ण फ़ाइल नाम होना चाहिए, उसके बाद प्रक्रिया के लिए तर्क होते हैं।
ExecStopPre
, ExecStopPost
: अतिरिक्त कमांड जो सुनने वाले सॉकेट/FIFOs के बंद और हटाए जाने से पहले या बाद में निष्पादित होते हैं।
Service
: आने वाले ट्रैफ़िक पर सक्रिय करने के लिए सेवा इकाई का नाम निर्दिष्ट करता है। यह सेटिंग केवल उन सॉकेट्स के लिए अनुमति है जिनका Accept=no है। यह उस सेवा पर डिफ़ॉल्ट होता है जिसका नाम सॉकेट के समान होता है (स suff़िक्स को प्रतिस्थापित किया गया)। अधिकांश मामलों में, इस विकल्प का उपयोग करना आवश्यक नहीं होना चाहिए।
यदि आप एक लिखने योग्य .socket
फ़ाइल पाते हैं तो आप [Socket]
अनुभाग के शुरू में कुछ इस तरह जोड़ सकते हैं: ExecStartPre=/home/kali/sys/backdoor
और बैकडोर सॉकेट के निर्माण से पहले निष्पादित होगा। इसलिए, आपको संभवतः मशीन के पुनरारंभ होने की प्रतीक्षा करने की आवश्यकता होगी।
&#xNAN;Nोट करें कि सिस्टम को उस सॉकेट फ़ाइल कॉन्फ़िगरेशन का उपयोग करना चाहिए या बैकडोर निष्पादित नहीं होगा
यदि आप कोई लिखने योग्य सॉकेट पहचानते हैं (अब हम Unix Sockets के बारे में बात कर रहे हैं और कॉन्फ़िग .socket
फ़ाइलों के बारे में नहीं), तो आप उस सॉकेट के साथ संवाद कर सकते हैं और शायद एक भेद्यता का शोषण कर सकते हैं।
शोषण उदाहरण:
Socket Command Injectionध्यान दें कि कुछ सॉकेट HTTP अनुरोधों के लिए सुन रहे हो सकते हैं (मैं .socket फ़ाइलों की बात नहीं कर रहा हूँ बल्कि उन फ़ाइलों की जो यूनिक्स सॉकेट के रूप में कार्य कर रही हैं)। आप इसे इस तरह जांच सकते हैं:
यदि सॉकेट HTTP अनुरोध के साथ प्रतिक्रिया करता है, तो आप इसके साथ संवाद कर सकते हैं और शायद कुछ कमजोरियों का लाभ उठा सकते हैं।
Docker सॉकेट, जो अक्सर /var/run/docker.sock
पर पाया जाता है, एक महत्वपूर्ण फ़ाइल है जिसे सुरक्षित किया जाना चाहिए। डिफ़ॉल्ट रूप से, यह root
उपयोगकर्ता और docker
समूह के सदस्यों द्वारा लिखा जा सकता है। इस सॉकेट पर लिखने की पहुंच होना विशेषाधिकार वृद्धि का कारण बन सकता है। यहाँ बताया गया है कि यह कैसे किया जा सकता है और वैकल्पिक तरीके यदि Docker CLI उपलब्ध नहीं है।
यदि आपके पास Docker सॉकेट पर लिखने की पहुंच है, तो आप निम्नलिखित कमांड का उपयोग करके विशेषाधिकार बढ़ा सकते हैं:
These commands allow you to run a container with root-level access to the host's file system.
उन मामलों में जहां Docker CLI उपलब्ध नहीं है, Docker socket को Docker API और curl
कमांड का उपयोग करके अभी भी नियंत्रित किया जा सकता है।
Docker Images की सूची बनाएं: उपलब्ध इमेज की सूची प्राप्त करें।
एक Container बनाएं: एक अनुरोध भेजें ताकि एक कंटेनर बनाया जा सके जो होस्ट सिस्टम की रूट डायरेक्टरी को माउंट करता है।
नए बनाए गए कंटेनर को शुरू करें:
Container से जुड़ें: कंटेनर से कनेक्शन स्थापित करने के लिए socat
का उपयोग करें, जिससे इसके भीतर कमांड निष्पादन सक्षम हो सके।
socat
कनेक्शन सेट करने के बाद, आप होस्ट के फाइल सिस्टम पर रूट-लेवल एक्सेस के साथ सीधे कंटेनर में कमांड निष्पादित कर सकते हैं।
ध्यान दें कि यदि आपके पास docker socket पर लिखने की अनुमति है क्योंकि आप docker
समूह के अंदर हैं तो आपके पास अधिकार बढ़ाने के अधिक तरीके हैं। यदि docker API किसी पोर्ट पर सुन रहा है तो आप इसे भी समझौता कर सकते हैं।
docker से बाहर निकलने या इसे अधिकार बढ़ाने के लिए दुरुपयोग करने के अधिक तरीकों की जांच करें:
Docker Securityयदि आप पाते हैं कि आप ctr
कमांड का उपयोग कर सकते हैं तो कृपया निम्नलिखित पृष्ठ को पढ़ें क्योंकि आप इसे अधिकार बढ़ाने के लिए दुरुपयोग कर सकते हैं:
यदि आप पाते हैं कि आप runc
कमांड का उपयोग कर सकते हैं तो कृपया निम्नलिखित पृष्ठ को पढ़ें क्योंकि आप इसे अधिकार बढ़ाने के लिए दुरुपयोग कर सकते हैं:
D-Bus एक जटिल इंटर-प्रोसेस कम्युनिकेशन (IPC) सिस्टम है जो अनुप्रयोगों को प्रभावी ढंग से बातचीत करने और डेटा साझा करने में सक्षम बनाता है। आधुनिक Linux सिस्टम को ध्यान में रखते हुए डिज़ाइन किया गया, यह विभिन्न प्रकार के अनुप्रयोग संचार के लिए एक मजबूत ढांचा प्रदान करता है।
यह प्रणाली बहुपरकारी है, जो प्रक्रियाओं के बीच डेटा विनिमय को बढ़ाने के लिए बुनियादी IPC का समर्थन करती है, जो सुधारित UNIX डोमेन सॉकेट्स की याद दिलाती है। इसके अलावा, यह घटनाओं या संकेतों को प्रसारित करने में मदद करती है, जिससे सिस्टम घटकों के बीच निर्बाध एकीकरण को बढ़ावा मिलता है। उदाहरण के लिए, एक Bluetooth डेमन से आने वाली कॉल के बारे में एक संकेत एक संगीत खिलाड़ी को म्यूट करने के लिए प्रेरित कर सकता है, जिससे उपयोगकर्ता अनुभव में सुधार होता है। इसके अतिरिक्त, D-Bus एक दूरस्थ ऑब्जेक्ट सिस्टम का समर्थन करता है, जो अनुप्रयोगों के बीच सेवा अनुरोधों और विधि कॉल को सरल बनाता है, उन प्रक्रियाओं को सुव्यवस्थित करता है जो पारंपरिक रूप से जटिल थीं।
D-Bus एक अनुमति/निषेध मॉडल पर काम करता है, जो संदेश अनुमतियों (विधि कॉल, संकेत उत्सर्जन, आदि) का प्रबंधन करता है जो नीति नियमों के मिलन के संचयी प्रभाव के आधार पर होता है। ये नीतियाँ बस के साथ इंटरैक्शन को निर्दिष्ट करती हैं, जो संभावित रूप से इन अनुमतियों के शोषण के माध्यम से अधिकार बढ़ाने की अनुमति देती हैं।
/etc/dbus-1/system.d/wpa_supplicant.conf
में ऐसी नीति का एक उदाहरण प्रदान किया गया है, जो रूट उपयोगकर्ता के लिए fi.w1.wpa_supplicant1
से संदेश भेजने, प्राप्त करने और स्वामित्व रखने की अनुमति देती है।
विशिष्ट उपयोगकर्ता या समूह के बिना नीतियाँ सार्वभौमिक रूप से लागू होती हैं, जबकि "डिफ़ॉल्ट" संदर्भ नीतियाँ उन सभी पर लागू होती हैं जो अन्य विशिष्ट नीतियों द्वारा कवर नहीं की गई हैं।
यहाँ D-Bus संचार को सूचीबद्ध करने और शोषण करने के तरीके के बारे में जानें:
D-Bus Enumeration & Command Injection Privilege Escalationनेटवर्क को सूचीबद्ध करना और मशीन की स्थिति का पता लगाना हमेशा दिलचस्प होता है।
हमेशा उस मशीन पर चल रहे नेटवर्क सेवाओं की जांच करें जिस पर आप पहले बातचीत नहीं कर सके:
जांचें कि क्या आप ट्रैफ़िक को स्निफ़ कर सकते हैं। यदि आप ऐसा कर सकते हैं, तो आप कुछ क्रेडेंशियल्स प्राप्त कर सकते हैं।
चेक करें आप कौन हैं, आपके पास कौन से अधिकार हैं, सिस्टम में कौन से उपयोगकर्ता हैं, कौन से लॉगिन कर सकते हैं और कौन से रूट अधिकार रखते हैं:
कुछ Linux संस्करण एक बग से प्रभावित थे जो UID > INT_MAX वाले उपयोगकर्ताओं को विशेषाधिकार बढ़ाने की अनुमति देता है। अधिक जानकारी: यहाँ, यहाँ और यहाँ.
इसे एक्सप्लॉइट करें: systemd-run -t /bin/bash
जांचें कि क्या आप किसी समूह के सदस्य हैं जो आपको रूट विशेषाधिकार दे सकता है:
Interesting Groups - Linux Privescजांचें कि क्या क्लिपबोर्ड के अंदर कुछ दिलचस्प है (यदि संभव हो)
यदि आप पर्यावरण का कोई पासवर्ड जानते हैं तो प्रत्येक उपयोगकर्ता के रूप में लॉगिन करने का प्रयास करें पासवर्ड का उपयोग करके।
यदि आप बहुत शोर करने की परवाह नहीं करते हैं और su
और timeout
बाइनरी कंप्यूटर पर मौजूद हैं, तो आप su-bruteforce का उपयोग करके उपयोगकर्ता को ब्रूट-फोर्स करने का प्रयास कर सकते हैं।
Linpeas -a
पैरामीटर के साथ भी उपयोगकर्ताओं को ब्रूट-फोर्स करने का प्रयास करता है।
यदि आप पाते हैं कि आप $PATH के किसी फ़ोल्डर के अंदर लिख सकते हैं तो आप लिखने योग्य फ़ोल्डर के अंदर एक बैकडोर बनाने में सक्षम हो सकते हैं जिसका नाम किसी कमांड के समान है जिसे एक अलग उपयोगकर्ता (आदर्श रूप से रूट) द्वारा निष्पादित किया जाएगा और जो आपके लिखने योग्य फ़ोल्डर के पहले स्थित फ़ोल्डर से लोड नहीं किया गया है $PATH में।
आपको sudo का उपयोग करके कुछ कमांड निष्पादित करने की अनुमति दी जा सकती है या उनके पास suid बिट हो सकता है। इसे जांचें:
कुछ अनपेक्षित कमांड आपको फ़ाइलें पढ़ने और/या लिखने या यहां तक कि एक कमांड निष्पादित करने की अनुमति देती हैं। उदाहरण के लिए:
Sudo कॉन्फ़िगरेशन एक उपयोगकर्ता को किसी अन्य उपयोगकर्ता के विशेषाधिकारों के साथ कुछ कमांड निष्पादित करने की अनुमति दे सकता है बिना पासवर्ड जाने।
इस उदाहरण में उपयोगकर्ता demo
root
के रूप में vim
चला सकता है, अब रूट निर्देशिका में एक ssh कुंजी जोड़कर या sh
को कॉल करके एक शेल प्राप्त करना तुच्छ है।
यह निर्देश उपयोगकर्ता को एक वातावरण चर सेट करने की अनुमति देता है जबकि कुछ निष्पादित करते समय:
इस उदाहरण, HTB मशीन Admirer पर आधारित, PYTHONPATH हाइजैकिंग के लिए संवेदनशील था ताकि स्क्रिप्ट को रूट के रूप में निष्पादित करते समय एक मनमाना पायथन पुस्तकालय लोड किया जा सके:
अन्य फ़ाइलों को पढ़ने के लिए कूदें या सिंबॉलिक लिंक का उपयोग करें। उदाहरण के लिए sudoers फ़ाइल में: hacker10 ALL= (root) /bin/less /var/log/*
यदि वाइल्डकार्ड (*) का उपयोग किया जाता है, तो यह और भी आसान है:
प्रतिरोध उपाय: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
यदि sudo अनुमति एकल कमांड को पथ निर्दिष्ट किए बिना दी गई है: hacker10 ALL= (root) less तो आप इसे PATH वेरिएबल को बदलकर शोषण कर सकते हैं
यह तकनीक तब भी उपयोग की जा सकती है यदि एक suid बाइनरी बिना पथ निर्दिष्ट किए किसी अन्य कमांड को निष्पादित करती है (हमेशा एक अजीब SUID बाइनरी की सामग्री की जांच करने के लिए strings का उपयोग करें)।
यदि suid बाइनरी पथ निर्दिष्ट करते हुए किसी अन्य कमांड को निष्पादित करती है, तो आप उस कमांड के नाम से एक फंक्शन निर्यात करने का प्रयास कर सकते हैं जिसे suid फ़ाइल कॉल कर रही है।
उदाहरण के लिए, यदि एक suid बाइनरी /usr/sbin/service apache2 start को कॉल करती है, तो आपको फंक्शन बनाने और उसे निर्यात करने का प्रयास करना चाहिए:
फिर, जब आप suid बाइनरी को कॉल करते हैं, तो यह फ़ंक्शन निष्पादित होगा
LD_PRELOAD पर्यावरण चर का उपयोग एक या अधिक साझा पुस्तकालयों (.so फ़ाइलें) को निर्दिष्ट करने के लिए किया जाता है जिन्हें लोडर द्वारा सभी अन्य के पहले लोड किया जाएगा, जिसमें मानक C पुस्तकालय (libc.so
) भी शामिल है। इस प्रक्रिया को पुस्तकालय को प्रीलोड करना कहा जाता है।
हालांकि, सिस्टम की सुरक्षा बनाए रखने और इस सुविधा के दुरुपयोग को रोकने के लिए, विशेष रूप से suid/sgid निष्पादन योग्य के साथ, सिस्टम कुछ शर्तों को लागू करता है:
लोडर उन निष्पादन योग्य के लिए LD_PRELOAD की अनदेखी करता है जहाँ वास्तविक उपयोगकर्ता आईडी (ruid) प्रभावी उपयोगकर्ता आईडी (euid) से मेल नहीं खाती।
suid/sgid वाले निष्पादन योग्य के लिए, केवल मानक पथ में पुस्तकालयों को प्रीलोड किया जाता है जो भी suid/sgid हैं।
अधिकार वृद्धि तब हो सकती है जब आपके पास sudo
के साथ कमांड निष्पादित करने की क्षमता हो और sudo -l
का आउटपुट env_keep+=LD_PRELOAD कथन को शामिल करता हो। यह कॉन्फ़िगरेशन LD_PRELOAD पर्यावरण चर को बनाए रखने और इसे मान्यता प्राप्त करने की अनुमति देता है, भले ही कमांड sudo
के साथ चलाए जाएं, जो संभावित रूप से उच्चाधिकारों के साथ मनमाने कोड के निष्पादन की ओर ले जा सकता है।
सहेजें जैसे /tmp/pe.c
फिर इसे संकलित करें:
अंत में, privileges बढ़ाएँ चलाते हुए
यदि हमलावर LD_LIBRARY_PATH पर्यावरण चर को नियंत्रित करता है, तो एक समान प्रिवेस्क का दुरुपयोग किया जा सकता है क्योंकि वह उस पथ को नियंत्रित करता है जहाँ पुस्तकालयों की खोज की जाएगी।
जब किसी बाइनरी का सामना SUID अनुमतियों के साथ होता है जो असामान्य लगती है, तो यह सुनिश्चित करना एक अच्छा अभ्यास है कि यह .so फ़ाइलें सही ढंग से लोड कर रही है। इसे निम्नलिखित कमांड चलाकर जांचा जा सकता है:
उदाहरण के लिए, "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (कोई ऐसा फ़ाइल या निर्देशिका नहीं)" जैसी त्रुटि का सामना करना शोषण की संभावना का सुझाव देता है।
इसका शोषण करने के लिए, कोई एक C फ़ाइल बनाएगा, जैसे "/path/to/.config/libcalc.c", जिसमें निम्नलिखित कोड होगा:
यह कोड, एक बार संकलित और निष्पादित होने पर, फ़ाइल अनुमतियों में हेरफेर करके और उच्चाधिकारों के साथ एक शेल निष्पादित करके विशेषाधिकारों को बढ़ाने का लक्ष्य रखता है।
उपरोक्त C फ़ाइल को साझा वस्तु (.so) फ़ाइल में संकलित करें:
अंत में, प्रभावित SUID बाइनरी को चलाने से एक्सप्लॉइट सक्रिय होना चाहिए, जिससे संभावित सिस्टम समझौता हो सके।
अब जब हमने एक SUID बाइनरी खोज ली है जो एक ऐसे फ़ोल्डर से लाइब्रेरी लोड कर रही है जहाँ हम लिख सकते हैं, आइए उस फ़ोल्डर में आवश्यक नाम के साथ लाइब्रेरी बनाते हैं:
यदि आपको इस तरह की त्रुटि मिलती है
यह मतलब है कि आपने जो पुस्तकालय उत्पन्न किया है, उसमें a_function_name
नामक एक फ़ंक्शन होना चाहिए।
GTFOBins एक क्यूरेटेड सूची है Unix बाइनरीज़ की, जिन्हें एक हमलावर द्वारा स्थानीय सुरक्षा प्रतिबंधों को बायपास करने के लिए शोषित किया जा सकता है। GTFOArgs वही है लेकिन उन मामलों के लिए जहां आप केवल तर्कों को इंजेक्ट कर सकते हैं एक कमांड में।
यह परियोजना उन Unix बाइनरीज़ के वैध फ़ंक्शंस को इकट्ठा करती है जिन्हें प्रतिबंधित शेल से बाहर निकलने, विशेषाधिकारों को बढ़ाने या बनाए रखने, फ़ाइलों को स्थानांतरित करने, बाइंड और रिवर्स शेल्स को स्पॉन करने, और अन्य पोस्ट-शोषण कार्यों को सुविधाजनक बनाने के लिए दुरुपयोग किया जा सकता है।
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
यदि आप sudo -l
तक पहुँच सकते हैं, तो आप उपकरण FallOfSudo का उपयोग कर सकते हैं यह जांचने के लिए कि क्या यह किसी भी sudo नियम का शोषण करने का तरीका खोजता है।
उन मामलों में जहां आपके पास sudo पहुँच है लेकिन पासवर्ड नहीं है, आप sudo कमांड निष्पादन की प्रतीक्षा करके और फिर सत्र टोकन को हाईजैक करके विशेषाधिकार बढ़ा सकते हैं।
विशेषाधिकार बढ़ाने की आवश्यकताएँ:
आपके पास पहले से ही "sampleuser" उपयोगकर्ता के रूप में एक शेल है
"sampleuser" ने अंतिम 15 मिनट में कुछ निष्पादित करने के लिए sudo
का उपयोग किया है (डिफ़ॉल्ट रूप से यह वह अवधि है जो sudo टोकन की होती है जो हमें बिना किसी पासवर्ड के sudo
का उपयोग करने की अनुमति देती है)
cat /proc/sys/kernel/yama/ptrace_scope
0 है
gdb
सुलभ है (आप इसे अपलोड करने में सक्षम हो सकते हैं)
(आप अस्थायी रूप से ptrace_scope
को echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
के साथ सक्षम कर सकते हैं या /etc/sysctl.d/10-ptrace.conf
को स्थायी रूप से संशोधित करके और kernel.yama.ptrace_scope = 0
सेट करके)
यदि ये सभी आवश्यकताएँ पूरी होती हैं, तो आप विशेषाधिकार बढ़ा सकते हैं: https://github.com/nongiach/sudo_inject
पहला शोषण (exploit.sh
) /tmp में बाइनरी activate_sudo_token
बनाएगा। आप इसका उपयोग अपने सत्र में sudo टोकन को सक्रिय करने के लिए कर सकते हैं (आपको स्वचालित रूप से एक रूट शेल नहीं मिलेगा, sudo su
करें):
The दूसरा एक्सप्लॉइट (exploit_v2.sh
) /tmp में रूट द्वारा सेटयूआईडी के साथ एक श शेल बनाएगा
The third exploit (exploit_v3.sh
) एक sudoers फ़ाइल बनाएगा जो sudo टोकन को शाश्वत बनाता है और सभी उपयोगकर्ताओं को sudo का उपयोग करने की अनुमति देता है
यदि आपके पास फ़ोल्डर में या फ़ोल्डर के अंदर बनाए गए किसी भी फ़ाइल पर लेखन अनुमतियाँ हैं, तो आप बाइनरी write_sudo_token का उपयोग करके एक उपयोगकर्ता और PID के लिए sudo टोकन बना सकते हैं। उदाहरण के लिए, यदि आप फ़ाइल /var/run/sudo/ts/sampleuser को अधिलेखित कर सकते हैं और आपके पास उस उपयोगकर्ता के रूप में PID 1234 के साथ एक शेल है, तो आप sudo विशेषाधिकार प्राप्त कर सकते हैं बिना पासवर्ड जाने:
फाइल /etc/sudoers
और /etc/sudoers.d
के अंदर की फाइलें यह निर्धारित करती हैं कि कौन sudo
का उपयोग कर सकता है और कैसे। ये फाइलें डिफ़ॉल्ट रूप से केवल उपयोगकर्ता रूट और समूह रूट द्वारा पढ़ी जा सकती हैं।
यदि आप इस फाइल को पढ़ सकते हैं तो आप कुछ दिलचस्प जानकारी प्राप्त कर सकते हैं, और यदि आप कोई फाइल लिख सकते हैं तो आप अधिकार बढ़ा सकते हैं।
यदि आप लिख सकते हैं, तो आप इस अनुमति का दुरुपयोग कर सकते हैं।
अन्य तरीके से इन अनुमतियों का दुरुपयोग करना:
sudo
बाइनरी के कुछ विकल्प हैं जैसे कि OpenBSD के लिए doas
, इसकी कॉन्फ़िगरेशन /etc/doas.conf
पर जांचना न भूलें।
यदि आप जानते हैं कि एक उपयोगकर्ता आमतौर पर एक मशीन से कनेक्ट होता है और विशेषाधिकार बढ़ाने के लिए sudo
का उपयोग करता है और आपके पास उस उपयोगकर्ता संदर्भ में एक शेल है, तो आप एक नया sudo निष्पादन योग्य बना सकते हैं जो आपके कोड को रूट के रूप में और फिर उपयोगकर्ता के कमांड को निष्पादित करेगा। फिर, उपयोगकर्ता संदर्भ का $PATH संशोधित करें (उदाहरण के लिए .bash_profile में नया पथ जोड़ना) ताकि जब उपयोगकर्ता sudo निष्पादित करे, तो आपका sudo निष्पादन योग्य निष्पादित हो।
ध्यान दें कि यदि उपयोगकर्ता एक अलग शेल का उपयोग करता है (bash नहीं) तो आपको नए पथ को जोड़ने के लिए अन्य फ़ाइलों को संशोधित करने की आवश्यकता होगी। उदाहरण के लिए sudo-piggyback ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
को संशोधित करता है। आप bashdoor.py में एक और उदाहरण पा सकते हैं।
या कुछ ऐसा चलाना:
फाइल /etc/ld.so.conf
यह दर्शाती है कि लोड की गई कॉन्फ़िगरेशन फ़ाइलें कहाँ से हैं। आमतौर पर, इस फ़ाइल में निम्नलिखित पथ होता है: include /etc/ld.so.conf.d/*.conf
इसका मतलब है कि /etc/ld.so.conf.d/*.conf
से कॉन्फ़िगरेशन फ़ाइलें पढ़ी जाएँगी। ये कॉन्फ़िगरेशन फ़ाइलें अन्य फ़ोल्डरों की ओर इशारा करती हैं जहाँ लाइब्रेरीज़ के लिए खोज की जाएगी। उदाहरण के लिए, /etc/ld.so.conf.d/libc.conf
की सामग्री है /usr/local/lib
। इसका मतलब है कि सिस्टम /usr/local/lib
के अंदर लाइब्रेरीज़ के लिए खोज करेगा।
यदि किसी कारणवश किसी उपयोगकर्ता के पास लिखने की अनुमति है किसी भी पथ पर जो संकेतित हैं: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, /etc/ld.so.conf.d/
के अंदर कोई भी फ़ाइल या /etc/ld.so.conf.d/*.conf
के अंदर कॉन्फ़िगरेशन फ़ाइल के भीतर कोई भी फ़ोल्डर, तो वह विशेषाधिकार बढ़ाने में सक्षम हो सकता है।
देखें इस गलत कॉन्फ़िगरेशन का लाभ कैसे उठाएँ निम्नलिखित पृष्ठ पर:
/var/tmp/flag15/
में lib को कॉपी करके, इसे RPATH
वेरिएबल में निर्दिष्ट स्थान पर प्रोग्राम द्वारा उपयोग किया जाएगा।
फिर /var/tmp
में एक बुरी लाइब्रेरी बनाएं gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Linux क्षमताएँ एक प्रक्रिया के लिए उपलब्ध रूट विशेषाधिकारों का उपसमुच्चय प्रदान करती हैं। यह प्रभावी रूप से रूट विशेषाधिकारों को छोटे और विशिष्ट इकाइयों में विभाजित करता है। इन इकाइयों में से प्रत्येक को स्वतंत्र रूप से प्रक्रियाओं को सौंपा जा सकता है। इस तरह पूर्ण विशेषाधिकारों का सेट कम हो जाता है, जिससे शोषण के जोखिम कम होते हैं। क्षमताओं और उन्हें कैसे दुरुपयोग करना है के बारे में अधिक जानने के लिए निम्नलिखित पृष्ठ पढ़ें:
Linux Capabilitiesएक निर्देशिका में, "कार्यक्रम" के लिए बिट का अर्थ है कि प्रभावित उपयोगकर्ता फोल्डर में "cd" कर सकता है। "पढ़ने" का बिट यह दर्शाता है कि उपयोगकर्ता फाइलों की सूची बना सकता है, और "लिखने" का बिट यह दर्शाता है कि उपयोगकर्ता फाइलों को हटा और नई फाइलें बना सकता है।
एक्सेस कंट्रोल लिस्ट (ACLs) वैकल्पिक अनुमतियों की द्वितीयक परत का प्रतिनिधित्व करती हैं, जो पारंपरिक ugo/rwx अनुमतियों को ओवरराइड करने में सक्षम हैं। ये अनुमतियाँ फ़ाइल या निर्देशिका के एक्सेस पर नियंत्रण को बढ़ाती हैं, विशेष उपयोगकर्ताओं को अधिकार देने या अस्वीकार करने की अनुमति देकर जो मालिक या समूह का हिस्सा नहीं हैं। यह स्तर सूक्ष्मता अधिक सटीक एक्सेस प्रबंधन सुनिश्चित करता है। अधिक विवरण यहाँ पाया जा सकता है।
उपयोगकर्ता "kali" को एक फ़ाइल पर पढ़ने और लिखने की अनुमतियाँ दें:
विशिष्ट ACLs वाले फ़ाइलें सिस्टम से प्राप्त करें:
पुराने संस्करणों में आप किसी अन्य उपयोगकर्ता (रूट) के कुछ शेल सत्रों को हाइजैक कर सकते हैं। नवीनतम संस्करणों में आप केवल अपने स्वयं के उपयोगकर्ता के स्क्रीन सत्रों से कनेक्ट करने में सक्षम होंगे। हालाँकि, आप सत्र के अंदर दिलचस्प जानकारी पा सकते हैं।
List screen sessions
सत्र से जुड़ें
यह पुराने tmux संस्करणों के साथ एक समस्या थी। मैं एक गैर-प्रिविलेज्ड उपयोगकर्ता के रूप में रूट द्वारा बनाए गए tmux (v2.1) सत्र को हाइजैक करने में असमर्थ था।
tmux सत्रों की सूची
सत्र से जुड़ें
Check Valentine box from HTB for an example.
सभी SSL और SSH कुंजी जो Debian आधारित सिस्टम (Ubuntu, Kubuntu, आदि) पर सितंबर 2006 और 13 मई 2008 के बीच उत्पन्न की गई थीं, इस बग से प्रभावित हो सकती हैं। यह बग उन OS में एक नई ssh कुंजी बनाने के दौरान होता है, क्योंकि केवल 32,768 भिन्नताएँ संभव थीं। इसका मतलब है कि सभी संभावनाएँ गणना की जा सकती हैं और ssh सार्वजनिक कुंजी होने पर आप संबंधित निजी कुंजी के लिए खोज कर सकते हैं। आप यहाँ गणना की गई संभावनाएँ पा सकते हैं: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: यह निर्दिष्ट करता है कि क्या पासवर्ड प्रमाणीकरण की अनुमति है। डिफ़ॉल्ट no
है।
PubkeyAuthentication: यह निर्दिष्ट करता है कि क्या सार्वजनिक कुंजी प्रमाणीकरण की अनुमति है। डिफ़ॉल्ट yes
है।
PermitEmptyPasswords: जब पासवर्ड प्रमाणीकरण की अनुमति होती है, तो यह निर्दिष्ट करता है कि क्या सर्वर खाली पासवर्ड स्ट्रिंग वाले खातों में लॉगिन की अनुमति देता है। डिफ़ॉल्ट no
है।
यह निर्दिष्ट करता है कि क्या रूट ssh का उपयोग करके लॉगिन कर सकता है, डिफ़ॉल्ट no
है। संभावित मान:
yes
: रूट पासवर्ड और निजी कुंजी का उपयोग करके लॉगिन कर सकता है
without-password
या prohibit-password
: रूट केवल निजी कुंजी के साथ लॉगिन कर सकता है
forced-commands-only
: रूट केवल निजी कुंजी का उपयोग करके लॉगिन कर सकता है और यदि कमांड विकल्प निर्दिष्ट किए गए हैं
no
: नहीं
यह उन फ़ाइलों को निर्दिष्ट करता है जो सार्वजनिक कुंजियों को शामिल करती हैं जो उपयोगकर्ता प्रमाणीकरण के लिए उपयोग की जा सकती हैं। इसमें ऐसे टोकन हो सकते हैं जैसे %h
, जिसे होम डायरेक्टरी द्वारा प्रतिस्थापित किया जाएगा। आप पूर्ण पथ निर्दिष्ट कर सकते हैं (जो /
से शुरू होता है) या उपयोगकर्ता के होम से सापेक्ष पथ। उदाहरण के लिए:
यह कॉन्फ़िगरेशन यह संकेत करेगा कि यदि आप उपयोगकर्ता "testusername" की private कुंजी के साथ लॉगिन करने का प्रयास करते हैं, तो ssh आपकी कुंजी की सार्वजनिक कुंजी की तुलना /home/testusername/.ssh/authorized_keys
और /home/testusername/access
में स्थित कुंजियों से करेगा।
SSH एजेंट फॉरवर्डिंग आपको अपने स्थानीय SSH कुंजी का उपयोग करने की अनुमति देता है बजाय इसके कि आप कुंजी (बिना पासफ़्रेज़ के!) अपने सर्वर पर छोड़ दें। इसलिए, आप ssh के माध्यम से एक होस्ट पर जंप कर सकेंगे और वहां से दूसरे होस्ट पर जंप कर सकेंगे जो आपकी प्रारंभिक होस्ट में स्थित कुंजी का उपयोग करता है।
आपको इस विकल्प को $HOME/.ssh.config
में इस तरह सेट करना होगा:
ध्यान दें कि यदि Host
*
है, तो हर बार जब उपयोगकर्ता किसी अन्य मशीन पर कूदता है, वह होस्ट कुंजियों तक पहुँच प्राप्त कर सकेगा (जो एक सुरक्षा समस्या है)।
फाइल /etc/ssh_config
इस विकल्पों को ओवरराइड कर सकती है और इस कॉन्फ़िगरेशन की अनुमति या अस्वीकृति कर सकती है।
फाइल /etc/sshd_config
ssh-agent फॉरवर्डिंग को कीवर्ड AllowAgentForwarding
के साथ अनुमति या अस्वीकृति कर सकती है (डिफ़ॉल्ट अनुमति है)।
यदि आप पाते हैं कि फॉरवर्ड एजेंट किसी वातावरण में कॉन्फ़िगर किया गया है, तो निम्नलिखित पृष्ठ को पढ़ें क्योंकि आप इसे विशेषाधिकार बढ़ाने के लिए दुरुपयोग कर सकते हैं:
SSH Forward Agent exploitationफाइल /etc/profile
और /etc/profile.d/
के अंतर्गत फ़ाइलें स्क्रिप्ट हैं जो तब निष्पादित होती हैं जब कोई उपयोगकर्ता एक नया शेल चलाता है। इसलिए, यदि आप इनमें से किसी को लिख सकते हैं या संशोधित कर सकते हैं, तो आप विशेषाधिकार बढ़ा सकते हैं।
यदि कोई अजीब प्रोफ़ाइल स्क्रिप्ट मिलती है, तो आपको इसे संवेदनशील विवरण के लिए जांचना चाहिए।
OS के आधार पर /etc/passwd
और /etc/shadow
फ़ाइलें एक अलग नाम का उपयोग कर सकती हैं या एक बैकअप हो सकता है। इसलिए यह अनुशंसित है कि इनमें से सभी को खोजें और जांचें कि क्या आप इन्हें पढ़ सकते हैं यह देखने के लिए क्या फ़ाइलों के अंदर हैश हैं:
कुछ अवसरों पर आप password hashes को /etc/passwd
(या समकक्ष) फ़ाइल के अंदर पा सकते हैं।
पहले, निम्नलिखित कमांड में से किसी एक के साथ एक पासवर्ड उत्पन्न करें।
फिर उपयोगकर्ता hacker
जोड़ें और उत्पन्न पासवर्ड जोड़ें।
उदाहरण: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
आप अब su
कमांड का उपयोग hacker:hacker
के साथ कर सकते हैं।
वैकल्पिक रूप से, आप बिना पासवर्ड के एक डमी उपयोगकर्ता जोड़ने के लिए निम्नलिखित पंक्तियों का उपयोग कर सकते हैं। चेतावनी: आप मशीन की वर्तमान सुरक्षा को कमजोर कर सकते हैं।
NOTE: BSD प्लेटफार्मों में /etc/passwd
/etc/pwd.db
और /etc/master.passwd
पर स्थित है, साथ ही /etc/shadow
का नाम बदलकर /etc/spwd.db
कर दिया गया है।
आपको यह जांचना चाहिए कि क्या आप कुछ संवेदनशील फ़ाइलों में लिख सकते हैं। उदाहरण के लिए, क्या आप कुछ सेवा कॉन्फ़िगरेशन फ़ाइल में लिख सकते हैं?
उदाहरण के लिए, यदि मशीन tomcat सर्वर चला रही है और आप /etc/systemd/ के अंदर Tomcat सेवा कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं, तो आप निम्नलिखित पंक्तियों को संशोधित कर सकते हैं:
आपका बैकडोर अगली बार जब टॉमकैट शुरू होगा, तब निष्पादित होगा।
निम्नलिखित फ़ोल्डर बैकअप या दिलचस्प जानकारी रख सकते हैं: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (संभवतः आप अंतिम फ़ोल्डर को पढ़ने में असमर्थ होंगे लेकिन प्रयास करें)
Read the code of linPEAS, यह कई संभावित फ़ाइलों की खोज करता है जो पासवर्ड हो सकते हैं। एक और दिलचस्प उपकरण जिसका आप इसका उपयोग कर सकते हैं: LaZagne जो एक ओपन-सोर्स एप्लिकेशन है जिसका उपयोग Windows, Linux और Mac पर स्थानीय कंप्यूटर पर संग्रहीत कई पासवर्ड पुनर्प्राप्त करने के लिए किया जाता है।
यदि आप लॉग पढ़ सकते हैं, तो आप उनमें दिलचस्प/गोपनीय जानकारी खोजने में सक्षम हो सकते हैं। लॉग जितना अजीब होगा, वह उतना ही दिलचस्प होगा (संभवतः)। इसके अलावा, कुछ "खराब" कॉन्फ़िगर किए गए (बैकडोर?) ऑडिट लॉग आपको ऑडिट लॉग में पासवर्ड रिकॉर्ड करने की अनुमति दे सकते हैं जैसा कि इस पोस्ट में समझाया गया है: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
लॉग पढ़ने के लिए समूह adm वास्तव में सहायक होगा।
आपको उन फ़ाइलों की जांच भी करनी चाहिए जिनमें "password" शब्द उनके नाम में या सामग्री के अंदर है, और साथ ही लॉग के अंदर IPs और ईमेल की जांच करनी चाहिए, या हैश regexps। मैं यहाँ यह नहीं बताने जा रहा कि यह सब कैसे करना है लेकिन यदि आप रुचि रखते हैं तो आप linpeas द्वारा किए गए अंतिम चेक देख सकते हैं।
यदि आप जानते हैं कि एक python स्क्रिप्ट कहाँ निष्पादित होने जा रही है और आप उस फ़ोल्डर के अंदर लिख सकते हैं या आप python पुस्तकालयों को संशोधित कर सकते हैं, तो आप OS पुस्तकालय को संशोधित कर सकते हैं और इसे बैकडोर कर सकते हैं (यदि आप लिख सकते हैं जहाँ python स्क्रिप्ट निष्पादित होने जा रही है, तो os.py पुस्तकालय को कॉपी और पेस्ट करें)।
पुस्तकालय को बैकडोर करने के लिए बस os.py पुस्तकालय के अंत में निम्नलिखित पंक्ति जोड़ें (IP और PORT बदलें):
logrotate
में एक सुरक्षा कमी उपयोगकर्ताओं को लॉग फ़ाइल या इसके माता-पिता निर्देशिकाओं पर लेखन अनुमतियों के साथ संभावित रूप से बढ़ी हुई विशेषाधिकार प्राप्त करने की अनुमति देती है। इसका कारण यह है कि logrotate
, जो अक्सर रूट के रूप में चलता है, को मनमाने फ़ाइलों को निष्पादित करने के लिए हेरफेर किया जा सकता है, विशेष रूप से /etc/bash_completion.d/ जैसी निर्देशिकाओं में। यह महत्वपूर्ण है कि /var/log में ही नहीं, बल्कि किसी भी निर्देशिका में जहां लॉग रोटेशन लागू किया गया है, अनुमतियों की जांच की जाए।
यह सुरक्षा कमी logrotate
संस्करण 3.18.0
और पुराने को प्रभावित करती है
सुरक्षा कमी के बारे में अधिक विस्तृत जानकारी इस पृष्ठ पर मिल सकती है: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
आप इस सुरक्षा कमी का लाभ logrotten के साथ उठा सकते हैं।
यह सुरक्षा कमी CVE-2016-1247 (nginx लॉग), के बहुत समान है, इसलिए जब भी आप पाते हैं कि आप लॉग को बदल सकते हैं, तो जांचें कि उन लॉग का प्रबंधन कौन कर रहा है और जांचें कि क्या आप लॉग को सिम्लिंक्स द्वारा प्रतिस्थापित करके विशेषाधिकार बढ़ा सकते हैं।
सुरक्षा कमी संदर्भ: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
यदि, किसी भी कारण से, एक उपयोगकर्ता /etc/sysconfig/network-scripts में लेखन करने में सक्षम है ifcf-<whatever>
स्क्रिप्ट या इसे समायोजित कर सकता है, तो आपका सिस्टम प्वंड है।
नेटवर्क स्क्रिप्ट, ifcg-eth0 उदाहरण के लिए नेटवर्क कनेक्शनों के लिए उपयोग की जाती हैं। वे बिल्कुल .INI फ़ाइलों की तरह दिखती हैं। हालाँकि, उन्हें Linux पर नेटवर्क प्रबंधक (dispatcher.d) द्वारा ~sourced~ किया जाता है।
मेरे मामले में, इन नेटवर्क स्क्रिप्ट में NAME=
विशेषता को सही तरीके से संभाला नहीं गया है। यदि आपके नाम में सफेद/खाली स्थान है तो सिस्टम सफेद/खाली स्थान के बाद के भाग को निष्पादित करने की कोशिश करता है। इसका मतलब है कि पहले सफेद स्थान के बाद का सब कुछ रूट के रूप में निष्पादित होता है।
उदाहरण के लिए: /etc/sysconfig/network-scripts/ifcfg-1337
डायरेक्टरी /etc/init.d
स्क्रिप्ट्स का घर है जो System V init (SysVinit) के लिए है, क्लासिक Linux सेवा प्रबंधन प्रणाली। इसमें सेवाओं को start
, stop
, restart
, और कभी-कभी reload
करने के लिए स्क्रिप्ट्स शामिल हैं। इन्हें सीधे या /etc/rc?.d/
में पाए जाने वाले प्रतीकात्मक लिंक के माध्यम से निष्पादित किया जा सकता है। Redhat सिस्टम में एक वैकल्पिक पथ /etc/rc.d/init.d
है।
दूसरी ओर, /etc/init
Upstart से संबंधित है, जो Ubuntu द्वारा पेश की गई एक नई सेवा प्रबंधन प्रणाली है, जो सेवा प्रबंधन कार्यों के लिए कॉन्फ़िगरेशन फ़ाइलों का उपयोग करती है। Upstart में संक्रमण के बावजूद, SysVinit स्क्रिप्ट्स अभी भी Upstart कॉन्फ़िगरेशन के साथ उपयोग की जाती हैं क्योंकि Upstart में एक संगतता परत है।
systemd एक आधुनिक प्रारंभिककरण और सेवा प्रबंधक के रूप में उभरता है, जो मांग पर डेमन प्रारंभ करने, ऑटोमाउंट प्रबंधन, और सिस्टम स्थिति स्नैपशॉट जैसी उन्नत सुविधाएँ प्रदान करता है। यह वितरण पैकेजों के लिए फ़ाइलों को /usr/lib/systemd/
में और प्रशासक संशोधनों के लिए /etc/systemd/system/
में व्यवस्थित करता है, जिससे सिस्टम प्रशासन प्रक्रिया को सरल बनाया जाता है।
LinEnum: https://github.com/rebootuser/LinEnum(-t विकल्प) Enumy: https://github.com/luke-goddard/enumy Unix Privesc Check: http://pentestmonkey.net/tools/audit/unix-privesc-check Linux Priv Checker: www.securitysift.com/download/linuxprivchecker.py BeeRoot: https://github.com/AlessandroZ/BeRoot/tree/master/Linux Kernelpop: Linux और MAC में कर्नेल कमजोरियों की गणना करें https://github.com/spencerdodd/kernelpop Mestaploit: multi/recon/local_exploit_suggester Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester EvilAbigail (भौतिक पहुंच): https://github.com/GDSSecurity/EvilAbigail अधिक स्क्रिप्ट्स का संकलन: https://github.com/1N3/PrivEsc
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)