初めに
ångstromCTFに参加しました。
ポイントが少ない問題のみですが解けたものを書いていこうと思います。
kcehC ytinaS・misc
(問題文)
)csim# ni cipot lennahc eht s'ti( galf eht rof drocsiD ruo nioJ
問題文が逆さになっていることに気づく。
discordの#misc上部にフラグのような文字列を発見
}egassem_terces_ym_edoced_uoy_did_woh{ftca
文字列を反対にして入手。
Putnam・misc
(問題文)
Solve the putnam, get the flag. Easy right?
Connect to it at nc challs.actf.co 31337
つないでみると計算問題が出される
└─$ nc challs.actf.co 31337
514 + 97 = ?
計算して答えを入力して入手。
trip・misc
(問題文)
What road was this this photo taken on?
For example, if the road was "Colesville Road" the flag would be actf{colesville}.
jpeg画像が配布されている。
exiftoolでGPS情報を探す。
└─$ exiftool trip.jpeg | grep GPS
ーー省略ーー
GPS Latitude : 37 deg 56' 23.60" N
GPS Longitude : 75 deg 26' 17.11" W
GPS Position : 37 deg 56' 23.60" N, 75 deg 26' 17.11" W
GPS Position から
37°56'23.60"N,75°26'17.11"W という情報が得られたので、google mapで検索。
そうすると、Chincoteague roadという場所が出てきた。
問題文からフラグは道路の名前なのでこのまま入手。
erm what the enigma・crypto
(問題文)
In the dimly lit, smoke-filled war room, the Enigma M3 machine
sat at the center of the table like a cryptographic sentinel.
Its reflector, UKW B, gleamed ominously in the low light.
The three rotors, I, II, and III, stood proudly in their respective slots,
each at position 1 with their rings set to 1. The plugboard,
conspicuously vacant, indicated a reliance on the rotor settings alone
to encode the day's crucial messages. As the operator's fingers
hovered over the keys, the silence was heavy with anticipation.
Each clack of the keys transformed plaintext into an unbreakable cipher,
the resulting ciphertext,
brht{d_imhw_cexhrmwyy_lbvkvqcf_ldcz}, a guardian of wartime secrets.
問題文からわかることをまとめると、
・エニグマM3で暗号化
・UKW-BローターがI,II,III
・リングは1にセット
・暗号化されたフラグはbrht{d_imhw_cexhrmwyy_lbvkvqcf_ldcz}
エニグマM3で検索をかけて、ヒットした以下のサイトを使いました。
https://dencode.com/ja/cipher/enigma
設定を合わせて複合してフラグ入手。
spinner・web
(問題文)
spin 10,000 times for flag
開発者ツールでコードを見る。
const message = async () => {
if (state.flagged) return
const element = document.querySelector('.message')
element.textContent = Math.floor(state.total / 360)
if (state.total >= 10_000 * 360) {
state.flagged = true
const response = await fetch('/falg', { method: 'POST' })
element.textContent = await response.text()
}
}
message()
この部分から、10,000回転した後POSTメソッドで/falgにリクエストを送られると考える。
curlでリクエストを送信してみる
└─$ curl -X POST https://spinner.web.actf.co/falg
フラグが返ってきた。