## misc ### 1. unreadable #### 題目 ![](https://hackmd.io/_uploads/HJi9X-pn3.png) #### 解題 嘗試了各種不同工具,像是 BinWalk, file, hexdump 最後使用 xxd 看到文字排列成的圖像 圖像就是 flag 的字串 還嘗試了 hexedit 也可以成功的 ![](https://hackmd.io/_uploads/rJesPtonn.png) >頭要轉一下 ### 2. fbi-warning #### 題目 ![](https://hackmd.io/_uploads/HyN6XZThh.png) #### 解題 給了一個網站,介面應該是日本的 2ch 論壇 題目要我們找到使用者 Ωrange 的 IP 位置,並且提示了 ip 是 217.x.x.x 進去網站後可以看到,使用者 Ωrange 發布了一個回文,並且附帶一張圖片 ![](https://hackmd.io/_uploads/By6Lurj2h.png) 推文中給了一個網址 [https://tinyurl.com/fbi-hack](https://www.youtube.com/watch?v=dQw4w9WgXcQ&ab_channel=RickAstley) 點進去後發現並沒有有用的資訊... ![](https://hackmd.io/_uploads/SyhJ7Is22.png) 原本以為是 injection 類型的題目 在網頁亂點一通後,基本上功能都是死的 最後在網頁原始碼發現 ``` <!-- GazouBBS v3.0 --><!-- ふたば改0.8 --> ``` 爬文後發現原始碼有公開:https://hackmd.io/LsRB6pWMQKeGvv6HRb8Xk: ID生成方式是將 ip 串 IDSEED 串 日期 後 使用 "id" 這個字串作為 slat 做 crypt 加密 最後取後 8 碼來當 ID ```php= 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 #### 題目 ![](https://hackmd.io/_uploads/r1UxVbah3.png) #### 解題 題目給了一個 機器人寫字的影片 和 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 逐行提取用了哪個馬達和移動多少 我主要分成了六個動作 1. 筆往上(馬達A) (不寫字) 2. 筆往下(馬達A) (寫字) 4. 左移(馬達D) 5. 右移(馬達D) 6. 上移(馬達B+C) 7. 下移(馬達B+C) 接著用模擬書寫的功能就可以得到答案,雖然程式沒寫得很完整,但還是能看出 flag 內容XD ![](https://hackmd.io/_uploads/B1bV6Ki32.png) ## web ### 1. papapa #### 題目 ![](https://hackmd.io/_uploads/S1wMEb63n.png) #### 解題 題目只給了一個網址 進來之後長這樣,可以發現 https 是不安全的 ![](https://hackmd.io/_uploads/ry6y6fon3.png) 原因是憑證無效 ![](https://hackmd.io/_uploads/H1ENaGi3n.png) 查看憑證內容 發現擁有者是 very-secret-area-for-ctf.chal.kikihost.xyz ![](https://hackmd.io/_uploads/S1lfpzihn.png) 直接修改網址看看能不能進,發現進不去 去查了一下 dns 發現也沒有對應的內容 應該是內部私人 dns 之類的 ![](https://hackmd.io/_uploads/BJRqpEjn2.png) 使用 burp 改請求 host ![](https://hackmd.io/_uploads/BkGIVKi3h.png) 順利噴出 flag ![](https://hackmd.io/_uploads/ryzqVtshn.png) ### 2. yeeclass #### 題目 ![](https://hackmd.io/_uploads/HJeONW6h3.png) #### 解題 這題一開始我記得沒給 SourceCode ![](https://hackmd.io/_uploads/rknudWs33.png) >當黑箱解的時候只解到把 cookie 砍掉進入 flag 頁面可以看到 flag 上傳者和詳細的上傳時間 進去網頁可以看到是一個繳作業的系統 不過都沒其他按鈕,所以先試著登入看看 ![](https://hackmd.io/_uploads/H1mXu-s22.png) 帳號密碼亂打就可以進了,不過用同個帳號再登入就要使用剛剛亂打的密碼 所以這邊的登入是,如果帳號不存在就直接註冊一個 ![](https://hackmd.io/_uploads/H1Opdbjn2.png) 登入之後出現了繳交和上傳作業的按鈕,不過 Flag 的作業已經被關閉了 沒按鈕可點 ![](https://hackmd.io/_uploads/rybFYWs22.png) 先去 Public Homework,發現網址有 ?homeworkid=2 ![](https://hackmd.io/_uploads/SJ90FWi2n.png) 試試看把 ?homeworkid=2 改成 ?homeworkid=1 發現權限不足,表示這頁面應該是 Flag 沒錯了 ![](https://hackmd.io/_uploads/HyD79Ws23.png) 看看目前的 cookie 有 PHPSESSID 和 session 查資料後得知 PHPSESSID 是一個唯一值 伺服器會根據這個 ID 在伺服器內找資料 所以更改這個的意義不大 ``` [ { "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 頁面 >拿到 SourceCode 後去看了 這時可以看到有一個名為 Flag 的作業 顯示了上傳者和異常詳細的上傳時間 ![](https://hackmd.io/_uploads/Hk4Zn-j32.png) 根據其他上傳頁面,可以看到上傳後作業的網址是一個 hash 所以如果我們知道時間,應該可以直接推測出上傳後的檔案名稱 ![](https://hackmd.io/_uploads/HksUTZsnn.png) 黑箱解的時候卡在這,我嘗試使用自己上傳作業的時間 去做各種不同的 hash 來比對這網站是使用哪種 但都比不出來 有了 SourceCode 之後直接衝去看 hash 的部分 發現是使用了 uniqid 這個函數生成字串 它會使用微秒的部分去生成一組字串 並且這個字串的開頭會是 username_ 接著把這個字串拿去做 sha1 ``` $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 的頁面了 ```php! $username = "flagholder_"; $id = uniqid("username",); $myans = hash("sha1", $id) ``` 先用自己上傳的時間和hash在本地端嘗試 ``` 奇怪我覺得我程式沒寫錯,弄了一個晚上炸不出答案 ``` >最後發現程式邏輯沒錯,但時區錯了 確認程式沒問題後寫成腳本去戳網站 寫成只要 http code 200 就噴網址出來 最後拿到 flag ### 4. babyfirst(卡死,暫時放棄) #### 題目 ![](https://hackmd.io/_uploads/SJa5VWTh3.png) #### 解題 題目給了一個網站,進去看到內容可以發現,這個網站會根據 ip 來分配 sandbox ```php= <?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 ``` 進去自己的空間看看,啥都沒有,返回上一層看有沒有其他東西 ![](https://hackmd.io/_uploads/SkNlsBo33.png) 恩好 ![](https://hackmd.io/_uploads/S1pzsrj2n.png) 總之先回到首頁看程式碼,可以看到 ```php $_GET['args'] ``` 表示我們是可以帶入參數的 但由於正規表達是: '/^\w+$/' 只能輸入大小寫英文字母和底線 想嘗試用 wget 載腳本過去 但網址符號幾乎都被擋了 忽然想到 AIS3 某堂課有講到 可以把 ip 變成純數字 之後可以試試看這個方向 ## 一些紀錄 ### 活動內容 [HITCON Community 2023 - CTF 回來了,讓我們歡迎「Re:CTF 活動」!](https://blog.hitcon.org/2023/08/blog-post.html) https://hackmd.io/@HITCON/ReCTF 日期:8月 11日 21:00 (GMT+8) - 8月 18日 平台開放時間:預計至 8 月 25 日 ### 題目 ![](https://hackmd.io/_uploads/HkyTG-6hh.png) ### 大佬們的分數 ![](https://hackmd.io/_uploads/SyrH7ZT32.png)