Docker

  • ta sẽ cài đặt docker (nếu chưa cài)
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
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:
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
sudo docker images
  • chạy docker:
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:
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
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
sudo docker run -d --rm --privileged -p 5000:5000 <tendocker>

built bth

  • hoặc
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ó
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
sudo docker exec -it <CONTAINER ID> sh

docker-compose

  • đọc file "docker-compose.yml"
cat docker-compose.yml
  • built:
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:
nc localhost <PORT>
  • build docker với quyền shell
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
ps aux | grep <file>
  • copy pid rồi debug
sudo gdb -p <pid>
  • copy libc/ld:
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:
RUN apt-get install -y socat gdb gdbserver
  • follow flags in build-docker.sh
-p 9090:9090 --cap-add=SYS_PTRACE
  • run ./build-docker.sh and connect to gdbserver to get shell in the image
$ docker exec -it gloater /bin/bash
--------------------------------------------
$ gdbserver :9090 --attach $(pidof gloater)
Attached; pid = 7
Listening on port 9090
  • connect from the terminal
$ gdb gloater
pwndbg> target remote :9090
  • copy:
$ 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
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 ~/