Red Team Lounge CTF 2021 writeup

English version: [Red Team Lounge CTF 2021 writeup (English version) - Qiita](https://qiita.com/mikecat_mixc/items/cddab715b29f6f576bfb)

# 概要

[Red Team Lounge CTF 2021](https://rtl-ctf.hackarmour.tech/) (2021年7月31日 13:30～2021年8月2日 01:30 (JST)) ([CTFtime.org](https://ctftime.org/event/1400/)) に1人チームで参加した。
(開催時間はスコアサーバに設置されていたカウントダウンの設定に基づく)
500点を獲得し、339チーム(正の点数を獲得したのは327チーム)中22位だった。

解けた問題、および解けたことになった問題とその時刻は以下の通りである。

|Challenge|Category|Value|Time (JST)|
|---|---|--:|---|
|Bad Developers|Reversing|10|2021/07/31 13:45:52|
|Diffie Hellman|Crypto|100|2021/07/31 14:05:24|
|Basic|Web|10|2021/07/31 15:10:50|
|Expic|Forensics|15|2021/07/31 15:28:13|
|WDigest|Windows|50|2021/07/31 15:47:29|
|Manipulated|Forensics|50|2021/07/31 16:12:58|
|The gate of ultimate success|Reversing|50|2021/07/31 16:13:37|
|Welcome|Crypto|5|2021/07/31 16:20:47|
|Triangle|Crypto|10|2021/07/31 17:35:56|
|Ciphers Galore!|Crypto|40|2021/07/31 18:03:41|
|Last Words|Crypto|50|2021/07/31 18:15:46|
|Identifying an Attack|OSINT|10|2021/08/01 00:44:55|
|Bites|Reversing|50|2021/08/01 00:57:22|
|Where is this?|OSINT|40|2021/08/01 20:16:56|
|Thanks for playing|OSINT|5|2021/08/01 21:57:20|
|Feedback|CTF|5|2021/08/01 23:02:31|

![Category Breakdown](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/31275c33-56fb-5e52-b8d3-ebfd13b1b332.png)
![Score over Time](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/da691685-8c02-8294-5401-ca3733459a42.png)

<details><summary>公式Score Over Time (解けた時刻を無視して横方向に等間隔でプロット)</summary><div>

![公式Score over Time](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/643a96fa-4c6a-2ade-be5f-e7796cb50b55.png)

</div></details>

# 解けた問題

## Pwn

残念ながらこのジャンルからは1問も解けなかった。

## Crypto

### Welcome

以下の文字列が与えられた。

```
UlRMe0g0VkVfRlVOX1BMNFkxTkchfQ==
```

[CyberChefでFrom Base64を適用する](https://gchq.github.io/CyberChef/#recipe=From_Base64%28%27A-Za-z0-9%2B/%3D%27,true%29&input=VWxSTWUwZzBWa1ZmUmxWT1gxQk1ORmt4VGtjaGZRPT0)ことで、flagが得られた。

```
RTL{H4VE_FUN_PL4Y1NG!}
```

### Triangle

以下の問題文とデータが与えられた。

> My friend encoded the flag with XOR but forgot the key! He remembers that its a 4 byte key. Can you recover the flag?

```
133f29027034094a33253126395b3704
```

flagの先頭部分は`RTL{`になっていると推測できるので、[これと与えられたデータのXORをとる](https://gchq.github.io/CyberChef/#recipe=From_Hex%28%27Auto%27%29XOR%28%7B%27option%27:%27UTF8%27,%27string%27:%27RTL%7B%27%7D,%27Standard%27,false%29To_Hex%28%27Space%27,0%29&input=MTMzZjI5MDI3MDM0MDk0YTMzMjUzMTI2Mzk1YjM3MDQ)ことで、
keyの推定値

```
41 6b 65 79
```

が得られた。
このkeyの推定値と[与えられたデータのXORをとる](https://gchq.github.io/CyberChef/#recipe=From_Hex%28%27Auto%27%29XOR%28%7B%27option%27:%27Hex%27,%27string%27:%2741%206b%2065%2079%27%7D,%27Standard%27,false%29To_Hex%28%27Space%27,0/disabled%29&input=MTMzZjI5MDI3MDM0MDk0YTMzMjUzMTI2Mzk1YjM3MDQ)ことで、flagが得られた。

```
RTL{1_l3rNT_x0R}
```

### Ciphers Galore!

以下のデータのURL (hastebin) が与えられた。

```
$&Es6a@I+v5;|`h_$)q?2Kq75w=p|%tK+)8K)K}d!b_l
```

問題名の「Galore」をググると、「たくさん」のような意味のようである。
[CyberChef](https://gchq.github.io/CyberChef/)でROT47 (Amount=47)をかけてみると、

```
SUtDe2oxZGdjM190SXBnazBfdHlAMTEzZXgzXzN5P30=
```

という結果が得られた。さらにこれにFrom Base64をかけると、

```
IKC{j1dgc3_tIpgk0_ty@113ex3_3y?}
```

という結果が得られた。さらに[これにROT13(Amount=9)をかける](https://gchq.github.io/CyberChef/#recipe=ROT47%2847%29From_Base64%28%27A-Za-z0-9%2B/%3D%27,true%29ROT13%28true,true,false,9%29&input=JCZFczZhQEkrdjU7fGBoXyQpcT8yS3E3NXc9cHwldEsrKThLKUt9ZCFiX2wK)と、flagが得られた。

```
RTL{s1mpl3_cRypt0_ch@113ng3_3h?}
```

### Last Words

以下のデータのURL (hastebin) が与えられた。

```
n=654922591808399471401115531725039933804976416275178080902192760929946158327379913921397815675866572368514471928883646492843129515545704650288455484139194674085479767043433916059634120332033088959269854607488937394748966549930683612344765680930825877346853207413052755531377359101713133223003902598963694672505995923904179391456221568627581198379796103905853274401142025181753922563551760475421349438387207814101835728396617249777551918738205026251791041540304166035801169367444769632368098508148321283516990672280903943844076578831127878464804361185261171218008337510295988058766597378522306523707845029512326086281153969312238517561678149326216382068770238520736531273600941471546492734984885174688640769745572963612242607879009754765129567334064867941063826839593018197528692242502124648098963061951119350954396467735643056862091298259178844956622094028547135110211632557488448742742990287309014601421331198088078262672918791473250793328827598271675543610977104049017695062380578362377174224228163980223055437425220689053314587171763084816067718392663203432596767350691383811865855862699762433397509373202656517
e=65537
ct=100710438795162977079348743974088808865381156915931230652674830564884952723797964737417330704790990449847640350694313826907540645947517771309102468382620491151431303509245971254205327928401285858105844273322941744709730235138404791133855224230464330311543377527034287444040442497607564368033381652353025668428244301303066924437016815162803737278638329823899949834679835580778760115487417517224721370787073698165030607724383674378473550370840265887300696291636301457816942477342875386648871368111343762416276747522564143279926396047848536514023846050160848670498687478441942327283357707903465054287238235065476035197766241316080918681581228125031794197267118491412751434265211623073108630476746894061360362486334754179185179035203622586839918393560491482900365894224904151749064929247038688878617389856012413316816710758669316380134350637155478806193340543320655839127039864941782215970914222744836875559787971645305231571859542782671984468965485858145740868483956306860449187868403601170785547890022967337275595188765793071937500328605240827441496747925821120273130333043107613757070639870802278814019421139964349
```

この`n`の値をRaspberry Pi上で`wolfram`コマンドを用い、`FactorInteger`関数で素因数分解をおこなったところ、

```
86842034747506493609419721799469420931995622862762177911235982167541270872531314416635530661571139759415845637249847122973461307626071732001202620839724983790638777821431490624281206999841752934471207639839705304729136564852048258975833304653350042975893538110232832319190920640420813884920174219068423676798778919245766035367660194191901644604977395931936301500921652573
```

の3乗という結果が出た。`PrimeQ`関数でチェックしたところ、この数は素数であった。

これを用いて、
[オイラーのφ関数 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%CF%86%E9%96%A2%E6%95%B0)
を参考にφ(n)を求め、[RSA暗号](https://ja.wikipedia.org/wiki/RSA%E6%9A%97%E5%8F%B7)と同様の復号操作を行った。

<details><summary>操作ログ</summary><div>

```
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> n=654922591808399471401115531725039933804976416275178080902192760929946158327379913921397815675866572368514471928883646492843129515545704650288455484139194674085479767043433916059634120332033088959269854607488937394748966549930683612344765680930825877346853207413052755531377359101713133223003902598963694672505995923904179391456221568627581198379796103905853274401142025181753922563551760475421349438387207814101835728396617249777551918738205026251791041540304166035801169367444769632368098508148321283516990672280903943844076578831127878464804361185261171218008337510295988058766597378522306523707845029512326086281153969312238517561678149326216382068770238520736531273600941471546492734984885174688640769745572963612242607879009754765129567334064867941063826839593018197528692242502124648098963061951119350954396467735643056862091298259178844956622094028547135110211632557488448742742990287309014601421331198088078262672918791473250793328827598271675543610977104049017695062380578362377174224228163980223055437425220689053314587171763084816067718392663203432596767350691383811865855862699762433397509373202656517
>>> e=65537
>>> ct=100710438795162977079348743974088808865381156915931230652674830564884952723797964737417330704790990449847640350694313826907540645947517771309102468382620491151431303509245971254205327928401285858105844273322941744709730235138404791133855224230464330311543377527034287444040442497607564368033381652353025668428244301303066924437016815162803737278638329823899949834679835580778760115487417517224721370787073698165030607724383674378473550370840265887300696291636301457816942477342875386648871368111343762416276747522564143279926396047848536514023846050160848670498687478441942327283357707903465054287238235065476035197766241316080918681581228125031794197267118491412751434265211623073108630476746894061360362486334754179185179035203622586839918393560491482900365894224904151749064929247038688878617389856012413316816710758669316380134350637155478806193340543320655839127039864941782215970914222744836875559787971645305231571859542782671984468965485858145740868483956306860449187868403601170785547890022967337275595188765793071937500328605240827441496747925821120273130333043107613757070639870802278814019421139964349
>>> x = 86842034747506493609419721799469420931995622862762177911235982167541270872531314416635530661571139759415845637249847122973461307626071732001202620839724983790638777821431490624281206999841752934471207639839705304729136564852048258975833304653350042975893538110232832319190920640420813884920174219068423676798778919245766035367660194191901644604977395931936301500921652573
>>> phi = n * (x - 1) // x
>>> d = pow(e, -1, phi)
>>> res = pow(ct, d, n)
>>> hex(res)
'0x52544c7b315f6330756c645f7072306234626c795f6d346b335f746831355f616c30745f6834726433725f6e6578745f74316d332121212d65383266616337613738306637323537396334376236636530643562376664383265623631393265643635393439636134383533303962357d'
>>> exit()
```

</div></details>

得られた結果に対し[CyberChefでFrom Hexをかける](https://gchq.github.io/CyberChef/#recipe=From_Hex%28%27Auto%27%29&input=NTI1NDRjN2IzMTVmNjMzMDc1NmM2NDVmNzA3MjMwNjIzNDYyNmM3OTVmNmQzNDZiMzM1Zjc0NjgzMTM1NWY2MTZjMzA3NDVmNjgzNDcyNjQzMzcyNWY2ZTY1Nzg3NDVmNzQzMTZkMzMyMTIxMjEyZDY1MzgzMjY2NjE2MzM3NjEzNzM4MzA2NjM3MzIzNTM3Mzk2MzM0Mzc2MjM2NjM2NTMwNjQzNTYyMzc2NjY0MzgzMjY1NjIzNjMxMzkzMjY1NjQzNjM1MzkzNDM5NjM2MTM0MzgzNTMzMzAzOTYyMzU3ZA)ことで、flagが得られた。

```
RTL{1_c0uld_pr0b4bly_m4k3_th15_al0t_h4rd3r_next_t1m3!!!-e82fac7a780f72579c47b6ce0d5b7fd82eb6192ed65949ca485309b5}
```

### Diffie Hellman

TCPサーバの接続情報が与えられた。

[Tera Term](https://ttssh2.osdn.jp/)で接続すると、BOBとALICEそれぞれについてpublic messageを送るように要求された。
それぞれ適当な値を送ると、メッセージが表示された。

```
g:5
p:23
Send your public message to BOB.Intercepted Alice's message: 4
4
Send your public message to ALICE.Intercepted Bob's message: 10
10
The message is encrypted.Bob sends message:@F^i&q%v+ *t'$!%+$tpw"v't#v"+&q!&*p'o
```

表示されたメッセージに[CyberChefでXOR Brute Forceをかける](https://gchq.github.io/CyberChef/#recipe=XOR_Brute_Force%281,100,0,%27Standard%27,false,true,false,%27%27%29&input=QEZeaSZxJXYrICp0JyQhJSskdHB3InYndCN2IismcSEmKnAnbw)ことで、flagが得られた。

```
Key = 12: RTL{4c7d928f563796fbe0d5f1d094c348b5}
```

また、public messageとして0を2回送ることでも、flagが得られた。

```
g:5
p:23
Send your public message to BOB.Intercepted Alice's message: 4
0
Send your public message to ALICE.Intercepted Bob's message: 10
0
The message is encrypted.Bob sends message:RTL{4c7d928f563796fbe0d5f1d094c348b5}
```

```
RTL{4c7d928f563796fbe0d5f1d094c348b5}
```

## Reversing

### Bad Developers

テキストデータのURL (pastebin) が与えられた。

得られたデータをPythonのプログラムとして解釈すると、入力を1文字ずつ指定の値かチェックしていたので、
これを読み取ることでflagが得られた。

```
RTL{D0NT_D0_TH1S}
```

### The gate of ultimate success

GoogleドライブのURLが与えられた。
アクセスすると、ファイル`we_start_with_basics.exe`が得られた。

[TDM-GCC](https://jmeubank.github.io/tdm-gcc/)の`objdump`で逆アセンブルして読むと、`main`関数内で

1. `scanf`関数を用いて入力を読み込む
2. `strrev`関数を用いて読み込んだデータを加工する
3. データの各バイトに0x7bをXORする

という処理がみられた。
また、バイナリをチェックすると、出力用のメッセージと思われる文字列の近くに

```
/5:/)4+62/(46>):(82(:9
```

という文字列があった。
この文字列に[CyberChefで0x7bをXORし、文字列を反転させる](https://gchq.github.io/CyberChef/#recipe=XOR%28%7B%27option%27:%27Hex%27,%27string%27:%277b%27%7D,%27Standard%27,false%29Reverse%28%27Character%27%29&input=LzU6Lyk0KzYyLyg0Nj4pOig4Mig6OQ)ことで、keyが得られた。
このkeyを問題文の指示通り`RTL{}`で囲むことで、flagが得られた。

```
RTL{BASICSAREMOSTIMPORTANT}
```

### Bites

何かのプログラムのようなテキストファイル`dc9_bites.txt`と、
半角空白区切りで数字が並んだテキストファイル`flag.txt`が与えられた。

`dc9_bites.txt`をよく見てみると、何らかのスタックマシンを用い、
配列の添字の偶奇によってそれぞれ違う値をXORしているように見えた。

`flag.txt`の内容に[CyberChefでFrom Decimalを適用し、さらに`RTL{`とXORをとる](https://gchq.github.io/CyberChef/#recipe=From_Decimal%28%27Space%27,false%29XOR%28%7B%27option%27:%27UTF8%27,%27string%27:%27RTL%7B%27%7D,%27Standard%27,false%29&input=MzEgMzUgMSAxMiA1IDY3IDUzIDQwIDE1IDE0IDI1IDY4IDEwNSA4MyA0OA)と、最初の部分が`MwMw`となった。
そこで、`Mw`とXORをとることで、flagが得られた。

```
RTL{H4x_ByT3$$}
```

## OSINT

### Thanks for playing

以下の問題文が与えられた。

> My friend told me that one of the CTF organizers left a note on twitter but I can't seem to find it. #RTLxHA

[Twitterで`#RTLxHA`で検索](https://twitter.com/search?q=%23RTLxHA&src=typed_query&f=live)すると、以下のツイートが見つかった。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/RTLxHA?src=hash&amp;ref_src=twsrc%5Etfw">#RTLxHA</a> 21 CTF is ending soon! Thanks everyone for playing, also thanks challenge creators for making the awesome challenges! <a href="https://t.co/1nSyluCJkr">https://t.co/1nSyluCJkr</a></p>&mdash; xentropy (@d4rckh) <a href="https://twitter.com/d4rckh/status/1421816732860157956?ref_src=twsrc%5Etfw">August 1, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

このツイート中に書かれているURL `https://rtl-ctf.hackarmour.tech/secret` にアクセスすると、flagが書かれていた。

```
RTL{TH4NK2_F0R_PL4Y1NG}
```

### Identifying an Attack

以下の問題文が与えられた。

> Thehackerscrew are remotely executing arbitrary code through Apple’s bluetooth. Can you identify the CVE of the attack?
> 
> The CVE should be wrapped around RTL{}

「Apple Bluetooth CVE remove arbitrary code」でググったり、
[CVE - Search CVE List](https://cve.mitre.org/cve/search_cve_list.html)で「Bluetooth arbitrary code」で検索したりしたが、有効な結果は得られなかった。

「bluetooth remote code cve ios」でググると、
[iOS 13.5 および iPadOS 13.5 のセキュリティコンテンツについて - Apple サポート (日本)](https://support.apple.com/ja-jp/HT211168)
が見つかり、この中に以下の記述があった。

> Bluetooth
> 
> 対象となるデバイス：iPhone 6s 以降、iPad Air 2 以降、iPad mini 4 以降、iPod touch (第 7 世代)
> 
> 影響：リモートの攻撃者によって任意のコードが実行される可能性がある。
> 
> 説明：配列境界チェック機能を改善することで、領域外読み込みの脆弱性に対処しました。
> 
> CVE-2020-9838：ダルムシュタット工科大学 Secure Mobile Networking Lab の Dennis Heinze 氏 (@ttdennis)

しかし、以下はIncorrectであった。

* `RTL{CVE-2020-9838}`
* `RTL{2020-9838}`
* `RTL{20209838}`

さらに「`site:https://support.apple.com/ bluetooth remote arbitrary code`」でググってみると、
[About the security content of iOS 14.4 and iPadOS 14.4 - Apple Support](https://support.apple.com/en-us/HT212146)
が見つかり、以下の記述があった。

> Bluetooth
> 
> Available for: iPhone 6s and later, iPad Pro (all models), iPad Air 2 and later, iPad 5th generation and later, iPad mini 4 and later, and iPod touch (7th generation)
> 
> Impact: A remote attacker may be able to cause arbitrary code execution
> 
> Description: An out-of-bounds read was addressed with improved input validation.
> 
> CVE-2021-1794: Jianjun Dai of 360 Alpha Lab
> 
> Entry added February 1, 2021, updated May 28, 2021
> 
> Bluetooth
> 
> Available for: iPhone 6s and later, iPad Pro (all models), iPad Air 2 and later, iPad 5th generation and later, iPad mini 4 and later, and iPod touch (7th generation)
> 
> Impact: A remote attacker may be able to cause arbitrary code execution
> 
> Description: An out-of-bounds write was addressed with improved input validation.
> 
> CVE-2021-1795: Jianjun Dai of 360 Alpha Lab
> 
> CVE-2021-1796: Jianjun Dai of 360 Alpha Lab
> 
> Entry added February 1, 2021, updated May 28, 2021 

ここから、3個の候補

* CVE-2021-1794
* CVE-2021-1795
* CVE-2021-1796

が得られた。順に試そうとしたところ、最初のものを入れたところでCorrectが出て、flagが得られた。

```
RTL{CVE-2021-1794}
```

### Where is this?

風景写真と思われる画像ファイル`where.png`が与えられ、緯度と経度を求めることを要求された。
写真には特徴的と思われる塔が写っていたため、この塔の部分をペイントで切り出し、
さらにまわりの邪魔になりそうなものを黒く塗りつぶした。

|塔を切り出した画像|さらに塗りつぶした画像|
|:-:|:-:|
|![tower_trimmed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/80f018ee-3a82-02b8-878a-6b33c56c153a.png)|![tower_trimmed_painted.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/3e466575-a444-cdd9-48ec-c77ceee40f4e.png)|

この塔の画像を用いてGoogleで「画像で検索」をしたところ、似た塔の画像が載っている以下のページを見つけた。
[Berlin – the place to be - Is it already that late? 😳 | Facebook](https://m.facebook.com/Berlin/photos/a.169197519354/10158229854884355/?type=3&source=57)

ここからこの塔はBerlinに関係していると判断し、「Berlin tower」でググったところ、以下のページがヒットした。
[Official website of the Berlin TV Tower - Enjoy the city from above](https://tv-turm.de/en/#)
このサイトで「The tower → Virtual tour」と進み、さらに「Bar 203 → 204° South-West」を見ると、
問題の写真で塔の近くに写っていた旗が、特徴的な形の建物の上に立っている様子が見えた。

Googleのストリートビューで「berlin tv tower」で検索し、まわりを探すと、
この建物は「赤の市庁舎」っぽいことがわかった。
[berlin tv tower - Google マップ](https://www.google.co.jp/maps/search/berlin+tv+tower/@52.5208241,13.4072431,17z/data=!3m1!4b1)
さらに、ストリートビューを見ながら移動して探索していくと、それっぽい場所が見つかった。
[B1 - Google マップ](https://www.google.co.jp/maps/@52.5166568,13.4085582,3a,75y,317.27h,100.03t/data=!3m6!1e1!3m4!1sWobVH9qLLmIuFtT9fYxEKg!2e0!7i13312!8i6656)

この画面のURLの情報を指定のフォーマットに当てはめることで、flagが得られた。

```
RTL{52.516_13.408}
```

## Windows

### WDigest

GoogleドライブのURLが与えられた。
アクセスすると、ファイル`lsass1.DMP`が得られた。
また、以下の問題文があった。

> I forgot my Windows password, can you recover it?

「dmp crack windows」でググったところ、以下のページが見つかった。
[Hacking Windows 10: How to Dump NTLM Hashes & Crack Windows Passwords « Null Byte :: WonderHowTo](https://null-byte.wonderhowto.com/how-to/hacking-windows-10-dump-ntlm-hashes-crack-windows-passwords-0198268/)

ここを参考に、Mimikatzで`sekurlsa::minidump`コマンドと`sekurlsa::logonPasswords`コマンドを実行すると、

```
        wdigest :
         * Username : d4rckh
         * Domain   : WIN-243AVCIFKOS
         * Password : RTL{WD1G3ST_1S_B4D}
```

という形でflagが出力された。

```
RTL{WD1G3ST_1S_B4D}
```

## Forensics

### Expic

GoogleドライブのURLが与えられた。
アクセスすると、ファイル`ex.zip`が得られた。

この`ex.zip`を解凍すると、ファイル`photo`が得られた。
このファイル`photo`の中身をチェックすると、最初の方に

```
<prism:number>68747470733a2f2f706173746562696e2e636f6d2f514632557a6a56590a</prism:number>
```

という部分があった。
このタグのようなものの間の十六進文字列に[CyberChefでFrom Hexをかける](https://gchq.github.io/CyberChef/#recipe=From_Hex%28%27Auto%27%29&input=Njg3NDc0NzA3MzNhMmYyZjcwNjE3Mzc0NjU2MjY5NmUyZTYzNmY2ZDJmNTE0NjMyNTU3YTZhNTY1OTBh)と、

```
https://pastebin.com/QF2UzjVY
```

という結果が得られた。
このURLにアクセスすると、

```
T0tLIApSVEx7MTBiYmE5YTUyNDE3MDk1ZGU1MWRiOTQ1NjM2MWQ3NDR9Cg==
```

というデータが得られた。
このデータに[CyberChefでFrom Base64をかける](https://gchq.github.io/CyberChef/#recipe=From_Base64%28%27A-Za-z0-9%2B/%3D%27,true%29&input=VDB0TElBcFNWRXg3TVRCaVltRTVZVFV5TkRFM01EazFaR1UxTVdSaU9UUTFOak0yTVdRM05EUjlDZz09)と、

```
OKK 
RTL{10bba9a52417095de51db9456361d744}
```

という結果になり、flagが得られた。

```
RTL{10bba9a52417095de51db9456361d744}
```

## Web

### Basic

WebページのURLが与えられた。
アクセスすると、Usernameを入れる欄、Passwordを入れる欄、Log Inボタンがあった。

Username欄に`' or 1=1 --`、Password欄に`a`を入れてLog Inボタンを押すと、flagが表示された。

```
RTL{b@s1c_5ql}
```

## CTF

### Feedback

GoogleフォームのURLが与えられた。
アクセスすると、4ページからなるアンケートだった。
(最初と最後のページは説明のみで、実質2ページだった)

アンケートに回答し、送信ボタンを押すと、flagが表示された。

```
RTL{TH4NK_Y0U_F0R_Y0UR_F33DB4CK}
```

# 解けたことになった問題

## Forensics

### Manipulated

GoogleドライブのURLが与えられた。
アクセスすると、ファイル`Manipulated.zip`が得られた。
これを解凍すると、ファイル`corr.png`が得られた。

`corr.png`を[TweakPNG](http://entropymine.com/jason/tweakpng/)で開いてみると、

> Incorrect crc for IHDR chunk (is 9a056c98, should be 15060e3d)

と表示された。さらに、このIHDRの部分を[TSXBIN](http://www.net3-tv.net/~m-tsuchy/tsuchy/dlpage.htm)で見てみると、

```
00008  DateLength      0000000D
0000C  IHDR[0]         49 48 44 52
00010  Width           DEADC0DE
00014  Height          D34DB33F
00018  Depth           08
00019  ColorType       06
0001A  Compression     00
0001B  Filter          00
0001C  Interlace       00
0001D  CRC             9A056C98
```

となっており、少なくともWidthとHeightの値が異常であることが読み取れた。

以下のプログラムを用意し、`corr.png`からIDATのデータを抽出した。

<details><summary>extract.pl</summary><div>

```extract.pl
#!/usr/bin/perl

use strict;
use warnings;

my $in_file = @ARGV > 0 ? $ARGV[0] : "Manipulated/corr.png";

open(IN, "< $in_file") or die("failed to open $in_file\n");
binmode(IN);
my $data = "";
while (<IN>) { $data .= $_; }
close(IN);

binmode(STDOUT);

my $pos = 8;
while ($pos < length($data)) {
	my $len = unpack("N", substr($data, $pos, 4));
	my $type = substr($data, $pos + 4, 4);
	print STDERR "$pos $len $type\n";
	if ($type eq "IDAT") {
		print substr($data, $pos + 8, $len);
	}
	$pos += $len + 12;
}
```

</div></details>

得られたデータに[CyberChefでZlib Inflateをかける](https://gchq.github.io/CyberChef/#recipe=Zlib_Inflate%280,0,%27Adaptive%27,false,false%29)と、2,063,174バイトのデータが得られた。
このデータの最初の部分は、以下のようになっていた。

```
00000000  01 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00  |.ÿÿÿÿ...........|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
```

IHDRのColorType=0x06は「アルファチャンネル付きRGB」を示し、Depth=0x08なので、
これらの情報が正しいとすれば1ピクセルは4バイトで表される。
得られたデータを見ると、最初の1バイトで行のエンコード方法を表し、
次から4バイトずつ色データを表しているようであることが読み取れた。

データの続きを見ると、0x00のバイトが多く、途中以下のように3バイトずつ同じ値がある場所があった。

```
00000790  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000007a0  00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff  |.............ÿÿÿ|
000007b0  00 00 00 00 00 ff ff ff 00 ff ff ff 00 00 00 00  |.....ÿÿÿ.ÿÿÿ....|
000007c0  00 01 01 01 00 00 00 00 00 fe fe fe 00 00 00 00  |.........þþþ....|
000007d0  00 03 03 03 00 fd fd fd 00 f7 f7 f7 00 f1 f1 f1  |.....ýýý.÷÷÷.ñññ|
000007e0  00 ea ea ea 00 fe fe fe 00 17 17 17 00 10 10 10  |.êêê.þþþ........|
000007f0  00 0a 0a 0a 00 03 03 03 00 00 00 00 00 00 00 00  |................|
00000800  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
```

```
00000a80  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000a90  00 00 00 00 00 00 00 00 00 ff ff ff 00 00 00 00  |.........ÿÿÿ....|
00000aa0  00 00 00 00 00 01 01 01 00 00 00 00 00 00 00 00  |................|
00000ab0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
```

さらに、0xcf5バイト目に単独の0x04があり、これが次の行の始まりであると予想できた。

```
00000ce0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000cf0  00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00  |................|
00000d00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
```

1行が0xcf5バイト (3317バイト) で表されるとすると、1行のピクセル数は`(3317 - 1) / 4 = 829`であると考えられる。
さらに、行数は`2063174 / 3317 = 622`であると考えられる。

実際にIHDRにWidth=829、Height=622を書き込んでみると、
CRC32の値がファイル中のものと一致し、以下の画像が得られた。 (2021/07/31 14:47 JST)

![Width=829、Height=622 を書き込んだ画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/859dd82e-847b-466b-fcbf-a5a15c6e48fa.png)

画像には赤い文字でflagのような文字列が書かれているが、これを入力してもIncorrectとなった。
`I` (大文字のアイ) と`l` (小文字のエル)、`0` (ゼロ) と`O` (大文字のオー) の区別がつきにくいので、
以下の文字列を試したが、全てIncorrectとなった。

* `RTL{IHDR_chunk_m4nipulat10n}`
* `RTL{IHDR_chunk_m4nipuIat10n}`
* `RTL{IHDR_chunk_m4nipulat1On}`
* `RTL{lHDR_chunk_m4nipulat10n}`
* `RTL{lHDR_chunk_m4nipuIat10n}`
* `RTL{lHDR_chunk_m4nipuIat1On}`

(8通り試したつもりだったが、メモを見ると同じ文字列が2組あり、この6通りだった)

その後しばらくすると、なぜか解けたことになっていた。