Apeiria Tech

セキュリティ・ゲーム開発(Unity)

UECTF2022 WriteUp

はじめに

電気通信大学のCTFサークル(@uec_ctf)主催の初心者向けCTFに参加したのでWriteUpを残します。
開催時間は11/18 20:00~11/20 20:00 の三日間で、最終日は用事があったので着手することができませんでした。

結果

順位は47/105位でした。

解けた問題

REV

A file

「chall」というELFファイルが渡されます。
とりあえずstringsコマンドを使ってフラグを探してみたら見つかりました。

MISC

redaction gone wrong 1

「challenge.pdf」というPDFファイルが渡されます。
フラグ部分が黒く塗りつぶされていますが、Adobe Acrobat で開いて黒塗り部分をどかします。

redaction gone wrong 2

「flag.png」というpngファイルが渡されます。

頑張って読みました。(これでよかったのだろうか...)

GIF1

UEC_Anime.gif」というgifファイルが与えられます。
一瞬フラグが見えるので、画面を録画してなんとかしました(これでよかったのだろうか...2)

GIF2

「UECTF.gif」というgifファイルが与えられます。
これはGIF1とは違い、フラグが目視できません。 うさみみハリケーンステガノグラフィー解析を使用します。
赤色 ビット0抽出を行うとフラグが発見できます。

FORENSICS

Deleted

「Image.raw」というrawファイルが与えられます。
最初はbinwalkを使ってカービングすればいけそうだと思っていましたが
いくつか開けないファイルがあり詰まっていました。
色々調べていると「Autopsy」というツールが便利だと知りとりあえず突っ込みました。
するとあっさりフラグが書かれたファイルが見つかりました。Autopsyすごい...。

CRYPTO

RSA
  • output.txt...暗号文、p、q、eが書かれているtxtファイル
  • rsa_source.py..rsaエンコードプログラム
from Crypto.Util.number import getPrime, inverse, bytes_to_long, long_to_bytes, GCD

def enc(p_text):
  N=p*q
  c_text=pow(p_text,e,N)
  #cipher_text=plain_text^e mod N
  print('cipher text:',c_text)
  print('p:',p)
  print('q:',q)
  print('e:',e)

e = 65537
p = getPrime(100)
q = getPrime(100)

#e:public key
#p,q: prime number

plain=b'UECTF{SECRET}'
plain=bytes_to_long(plain)
#bytes_to_long:bytes -> number
#long_to_bytes:number->bytes
enc(plain)

拡張ユークリッドを使ってデコードします。

import binascii

def extgcd(a, b):
    if b == 0:
        x = 1
        y = 0
        d = a
        return x, y, d
    y, x, d = extgcd(b, a % b)
    y -= a // b * x
    return x, y, d

def main():
    c = 40407051770242960331089168574985439308267920244282326945397
    n = 1020184979087759355426525961857540965815429299915844381237459
    e = 65537
    p = 1023912815644413192823405424909
    q = 996359224633488278278270361951
    d, k, _ = extgcd(e, (p - 1) * (q - 1)) 
    while d < 0:
        d += (p - 1) * (q - 1)
    m = pow(c, d, n)
    print(binascii.a2b_hex(hex(m)[2:]))

main()

おわりに

時間のほとんどをステガノグラフィーに割いてしまい、pwnに全く手を付けることができませんでした。
また他のCTFに参加する機会があれば積極的にpwnに挑戦したいです。
古典暗号を解くことができなかったのも悔しい所です。
ですがCTF初心者なりに色々な問題に取り組むことができとても楽しかったです。
UECTFさんに感謝です!ありがとうございました!!