yoshimi.'s Diary

よしみ.が過去にやってきたことに掃き溜めです

UECTF2022 Writeup

正直、全完者がwriteup書いてくださっているので、小生がwriteup書く意味ないと思われるが、マークダウン記法の練習&小生の思考過程を残す意味で書くます。 nanimokangaeteinai.hateblo.jp github.com

なお、終了時間過ぎてたの気づかずに解いたものも含みます(ただの馬鹿です)

misc

WELCOME

Discord or UECTF2022のサイトに書いてある旗などから取得

caeser(続きはあとでかく)

caesar_output.txt に書かれている暗号文には数字や記号も書かれていることから、よくある定番のやつを拡張したものっぽい。
頭のいい人はチャチャっと復号するスクリプト書くと思いますが、小生はプログラムの読み書きもだが、そもそもキーボード打つのが遅いので(いまだにブラインドタッチできない)、スクリプト書いたりするより暗号化のスクリプトに試しに平文UECTF{ABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890!abcdefg}を突っ込んでどんな感じに暗号化されるか見て法則性を掴んでflag打ち込む
UECTF{Th15_1s_a_b1t_Diff1Cult_c43seR}

redaction gone wrong 1

のり弁pdfが渡される(何の文章だこれ)
職業(院生の面したニート)病で、反射的に外国語のpdfはCtrl+A→DeepLにコピペしたらflag出てきた

UECTF{PDFs_AR3_D1ffiCulT_74d21e8}

redaction gone wrong 2

UECTF{N3ver_ever_use_A_p3n_rofl}
何か頑張れば見えそう。解法としては、
PCの夜間モード無効化→ディスプレイの明るさMAX→画面を凝視→UECTF{N3 er_ever_use_A_p3n_rofl}までは見えるので3とeの間はNeverのleet表記N3verであるだろうと推測
小生、昔から眩しいのが苦手(そもそもディスプレイ長時間見ると吐き気がしたり、目が痛くなって熱が出たりするのでCTF不適合者)なのでこの問題は苦行だった。(一時期はディスプレイ見る機会少ない職種に就こうと本気で考えてた)

GIF1

一瞬だけflagが表示されるGIFファイルが渡されるので、手持ちのiPhone 12で録画してflagが表示されたあたりで再生を止めるとflagがゆっくり見れる。

UECTF{G1F_4N1M4T10NS_4R3_GR34T!!}

GIF2(画像今度春)

stegsolve に突っ込んだらでてきた。

OSINT(解けてない)

Wayback Machine__yata_nano__突っ込んだら引っかかると思ったら、「応答時間が長すぎます」と返ってきたのでWayback Machineに引っかからなかったのかと思ったら、これが正攻法?らしい。当時の我が家のネット環境がカスなのかWayback Machine側が一時的に重かったのかは知らん。

PWN

buffer_overflow

問題文でコンパイルオプションは-fno-stack-protectorをつけています。と、ご丁寧にBoFのセキュリティ機構無効化してるよといってくれている。

#include<stdio.h>
#include<string.h>
int debug();
int main(){
  char debug_flag,name[15];
  debug_flag='0';
  printf("What is your name?\n>");
  scanf("%s",name);
  if(debug_flag=='1'){
    debug();
  }
  printf("Hello %s.\n",name);
  return 0;
}

int debug(){
  char flag[32]="CTF{THIS_IS_NOT_TRUE_FLAG}";
  printf("[DEBUG]:flag is %s\n",flag);
}

debug_flag=='1' にすればdebug() 関数を呼び出してflagを漏らしてくれることがわかる。 また

char debug_flag,name[15];
debug_flag=='1'

scanf("%s",name);から入力する文字の16番目に'1' を入れればいいことがわかる。したがって

Rev

A file

誰かがファイルの拡張子を消してしまった。どのような中身のファイルなのか?

revPython(解けなかった)

pycdc使って(今度続き書く)

Crypto

RSA

output.txt にはcipher_text, p, q, eの値が書かれている。以下solver




最初、flag出てこなくて「もうCTFに関わるのやめようかな」と思ってたらp, qそれぞれ逆の数値つっこんでただけだった。

Forensic

Deleted(今度書く)

binwalk使った

Compare(解けなかった)

ImageMagick で2枚の画像の差分とった画像にflag書かれていないかな~と思ったけどダメでした。はい。 https://imagemagick.org/index.php

Web

webapi

とりあえず、初手でページのソースを見てみる

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>Hello world!</h1>
  <div class="flag">
    <span class="flag-label">Flag is here:</span>
    <span class="flag-data"></span>
  </div>
</body>

<script>
  const FLAG_URL = 'https://i5omltk3rg2vbwbymc73hnpey40eowfq.lambda-url.ap-northeast-1.on.aws/';
  fetch(FLAG_URL)
    .then(data => {
      document.getElementsByClassName('flag-data')[0].innerText = data;
    })
    .catch(err => {
      document.getElementsByClassName('flag-data')[0].innerText = 'server error';
    })
</script>
</html>

FLAG_URL = 'https://i5omltk3rg2vbwbymc73hnpey40eowfq.lambda-url.ap-northeast-1.on.aws/'; にアクセスしたら何かありそう。アクセスする。

UECTF{cors_is_browser_feature}
さて、flagを出すかと思ったら、終了時間をとっくに過ぎてたので終わり