iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
影片教學

怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了系列 第 28

Day23 - 月圓之夜,決戰 K8s CTF 之巔 (quiz-5 出錯,直接送分)

  • 分享至 

  • xImage
  •  

Yes

勘誤: quiz-5 的部分因為 minikube 使用多節點結構導致無法做 arp spoofing,所以可以略過。或是改用單一節點進行解題。 /images/emoticon/emoticon02.gif /images/emoticon/emoticon20.gif

  • 期中考的架構如下 :
    https://ithelp.ithome.com.tw/upload/images/20230929/20148308i8Q7j8l814.png

  • 期中考規則如下 :

    1. CTF 形式,一共有6題,其中前五題跟逃逸有關,最後一題跟封包監聽有關。
    2. 前五題逃逸目標是拿到 worker_flag,每題10分。worker_flag 只能用對應的題目去取得內容,不要跨題去偷看別題的worker_flag/images/emoticon/emoticon15.gif。第六題封包監聽拿到 flag,該題10分。
    3. 從其中挑選一題想辦法拿到 master_flag 以及 vm_flag,每題20分。所以一共 100分。
    4. 建置腳本會在 master、worker、VM 各自建立一個 flag 檔案,位置在 / 或是 /tmp 底下。(ex: 1個master_flag、4個worker_flag、1個vm_flag)
    5. 解題時必須從攻擊機透過 Pod 開放的 shell 服務進行探測跟攻擊,這樣會比較貼近攻擊者攻擊的方式,另外也會延伸出一些奇怪的問題需要克服。另外不可以偷看腳本去看哪邊有問題/images/emoticon/emoticon16.gif,要不然就不好玩了。
    6. 考試過程會用到作業三的部分,記得還債啊,要不然會解的很痛苦。
    7. 解題過程可以試試看對岸這款工具 cdk-team/CDK
    8. writeup 部分會在 Day29、Day30 分兩天公布,所以大概有一周的時間可以解題。
  • 建立腳本參考如下 :

echo "It will delete your minikube and create midterm exam, Are you sure?(Y/N)"

read choose

if [ "$choose" = "Y" ]
then

	echo "01. delete minikube and start a new one"
	minikube delete && minikube start --nodes 2 ;

	echo "02. get midterm exam yaml"
	git clone https://github.com/aeifkz/2023_K8s_Security.git
	cp 2023_K8s_Security/*.yaml .
  rm -rf 2023_K8s_Security

	echo "03. create with yaml"
	for i in 0 1 2 3 4 5 
	do
		echo "kubectl create -f quiz-$i.yaml"
		kubectl create -f quiz-$i.yaml ;
	done

	echo "04. waiting for building midterm exam"
	for i in 0 1 2 3 4 5
        do
		kubectl -n quiz-$i wait pods quiz-$i --for=condition=ready --timeout=600s
        done

	echo "05. create flag file"
	worker0_flag=`echo ZmxhZ3tUaGUtRmFtaWxpYXItb2YtWmVyb30K  | base64 -d`
	worker1_flag=`echo ZmxhZ3tPbmUtUHVuY2gtTWFufQo= | base64 -d`
	worker2_flag=`echo ZmxhZ3tHZXRCYWNrZXJzfQo=  | base64 -d`
	worker3_flag=`echo ZmxhZ3tNYXJjaC1jb21lcy1pbi1saWtlLWEtbGlvbn0K | base64 -d`
	worker4_flag=`echo ZmxhZ3tZb3VyLUxpZS1pbi1BcHJpbH0K  | base64 -d`
	master_flag=`echo ZmxhZ3tZb3VfQXJlX01hc3Rlcl9vZl9LOHN9Cg== | base64 -d`
	vm_flag=`echo ZmxhZ3tEb19Ob3RfVG91Y2hfTXlfVk19Cg== | base64 -d`

	echo $worker0_flag > worker0_flag
	echo $worker1_flag > worker1_flag
	echo $worker2_flag > worker2_flag
	echo $worker3_flag > worker3_flag
	echo $worker4_flag > worker4_flag
	echo $master_flag > master_flag
	echo $vm_flag > vm_flag


	echo "06. assign flag file"	
	master_node=`kubectl get nodes  | grep    control-plane | awk {'print $1'}`
	worker_node=`kubectl get nodes  | grep -v control-plane | grep -v NAME | awk {'print $1'}`

	for i in 0 1 2 3 4
	do
		echo "docker cp worker${i}_flag $worker_node:/"
		docker cp worker${i}_flag $worker_node:/
	done

	echo "docker cp master_flag $master_node:/"
	docker cp master_flag $master_node:/
	cp vm_flag /tmp

	#clean work dir
	for i in 0 1 2 3 4
        do
                rm worker${i}_flag
        done

	rm master_flag 
	rm vm_flag
	rm quiz-0.yaml
	rm quiz-1.yaml
	rm quiz-2.yaml
	rm quiz-3.yaml
	rm quiz-4.yaml
	rm quiz-5.yaml


	echo "07. kill all kubectl port-forward process"
	kill -9 `ps aux | grep port-forward | grep -v grep | awk '{printf $2 " " }'`

	echo "Build complete!!! Enjoy your midterm exam!!!"

	echo "08. use following command to enable connect to midterm exam"
	echo "kubectl port-forward svc/service-quiz0 -n quiz-0 30389:8080 --address='0.0.0.0'"
	echo "kubectl port-forward svc/service-quiz1 -n quiz-1 30390:8081 --address='0.0.0.0'"
	echo "kubectl port-forward svc/service-quiz2 -n quiz-2 30391:8082 --address='0.0.0.0'"

	# quiz-3 hint : /var/log/host 
	echo "kubectl port-forward svc/service-quiz3 -n quiz-3 30392:8083 --address='0.0.0.0'"

	echo "kubectl port-forward svc/service-quiz4 -n quiz-4 30393:8084 --address='0.0.0.0'"
	echo "kubectl port-forward svc/service-quiz5 -n quiz-5 30394:8085 --address='0.0.0.0'"

else
	echo "See You Next Time"
fi
  • 今日總結 :
    • 本日回顧 :

      • 今天主要就是說明如何建立期中考的環境,祝各位解題順利!!!/images/emoticon/emoticon69.gif
    • 次日預告 :

      • 明天會講一個第三方的組件的漏洞 CVE-2022-21701,建置上不會太難,但是原理部分就沒辦法解釋(因為牽涉到內部的原始碼)。主要目的是讓各位感覺一下第三方組件攻擊的進入點,以及在學習了K8s的機制之後了解一下這個漏洞的效果。

上一篇
Day22 - (攻擊) k8s 汙點橫移攻擊
下一篇
Day24 - (攻擊) CVE-2022-21701 漏洞建立
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言