HITCON Community 2023 - Re:CTF Writeup
考古題
misc
1. unreadable
題目
解題
嘗試了各種不同工具,像是 BinWalk, file, hexdump 最後使用 xxd 看到文字排列成的圖像 圖像就是 flag 的字串 還嘗試了 hexedit 也可以成功的
頭要轉一下
2. fbi-warning
題目
解題
給了一個網站,介面應該是日本的 2ch 論壇 題目要我們找到使用者 Ωrange 的 IP 位置,並且提示了 ip 是 217.x.x.x
進去網站後可以看到,使用者 Ωrange 發布了一個回文,並且附帶一張圖片
推文中給了一個網址 https://tinyurl.com/fbi-hack 點進去後發現並沒有有用的資訊…
原本以為是 injection 類型的題目 在網頁亂點一通後,基本上功能都是死的 最後在網頁原始碼發現
1
<!-- GazouBBS v3.0 --><!-- ふたば改0.8 -->
爬文後發現原始碼有公開:https://hackmd.io/LsRB6pWMQKeGvv6HRb8Xk:
ID生成方式是將 ip 串 IDSEED 串 日期 後 使用 “id” 這個字串作為 slat 做 crypt 加密 最後取後 8 碼來當 ID
define("IDSEED", 'idの種');
if(DISP_ID){
if($email&&DISP_ID==1){
$now .= " ID:???";
}else{
$now.=" ID:".substr(crypt(md5($_SERVER["REMOTE_ADDR"].IDSEED.gmdate("Ymd", $time+9*60*60)),'id'),-8);
}
}
回推是不可能的,所以直接暴力解 因為題目有提示ip開頭為 217 所以就從 217.0.0.1 嘗試到 217.255.255.255 把每個結果拿去看發文者 ID:E98SXRsI 做比對 就可以抓出 ip 了
前面一直認為 ‘idの種’ 是伺服器那邊會隨便輸入一串字串,結果沒想到就是直接使用 ‘idの種’ …
3. EV3 Arm
題目
解題
題目給了一個 機器人寫字的影片 和 ev3arm.rbf 程式碼 影片中機器人寫出了 hitcon{ 影片就結束了 https://youtu.be/VNAVl6F1-7E
ev3arm.rbf 內則是控制馬達動作的程式碼
ev3arm
├─ StartBlock
├─ MediumMotor.Time MotorPort: (馬達A) | Speed: -35 | Seconds: 0.55 | Brake_At_End: Brake
├─ MediumMotor.Degrees MotorPort: D | Speed: -10 | Degrees: 90 | Brake_At_End: Brake
├─ MediumMotor.Time MotorPort: A | Speed: 35 | Seconds: 0.4 | Brake_At_End: Brake
├─ MediumMotor.Degrees MotorPort: D | Speed: 10 | Degrees: 45 | Brake_At_End: Brake
├─ MediumMotor.Time MotorPort: A | Speed: -35 | Seconds: 0.55 | Brake_At_End: Brake
├─ Move.Degrees Ports: B+C | Steering: 0 | Speed: 20 | Degrees: 20 | Brake_At_End: Brake
├─ MediumMotor.Degrees MotorPort: D | Speed: -10 | Degrees: 45 | Brake_At_End: Brake
├─ MediumMotor.Time MotorPort: A | Speed: 35 | Seconds: 0.4 | Brake_At_End: Brake
├─ MediumMotor.Degrees MotorPort: D | Speed: 10 | Degrees: 90 | Brake_At_End: Brake
├─ Move.Degrees Ports: B+C | Steering: 0 | Speed: 30 | Degrees: 15 | Brake_At_End: Brake
├─ MediumMotor.Degrees MotorPort: D | Speed: -10 | Degrees: 30 | Brake_At_End: Brake
├─ MediumMotor.Time MotorPort: A | Speed: -35 | Seconds: 0.55 | Brake_At_End: Brake
├─ MediumMotor.Time MotorPort: A | Speed: 35 | Seconds: 0.4 | Brake_At_End: Brake
...
...
...
接著根據影片的動作去反推出每個馬達的代號 用 python 逐行提取用了哪個馬達和移動多少 我主要分成了六個動作
- 筆往上(馬達A) (不寫字)
- 筆往下(馬達A) (寫字)
- 左移(馬達D)
- 右移(馬達D)
- 上移(馬達B+C)
- 下移(馬達B+C)
接著用模擬書寫的功能就可以得到答案,雖然程式沒寫得很完整,但還是能看出 flag 內容XD
web
1. papapa
題目
解題
查看憑證內容 發現擁有者是 very-secret-area-for-ctf.chal.kikihost.xyz
直接修改網址看看能不能進,發現進不去 去查了一下 dns 發現也沒有對應的內容 應該是內部私人 dns 之類的
2. yeeclass
題目
解題
當黑箱解的時候只解到把 cookie 砍掉進入 flag 頁面可以看到 flag 上傳者和詳細的上傳時間
進去網頁可以看到是一個繳作業的系統 不過都沒其他按鈕,所以先試著登入看看 帳號密碼亂打就可以進了,不過用同個帳號再登入就要使用剛剛亂打的密碼 所以這邊的登入是,如果帳號不存在就直接註冊一個
登入之後出現了繳交和上傳作業的按鈕,不過 Flag 的作業已經被關閉了 沒按鈕可點
先去 Public Homework,發現網址有 ?homeworkid=2
試試看把 ?homeworkid=2 改成 ?homeworkid=1 發現權限不足,表示這頁面應該是 Flag 沒錯了
看看目前的 cookie 有 PHPSESSID 和 session 查資料後得知 PHPSESSID 是一個唯一值 伺服器會根據這個 ID 在伺服器內找資料 所以更改這個的意義不大
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[
{
"domain": "rectf.hitcon2023.online",
"hostOnly": true,
"httpOnly": false,
"name": "PHPSESSID",
"path": "/",
"sameSite": "unspecified",
"secure": false,
"session": true,
"storeId": "0",
"value": "49d29fa6ee8451e390335c91487aeb67",
"id": 1
},
{
"domain": "rectf.hitcon2023.online",
"expirationDate": 1692669998.959451,
"hostOnly": true,
"httpOnly": true,
"name": "session",
"path": "/",
"sameSite": "lax",
"secure": false,
"session": false,
"storeId": "0",
"value": "9d9eeef6-215a-457c-a960-2da4197305b2.fsR3JwH7egQWEOYt4tHDE0fcgwQ",
"id": 2
}
]
不過在好奇心的驅使下,我嘗試把 cookie 刪除後重新整理頁面 發現順利的進入的 Flag 頁面
根據其他上傳頁面,可以看到上傳後作業的網址是一個 hash 所以如果我們知道時間,應該可以直接推測出上傳後的檔案名稱
黑箱解的時候卡在這,我嘗試使用自己上傳作業的時間 去做各種不同的 hash 來比對這網站是使用哪種 但都比不出來
有了 SourceCode 之後直接衝去看 hash 的部分 發現是使用了 uniqid 這個函數生成字串 它會使用微秒的部分去生成一組字串 並且這個字串的開頭會是 username_ 接著把這個字串拿去做 sha1
1
2
3
4
5
6
7
8
$id = uniqid($_SESSION["username"]."_");
$submit_query = $pdo->prepare("INSERT INTO submission (`hash`, userid, homeworkid, content) VALUES (?, ?, ?, ?)");
$submit_query->execute(array(
hash("sha1", $id),
$_SESSION["userid"],
$_POST["homeworkid"],
$_POST["content"]
));
所以現在只要用上傳的時間 2023-08-16 04:09:35.584096 去做uniqid(“flagholder_”,)之後 拿去做 sha1 沒意外的話就可以得到 flag 的頁面了
$username = "flagholder_";
$id = uniqid("username",);
$myans = hash("sha1", $id)
先用自己上傳的時間和hash在本地端嘗試
1
奇怪我覺得我程式沒寫錯,弄了一個晚上炸不出答案
最後發現程式邏輯沒錯,但時區錯了
確認程式沒問題後寫成腳本去戳網站 寫成只要 http code 200 就噴網址出來 最後拿到 flag
4. babyfirst(卡死,暫時放棄)
題目
解題
題目給了一個網站,進去看到內容可以發現,這個網站會根據 ip 來分配 sandbox
<?php
highlight_file(__FILE__);
$dir = './sandbox/' . $_SERVER['REMOTE_ADDR'];echo 'Your sandbox:'.$dir.'/';
if ( !file_exists($dir) )
mkdir($dir,0777,true);
chdir($dir);
$args = $_GET['args'];
for ( $i=0; $i<count($args); $i++ ){
if ( !preg_match('/^\w+$/', $args[$i]) )
exit();
}
exec("/bin/orange " . implode(" ", $args));
?>
Your sandbox:./sandbox/60.250.162.9/
Warning: implode(): Invalid arguments passed in /var/www/html/index.php on line 14
總之先回到首頁看程式碼,可以看到
1
$_GET['args']
表示我們是可以帶入參數的 但由於正規表達是: ‘/^\w+$/’ 只能輸入大小寫英文字母和底線
想嘗試用 wget 載腳本過去 但網址符號幾乎都被擋了
忽然想到 AIS3 某堂課有講到 可以把 ip 變成純數字 之後可以試試看這個方向
一些紀錄
活動內容
HITCON Community 2023 - CTF 回來了,讓我們歡迎「Re:CTF 活動」! https://hackmd.io/@HITCON/ReCTF
日期:8月 11日 21:00 (GMT+8) - 8月 18日 平台開放時間:預計至 8 月 25 日