2019-11-23 東京大学駒場祭 TSG出展企画「TSG LIVE! 4」
@hakatashi
気軽にコメントしてね♪
↘
27問!
その1
ジャンル: Misc
配点: 439pt
作問者: @hakatashi
ご覧ください!
我々は今回のSECCONのために、
超難解かつスーパー安全、
そしてウルトラ解読困難な
新しい暗号を発明しました!
名付けて、Tanukiです!
+[添付ファイル]
暗号文1: たたせくたこたたたんた
平文1: せくこん
暗号文2: たSたEたたたたたCCたたたたたOたNたたた
平文2: SECCON
実は、文章から「た」を「抜く」だけで
暗号を解読できる!
暗号文1: たたせくたこたたたんた
平文1: せくこん
暗号文2: たSたEたたたたたCCたたたたたOたNたたた
平文2: SECCON
当然ですが、これだけなら
何も難しくない⋯⋯
ここで与えられた
添付ファイルを見てみると⋯⋯
2𥝱9063垓7631京3410兆8962億8053万5164バイト
圧縮ファイルって
どうやってデータを圧縮してるか
ご存知ですか?
Zip, GZip, PNG などのファイルでは
同じDeflateという圧縮アルゴリズムが
採用されている
パンダコアラタスマニアタイガーパンダタスマニアデビル
パンダコアラタスマニアタイガー(25,3)(12,5)デビル
パンダパンダパンダパンダパンダパンダパンダ
パンダ(3,18)
は、「パンダ」を7回繰り返すという意味
→コピー元までの距離を超えてコピーする場合、
Deflate圧縮は実質的にランレングス圧縮と
考えることができる
しんどい
実はけっこう重要なこと
参考: 「非再帰的ZIP爆弾」は10MBのファイルが281TBに膨らむ - GIGAZINE https://gigazine.net/news/20190705-zip-bomb/
作問者的な観点から言うと、
この前後、類題が多くのCTFで出題されてつらかった
→圧縮ファイルブーム? (ほんまか)
メモ: ここでコメントを拾う
その2
ジャンル: Web
配点: 345pt
作問者: @hakatashi
ApacheとかNginXとかよくわからないけど、
要は自分で実装すればいいんでしょ?
ほら、簡単!
files = Dir.glob(".#{req.path}*")
res['Content-Type'] = 'text/html'
res.body = ERB.new(File.read('index.html.erb')).result(binding)
!?
files = Dir.glob(".#{req.path}*")
req.path = '/%00/tmp/flags/'
→ Dir.glob("./%00/tmp/flags/*")
def is_bad_path(path)
bad_char = nil
%w(* ? [ { \\).each do |char|
if path.include? char
bad_char = char
break
end
end
if bad_char.nil?
false
else
# check if brackets are paired
if bad_char == ?{
path[path.index(bad_char)..].include? ?}
elsif bad_char == ?[
path[path.index(bad_char)..].include? ?]
else
true
end
end
end
その3
ジャンル: Crypto
配点: 326pt
作問者: @hakatashi
def crc32(crc, data):
crc = 0xFFFFFFFF ^ crc
for c in data:
crc = crc ^ ord(c)
for i in range(8):
crc = (crc >> 1) ^ (0xEDB88320 * (crc & 1))
return 0xFFFFFFFF ^ crc
crc = 0
for i in range(int("1" * 10000)):
crc = crc32(crc, "TSG")
crc = 0
for i in range(int("1" * 10000)):
crc = crc32(crc, "TSG")
数式で表すと⋯⋯