Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
PwnKit-Exploit — CVE-2021-4034 (PwnKit) के लिए C-आधारित प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो pkexec में आउट-ऑफ-बाउंड्स राइट के माध्यम से स्थानीय विशेषाधिकार वृद्धि को सक्षम करता है। इसमें बिल्ड निर्देश और भेद्यता स्पष्टीकरण शामिल है। | Kitploit
उपकरण/GitHubGitHub/luijait/pwnkit-exploit
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंग
GitHubluijait/pwnkit-exploit

PwnKit-Exploit

CVE-2021-4034 (PwnKit) के लिए C-आधारित प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो pkexec में आउट-ऑफ-बाउंड्स राइट के माध्यम से स्थानीय विशेषाधिकार वृद्धि को सक्षम करता है। इसमें बिल्ड निर्देश और भेद्यता स्पष्टीकरण शामिल है।

रिपॉजिटरी देखें
98184 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

PwnKit-Exploit

CVE-2021-4034

PolKit

@c0br40x ने README में यह अनुभाग बनाने में मदद की!!

प्रमाण की अवधारणा

प्रमाण की अवधारणा

root@kitploit:~
debian@debian:~/PwnKit-Exploit$ make
cc -Wall    exploit.c   -o exploit
debian@debian:~/PwnKit-Exploit$ whoami
debian
debian@debian:~/PwnKit-Exploit$ ./exploit
Current User before execute exploit
hacker@victim$whoami: debian
Exploit written by @luijait (0x6c75696a616974)
[+] Enjoy your root if exploit was completed succesfully
root@debian:/home/debian/PwnKit-Exploit# whoami
root
root@debian:/home/debian/PwnKit-Exploit# 

फिक्स

Commandउपयोग
sudo chmod 0755 pkexecCVE 2021-4034 का समाधान

स्थापना और उपयोग

git clone https://github.com/luijait/PwnKit-Exploit

cd PwnKit-Exploit

make

./exploit

whoami

Commandउपयोगिता
make cleanसंशोधित कोड का परीक्षण करने के लिए बिल्ड को साफ करें

स्पष्टीकरण

blog.qualys.com पर आधारित

pkexec के main() फ़ंक्शन की शुरुआत कमांड-लाइन आर्गुमेंट्स को प्रोसेस करती है (लाइन 534-568), और यदि उसका पथ निरपेक्ष नहीं है तो PATH पर्यावरण चर के निर्देशिकाओं में निष्पादित किए जाने वाले प्रोग्राम की खोज करती है (लाइन 610-640):

root@kitploit:~

435 main (int argc, char *argv[])
436 {
...
534   for (n = 1; n < (guint) argc; n++)
535     {
...
568     }
...
610   path = g_strdup (argv[n]);
...
629   if (path[0] != '/')
630     {
...
632       s = g_find_program_in_path (path);
...
639       argv[n] = path = s;
640     }

दुर्भाग्य से, यदि कमांड-लाइन आर्गुमेंट्स की संख्या argc 0 है – जिसका अर्थ है कि यदि हम execve() को पास करने वाली आर्गुमेंट लिस्ट argv खाली है, अर्थात {NULL} – तो argv[0] NULL है। यह आर्गुमेंट लिस्ट का टर्मिनेटर है। इसलिए:

  • लाइन 534 पर, पूर्णांक n स्थायी रूप से 1 पर सेट हो जाता है;
  • लाइन 610 पर, पॉइंटर path को argv[1] से सीमा से बाहर पढ़ा जाता है;
  • लाइन 639 पर, पॉइंटर s को argv[1] पर सीमा से बाहर लिखा जाता है।

लेकिन वास्तव में इस सीमा से बाहर argv[1] से क्या पढ़ा और लिखा जाता है?

इस प्रश्न का उत्तर देने के लिए, हमें संक्षेप में विषयांतर करना होगा। जब हम एक नया प्रोग्राम execve() करते हैं, तो कर्नेल हमारे आर्गुमेंट, पर्यावरण स्ट्रिंग्स और पॉइंटर्स (argv और envp) को नए प्रोग्राम के स्टैक के अंत में कॉपी करता है; उदाहरण के लिए:

root@kitploit:~
|---------+---------+-----+------------|---------+---------+-----+------------| 
| argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | 
|----|----+----|----+-----+-----|------|----|----+----|----+-----+-----|------| 
V         V                V           V         V                V 

"program" "-option"           NULL      "value" "PATH=name"          NULL 

स्पष्ट रूप से, क्योंकि argv और envp पॉइंटर्स मेमोरी में सन्निकट हैं, यदि argc 0 है, तो सीमा से बाहर argv[1] वास्तव में envp[0] है, जो हमारे पहले पर्यावरण चर "value" का पॉइंटर है। परिणामतः:

  • लाइन 610 पर, निष्पादित किए जाने वाले प्रोग्राम का पथ argv[1] (अर्थात envp[0]) से सीमा से बाहर पढ़ा जाता है, और "value" को इंगित करता है;
  • लाइन 632 पर, यह पथ "value" को g_find_program_in_path() में पास किया जाता है (क्योंकि "value" स्लैश से शुरू नहीं होता, लाइन 629 पर);
  • फिर, g_find_program_in_path() हमारे PATH पर्यावरण चर की निर्देशिकाओं में "value" नामक एक निष्पादन योग्य फ़ाइल की खोज करता है;
  • यदि ऐसी निष्पादन योग्य फ़ाइल मिलती है, तो उसका पूर्ण पथ pkexec के main() फ़ंक्शन को लौटा दिया जाता है (लाइन 632 पर);
  • अंत में, लाइन 639 पर, यह पूर्ण पथ argv[1] (अर्थात envp[0]) पर सीमा से बाहर लिखा जाता है, जिससे हमारा पहला पर्यावरण चर अधिलेखित हो जाता है।

तो, अधिक सटीक रूप से कहें तो:

  • यदि हमारा PATH पर्यावरण चर "PATH=name" है, और यदि निर्देशिका "name" (वर्तमान कार्यशील निर्देशिका में) मौजूद है और इसमें "value" नामक एक निष्पादन योग्य फ़ाइल है, तो स्ट्रिंग "name/value" का एक पॉइंटर envp[0] पर सीमा से बाहर लिखा जाता है;
  • या
  • यदि हमारा PATH "PATH=name=." है, और यदि निर्देशिका "name=." मौजूद है और इसमें "value" नामक एक निष्पादन योग्य फ़ाइल है, तो स्ट्रिंग "name=./value" का एक पॉइंटर envp[0] पर सीमा से बाहर लिखा जाता है।

दूसरे शब्दों में, यह सीमा से बाहर लिखना हमें pkexec के वातावरण में एक "असुरक्षित" पर्यावरण चर (उदाहरण के लिए, LD_PRELOAD) को पुनः प्रस्तुत करने की अनुमति देता है। ये "असुरक्षित" चर सामान्यतः main() फ़ंक्शन को कॉल करने से पहले SUID प्रोग्राम के वातावरण से (ld.so द्वारा) हटा दिए जाते हैं। हम अगले खंड में इस शक्तिशाली प्राथमिकता का शोषण करेंगे।

अंतिम समय का नोट: polkit गैर-लिनक्स ऑपरेटिंग सिस्टम जैसे Solaris और *BSD का भी समर्थन करता है, लेकिन हमने उनकी शोषणीयता की जांच नहीं की है। हालांकि, हम ध्यान देते हैं कि OpenBSD शोषणीय नहीं है, क्योंकि इसका कर्नेल किसी प्रोग्राम को execve() करने से मना कर देता है यदि argc 0 है।

टूल डाउनलोड करें