# 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 ~/
```