Rozwiązanie - ENV¶
Skoro mamy dostępny tylko obraz możemy zrobić dwie rzeczy:
- Zobaczyć polecenia budujące obraz używająć docker history
- Przeglądać pliki gotowego obrazu
Zobaczmy zatem docker history
docker pull typicalam/mysecondapp
docker history --no-trunc typicalam/mysecondapp
Nic ciekawego nie widać, większość warstw bierze się z obrazu bazowego zawierającego go
. Przechodzimy więc do drugiego kroku, narzędziem dive
zobaczmy co jest w środku obrazu:
go install github.com/wagoodman/dive@latest
dive typicalam/mysecondapp:latest
lub
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest typicalam/mysecondapp:latest
Interesująca wydaje się instrukcja COPY . /app
, którą widać było w docker history
- dodaje ona wszystkie pliki aplikacji do kontenera docelowego. Jeżeli przesuniemy się do tej instrukcji używając dive
zauważamy, że ma ona digest sha256:3a99e5f4470d934f8b254bb351e17593cd7a429dfc5c903a0b08702a4a64f0b6
. Możemy użyć tego jako identyfikatora warstwy obrazu, rozpakujmy go:
docker save typicalam/mysecondapp:latest -o obraz.tar
mkdir obraz
tar xvf obraz.tar --directory=obraz
cd obraz/blobs
file 3a99e5f4470d934f8b254bb351e17593cd7a429dfc5c903a0b08702a4a64f0b6 # Nasz digest znaleziony przez dive
3a99e5f4470d934f8b254bb351e17593cd7a429dfc5c903a0b08702a4a64f0b6: POSIX tar archive
Rozpakujmy archiwum, aby dostać się do plików w tej warstwie:
mkdir warstwa
tar x
tar xvf --directory=warstwa 3a99e5f4470d934f8b254bb351e17593cd7a429dfc5c903a0b08702a4a64f0b6
ls -la warstwa
app
cd warstwa/app
ls -la
. .. Dockerfile .env .git .gitignore go.mod main.go
Oprócz standardowych rzeczy - plików go
do budowy programu widzimy jeszcze parę doatkowych rzeczy, takich jak:
- Folder .git
- możemy zobaczyć po .git/config
, że jesteśmy w repo https://github.com/TypicalAM/VulnerableENV
- Plik .gitignore z treścią
.env- w takim razie deweloperzy nie chcieli, aby ten plik był gdziekolwiek wypuszczony. Zwykle pliki
.env` zawierają zmienne środowiskowe używane przez deweloperów do testowania swoich programów.
Być może plik ten był używany do testowania funkcjonalności aplikacji, gdyż instrukcja uruchomienia -e HELLO_USER=imie
w docker run
kazała nam nadpisać zmienną środowiskową. Sprawdźmy zawartość .env
:
cat .env
HELLO_USER="PUTrequest{zanieczyszczenie_srodowiska}"
i tak oto zdobyliśmy drugą flagę!