前陣子報名了 OSWE / AWAE 的課程,在空閒的時間學習,終於在一個半月的時間內考到了 OSWE 證照,趁還沒有忘記之前來寫一下心得文。
前言
我覺得要提到資安證照,不得不提到 Paul Jerimy Media 上的 Security Certification Roadmap。
以目前 2022 年 8 月最新版,該列表上的資安證照總共有 460 張,目前我持有的基本上都偏向右邊的 Security Operations 部分。 包含了本次的 OSWE、OSCP 以及不予置評的 LPT 及 CPENT,ㄏㄏ。
正常來說在這張表上,越上面的代表專業程度越高,也越難。但有許多證照雖然在同樣的領域,因為考試方向不同,如大多數都是選擇題或暴力破解之類的 (我就不說是哪張了 ……),所以我認為難度也僅供參考,不建議拿來做直接的比較。
目前以紅隊、滲透檢測相關的入門證照,大家最推的通常都是 OSCP, OSCP 在 Offensive Security 中,課程代號為 PEN-200,屬於 200 系列的課程。 OSWE 則是 WEB-300,屬於更高階的課,以同一間公司而言,理論上也會更困難一點?
我個人的背景是,去年年底取得 OSCP 證照;而大學及研究所時期都有玩過一些 CTF,雖然 CTF 的各領域都有基本的涉略,但最熟悉的方向是以 Web 網頁安全為主。
AWAE 課程內容
這邊由於課程規定的部分,我不方便說明太多,不過可以依照官網有提供的內容來進行介紹。
- Cross-Origin Resource Sharing (CORS) with CSRF and RCE
- JavaScript Prototype Pollution
- Advanced Server Side Request Forgery
- Web security tools and methodologies
- Source code analysis
- Persistent cross-site scripting
- Session hijacking
- .NET deserialization
- Remote code execution
- Blind SQL injections
- Data exfiltration
- Bypassing file upload restrictions and file extension filters
- PHP type juggling with loose comparisons
- PostgreSQL Extension and User Defined Functions
- Bypassing REGEX restrictions
- Magic hashes
- Bypassing character restrictions
- UDF reverse shells
- PostgreSQL large objects
- DOM-based cross site scripting (black box)
- Server side template injection
- Weak random token generation
- XML external entity injection
- RCE via database functions
- OS command injection via WebSockets (black box)
其實從這邊的項目可以看出來,對於一個常打 CTF 的 Web 🐱 而言,這些問題應該都不陌生,而且我個人認為都偏比較老的洞,並沒有那麼現代 CTF 那些噁心的東西,當然想要用各種噁心的手法,如遇到 LFI 使用 Session Upload Progress 來解應該還是可行。
我覺得 OSWE 比起 Web CTF 而言,最大的差異就是程式語言的多樣性以及 Code Base 相對很大。教材除了 CTF 常客的 PHP、Python、Node JS 之外,還有包含但不限於 Java、 .Net 等不同的語言。因為這些語言的環境架設通常都比較麻煩,在 CTF 中也相對比較少出現,我認為是身為一個 CTF Web 🐱 需要花費比較多時間的部分。 而 Code Base 指的是,通常 CTF 大概兩三百行程式碼,頂多一千行就差不多了,而 OSWE 的考試及 Lab 大約都是一兩萬行的數量級。
在考試的 47 小時 45 分鐘內讀完一兩萬行其實是辦的到的,但通常會直接抓比較可疑的部分優先參考,例如與登入相關的內容、與檔案存取相關的內容,產生密碼、Token 的機制等。
比起 OSCP 的 75 題 Lab,OSWE 則只有 14 題,且事實上,其中有 11 題都是對外公開的 CVE 漏洞,課程教材主要是教大家,帶著大家試圖透過自己的方法重新的體驗,挖出 CVE 的這些過程。而另外只有 3 題是他們自己出的題目,這些題目就都被歸類成 Challenge,課本裡面並沒有特別的手把手教學。
有趣的是,我註冊完帳號後,看到一堆的英文就懶得看了,直接開始玩 Lab,接下來就馬上的發現了上面的 11 題 CVE 以及 3 題自己出的題目。接下來我就在還沒翻開過課本的狀況下直接把他的 3 題挑戰題給打完了,才發現原來拿是上完整個課程之後才來做的練習 …… 笑死。
但後來我還是意思上的做了一下,快快的刷完了另外的 11 題題目,並撰寫 PoC ,整體而言我覺得教材的難度是中偏易的,對於已經有一定基礎的 Web CTF 🐱 而言,我認為除了大量的 Code Review 以及不同語言外,我學到最多的是關於不同程式語言的 Debugger 使用方法,例如對於 .Net 使用 DnSpy 下斷點、使用 JDB 來 debug Java 逐步執行,分析 Call Stack 等。
整體而言,我花在教材以及整個 Lab 上面的時間約 30~50 小時左右。
考前準備與學習資源
我覺得對我來說,這張考試考前除了基礎的 CTF 題目,教材中的 14 題練習之外,因為考試中很多的梗會直接參考 Lab 來出。PortSwigger Web Security Academy 的題目也很值得練習,不過這邊的題目都以黑箱為主,我認為跟正式的考試還是有一定的差距。
都到 WEB-300 等級了,我認為 SQL Injection 出現 Union、Stack 之類水題的機率不會太高 (但也不保證不會出 ……),再加上考試禁止使用 SQLMap 等程式,這邊可以直接使用我個人寫的一套 SQLME0w 程式,只要拔取裡面片段的程式碼就可以快速的自幹 PoC 。
接下來我推薦 Tree 大大的程式碼及筆記。
關於基礎的 Web 內容,當然不得不推 Splitline 的
How-to-Hack-Websites 教學。
考試方式
OSWE 的監考方式其實跟 OSCP 一模一樣,只是時間從 23 小時 45 分鐘延長成了 47 小時 45 分鐘。 而考試題目則是只有兩題。
如同 OSCP 的考試可以簡單分成兩個部分, Local Shell 以及提權後的 Root Shell;OSWE 則是 Auth Bypass 以及 Remote Code Execution 分別兩把 Shell。
所謂的 Auth Bypass 指的是,我們需要模擬滲透測試一個網頁伺服器,這個伺服器通常會有至少兩個以上的弱點。這個網頁通常會有登入的頁面,使用者可以註冊帳號使用各種普通使用者能操作的頁面。而這個伺服器也同時擁有另外一個高權限的 admin 使用者權限,通常取得 admin 權限就可以進去做更進一步的操作,考試做到這一步,就會直接在 admin 的頁面上顯示出第一把 Flag;第二把 Flag 則是 RCE 後就可以在系統中找到。
考試的配分是 Auth Byass 35 分,而 RCE 15 分,及格分數是 85 分,也就是至少要有一台電腦完整的 RCE,另外再有一台電腦辦到了 Auth Byass。
OSWE 跟 OSCP 不同的另外一個點在於,就算拿到了 4 把 Flag,兩台機器都 RCE 了、也寫完了完整的報告,依然不算完整的完成考試,仍然會被判定為 0 分。 OSWE 的考試有規定,除了打進系統取得 Flag 之外,也有需要寫一個 Exploit 的 PoC Script。與先前的前輩討論過,我考試時遇到的規定似乎與先前不同,我考試時的考試規定強調,這個 PoC 必須能夠一鍵執行,並且在 Script 中輸出兩把 Flag 的內容,以及一個 Reverse Shell,這個 Script 跑下去後,必須在沒有任何人工干預的情況下完成所有的事情。 這個腳本不限制使用任何語言,我自己是使用 Python , 當然理論上使用 Perl、Ruby、Node JS 甚至 Bash、C++ 也都有辦法辦到,只要選用自己最熟悉的程式語言即可。
考試雖然有兩題,但是總共會給 4 台的機器,分別是兩套的 Target 機器以及 Debug 機器。 Target 機器中會藏有 Auth Byass 以及 RCE 的兩把 Key,而 Debug 機器則與 Target,除了系統中的帳密、某些關鍵的 Conf 檔案不同外,所有內容完全都一樣。
如同 OSCP 一樣,為了避免考題洩漏,考生禁止從考試環境下載任何檔案回自己電腦,這顯然跟需要白箱 Code Review 會非常的衝突。 而官方的解套方法是,直接在 Debug 機器中開啟 RDP 以及 SSH,允許考生直接連上去進行使用。 Offensive Security 的機器在台灣連線其實都非常慢 QQ,以我自己為例,從我家或公司 ping 機器都有約 200 ms 的延遲時間,使用 RDP 更是卡爆。
官方禁止使用 SSHFS 、 VSCode SSH 功能等遠端掛載方式進行考試,我也 Email 詢問過,考試禁止使用 Code-Server 進行遠端 Debug,因此我認為整體而言考試的體驗偏差 QQ。 這邊需要讚賞一下 Offsec,關於這種詢問的 Email , 我寄出後2小時內對方就回應了,反觀某 EC 開頭的公司,我寄信後兩個月還在裝死 …… ㄏ。 通常我習慣在 kali 使用 xfreerdp 進行 RDP 連線,但在這次的考試中,我發現使用 RDesktop 的反應時間,帶上-a 16 -z -r sound:remote -x b -D
效率異常的好很多,但帶上同樣等校的指令在 xfreerdp 中,效果卻不太好 QQ。
OSWE 的考試通常,我不能完全說死,但目前據我所知都是屬於白箱的挖漏洞。之所以不敢說死的理由是因為教材內也有一些關於黑箱的教學及題目。另外,大家或許可以在網路上找到其他 OSWE 的心得在討論,說通常不可能出現 XXX 類型的題型,但 …… 很不幸的,我遇到了 XD,但好險還是順利的有解出來。
有些人跟我討論過,認為在實務的 PT 場合上遇到白箱挖洞很不切實際,所以這張證照相對 OSCP 之下沒有太實用? 我自己的看法是,這張證照的重點在於鍛鍊考生具備 Code Review 的能力,可能是從開源套件中挖取 CVE,或是在實務的例子上遇到了 Path Traversal、 .git Leak 的情境下取得了程式的原始碼,並試圖找尋一些不可能透過黑箱找到的東西。 而關於撰寫 PoC 一鍵 Exploit 的技能,則是訓練挖完漏洞之後,撰寫 PoC 的能力,或許未來大家真的挖到漏洞後,也可以貢獻給 Exploit DB。
考試過程
考試的時間,與 OSCP 一樣,我推薦使用自己最舒服的生理時鐘為主,而不見得一大早就是最適合的,至少我是一個不適合早起的人。我的開始時間是周日的下午一點。
47 小時 45 分鐘比起 OSCP 的 23 小時 45 分鐘而言,我認為全程不睡覺是不可能的,所以需要定期的休息,短暫的休息時間比起疲勞的硬幹,投資報酬率其實超高。
再來我要分享兩件我被自己雷的事情,首先是關於考題內容。我拿到題目後快速的先花了 5 分鐘瀏覽完兩題網站大致的功能。剛開始我是非常開心的,因為先前的其他前輩有跟我描述過考試的類型方向,我也在網路上查了非常多的內容,我覺得我可能抽到了類似的題目!接下來我就直接憑著記憶,到前人描述該注意的點上開始挖挖挖,然後 …… 10 個小時就不見了。我甚至 Trace 到了程式語言底層的 Framework Logic,但完全一無所獲。
重新的冷靜了一下,洗了一個澡,狠狠的大休息了一波。思考過去的 10 個小時一直秉持著 Offsec 的 Try Harder 精神,但我真的 Hard 不下去了 QQQ。才回想起了 OSCP 有兔子洞,該不會 OSWE 也會有這種東西吧!接下來我重新的先把原本研究的內容丟一邊,不 Try Harder,而是 Try Wiser ! 花了不到 30 分鐘就找到了 Auth Bypass 的方法,再在 30 分鐘內實做完了 Auth Bypass 的 PoC,一進去就直覺的找到了 RCE 漏洞,花了不到 30 分鐘就順利的 RCE 了!
其實當時的時間還不到凌晨一點,考試時間也還花不到 1/4 ,但進度已經達到一半了,因此我就開心的依照我正常的生理時鐘,耍廢到兩三點後跑去睡覺了! 說實話……,如果我不聽老人言的話,說不定開考的兩小時就已經做到這步了,所以強烈建議大家,任何人的經驗分享,包含我的,都聽聽就好,謹記兔子洞!
晚上睡的沒有非常好,因此大概七點多我就起床繼續了,花了兩個多小時,一無所獲,也找到了網站上的兩三個,明確是兔子洞的東西。接下來我就無意間的回去看了一下考試規則。 對,其實這是我第一次認真看考試規則,前面那段我都是直接看了 IP 就直接開打的,根本沒有注意到規則上到底有寫啥,笑死。
意外的發現到,考試平臺上的規則跟說明寫得非常詳細,直接建議了 RDP 的連線方式,給的 Debug 機器使用的語言是什麼,它甚至把 Debug Port 都開好了,我在這些內容啥都沒看的情況下就打完了第一台 ……。
第二台機器的語言是相對我比較熟悉的,但目測了兩個多小時卻沒有什麼想法跟入手點,就在此時,我發現了機器的說明上有一段超級超級超級重要的線索!我看到了那個線索之後,甚至沒有開 Code,直接開始黑箱戳戳戳,不到 1 小時的時間就拿到 Auth Bypass 了。 到了此刻,分數已經達到了 85 分,時間還不到一半,事實上我就已經超級大放心 + 放鬆了。
開始休息到了中午後,我開始重新的整理到目前為止的 3 段 Exploit Code 以及報告的截圖,因為我覺得,先把這 85 分穩穩的拿滿比較實際。在測試的過程中,我發現其實 Target 機器以及 Debug 機器也有一點點的個體差異需要解。 撰寫 Exploit 的技巧是,需要分段執行及測試,如果扯到了一些很耗時間的內容,則會非常的浪費時間。
一題半的 Exploit Code 我花了約 2 小時寫完,並且把所有截圖及報告的內容都準備好,在下午三點鐘左右我就 …… 跑去睡午覺了。
睡到吃完晚餐後,開始力拼 100 分,但可惜我到了晚上十點多,仍然沒有太多的想法,我把所有的 Code 都從頭到尾讀了兩三遍,有找到一個有機會利用的點,不過沒有想到可以 Bypass 一些限制的方法。 當時因為超認真的看大量的 Code,我覺得身體跟眼睛都有一點不舒服,想要好好休息一下,因此就跟考官講說我想要關閉監考。
考官剛開始會先貼一段罐頭訊息說它不建議關閉,它建議我休息的話,我可以先關鏡頭就好。但我認為,只要監考開著就是一種不小的壓力,因此我堅持我想關閉。 其實關閉後如果有需要,在考試時間內還是可以連回去的,只是可能會需要重新檢查房間 + 護照等東西。 但我認為我已經差不多了,所以本來就打算想好好的放輕鬆睡個覺,醒來有心情就再看看,沒心情就算了 XD。
快樂的睡到了早上九點多,但我並沒有特別想重新打開監考再看看,因此我起床後就直接開始寫報告,想說早早寫完可以提交的報告,過程中發現有少東西還可以重新連回去抓。還好我所有報告需要的東西都還算完整,因此就順順的寫到早上 11 點多。吃完午餐後,最後的確認了一次報告內容,就直接提交了。
考試心得
等了兩天,在台灣時間禮拜四晚上,我就收到了考試通過的通知!事實上,等待的過程還是有一點小煎熬的,因為只要對方刁我報告的任何一個地方,我都可以被判定為不及格,好險這方面是順利通過了。也非常讚賞 OffSec 審查報告的速度,沒有夜長夢多的拖到最多的 10 天!
整體而言我覺得這張證照的難度是中間偏易的,但前提是需要一定的程式以及 Web 相關基礎。以考過約一年,且進入了資安公司工作後的心得,我覺得 OSCP 的難是在於內容非常的廣,不可能可以學完,一定需要善用 Google 尋找並測試各種 Exploit Code。
OSWE 的難在於,要從白箱的角度尋找漏洞,但由於 CTF 圈 (至少台灣) 的 CTF 題目快被玩爛了 (本人發言不代表本人立場,請不要找我吵架),這邊的玩爛指的是基礎題目已經出到不能再出,因此逐漸走向了偏門的刁鑽,開始出現各種奇技淫巧。 我覺得受過 CTF 摧殘的人都會覺得這邊的題目相對不會拐這麼多個彎。因此,OSWE 訓練的是在短時間內讀懂一坨龐大的 Code。
至於 OSWE 的程式語言多樣性問題,我覺得其實也不算太大的問題,因為我相信程式語言是觸類旁通的。況且,第一台機器使用的語言還是我相對不熟悉的語言,我在測試各種 PoC 時,甚至第一個 Google 的關鍵字是 XXX語言 Hello World
。不過,對於特殊語言的特殊漏洞還是要有一定熟練度就是了,例如 PHP、JS 或其他語言的各種奇怪特性。
整體而言,我覺得這張證照跟 OSCP 可以理解成完全獨立的,如果過去已經有不少的 Web 開發經驗、Web CTF 經驗,我認為這張證照的取得難度會比 OSCP 簡單非常多。而如果是一個資安+資訊小白的話,我會優先建議取得 OSCP,因為 OSCP 可以快速的增加對於資安的視野。
最後來秀一下證照好ㄌ,可惜今年開始,沒有實體證照跟魔法小卡了 QQ,只有一張冷冰冰的電子檔,不然應該會更有感覺。 如果對於 OSWE、OSCP 的考試、準備方式有任何問題的話,也歡迎使用各種管道聯絡我,因為我從社群獲得了許多寶貴的知識,也希望可以有所回饋!