hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving/ext.md

227 lines
28 KiB
Markdown

<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks) github repos में PRs सबमिट करके।
</details>
# Ext - Extended Filesystem
**Ext2** बूट पार्टीशन जैसे **जर्नलिंग नहीं** करने वाले पार्टीशनों के लिए सबसे सामान्य फ़ाइल सिस्टम है। **Ext3/4** **जर्नलिंग** हैं और सामान्यत: **शेष पार्टीशनों** के लिए उपयोग किए जाते हैं।
फ़ाइल सिस्टम में सभी ब्लॉक समूहों का एक ही आकार होता है और यह क्रमशः स्टोर किए जाते हैं। यह करने से कर्नेल को आसानी से डिस्क में एक ब्लॉक समूह की स्थिति का पता लगाने में सहायता मिलती है।
प्रत्येक ब्लॉक समूह में निम्नलिखित जानकारी शामिल होती है:
* फ़ाइल सिस्टम का सुपरब्लॉक की एक प्रतिलिपि
* ब्लॉक समूह विवरणकर्ताओं की एक प्रतिलिपि
* डेटा ब्लॉक बिटमैप जो समूह के अंदर मुक्त ब्लॉकों की पहचान के लिए उपयोग किया जाता है
* इनोड बिटमैप, जो समूह के अंदर मुक्त इनोड की पहचान के लिए उपयोग किया जाता है
* इनोड तालिका: यह एक श्रृंखला के रूप में होती है, हर एक में एक पूर्वनिर्धारित आकार का फ़ाइल सिस्टम 1,024 बाइट ब्लॉक में 8 इनोड्स होते हैं, जबकि 4,096-बाइट ब्लॉक में 32 इनोड्स होते हैं। ध्यान दें कि Ext2 में, इनोड नंबर और संबंधित ब्लॉक नंबर के बीच एक मैपिंग स्टोर करने की आवश्यकता नहीं है क्योंकि अंतिम मान ब्लॉक समूह संख्या और इनोड तालिका के अंदर स्थानीय स्थिति से प्राप्त किया जा सकता है। उदाहरण के लिए, मान लें कि प्रत्येक ब्लॉक समूह में 4,096 इनोड होते हैं और हमें डिस्क पर इनोड 13,021 का पता लगाना है। इस मामले में, इनोड तीसरे ब्लॉक समूह का है और इसका डिस्क पता संबंधित इनोड तालिका के 733 वें प्रविष्टि में संग्रहीत है। जैसा कि आप देख सकते हैं, इनोड नंबर केवल एक कुंजी है जिसका उपयोग Ext2 रूटीनों द्वारा त्वरित रूप से डिस्क पर उचित इनोड विवरणकर्ता प्राप्त करने के लिए किया जाता है
* फ़ाइलें रखने वाले डेटा ब्लॉक। कोई भी ब्लॉक जिसमें कोई अर्थपूर्ण जानकारी नहीं है, उसे मुक्त कहा जाता है।
![](<../../../.gitbook/assets/image (406).png>)
## Ext वैकल्पिक विशेषताएँ
**विशेषताएँ प्रभावित करती हैं** कि डेटा कहाँ स्थित है, **कैसे** डेटा इनोड में स्टोर किया जाता है और कुछ उनमें से **अतिरिक्त मेटाडेटा** प्रदान कर सकती हैं, इसलिए विशेषताएँ Ext में महत्वपूर्ण हैं।
Ext में ऐसी वैकल्पिक विशेषताएँ हैं जिन्हें आपका ओएस समर्थन कर सकता है या नहीं, तीन संभावनाएँ हैं:
* संगत
* असंगत
* संगत केवल पढ़ने के लिए: इसे माउंट किया जा सकता है लेकिन लेखन के लिए नहीं
यदि **असंगत** विशेषताएँ हैं तो आप फ़ाइल सिस्टम को माउंट नहीं कर पाएंगे क्योंकि ओएस नहीं जानेगा कि डेटा तक पहुंचने का तरीका क्या है।
{% hint style="info" %}
संदिग्ध हमलावर के पास गैर-मानक विस्तार हो सकता है
{% endhint %}
**कोई भी उपयोगी** जो **सुपरब्लॉक** को पढ़ता है, एक **Ext फ़ाइल सिस्टम** की **विशेषताएँ** दिखा सकता है, लेकिन आप `file -sL /dev/sd*` का भी उपयोग कर सकते हैं।
## सुपरब्लॉक
सुपरब्लॉक प्रारंभ से पहले 1024 बाइट है और प्रत्येक समूह के पहले ब्लॉक में दोहराया गया है और इसमें निम्नलिखित शामिल है:
* ब्लॉक आकार
* कुल ब्लॉक
* ब्लॉक प्रति ब्लॉक समूह
* पहले ब्लॉक समूह से पहले आरक्षित ब्लॉक
* कुल इनोड
* इनोड प्रति ब्लॉक समूह
* वॉल्यूम नाम
* अंतिम लेखन समय
* अंतिम माउंट समय
* फ़ाइल सिस्टम को अंतिम बार कहाँ माउंट किया गया था
* फ़ाइल सिस्टम स्थिति (साफ?)
इस जानकारी को एक Ext फ़ाइल सिस्टम फ़ाइल से प्राप्त करना संभव है:
```bash
fsstat -o <offsetstart> /pat/to/filesystem-file.ext
#You can get the <offsetstart> with the "p" command inside fdisk
```
आप नि:शुल्क GUI एप्लिकेशन भी उपयोग कर सकते हैं: [https://www.disk-editor.org/index.html](https://www.disk-editor.org/index.html)\
या आप **python** का भी उपयोग कर सकते हैं सुपरब्लॉक जानकारी प्राप्त करने के लिए: [https://pypi.org/project/superblock/](https://pypi.org/project/superblock/)
## इनोड्स
**इनोड्स** में **ब्लॉकों** की सूची होती है जो **फ़ाइल** के **वास्तविक डेटा** को **सम्मिलित** करती है।\
अगर फ़ाइल बड़ी है, और इनोड **अन्य इनोड्स** के लिंक कर सकता है जो ब्लॉक/अधिक इनोड्स की ओर इशारा करते हैं जो फ़ाइल डेटा को सम्मिलित करते हैं।
![](<../../../.gitbook/assets/image (416).png>)
**Ext2** और **Ext3** में इनोड्स का आकार **128B** है, **Ext4** वर्तमान में **156B** का उपयोग करता है लेकिन भविष्य में विस्तार की अनुमति देने के लिए डिस्क पर **256B** का आवंटन करता है।
इनोड संरचना:
| ऑफसेट | आकार | नाम | विवरणF |
| ------ | ---- | ----------------- | ------------------------------------------------ |
| 0x0 | 2 | फ़ाइल मोड | फ़ाइल मोड और प्रकार |
| 0x2 | 2 | UID | मालिक ID के निचले 16 बिट |
| 0x4 | 4 | आकार इल | फ़ाइल के आकार के निचले 32 बिट |
| 0x8 | 4 | Atime | एपॉक से सेकंड में पहुंच का समय |
| 0xC | 4 | Ctime | एपॉक से सेकंड में परिवर्तन का समय |
| 0x10 | 4 | Mtime | एपॉक से सेकंड में संशोधन का समय |
| 0x14 | 4 | Dtime | एपॉक से सेकंड में हटाने का समय |
| 0x18 | 2 | GID | समूह ID के निचले 16 बिट |
| 0x1A | 2 | Hlink count | हार्ड लिंक गणना |
| 0xC | 4 | ब्लॉक्स आईओ | ब्लॉक गणना के निचले 32 बिट |
| 0x20 | 4 | ध्वज | ध्वज |
| 0x24 | 4 | यूनियन osd1 | लिनक्स: I संस्करण |
| 0x28 | 69 | ब्लॉक\[15] | 15 डेटा ब्लॉक की ओर इशारा करता है |
| 0x64 | 4 | संस्करण | NFS के लिए फ़ाइल संस्करण |
| 0x68 | 4 | फ़ाइल एसीएल लो | विस्तारित विशेषताएँ के निचले 32 बिट (ACL, आदि) |
| 0x6C | 4 | फ़ाइल आकार हाई | फ़ाइल के आकार के ऊपरी 32 बिट (केवल ext4) |
| 0x70 | 4 | विघटित फ्रेगमेंट | एक पुराना फ्रेगमेंट पता |
| 0x74 | 12 | Osd 2 | दूसरा ऑपरेटिंग सिस्टम निर्भर संघ |
| 0x74 | 2 | ब्लॉक्स हाई | ब्लॉक गणना के ऊपरी 16 बिट |
| 0x76 | 2 | फ़ाइल एसीएल हाई | विस्तारित विशेषताएँ के ऊपरी 16 बिट (ACL, आदि) |
| 0x78 | 2 | UID हाई | मालिक ID के ऊपरी 16 बिट |
| 0x7A | 2 | GID हाई | समूह ID के ऊपरी 16 बिट |
| 0x7C | 2 | चेकसम आईओ | इनोड चेकसम के निचले 16 बिट |
"संशोधित" वह समय है जिस समय फ़ाइल की _सामग्री_ को संशोधित किया गया है। इसे अक्सर "_मॉटाइम_" कहा जाता है।\
"परिवर्तन" वह समय है जिस समय फ़ाइल का _इनोड_ परिवर्तित किया गया है, जैसे अनुमतियाँ बदलना, स्वामित्व, फ़ाइल का नाम, और हार्ड लिंक की संख्या। इसे अक्सर "_सीटाइम_" कहा जाता है।
इनोड संरचना विस्तारित (Ext4):
| ऑफसेट | आकार | नाम | विवरण |
| ------ | ---- | ------------ | ------------------------------------------- |
| 0x80 | 2 | अतिरिक्त आकार | मानक 128 से अतिरिक्त कितने बाइट उपयोग किए गए हैं |
| 0x82 | 2 | चेकसम हाई | इनोड चेकसम के ऊपरी 16 बिट |
| 0x84 | 4 | सीटाइम अतिरिक्त | परिवर्तन समय अतिरिक्त बिट |
| 0x88 | 4 | मॉटाइम अतिरिक्त | संशोधन समय अतिरिक्त बिट |
| 0x8C | 4 | एक्सेस टाइम अतिरिक्त | पहुंच का समय अतिरिक्त बिट |
| 0x90 | 4 | क्रिएट टाइम | फ़ाइल निर्माण का समय (एपॉक से सेकंड) |
| 0x94 | 4 | क्रिएट टाइम अतिरिक्त | फ़ाइल निर्माण का अतिरिक्त बिट |
| 0x98 | 4 | संस्करण हाई | संस्करण के ऊपरी 32 बिट |
| 0x9C | | अप्रयुक्त | भविष्य के विस्तार के लिए रिजर्व्ड स्थान |
विशेष इनोड्स:
| इनोड | विशेष उद्देश्य |
| ----- | ---------------------------------------------------- |
| 0 | ऐसा कोई इनोड नहीं है, गणना 1 से शुरू होती है |
| 1 | विकृत ब्लॉक सूची |
| 2 | रूट निर्देशिका |
| 3 | उपयोगकर्ता कोटा |
| 4 | समूह कोटा |
| 5 | बूट लोडर |
| 6 | डिलीट निर्देशिका |
| 7 | रिजाइज़ करने के लिए आरक्षित समूह विवरण (फ़ाइल सिस्टम का आकार बदलने के लिए) |
| 8 | जर्नल |
| 9 | इनोड को असमाविष्ट करें (स्नैपशॉट के लिए) |
| 10 | रिप्लिका इनोड |
| 11 | पहला गैर-रिजर्व इनोड (अक्सर खो जाता है + मिला हुआ) |
{% hint style="info" %}
ध्यान दें कि निर्माण समय केवल Ext4 में ही प्रकट होता है।
{% endhint %}
इनोड नंबर जानकर आप आसानी से इसका सूचकांक पा सकते हैं:
* वहाँ एक इनोड का समूह जिसमें एक इनोड शामिल है: (इनोड नंबर - 1) / (इनोड्स प्रति समूह)
* इसके समूह में **इंडेक्स**: (इनोड नंबर - 1) mod(इनोड/समूह)
* **इनोड तालिका** में **ऑफसेट**: इनोड नंबर \* (इनोड आकार)
* "-1" इसलिए है क्योंकि इनोड 0 परिभाषित नहीं है (उपयोग नहीं होता)
```bash
ls -ali /bin | sort -n #Get all inode numbers and sort by them
stat /bin/ls #Get the inode information of a file
istat -o <start offset> /path/to/image.ext 657103 #Get information of that inode inside the given ext file
icat -o <start offset> /path/to/image.ext 657103 #Cat the file
```
**फ़ाइल मोड**
| संख्या | विवरण |
| ------ | --------------------------------------------------------------------------------------------------- |
| **15** | **रेग/स्लिंक-13/सॉकेट-14** |
| **14** | **डायरेक्टरी/ब्लॉक बिट 13** |
| **13** | **चार डिवाइस/ब्लॉक बिट 14** |
| **12** | **FIFO** |
| 11 | सेट UID |
| 10 | सेट GID |
| 9 | स्टिकी बिट (इसके बिना, किसी भी व्यक्ति जिसके पास डायरेक्टरी पर लेखन और क्रियान्वयन अनुमतियाँ हैं, फ़ाइलें हटा सकता और नाम बदल सकता है) |
| 8 | मालिक पढ़ें |
| 7 | मालिक लिखें |
| 6 | मालिक क्रियान्वयन |
| 5 | समूह पढ़ें |
| 4 | समूह लिखें |
| 3 | समूह क्रियान्वयन |
| 2 | अन्य व्यक्ति पढ़ें |
| 1 | अन्य व्यक्ति लिखें |
| 0 | अन्य व्यक्ति क्रियान्वयन |
**बोल्ड बिट्स (12, 13, 14, 15) दर्शाते हैं कि फ़ाइल किस प्रकार की है (एक डायरेक्टरी, सॉकेट...) केवल बोल्ड विकल्पों में से एक हो सकता है।**
**डायरेक्टरी**
| ऑफसेट | आकार | नाम | विवरण |
| ------ | ---- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 0x0 | 4 | इनोड | |
| 0x4 | 2 | रेक लेन | रेकॉर्ड लंबाई |
| 0x6 | 1 | नाम लंबाई | नाम लंबाई |
| 0x7 | 1 | फ़ाइल प्रकार | <p>0x00 अज्ञात<br>0x01 नियमित</p><p>0x02 निर्देशक</p><p>0x03 चार डिवाइस</p><p>0x04 ब्लॉक डिवाइस</p><p>0x05 FIFO</p><p>0x06 सॉकेट</p><p>0x07 सिम लिंक</p> |
| 0x8 | | नाम | नाम स्ट्रिंग (अधिकतम 255 वर्ण) |
**प्रदर्शन बढ़ाने के लिए, रूट हैश डायरेक्टरी ब्लॉक का उपयोग किया जा सकता है।**
**विस्तारित गुण**
किया जा सकता है
* इनोड्स के बीच अतिरिक्त जगह (256 - इनोड का आकार, सामान्यत: = 100)
* इनोड में फ़ाइल\_एसीएल के द्वारा संकेतित डेटा ब्लॉक
उपयोग किया जा सकता है कुछ भी यदि नाम "उपयोगकर्ता" से शुरू होता है। इस तरह से डेटा छुपाया जा सकता है।
विस्तारित गुण प्रविष्टियाँ
| ऑफसेट | आकार | नाम | विवरण |
| ------ | ---- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 0x0 | 1 | नाम लंबाई | गुण के नाम की लंबाई |
| 0x1 | 1 | नाम सूची | <p>0x0 = कोई उपसर्ग नहीं</p><p>0x1 = उपयोगकर्ता। उपसर्ग</p><p>0x2 = सिस्टम.पॉसिक्स_एसीएल_एक्सेस</p><p>0x3 = सिस्टम.पॉसिक्स_एसीएल_डिफ़ॉल्ट</p><p>0x4 = विश्वसनीय।</p><p>0x6 = सुरक्षा।</p><p>0x7 = सिस्टम।</p><p>0x8 = सिस्टम.रिचेक्ल</p> |
| 0x2 | 2 | मूल्य ऑफस | पहले इनोड प्रविष्टि या ब्लॉक की शुरुआत से अंतर |
| 0x4 | 4 | मूल्य ब्लॉक्स | मूल्य संग्रहित किया गया डिस्क ब्लॉक या इस ब्लॉक के लिए शून्य |
| 0x8 | 4 | मूल्य आकार | मूल्य की लंबाई |
| 0xC | 4 | हैश | ब्लॉक में गुणों के लिए हैश या अगर इनोड में है तो शून्य |
| 0x10 | | नाम | गुण का नाम बिना अंतिम नल वाला |
```bash
setfattr -n 'user.secret' -v 'This is a secret' file.txt #Save a secret using extended attributes
getfattr file.txt #Get extended attribute names of a file
getdattr -n 'user.secret' file.txt #Get extended attribute called "user.secret"
```
## फ़ाइल सिस्टम दृश्य
फ़ाइल सिस्टम की सामग्री देखने के लिए, आप **मुफ्त उपकरण का उपयोग कर सकते हैं**: [https://www.disk-editor.org/index.html](https://www.disk-editor.org/index.html)\
या आप इसे अपने लिनक्स में `mount` कमांड का उपयोग करके माउंट कर सकते हैं।
[https://piazza.com/class\_profile/get\_resource/il71xfllx3l16f/inz4wsb2m0w2oz#:\~:text=The%20Ext2%20file%20system%20divides,lower%20average%20disk%20seek%20time.](https://piazza.com/class\_profile/get\_resource/il71xfllx3l16f/inz4wsb2m0w2oz#:\~:text=The%20Ext2%20file%20system%20divides,lower%20average%20disk%20seek%20time.)