picoCTF 2023 Writeup

# はじめに
毎年3月ごろに行われているpicoCTFに参加してきました。
picoCTFには1年半ほど前からたまに触っていましたが、リアルタイムのpicoCTFは初参加になります。
今回は研究室のメンバーを誘い、計4人でチームを組み参加しました。結果としては全体で4000pt取ることが出来ました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/77d43750-d500-d277-2801-e03fa718f53f.png)

# Writeup
以下、自分が解けたもので説明ができるものに関してまとめていきます。

## Rules 2023

> General Skills: 100pt
Read the rules of the competition and get a little bonus!

大会の規約ページに画像としてflagが置いてありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/c9a8901e-d87e-7fbc-5752-bc04a13c494e.png)

## chrono
> General Skills: 100pt
How to automate tasks to run at intervals on linux servers?

問題文から「Linux automated task」と検索すると、”cron”というワードがヒットします。

> cronとは：
・job(script)を自動実行するためのデーモンプロセス
・cron設定ファイルのcrontabを置く(書く)場所は3つ挙げられる
　　- /var/spool/cron/crontabs ディレクトリ内
　　- /etc/crontab ファイル
　　- /etc/cron.d ディレクトリ内

まず、`/var/spool/cron`の権限を見てみると、rootユーザ以外は読み取り権限はないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/f5d00d40-c7e4-6176-e617-79ed78eb56eb.png)

次に、`/etc/cron.d` , `/etc/crontab`の権限を見てみると、その他のユーザには読み取り権限が与えられていることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/3fdf6d22-bbbb-d68d-c212-82f16172d13d.png)
中略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/783198da-9c39-6722-0ca7-b17fe68a92d2.png)

`/etc/crontab`の中身を見てみると、フラグが書かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/8cfc5c2e-048a-2939-d44b-f7fd5df20bbf.png)

## money-ware

> General Skills: 100pt
Flag format: picoCTF{Malwarename}
The first letter of the malware name should be capitalized and the rest lowercase.
Your friend just got hacked and has been asked to pay some bitcoins to 1Mz7153HMuxXTuR2R1t78mGSdzaAtNbBWX. He doesn’t seem to understand what is going on and asks you for advice. Can you identify what malware he’s being a victim of?

友達がどうやらハッキングを受けて、上記のBitcoinアドレスにビットコインを支払うように要求されたようです。そこで今回被害にあっているマルウェアの名前を特定するようです。

まず問題文で出てきたBitcoinアドレスを検索してみます。

検索結果から、Bitcoinに関するサイバー攻撃をまとめたページがヒットするので中身を読むと、`Petya`という名前のマルウェアだということが分かります。

参考：https://www.cnbc.com/2017/06/28/ransomware-cyberattack-petya-bitcoin-payment.html


## Permissions

> General Skills: 100pt
Can you read files in the root file?

ログイン後のカレントディレクトリに、問題の答えに関係しそうなものは無い様子。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/1126552a-95a9-c1fa-4f1a-34992ef4b043.png)

ルートディレクトリへ移動すると、`challengeディレクトリ`があり、答えに関係しそうなため移動してみます。
`challengeディレクトリ`には、`metadata.json`が置いてあり、読み取り権限が与えられています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/f4ed2637-735d-844f-15eb-dbff0d232a4c.png)
catコマンドで中身を見てもいいですが、問題のタグからvimでファイルを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/5c209bf3-cf55-11f2-beff-2e2bb52e25f8.png)


## repetitions

> General Skills: 100pt
Can you make sense of this file?

与えられたファイルの形式を調べると、`ASCII text`
catコマンドで中身を確認してみると、文末に`==`がるため、Base64でエンコードされていると分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/bdf43cbb-b453-4dd4-b157-7e2e2315a550.png)

今回はCyberChefを使ってBase64のデコードを行っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/6d6eddef-ab21-dcd3-0c7b-d9b460b6d8be.png)
デコードの結果、まだBase64でエンコードが出来そうです。
問題タイトルの「repetition」は「繰り返し」という意味なので、平文になるまでデコードを繰り返していきます。

1回目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/de0cca2d-9e8b-055c-b0f1-a553219428dd.png)
2回目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/1202cd71-a618-d3cd-72a6-0cca50308fd0.png)
3回目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/6361db00-a773-a13c-7151-164c227d2bde.png)
4回目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/20850d97-dd5b-998d-1cf5-ae08f425377f.png)
5回目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/bff6359e-9cc9-ff6c-76ad-c710d486659e.png)
6回目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/61e027e5-463b-1d70-6025-aed01cc3dc41.png)


## useless

> General Skills: 100pt
There's an interesting script in the user's home directory
The work computer is running SSH. We've been given a script which performs some basic calculations, explore the script and find a flag.

カレントディレクトリには、`useless`という名前のshellスクリプトファイルが置かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/9ee36c93-8280-4fd6-265d-6070ec71b374.png)
問題のタグには、`manコマンド`があるので、uselessのマニュアルを確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/6a262398-c261-2dac-a08f-b7be5b0150f6.png)
中略
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/4a65cfd8-ed45-fd6a-0dd5-759c6bafd584.png)

## Special

> General Skills: 300pt
Don't power users get tired of making spelling mistakes in the shell? Not anymore! Enter Special, the Spell Checked Interface for Affecting Linux. Now, every word is properly spelled and capitalized... automatically and behind-the-scenes! Be the first to test Special in beta, and feel free to tell us all about how Special streamlines every development process that you face. When your co-workers see your amazing shell interface, just tell them: That's Special (TM)

コマンドを実行してみると、先頭が大文字になってしまい、正しく実行されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/d3d2458b-9957-c56d-84c2-79de327532f9.png)

コマンドの先頭に実行に関係ないものを挟むことでこれを回避していきたい...

そこで、難読化シェル芸の難読化技法である"フェイク"を使用して、これを回避していきます。

> 難読化シェル芸とは
・内部的な動作の手続き内容・構造・データなどを、人間が理解しにくい、あるいはそのようになるよう加工
されたシェル芸のこと
シェル芸とは
・マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理
をCLI端末へのコマンド入力一撃で終わらすこと。あるいはその時のコマンド入力のこと

引用：https://raintrees.net/news/95

例：
```shell
$ :date          # 1. dateは実行されない
$ $(:)date       # 2. dateは実行される
$ `:`date        # 3. dateは実行される
```
上記の2, 3のいずれかを使ってコマンドを実行します。

カレントディレクトリには`blargh`というファイルorディレクトリが置かれています。(blarghのbがうまく認識されないため、fileやcdコマンドが実行できず判断できませんでした...)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/19c9d8d3-7352-384b-8915-8d5a1db964b2.png)

そこで今までの問題から`/challengeディレクトリ`にflagが置いてあったため、lsコマンドの代わりにfindコマンドでルートディレクトリの状況を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/dcd98469-56a6-7141-b713-b4a1462b4d02.png)
`/challengeディレクトリ`に`metadata.json`が置かれているので、ファイルの中身を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/86a94255-20b9-0eb6-31a1-f3fd7de8473f.png)

## Specialer
> General Skills: 400pt
Reception of Special has been cool to say the least. That's why we made an exclusive version of Special, called Secure Comprehensive Interface for Affecting Linux Empirically Rad, or just 'Specialer'. With Specialer, we really tried to remove the distractions from using a shell. Yes, we took out spell checker because of everybody's complaining. But we think you will be excited about our new, reduced feature set for keeping you focused on what needs it the most. Please start an instance to test your very own copy of Specialer.

先ほどの問題`Special`と違い、コマンドは認識されるが、ls, cat, findコマンド等が使用できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/4cd3c243-7f4c-6252-545f-27f62b5c804b.png)

まず、使用できるコマンドを確認したいので、Tabキーを二回連続で入力して、一覧を見ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/89f06640-314e-dca7-693e-c2cc1243bcbf.png)

今回の問題ではlsコマンドが使えないので、こちらを使用せずディレクトリの一覧が分かるコマンドを調べました。
調べたところ`echo`コマンドを使ってできるようです。使用できるコマンドの一覧にも`echo`が入っていたので早速試します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/1ac3bf53-d82f-cb7b-7bb4-f400f58596af.png)

カレントディレクトリには`abra` `ala` `sim` の3つディレクトリがあったので、flagの手がかりが無いか調査します。

* /home/ctf-player/abra

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/0db15e67-903f-b082-ac7e-8917ef14c770.png)
中身を確認するにはcatコマンドやviコマンド等を使いたいところですが使えないので、また`echo`を使って確認していきます。
```shell
$ echo "$(<対象のファイル名)"
```
上記のコマンドで代用できるようです。
abraディレクトリの2つのtxtファイルの内容はflagには関係のないものでした。

* /home/ctf-player/ala

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/d4d709db-249d-f52e-a379-37cd937863c5.png)


## MatchTheRegex
> Web Explotation: 100pt
How about trying to match a regular experession

テキストボックスに何かを入力するWebページのようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/c4dac530-514e-ff36-818f-8aeba4e6e477.png)

とりあえずブラウザの検証からソースコードを見てみると、コメントで`^p.....F!?`と書かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/692ab039-fc6d-6582-9043-a426e7d20946.png)

問題タイトルから正規表現が関係しているのは一目瞭然です。
今回指定されている正規表現は`^p.....F!?`
指定された正規表現にマッチする例として、`picoCTF`、`ppppppF`が挙げることが出来ます。

これをWebサイトのテキストボックスに入力してSUBMIT。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/9e5cb04c-ba7d-4bd7-c18f-e0a9b7c95d50.png)

## SOAP

> Web Explotation: 100pt
The web project was rushed and no security assessment was done. Can you read the /etc/passwd file?

指定されたWebページは以下の様なページになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/ecb4138e-ce6f-ad20-fe30-d2d313f81b80.png)

問題のタグから「XXE」が関係しているので、BurpSuiteを使ってアプローチをかけていきます。

まず、Webページ下部にある三つのカードの`Detils`を押した際の通信です。`Send to Repeater`を押して通信のリクエストを編集していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/e79bd841-fbeb-e770-d74b-33bc88137c83.png)

以下のようにリクエストを書き換えてSend。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/a2ed94b6-21ae-9aa1-2c70-b6625cdffae6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247693/c292113a-2b72-ece2-795e-14bb7585ba38.png)


# さいごに

久しぶりにCTFに参加をしましたが、CTFを始めた頃よりもスキルアップしていると感じられた結果でした。
個人的にはReverse EngineeringやBinary Exploitation系の問題がまだまだ苦手なので、継続して勉強を続けていきたいと思います。