# Docker - ta sẽ cài đặt docker (nếu chưa cài) ```bash sudo apt install -y docker.io docker-compose sudo docker --version #kiểm tra phiên bản sudo docker-compose --version #kiểm tra phiên bản sudo service docker status #kiểm tra dịch vụ ``` - ta phải đọc nội dung file Docker bằng lệnh ```bash cat Dockerfile ``` - Docker sẽ chia ra nhiều loại ## Dockerfile thông thường - đọc hết nội dung trong Dockerfile để xem yêu cầu của Docker (thường là ta thêm file flag) - lưu ý thông tin của PORT - built docker: ```bash sudo docker build . -t <tendocker> ``` > dấu "." là đại diện cho thư mục hiện tại > -t là nametag/tagged > vì ta đang muốn built docker nên về tendocker ta có thể đặt tên mình muốn - kiểm tra những docker mình đã built ```bash! sudo docker images ``` - chạy docker: ```bash sudo docker run --rm -p<PORT>:<PORT> -it <tendocker> ``` > lúc nãy ta build, bh ta run > tham số --rm (là 1 images, tạo 1 container/đĩa iso) - kết nối: ```bash nc localhost <PORT> ``` ## pwn.red/jail - ta kiểm tra Dockerfile nó sẽ copy những file nào (flag.txt chẳng hạn) - rồi built docker bằng lệnh ```bash sudo docker build . -t <tendocker> ``` - tên docker có thể đặt theo ý mình dễ nhớ - built thành công, ta sẽ thiết lập ```bash sudo docker run -d --rm --privileged -p 5000:5000 <tendocker> ``` > built bth - hoặc ```bash sudo docker run --rm -p5000:5000 --privileged -it <tendocker> ``` >built để lắng nghe từ port - mặc định dạng docker red/jail là port 5000 - ta sẽ kiểm tra các docker hiện có ```bash sudo docker ps ``` - ví dụ: ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cf3e54edc21 testgaga2 "/jail/run" 25 seconds ago Up 19 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp dazzling_shaw ``` - ta sẽ chạy docker bằng quyền shell ```bash sudo docker exec -it <CONTAINER ID> sh ``` ## docker-compose - đọc file "docker-compose.yml" ```bash cat docker-compose.yml ``` - built: ```bash sudo docker-compose up --build ``` > lệnh này là vừa build vừa run cho ta - kết nối bên terminal khác: ```bash nc localhost <PORT> ``` - build docker với quyền shell ```bash sudo docker-compose up -d #run container sudo docker-compose exec <service> sh ``` > \<service> lấy trong file docker-compose ## debug động (mục đích tìm libc): - ta sẽ đọc file "xinetd.conf" - kiểm tra file nào sẽ chạy khi ta ``nc 0 <PORT>`` - kiểm tra pid của tiến trình netcat ```bash ps aux | grep <file> ``` - copy pid rồi debug ```bash sudo gdb -p <pid> ``` - copy libc/ld: ```bash sudo docker cp <CONTAINER ID>:<path/libc> . sudo docker cp <CONTAINER ID>:<path/ld> . ``` ## check libc via Docker_shell - đầu tiên ta lấy shell trong Docker như mấy cái hướng dẫn trên - sau đó mở thêm terminal mới cùng vào shell trên - 1 cái run file - 1 cái xem pid tiến trình đó ``ps aux | grep <file>`` - rồi ``cat /proc/<pid>/maps`` > cách này không chắc lắm =))) ## leak libc via gdbserver - install: ```bash RUN apt-get install -y socat gdb gdbserver ``` - follow flags in ``build-docker.sh`` ```bash -p 9090:9090 --cap-add=SYS_PTRACE ``` - run ``./build-docker.sh`` and connect to gdbserver to get shell in the image ```bash $ docker exec -it gloater /bin/bash -------------------------------------------- $ gdbserver :9090 --attach $(pidof gloater) Attached; pid = 7 Listening on port 9090 ``` - connect from the terminal ```bash $ gdb gloater pwndbg> target remote :9090 ``` - copy: ```bash $ docker cp gloater:/usr/lib/x86_64-linux-gnu/libc-2.31.so . ``` ## debug docker - sử dụng gdb-peda - thêm nội dung sau vào Dockerfile ```docker RUN apt-get install gdb git -y WORKDIR /root RUN git clone https://github.com/scwuaptx/Pwngdb.git ; cp ~/Pwngdb/.gdbinit ~/ RUN git clone https://github.com/scwuaptx/peda.git ~/peda ; echo "source ~/peda/peda.py" >> ~/.gdbinit ; cp ~/peda/.inputrc ~/ ```