CTF入門
=
## What is CTF?
在許多的競賽遊戲中,奪下對手的旗幟是一種勝利的宣告,從古代的軍事活動到現在的電腦競技活動,奪旗(Capture The Flag,CTF)一直是一種勝利的表徵,可以奪下對手越多數量的旗幟,表示我方的贏面越大。
CTF(奪旗賽,我說資安的那種)前身是傳統黑客之間的網絡技術比拼遊戲,起源於 1996 年 DEFCON 全球黑客大會,是網絡安全愛好者之間的競技遊戲。
---
- 考驗資安的比賽
- 目標:獲得flag
- 通常是一段字串
- 每個比賽/平台通常會有自己固定的格式
- ex. picoCTF{...}
- 有些||比較糟糕的||比賽會有假flag
- 大括號的內容常有[L337](https://zh.wikipedia.org/zh-tw/Leet)
---
- 大部分比賽的分類
- Web 網頁相關的所有東西
- Reverse 逆向工程
- Pwn(Binary Exploitation) 二進制漏洞利用
- Crypto 密碼學(簡稱數學)
- Forensics 分析各種資訊,包括記憶體或是檔案之類的(通靈之一)
- Misc 不知道要分哪裏的都會放在這裡(通靈之二)
---
### Jeopardy
- 簡稱:通靈遊戲
- 會有很多種不同題目,要根據題目指示~~或你的第六感~~找到flag
- 每題有不同分值,會根據答題的人數改變,有時候有前幾殺特權
- 我只打過這個
### Attack and Defense
- 每一個隊伍有主機,提供有一堆洞的服務
- 修好自己的
- 攻擊別人的
### King of the Hill
- 主辦方提供一個服務
- 佔領並維護他
- 佔領時長越久越多分
---
## 營隊、比賽、資源...
// 對不起我有空再整理
- 先去註冊picoctf!!
---
## 前言
- 開始打資安前可以先去裝個kali linux
- 除了必要的理由以外:
- 東西比較好整理
- 玩壞不會心疼
- mac其實蠻好用的了(但我還是折服於vmware fusion)
- 下面的內容不會用到,||可以之後想到再去裝||
---
## Web基礎知識
### 前後端
- 可以把前端想像成點餐 後端想像成出餐
- 使用者理所當然只能接觸到點餐的部分
- 後端負責處理各種請求
### 前端
- 所有東⻄都會直接顯⽰給使⽤者
- HTML、CSS、JS
- 以ctf來說很常可以從js裡面看~~或通靈~~出你需要找的東西
### 後端
- 背後運作的伺服器與程式 處理資料與邏輯
- 處理使用者的請求(ex. 登入、查詢資料...)
- 連接資料庫存取資料
- 動態顯示網頁資料

### HTTP/HTTPS
- 超文本傳輸協議 **H**yper**t**ext **T**ransfer **P**rotocal
- 定義如何向伺服器請求資料
- 適用於用戶端-伺服器通訊的協定或一組通訊規則
- HTTP:
- 開放系統互相連線 (OSI) 網路通訊模型中的應用層通訊協定
- 定義了多種類型的請求和回應
- HTTP請求:
- GET:取得資料,例如打開網頁、查資料
- POST:送出資料,例如表單提交、登入操作
- HEAD、PUT、DELETE...
```
GET / HTTP/1.1
Host: www.google.com
```
- [HTTP回應](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Reference/Status#%E8%B3%87%E8%A8%8A%E5%9B%9E%E6%87%89):
- 資訊回應(100——199)
- 成功回應(200——299)
- 重新導向訊息(300——399)
- 用戶端錯誤回應(400——499)
- 伺服器錯誤回應(500——599)
- 今天凌晨兩點的HackMD
- HTTPS
- 必須從獨立的憑證認證機構 (CA) 取得 SSL/TLS 憑證
- SSL/TLS憑證:一種數位物件,允許系統驗證身分並隨後使用 Secure Sockets Layer/Transport Layer Security 協定,與另一個系統建立加密網路連線
- Web 瀏覽器上的掛鎖圖示和綠色地址欄
- 瀏覽器網站地址上的 https 前綴
- 建立加密連線後 只有用戶端和 Web 伺服器才能看到傳送的資料
- ||中華電信 酷到發瘋 有興趣可以自己去查||
- 伺服器和 Web 瀏覽器可交換加密或混亂的資料
- HTTP Vs. HTTPS
- HTTP
- 沒有對傳輸資料做加密
- HTTPS(HTTP secure)
- 允許對傳輸資料進⾏加密
- HTTPS 需要向憑證頒發機構申請相關憑證

---
### 隱藏檔案與伺服器設定檔
- robots.txt
- 指示搜尋引擎爬蟲哪些網頁可抓取、哪些不可抓
- 位置:網站根目錄/robots.txt
- 可能藏有不想被外界看到的隱藏路徑或檔案
- ctf常見線索來源
- 來看看[IKEA](https://www.ikea.com/robots.txt)
- .htaccess
- Apache目錄級設定檔
- 控制權限 重寫網址 密碼保護
- 設定規則若被公開 可能洩露進攻方向或特殊目錄資訊
- .htpasswd
- 與.htaccess配合的密碼檔
- 存放帳號與加密密碼
- 能嘗試破解登入密碼
- .git
- Git版本控制目錄
- 所有版本紀錄和原始碼
- 可下載整個程式碼 挖掘漏洞和敏感資訊
- .DS_Store
- MacOS自動生成的資料夾設定檔
- 可能透露目錄結構或隱藏資訊
---
### F12
- 使用方式
- 在網頁按鍵盤上的F12
- 在網頁點右鍵 Inspect
- 元素(Elements)
- 查看、編輯網頁的HTML結構
- 查找隱藏文字、註解、元素屬性
- 可以修改 但僅對當前的頁面渲染生效
- ctrl(cmd)+f找flag 好用
- 控制台(Console)
- 顯示js錯誤、輸出訊息
- 可輸入js指令試驗
- 控制台日誌:js中用console.log()函數輸出的日誌信息會在console顯示
- 源代碼(Sources)
- 查看到當前網頁的所有源文件
- 有時候flag也會在這(同理Elements
- 網絡(Network)
- 監控網頁載入的所有請求(HTML、CSS、JS、API請求、圖片)並進行回放
- 查看各個資源內容與回應數據
- 另存為文件進行分析
- 開preserve log:頁面重新整理或跳轉時不會清除已經捕捉到的網路請求記錄
- 預設會在你刷新頁面或切換頁面時把之前的請求清空
- 應用面板(Application)
- 管理網站資料(ex. Cookie、LocalStorage、SessionStorage)
- Cookie:
- 瀏覽器用來儲存網站資料的一種小型文字檔
- 記錄狀態、設定
- 造訪網站 伺服器會用HTTP回應給瀏覽器Set-Cookie指令
- 之後同一網站的請求就會自動附帶那個Cookie
- 可以修改Cookie內容(ex. user=admin)來嘗試權限提升
- 修改後刷新頁面
---
### 題外話
- base64
- ctf很愛用的編碼方式
- 一種將二進制數據表示為ASCII字符的編碼方式
- 目的:將二進制數據轉換為文本數據 以便在文本協議中傳輸
- 後面很多時候會有=或==,很好認
- ~~看久了會有一種感覺他是base64~~
- ex. ```fgisc -> Zmdpc2M=```
---
## 題單
### F12
- https://play.picoctf.org/practice/challenge/275?category=1&page=1
- https://play.picoctf.org/practice/challenge/274?category=1&page=1
- https://play.picoctf.org/practice/challenge/426?category=1&page=1
- https://play.picoctf.org/practice/challenge/278?category=1&page=1
- https://play.picoctf.org/practice/challenge/4?category=1&page=2
- https://play.picoctf.org/practice/challenge/18?category=1&page=2
- https://play.picoctf.org/practice/challenge/161?category=1&page=2
- https://play.picoctf.org/practice/challenge/427?category=1&page=1
- https://play.picoctf.org/practice/challenge/349?category=1&page=3
### Cookie
- https://play.picoctf.org/practice/challenge/469?category=1&page=1
- https://play.picoctf.org/practice/challenge/46?category=1&page=2
- https://play.picoctf.org/practice/challenge/173?category=1&page=1
---
## References
- https://slides.com/ioker
- https://slides.com/jellyyfish
- https://www.ithome.com.tw/news/102969
- https://ctf-wiki.org/zh-tw/
- https://hackmd.io/@ntouind/ctf-intro
- https://medium.com/appworks-school/網頁新手入門-初探網頁架構和前後端語言-a88a5dc86ee3
- https://hackmd.io/@nisra/B1SrsmrJY
- https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Reference/Status
- https://web4theme.com/article/chrome%E7%80%8F%E8%A6%BD%E5%99%A8f12%E7%B6%B2%E9%A0%81%E9%96%8B%E7%99%BC%E5%B7%A5%E5%85%B7%E6%95%99%E5%AD%B8.html