<style> img[alt=hackerman] { width: 250px; } img[alt=Tux] { width: 200px; } </style> [TOC] # CTF ## 什麼是 CTF ![hackerman](https://hackmd.io/_uploads/Sk18GvCo2.png) CTF 全稱 Capture The Flag 比賽的目標就是使用~~通靈~~駭客技巧攻下有漏洞的服務,並且取得被稱為 Flag 的指定字串 ## CTF 的領域 * Web 網頁相關的所有東西 * Reverse ~~掛仔~~逆向工程 * Pwn(Binary Exploitaion) 駭進你家電子冰箱然後播 Rickroll * Crypto 密碼學(實際上是數學) * Forensics 分析你電腦裡的資訊,包括記憶體或是檔案之類的(通靈之一) * Misc 不知道要分哪裏的都會放在這裡(通靈之二) ## CTF 的種類 ### Jeopardy 解題類型的 CTF 主辦方會為每種領域出不同的題目 一般初賽都會是這種形式 ### A&D(Attack & Defense) 主辦方會為每一個隊伍提供主機跟有一堆洞洞的服務 每個隊伍需要為服務上 patch 並且攻擊其他隊伍的伺服器 如果服務不能正常運行會被扣分 ### KoH(King of the Hill) 主辦方提供一個服務 佔領該主機越久的隊伍可以拿越多分 ## 資安的一些名詞 ### CVE https://cve.mitre.org/ 簡單來說就是一個漏洞的資料庫,他會對每個找到的漏洞提供一個編號,並且對該漏洞給出評分來表示他的危害程度 其中漏洞的行為包括下列這些 - RCE(Remote Code Execution) - Directory Traversal - Arbitrary File Read/Write - Privilege Escalation ### 滲透測試 Penetration Test 簡單來說就是蒐集資訊(~~戳漏洞~~) 真實世界的情境下,許多服務或是產品都是黑箱,你並不知道原始碼 於是你只好使用工具來獲取相關的資訊(版本、型號),並掃看看有什麼可疑的東西(port、路徑) ### 0 Day/1 Day/N Day 找到的漏洞我們會分類成 0 Day/1 Day/N Day 概念其實就是依據找到的時間差 0 Day 就是你是第一個找到的人 而 1 Day 則是你很快就知道了這個漏洞,並嘗試去復現 N Day 就是一堆人都玩過這個漏洞了你才去玩 ## 先備技能 - 會寫簡單 Python - 對電腦有興趣 - 喜歡電腦 - ~~成為電腦~~ ## 學習資源 - [PicoCTF](https://picoctf.org/) 初學者通常都推這個 - [LiveOverflow](https://www.youtube.com/@LiveOverflow) 很多酷影片 - [LotuxCTF](https://lotuxctf.com/) 我朋友創的新手向 CTF,每周都會有 writeup - [HackmeCTF](https://ctf.hackme.quest/) 很多老梗題 - [CTFTime](https://ctftime.org/) 比賽資訊集中網站,每周都會有比賽 - [Maple blog](https://blog.maple3142.net/) 台灣 Web 跟 Crypto 大佬的部落格 ## 相關活動 - [AIS3](https://ais3.org/) 台灣一個資安暑期營隊,教育部辦的 - [AIS3 EOF](https://ais3.org/eof) 台灣一個偏難的 CTF 比賽,教育部辦的 - [金盾獎](https://csc.nics.nat.gov.tw/) 台灣一個通靈的資安比賽,政府辦的 - [HITCON](https://hitcon.org/) 台灣的資安年會 - [HITCON CTF](https://ctf2023.hitcon.org/) 台灣一個很難的 CTF 比賽 # Linux ## 什麼是 Linux ![Tux](https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Tux.svg/800px-Tux.svg.png) ~~一隻企鵝~~ Linux 是一種自由和開源的類 UNIX 作業系統。該作業系統的核心由 Linux Torvlads 在 1991 年 10 月 5 日首次發布,再加上使用者空間的應用程式之後,就成為了 Linux 作業系統。Linux 也是自由軟體和開放原始碼軟體發展中最著名的例子。只要遵循 GNU 通用公共許可證(GPL),任何個人和機構都可以自由地使用 Linux 的所有底層原始碼,也可以自由地修改和再發布。 ## By the way I use Ubuntu 有兩種方式可以在你的電腦上使用 Linux 分別是雙系統跟虛擬機 虛擬機可以使用 [VirtualBox](https://www.virtualbox.org/) 或是 [VMware](https://www.vmware.com/) 安裝時,首先要去[官網](https://ubuntu.com/)把 iso 抓下來 ## Terminal 操作 ### 目錄 Windows 底下的資料夾(folder),我們在 Linux 中會稱為目錄(directory) 而所有目錄都是從根目錄開始(/) 一般目錄 * `/` 根目錄 * `./` 當前目錄 * `../` 上一層目錄 * `~` 自己的家目錄 * `/bin` 系統中的程式 * `/lib` 系統中的動態函式庫 * `/dev` 系統中的裝置 * `/etc` 重要的檔案 * `/boot` 核心及開機相關的檔案 * `/proc` 放系統核心與執行程序的資訊 * `/home` 家目錄 * `/tmp` 暫存檔 ### 常用指令 * `ls` 列出目錄下的成員 `ls ./foo` * `cat/head/tail` 印出檔案內容,head 跟 tail 分別是從頭尾開始印 `cat ./foo/bar.txt` * `cd` 到另一個目錄 `cd ./foo/bar` * `echo` 印出字串 `echo starburst` * `grep` 從文字中找出對應的子字串 `cat ./foo/bar.txt | grep hello` * `cp/mv` 複製跟移動 `cp ./foo/bar.txt /tmp/haha.txt` * `touch/rm` 新增及刪除檔案 `touch bruh` `rm bruh` * `mkdir/rmdir` 新增及刪除目錄 `mkdir foobar` * `chmod` 更改檔案或目錄權限 `chmod foobar 755` * `ssh` ssh到另一台機器 `ssh 192.168.0.1` * `nc` 向目標發起 TCP 連線 `nc 192.168.0.1 1337` * `curl` 發送 HTTP 請求 `curl https://www.google.com` * `wget` 發送 HTTP 請求並將檔案下載下來 `wget https://www.google.com` * `vi/vim/nano` 編輯檔案 * `zip/unzip` 壓縮跟解壓縮 * `top/htop` 查看執行緒 * `apt` 套件管理 ### 特殊指令 * `strings` 從檔案找出有意義的字串(至少可以顯示) ### 執行執行檔 `./executable` ### pipe & redirect 在打指令時,我們可以使用 `|` 將指令的結果輸出當成另一個指令的輸入 ```shell $ cat something | grep foobar ``` 而若是要將結果輸出到檔案而不是 `stdout` 時,我們可以使用 `>` ```shell! $ cat something > file.txt $ echo starburst > foobar.txt $ ./program > result.txt $2>$1 #redirect stderr to stdout ```