'n Berging en verspreidingstelsel bekend as 'n Docker registry is in plek vir Docker-prente wat genoem word en in verskeie weergawes kan voorkom, onderskei deur etikette. Hierdie prente is georganiseer binne Docker repositories in die registry, elke repository stoor verskillende weergawes van 'n spesifieke prent. Die funksionaliteit wat verskaf word, laat toe dat prente plaaslik afgelaai of na die registry opgelaai kan word, mits die gebruiker die nodige toestemmings het.
DockerHub dien as die standaard openbare registry vir Docker, maar gebruikers het ook die opsie om 'n plaaslike weergawe van die oopbron Docker registry/verspreiding te bedryf of te kies vir die kommersieel ondersteun Docker Trusted Registry. Daarbenewens kan verskeie ander openbare registries aanlyn gevind word.
Om 'n prent van 'n plaaslike registry af te laai, word die volgende opdrag gebruik:
dockerpullmy-registry:9000/foo/bar:2.1
Hierdie opdrag haal die foo/bar beeld weergawe 2.1 van die plaaslike registrasie by die my-registry domein op poort 9000. Omgekeerd, om dieselfde beeld van DockerHub af te laai, veral as 2.1 die nuutste weergawe is, vereenvoudig die opdrag tot:
dockerpullfoo/bar
Standaard poort: 5000
PORT STATE SERVICE VERSION
5000/tcp open http Docker Registry (API: 2.0)
Ontdekking
Die maklikste manier om hierdie diens te ontdek wat loop, is om dit op die uitvoer van nmap te kry. In elk geval, let daarop dat, aangesien dit 'n HTTP-gebaseerde diens is, dit agter HTTP-proxies kan wees en nmap dit nie sal opspoor.
Sommige vingerafdrukke:
As jy toegang tot / kry, word daar niks in die antwoord teruggestuur nie
As jy toegang tot /v2/ kry, word {} teruggestuur
As jy toegang tot /v2/_catalog kry, kan jy verkry:
Docker registry kan gekonfigureer word om HTTP of HTTPS te gebruik. So die eerste ding wat jy dalk moet doen, is om te vind watter een geconfigureer word:
Docker registry kan ook gekonfigureer word om authentisering te vereis:
curl-khttps://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"]}
As die Docker Registry outentisering vereis, kan jyprobeer om dit te brute force met hierdie.
As jy geldige akrediteerbesonderhede vind, sal jy dit moet gebruik om die registry te enumerate, in curl kan jy dit soos volg gebruik:
Sodra jy toegang tot die docker registry verkry het, is hier 'n paar opdragte wat jy kan gebruik om dit te evalueer:
#List repositoriescurl-shttp://10.10.10.10:5000/v2/_catalog{"repositories":["alpine","ubuntu"]}#Get tags of a repositorycurl-shttp://192.251.36.3:5000/v2/ubuntu/tags/list{"name":"ubuntu","tags":["14.04","12.04","18.04","16.04"]}#Get manifestscurl-shttp://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 blobscurl http://10.10.10.10:5000/v2/ubuntu/blobs/sha256:2a62ecb2a3e5bcdbac8b6edc58fae093a39381e05d08ca75ed27cae94125f935 --output blob1.tar
#Inspect the insides of each blobtar-xfblob1.tar#After this,inspect the new folders and files created in the current directory
Let daarop dat wanneer jy die blobs lêers aflaai en dekomprimeer, sal lêers en mappen in die huidige gids verskyn. As jy al die blobs aflaai en in dieselfde gids dekomprimeer, sal hulle waardes van die voorheen gedecomprimeerde blobs oorskryf, so wees versigtig. Dit mag interessant wees om elke blob binne 'n ander gids te dekomprimeer om die presiese inhoud van elke blob te ondersoek.
Enumerasie met behulp van docker
#Once you know which images the server is saving (/v2/_catalog) you can pull themdockerpull10.10.10.10:5000/ubuntu#Check the commands used to create the layers of the imagedockerhistory10.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 shelldockerrun-it10.10.10.10:5000/ubuntubash#Leave this shell runningdockerps#Using a different shelldockerexec-it7d3a81fe42d7bash#Get ash shell inside docker container
Backdooring WordPress image
In die scenario waar jy 'n Docker Registry gevind het wat 'n wordpress beeld stoor, kan jy dit backdoor.
Skep die backdoor: