picoCTF2021 Writeup

解いた問題のwriteupを書きます。
#Obedient Cat(5pt)
``` flag``` ファイルが配られる。```file flag``` でファイルの種類を調べる。
 ``` flag: ASCII text``` 
textファイルなので ```cat flag``` する。

#Mod 26(10pt)
問題文にROT13って書いてあるじゃん...
ROT13でdecodeする。

#information(10pt)
ヒントを見ると、```Look at the details of the file``` だそうです。多分exiftoolだろう
```License:cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9```
base64でdecryptする。
#Nice netcat...(15pt)
ncに接続。
```112 105 99 111 67 84 70 123 103 48 48 100 95 107 49 116 116 121 33 95 110 49 99 51 95 107 49 116 116 121 33 95 102 50 100 55 99 97 102 97 125 10```
ASCIIでdecryptする。

#Stonks(20pt)
明らかに詐称なんだが...
ncに
```%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x``` 
を投げるとそれっぽいHexが返ってくる。

#GET aHEAD(20pt)
```curl -I -sS [url]``` 
をするとヘッダ情報がもらえる。

#Matryoshka doll(30pt)
``` Wait, you can hide files inside files? But how do you find them? ``` 
だそうです。binwalkを何回かするとflagがもらえた。

#Magikarp Ground Mission(30pt)
sshする。
``` [n]of3.flag.txt``` と ``` instructions-to-[n]of3.txt``` がある。
指示に従うとflagが完成。

#Wireshark doo dooo do doo... (50pt)
HTTPでファイルをエクスポートしたら、```%2f``` ファイルが手に入る。開くと
```Gur synt vf cvpbPGS{c33xno00_1_f33_h_qrnqorrs}```
ROT13でdecryptする。
#What's your input?(50pt)
```python input 脆弱性``` とかでググると
[このサイト](https://postd.cc/a-bite-of-python/) が見つかる。どうやら、python2では、inputされた文字列をpythonのコードの一部として認識するらしい。以下ソースコード。

``` in.py
#!/usr/bin/python2 -u
import random

cities = open("./city_names.txt").readlines()
city = random.choice(cities).rstrip()
year = 2018

print("What's your favorite number?")
res = None
while not res:
    try:
        res = input("Number? ")
        print("You said: {}".format(res))
    except:
        res = None

if res != year:
    print("Okay...")
else:
    print("I agree!")

print("What's the best city to visit?")
res = None
while not res:
    try:
        res = input("City? ")
        print("You said: {}".format(res))
    except:
        res = None

if res == city:
    print("I agree!")
    flag = open("./flag").read()
    print(flag)
else:
    print("Thanks for your input!")
```

ncにつないで一回目は2018と入力。2回目はcityと入力する。

#Scavenger Hunt(50pt)
flagが5つに分割されていろんなところに散らばってる。
・part1
HTMLのソースコード

・part2
CSSのソースコード

・part3
```[url]/robots.txt``` 

・part4
```[url]/.htaccess``` 

・part5
```[url]/.DS_Store```  

#MacroHard WeakEdge(60pt)

#Who are you?(60pt)
GIFが煽りプレイをしてくる。リクエストヘッダ情報を偽装(?)する。curlを使った。
・part1
```Only people who use the official PicoBrowser are allowed on this site!```
User-Agentを変える
``` -A "picobrowser" ```

・part2
``` I don't trust users visiting from another site.```
Refererを変える。
``` -H "Referer:http://mercury.picoctf.net:36622/" ```

・part3
```Sorry, this site only worked in 2018.```
日付を変える。
```-H "Date: Mon, 1 Jan 2018 07:28:00 GMT"```

・part4
```I don't trust users who can be tracked.```
DNT(don't track)
``` -H "DNT: 0" ```

・part5
```This website is only for people from Sweden.```
発信元のIPアドレスを変える。
```-H "X-Forwarded-For: 85.228.41.27" ```
ここから一気に難易度あがるな...

・part6
```You're in Sweden but you don't speak Swedish?```
どんだけセキュリティ厳重なんだよ...
```-H "Accept-Language: sv"```

この問題を解くうえで[こちら](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)のサイトがわかりやすかったです。

#Trivial Flag Transfer Protocol(90pt)
TFTPでエクスポート。txtファイル、3枚の写真、planの3種類が落ちる。txtファイルを開くと、
``` GSGCQBRFAGRAPELCGBHEGENSSVPFBJRZHFGQVFTHVFRBHESYNTGENAFSRE.SVTHERBHGNJNLGBUVQRGURSYNTNAQVJVYYPURPXONPXSBEGURCYNA
```
Vigenere暗号でdecryptすると
```TFTPDOESNTENCRYPTOURTRAFFICSOWEMUSTDISGUISEOURFLAGTRANSFER.FIGUREOUTAWAYTOHIDETHEFLAGANDIWILLCHECKBACKFORTHEPLAN
```
次にplanを見てみると
```VHFRQGURCEBTENZNAQUVQVGJVGU-QHRQVYVTRAPR.PURPXBHGGURCUBGBF
```
同じくvigenereでdecryptすると
```IUSEDTHEPROGRAMANDHIDITWITH-DUEDILIGENCE.CHECKOUTTHEPHOTOS```
3枚目の画像をsteghideでextractする。この時のpasswordは、"DUEDILIGENCE"となる。

#Wireshark twoo twooo two twoo...(100pt)
DNSの中でいくつか違うIPとやり取りしている通信があったので、それらのサブドメインを連結してbase64でdecrypt

#Disk, disk, sleuth!(110pt)
これは逆詐称。20点でもいいぐらい。
配られるファイルを解凍する。
```gzip -d dds1-alpine.flag.img.gz```
```strings dds1-alpine.flag.img | grep pico```
#Disk, disk, sleuth! II(130pt)
autopsyでイメージファイルを開く。問題文に
``` All we know is the file with the flag is named `down-at-the-bottom.txt` ```
と書いてあるので、autopsyでそいつを探す。
#Super Serial(130pt)
``` [url]/..%2f/flag ```
で通った。想定解はわからない。

#Milkslap(200pt)
画像をダウンロードして、[zsteg](https://github.com/zed-0xff/zsteg)する。

#Very very very Hidden(300pt)
HTTPでエクスポートすると、2枚の画像ファイルが落ちる。
[これ](https://github.com/peewpw/Invoke-PSImage) を使って隠されたpowershellを探すとflagが見つかる。