SECCON for Beginners CTF 2020 writeup

SECCON for Beginners CTFに参加しました。
去年から全然進歩せずほとんど解けませんでした…
とりあえず戒めのためにwriteup書いておきます。

Web

unzip

Unzip Your .zip Archive Like a Pro.
https://unzip.quals.beginners.seccon.jp/
Hint:
index.php (sha1: 968357c7a82367eb1ad6c3a4e9a52a30ea
Hint:
(updated at 5/23 17:30) docker-compose.yml

アクセスするとこんな感じ。

まずindex.phpのソースから怪しい箇所を探す。

// prepare the session
$user_dir = "/uploads/" . session_id();
if (!file_exists($user_dir))
    mkdir($user_dir);

if (!isset($_SESSION["files"]))
    $_SESSION["files"] = array();

// return file if filename parameter is passed
if (isset($_GET["filename"]) && is_string(($_GET["filename"]))) {
    if (in_array($_GET["filename"], $_SESSION["files"], TRUE)) {
        $filepath = $user_dir . "/" . $_GET["filename"];
        header("Content-Type: text/plain");
        echo file_get_contents($filepath);
        die();
    } else {
        echo "no such file";
        die();
    }
}

ここでファイル名が相対パスを指定できれば、必要なパスが取れそうというのがわかりました。SESSIONのfilesにfilenameが含まれることが前提っぽいです。

docker-compose.yml

version: "3"

services:
  nginx:
    build: ./docker/nginx
    ports:
      - "127.0.0.1:$APP_PORT:80"
    depends_on:
      - php-fpm
    volumes:
      - ./storage/logs/nginx:/var/log/nginx
      - ./public:/var/www/web
    environment:
      TZ: "Asia/Tokyo"
    restart: always

  php-fpm:
    build: ./docker/php-fpm
    env_file: .env
    working_dir: /var/www/web
    environment:
      TZ: "Asia/Tokyo"
    volumes:
      - ./public:/var/www/web
      - ./uploads:/uploads
      - ./flag.txt:/flag.txt
    restart: always

uploadsのフォルダと同じ場所にflag.txtがあるのがわかります。
相対パスとかでうまく取り出せないかなと思いました。

脆弱性を探すとZipSlipという脆弱性がヒットしたので、それをやってみることに。

ためしに以下のURLにあるPocのzipをアップロードしてみることに。

https://github.com/snyk/zip-slip-vulnerability/tree/master/archives

アップロードできました。

いけそうなので自分で作成してみることに。
作り方もぐぐったらでてきました。
https://stackoverflow.com/questions/50849406/how-to-create-a-file-to-test-zip-slip-vulnerability-from-commandline

あとはこのzipファイルをあげると…

あとはこのリンクをクリックするだけです。

ctf4b{y0u_c4nn07_7ru57_4ny_1npu75_1nclud1n6_z1p_f1l3n4m35}

Misc

emoemoencode

Do you know emo-emo-encode?

emoemoencode.txt

とりあえずテキストファイルを見てみる。

🍣🍴🍦🌴🍢🍻🍳🍴🍥🍧🍡🍮🌰🍧🍲🍡🍰🍨🍹🍟🍢🍹🍟🍥🍭🌰🌰🌰🌰🌰🌰🍪🍩🍽

バイナリエディタでも見てみる。

なんか1~4バイトと5~8バイトを比べると、F0 9F 8D A3→F0 9F 8D B4で17の差がある。
今回のctfのフラグはctf4bで始まることからcとtの差がちょうど17だったので、この法則でASCIIコード表とにらめっこしながら解いていく。
途中、4のときにF0 9F 8C B4のように3バイト目が8Cとなる場合があったのでその場合は数字の4からの相対で求めることとした。

ctf4b{stegan0graphy_by_em000000ji}

IPAの資格持ち(FE,AP,SC,DB,NW)。一応、情報処理安全確保支援士です。セキュリティ関連に興味あり。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です