# CTF intro :::danger 請愛惜共筆,勿進行惡意刪減 ::: **C**apture **T**he **F**lag :::info [NISRA CTF](https://class.enlightened.nisra.net/) [NISRA Target Server](http://peko.nisra.net/) 請大家愛惜server,不要欺負它peko QQ [Chess 學長的鐵人賽](https://ithelp.ithome.com.tw/users/20130066/ironman/3448) ::: ### 請先下載以下兩份檔案 [SimpleKeyCheck](https://drive.google.com/file/d/1JW-sSJbdPNNr3W_ygnNVPR0atrGfsUaL/view?usp=sharing) [simple-rev](https://drive.google.com/file/d/12aVSD_-MszMwTANjwDYkg1HpiWPkIS8u/view?usp=sharing) --- :::spoiler Table of Content [TOC] ::: ## 常見的幾種形式 * Jeopardy * Attack & Defence * King of the Hill <!----> ### Jeopardy * pwn * reverse * Web * 有漏洞的web服務 * 利用漏洞在網頁中找出flag * XSS SQLinjection... * Crypto * 數學 * 古典 凱薩 維吉尼亞.. * 現代 RSA ... * Misc * 通靈(? * Forensic * 數位鑑識 * 各種log, 封包, Dump ### 練習地方 * CTF Time * Pico CTF * NISRA Training ### 國內的競賽 * AIS3 Pre Exam * AIS3 EOF * 合勤控 榮耀資戰 (只辦過一屆 * 金盾獎 (行政院主辦) * Balsn CTF <!--都好難嗚嗚--> ## 課程環境 - 這次靶機走 http 協定,**切勿拿真的帳號密碼註冊** - ~~偷偷說有彩蛋,所以課程全部結束後還可以去挖挖看~~ ## 基本的網路 & 網站架構 - 用 HTTP/HTTPS 協定對目標伺服器請求資料 - HTTP - 超文本傳輸協議 **H**yper**t**ext **T**ransfer **P**rotocal - 定義如何向伺服器請求資料 - Example: - GET 請求時,利用 HTTP/1.1 協議請求在 peko.nisra.net 這個 server 在 / (根目錄) 的所有資料 ```htmlmixed= GET / HTTP/1.1 Host: peko.nisra.net ``` - HTTP Vs. HTTPS - HTTP - **沒有**對傳輸資料做加密 - HTTPS(HTTP secure) - **允許**對傳輸資料進⾏加密 - HTTPS 需要向憑證頒發機構申請相關憑證 ### 我們到底做了啥 - 回顧我們平常上網做了那些動作 1. 打開 瀏覽器(Browser)來顯示和找東西 2. 打網址 - IP Address 相當於你家門牌 - Domain Name 3. 看到漂漂亮亮的網站 - Request & Response - HTTP/HTTPS ## 前端?後端?  ### 前端 - **前端的所有東⻄都會直接顯⽰給使⽤者** - 網頁三兄弟 Review 前端的**所有東西**會直接給使用者看 - HTML - 網頁顯示內容 & 架構 - 內容的順序不重要 結構最好乾淨明瞭 - CSS - 網⾴的畫⾯跟排版 - JavaScript - 畫面互動 - What can front-end do? - 減少驗證資料成本 - 檢查資料 - 強制輸入 - 檢查密碼是否相同 - 限制輸入資料格式 - [0~9]{14, 16}檢查信用卡號 - 其他殺手技巧請詳閱公開說明書 - 顯示正確的內容 - 後台 == 後端? - 後台是工程師為了方便管理網站所撰寫的管理介面 - 一般使用者不會直接看到的管理介面 - `xxxx.com/admin.php` : 簡化管理人員對於網站狀況的理解和資料的更新 ### 後端 - LAMP - **L**inux > 去看 Day 02 OS > [Sauce Here](https://hackmd.io/@nisra/SJko9QrkF/%2Fqa7ZB34hSrCwnU3z_tptWg) > [name=404/懶得打字的OS講師] - **A**pache - Web 伺服器軟體之⼀ - 處裡 Server 接收到的 HTTP 協定 - ~~不是那個直升機~~ - **M**ySQL - 網頁資料庫 SQL 的一種 - 負責管理所有網站要儲存的資料 - **P**HP - ~~全世界最好的語言~~ - ⼀種伺服器端**程式語⾔** - 動態語言 - 高度擴充性 - 存在黑魔法 請各位法師就定位 - 弱型別語言 - 有 `==` 與 `===` 的差別 - `==` 只比較記憶體中的值 ex. 字串"11" == 整數11 - `===` 除了值相同外,還要型態相同 :::spoiler PHP MD5 Example ```php= if($a != $b && md5($a) == md5($b)) { echo 'T'; } ``` - 在這例子中 如果\$a一定跟\$b不一樣的話 兩個出來的md5有可能相等嗎? - `0e` 開頭的字串會被轉成 `int` 整數 ::: - 處理網站前端的請求 - 驗證資料 - 溝通資料庫 - 動態顯示網頁資料 #### What is SQL - **S**tructured **Q**uery **L**anguage 結構化查詢語言 - 專門用來處理資料的存取與管理 - 三層架構 1. Database 資料庫 2. Table 表 3. Column - 一個資料庫裡面有多張表 一張表裏面又有多個 column  - 一定具備四個基礎行為 : CRUD 1. Create 2. Read 3. Update 4. Delete - 資料庫會被攻擊 但不是直接對資料庫攻擊 利用**後端語言**溝通資料庫時的語法漏洞進行攻擊 #### SQLi ```php= <?php $name = $_POST['name']; $query = "INSERT INTO `Students`(name) VALUES ('" .$name . "')" ?> ``` 如果name那邊輸入`Robert'); DROP TABLE Students;--` `Students` 這個Table會被刪除 - 直接把輸入放入 SQL 語法中 - 完全沒有過濾輸入 ### robot.txt <br>^Google爬蟲退散給我手動爬^ - `robots.txt`:包含檢索器可存取網站哪些部分的相關規則 存於網頁根目錄 > 但你不是爬蟲工具 - 存放於網站根目錄下的ASCII編碼文字檔案 - 必須全部小寫 - 避免 url 大小寫敏感問題 - 管理後台 - 避免後台被索引~但直接看到所有Dissallow?!!~ - 利用路徑匹配,間接禁止索引真正位置 ```robot.txt User-agent: * [x] Disallow: /you_will_never_see_me/ [o] Disallow: /you_will_never ``` <!--小天使們已集體陣亡,歡迎各位支援--> ## Hash 雜湊、哈希  - 將任意長度的字串轉成固定長度 - 特性 - 雪崩效應 字串即使只有動一個字,Hash 結果差異很大 - md5(1234) = 81dc9bdb52d04dc20036dbd8313ed055 - md5(1235) = 9996535e07258a7bbfd8b132435c5962 - 無法回推 可以從 X 算出 Hash(X),但無法從 Hash(X) 算出 X - 抗碰撞 很難找到兩個不同字串 X 與 X’符合 Hash(X) = Hash(X') - 用途 - 驗證資料完整性 - 用安全通道傳檔案 Hash 值 就可用較不安全通道傳大檔案 - 在不取得明文的情況下驗證資料正確性 - 儲存使用者密碼的Hash 確保管理員無從得知明文 - 常見雜湊函式 - MD5 (128 bits) ~不安全~ - SHA-1 (160 bits) ~不安全~ - SHA-256 (256 bits)、SHA-512 (512 bits) - 好用工具推推 - [CyberChef](https://gchq.github.io/CyberChef/) - [MD5爆破](https://cmd5.com/) ## Encode ### 摩斯電碼 - 一個中年轉職的勵志故事 - 哲學系 -> 畫畫 -> 航海 -> 發明電報 - 可用光、電、聲音傳輸 - 訊號間有不同停頓時間 - 點劃之間 1 單位 - 字母之間 3 單位 - 單字之間 7 單位  - [Morse Code Translator](https://morsecode.world/international/translator.html) ### 名詞介紹 - 編碼 (Encoding) - 是資訊從一種形式或格式轉換為另一種形式的過程。 - 解碼 (Decoding): - 編碼的逆過程,即將資料從另一種形式轉換回來。 - ==編碼 ≠ 加密== - 只要知道是哪種編碼就GG - 詳見 Day 01 **隱寫術** 簡報 - Binary Encode - ASCII - [ASCII to Hex](https://www.asciitohex.com/) - Hex Encode - Base64 Encode - ASCII = 8 bit - Base64 = 6 bits - **如果原文不整除3,結尾會出現對應數量的 `=`**  - URL Encode - 為了避開有特殊意義的符號 `& = # ?` - 編碼為 `%` 加上該字元之 ASCII ~Hex表示~ - Google search:我是誰&我在哪 > 還記得 Info Leakage 的 Line 小劇場嗎 QAQ ## 替換式加密 - 替換密碼是字母作有系統的代換,直到訊息被替換成其它難以解讀的字。 - 單表加密: - 字母的替換規則是一對一對應 Ex: 凱撒密碼 - 多表加密: - 字母的替換規則是一對多對應 Ex: 維吉尼亞密碼 > 去看 Day 02 Crypto > [Sauce Here](https://hackmd.io/@nisra/SJko9QrkF/%2Fi4alEZccT8q9oE0z9VrP_Q) > [name=Andy/古典密碼神人Crypto講師][name=Comment by 404/懶得打字的OS講師] ## 好油喔 Peko <br>^開玩笑的開打啦你各位^ :::warning [NISRA ペコ Server](http://peko.nisra.net/) 請大家愛惜server,不要欺負它peko QQ ::: ### Playground 01 <br>^網頁三兄弟知多少^ - `F12` 按起來啦你各位 - 三兄弟:HTML, CSS, JS > 前端的**所有東西**會直接給使用者看 - Bottom Line:敏感資料鼻要放前端會出事 ### Playground 02 <br>^JavaScript\ XSS\ game^ - XSS - Cross-site Scripting - 利用輸入欄位輸入 JS 的 Script Tag 攻擊 => 利用特殊語法規避輸入字元規則 1. ==最大的問題== 無條件相信使用者輸入 1. 輸入過濾 ( 拋棄所有`\` 2. 限制輸入 ( 禁止輸入`\` 3. 改寫輸入 ( `<` 改寫成 `<` > 棒棒der 2. Content Security Policy - 用規則阻擋語法執行 規定信任的^語法^/~腳本~來源 - 無法導入正常的JS區塊 - JS 在 HTML 很多地方都能執行 ### Playground 03 <br>^你還記得當年的鍵盤神技嗎!^ - keyup - 可以監聽鍵盤被按壓 - keycode - 對應的是鍵盤按壓下去時被監聽的資料 <!--直接在console跑showflag(secretCode)就出來ㄌㄡ--> <!-- 暴雷www --> <!-- 話說,用 ctrl + / 就可以直接跑出註解ㄌ--> <!-- 原來如此,我之前每次都手打xDD --> <!-- 可以請問XSS Storage的確切作法ㄇ 要在哪裡問--> <!-- 你只要在 events 塞 JS 並且成功彈出 alert,就代表你成功了 --> ###### tags: `Enlightened` `NISRA` `2021` <style> .navbar-brand::after { content: " × NISRA"; } </style>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up