Try   HackMD

AWAE/OSWE 學習經過與考試心得紀錄

AWAE 學習開端

去年因為 Offensive Security Learn One 在特價,從2,499美元降到1,999,掙扎了一個月,選擇了AWAE一年份訂閱,這份訂閱包含了

  • 主餐:WEB-300 進階網頁攻擊與利用課程(網頁教材內容、PDF、影片)及 OSWE 兩次考照機會
  • PEN-210 無線網路滲透測試的課程及 OSWP 一次考照機會
  • PEN-103 以Kali作業系統進行滲透測試及 KLCP 一次考試機會

Learn One 訂閱的主餐其實還有很多課程種類可以選,包含主打後滲透階段免殺的 PEN-300,逆向工程與 Binary Exploit 的 EXP-301,
而我選擇 WEB-300 做學習的原因如下:

  • 網頁作為一個系統的門面,是入侵系統無可避免的必經之路,因此培養識別網頁弱點,並進行利用的能力在從事滲透測試工作中相當重要
  • AWAE 這門課偏重培養白箱測試能力,培養獨立在大型專案中尋找弱點的技能,是我一直以來較為欠缺的能力

學習成果

我訂閱的時候這個課程共有十四個模組,內容編排上主要以實際的網頁應用做教材,並介紹除錯環境建置、發掘漏洞的手法及過程以及如何撰寫一個完整的漏洞利用腳本自動化利用流程。

我花了六個月囫圇吞棗的把十四個模組都看過一遍,因為我之前有玩過半年的PentesterLab 及 PortSwigger 的教學,對於基本的網頁漏洞都有一定的認知,所以主要都把力氣放在我認為最難的課題:"如何發現"漏洞上。

我認為這包教材內介紹的網頁漏洞都不是什麼最新最潮的利用手法,都是一些 old fashion 的網頁弱點,把它介紹得更深入,並培養在茫茫程式碼中,利用特定的 pattern 找尋各式各樣的漏洞。

其中我成長最多的應該是 PoC 的撰寫,我在學習的過程中慢慢養成撰寫自動化利用腳本的能力與習慣,在透過瀏覽器或 Burp 發現漏洞後,會習慣撰寫完整的 PoC 來一鍵 get shell,也可以做為後續遇到相同的應用可以直接派上用場。

詳細課程大綱可參閱 awae syllabus

OSWE 考試紀錄(no spoiler)

考前準備

  • 早上 7:45 用 OSID 跟一組 MD5 hash 值登入監考系統
  • 監考是用瀏覽器桌面分享功能,chromium based 的瀏覽器需要安裝插件,firefox 不用,我沒搞錯的話只會分享畫面不會分享聲音,所以跟考官溝通都是透過文字聊天室。
  • 折騰了半個小時在身份驗證,拍周遭環境那些,因為監考官一直看不清楚證件上的字,還另外拍照秀給他看,弄得手忙腳亂,另外我是用筆電鏡頭,所以照環境的時候就舉著筆電拍,還要拍桌面跟桌子底下
  • 上面的驗證都通過後,就會收到官方寄來的郵件,會有考試 lab 連線的 vpn 及 vpn 密碼、考試管理頁面(做機器的重置、提供機器說明以及用來提交local.txt 跟 proof.txt),以及一些考試的提醒跟注意事項,考官會跟跟你確認完 vpn 連線狀況以及會要你執行一個腳本檢查自己 Kali 虛擬機連線的環境,完成後才可以開始作業

考試環境

考試共有五台機器

  • Kali:工作用,提供登入帳密,可用來編寫 PoC,且能有較低的網路延遲(超有感)
  • App 1 (for debug): 用來除錯第一個網頁應用,提供登入帳密,可以 ssh 或 rdesktop 登入做 Code Review或除錯
  • App 1: 沒提供登入帳密,內部有設置 local.txt 及 proof.txt
  • App 2 (for debug)
  • App 2

其中 debug 用的機器跟目標內 App 設定基本一模一樣,只有系統登入帳密及網頁管理者密碼會不一樣,debug 機還會提供設定好的Debug環境,以及一些常用的工具 Burpsuite Community、vscode、反編譯工具(jd-gui, dnspy等),基本上是可以完全在這個環境做測試(!注意:考試禁止從 lab 環境下載任何檔案到自己的機器做除錯或 code review)。
我是用自己虛擬機的 Burpsuite 送攻擊測試請求,用 ssh+grep+vim 或遠端桌面的 vscode 做 code review。

更多考試細節可參考官方文件:https://help.offensive-security.com/hc/en-us/articles/360046869951-OSWE-Exam-Guide

第一天

  • 花了一個早上在熟悉框架,Routes及亂戳網頁
  • 下午跳過 Auth bypass 先找到了 RCE 的點以及遇到一些限制
  • 晚上沒什麼進展開始先看第二個應用
  • 弄到一點多都沒什麼重大進展,信心全失,決定先去睡覺

第二天

  • 早上吃完早餐發現第一台機器的 Auth bypass 弱點
  • 用前一天發現疑似 RCE 的弱點,繞過一些限制,成功達到 RCE
  • 在吃午飯前完成第一台機器 full exploit PoC
  • 下午開始找第二個應用的洞弱點,這一路就找到晚上十一點,找到了一個可能利用的點,並完成 PoC,但仍缺少一些未知的參數,需要找一個別的漏洞來支持才能在目標機器上利用。
  • 這時候我已經有點累,幾乎半放棄的狀態躺在床上睡著。

第三天

  • 可能是心裡還有些殘念,外加時差還沒調好,在凌晨三點多驚醒,就繼續坐回電腦前看 code,終於發現完成 auth bypass 的最後一張拼圖,在瀏覽器取得 local.txt,湊齊85分了,搞得好會過,這時候距離考試結束還有三個多小時,於是開始寫 PoC。
  • 因為目標機器是用我不熟悉的程式語言,所以花了一些時間在考慮到底要用什麼語言寫 PoC,最後因為想說要移植一段加密模組感覺很麻煩,所以就直接用網頁的語言開寫 PoC,也吃盡了苦頭。
  • 最後沒有在 lab 環境完成完整 PoC,所以最後的 PoC 我是在下線後,改用熟悉的 python requests 函式庫,跟據發送過的 Burp history 跟寫到一半的 PoC,再憑空寫出來的,也沒在 lab 測過,只有把一些常犯的語法錯誤檢查了幾遍,再用 Burp comparer 確認過發送的 request 內容沒有錯,然後就只能祈禱沒有寫錯,因為這應該是本次成敗的關鍵。

報告

考試結束後24小時內要交解題文件,要詳列弱點發現過程關鍵截圖跟結果(local.txt及proof.txt)的截圖。
我大概花了一個上午把 PoC 寫完,然後下午寫報告,我是用一個報告自動產生專案,用 markdown 語法寫筆記,並自動產生 pdf 跟 7z 檔案,他語法要求蠻嚴格的,因為格式不對,產報告這一段就折騰了一個多小時,建議如果要用的話考試前可以多熟悉一下這個工具的使用方式。

報告自動產生專案模板: https://github.com/noraj/OSCP-Exam-Report-Template-Markdown/blob/master/src/OSWE-exam-report-template_noraj_v1.md

最終在晚間七點多提交了報告,提交的時候頁面會回傳一個 md5 檔案雜湊,記得確認這個雜湊跟原始檔安是不是一樣的,不是的話要重新上傳,報告提交後會收到一封 email 通知,告知你考試結束,並會在十天內收到通知。

結果

考試結果在提交文件後不到一天就出來了,我順利通過考試了,看來最後瞎矇的 PoC 應該是有中。

電子版證照是 Accredible 的

心得

  • 整個考試過程其實比想像中的放鬆,中間可以無限次數的跟考官說要休息,也不限時間長短,可以關鏡頭去泡個澡或睡個覺,只要在離開跟回來的時候在聊天室說一聲。
  • 適當的休息真的很重要,因為48個小時真的很長,通過的關鍵是在於越早找到弱點並成功利用,適當讓腦袋休息,理清思緒對達成這個目標比較有幫助。
  • 找漏洞上範圍不會太大,可以從瀏覽器瀏覽到的頁面,以及從根據網頁框架列舉出所有 routes path,基本不會超出這些範圍,不會要你找到大型框架的洞,弱點主要都會出在自行開發的應用功能。
  • 建議可以把所有 routes 列成一個表,一個個檢查,基本上不會超過五十個,有耐心的把 code 看完,基本上都會找到。
  • 漏洞基本上都是比較 old fashion 的洞,還有不要有預設立場一定會考什麼洞,謹慎確認沒有那方面的問題就可以跳開找別的漏洞,漏洞都蠻明顯的,太鑽牛角尖反而會錯過更美的風景;可以跟據課本內容建一個 check list,可以達到 auth bypass 的有哪些,可以RCE的有哪些,某些程式語言有自己的特色漏洞,也可以整理出來。
  • 心態上最大跨越的點是要堅信一定有洞,而且不難發現,如果一直沒有靈感可以回去把教材再翻過一遍,基本上都是教材裡介紹的那幾個主題綜合運用(例如 Module 3 介紹的 Auth bypass 配上 Module 11 的 RCE,再運用 Module 5 介紹如何繞過過濾條件達到 RCE,這裡僅是舉例,與課程內容無關)。
  • 如果沒有很熟悉某個程式語言要怎麼寫,手冊怎麼查,真的建議不要用那個語言寫,撰寫 PoC 時間花費上會差蠻多的,像我個人習慣用 python 的 requests 函式庫,並用 requests.session() 管理 cookie,java 這方面的 code 就比較不會弄,也搞了半天沒成功,最後還是乖乖用 python 寫。建議也最好可以先備好幾個常用網頁程式語言(java, php, python, .net)的 http get post request 發送方法,這樣在時間快來不及的時候,心裡比較不會那麼慌。
  • 雖然考過證照,但自覺在網頁漏洞發掘與利用上,自己還有很大進步空間,期許自己能保持這個動力不斷磨練自己的能力。