[Write-up]SECCON CTF 2019予選

この記事は約66分で読めます。
スポンサーリンク

SECCON CTF 2019予選に参加しましたので、備忘と共有でWrite-upを記載しました。

[misc]Beeeeeeeeeer

与えられるもの

  • Beeeeeeeeeer
    テキストファイル。中身は難読化されたシェルスクリプトでした。
    セミコロン区切りだけど一応1行だから・・難読シェル芸になるのか?
echo -e "\033#8";sleep 1;C=$(tput cols);L=$(tput lines);for ID in $(seq $(($L*$C*6)));do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\033[${y};${x}f ";done;for ID in $(seq $(($L*$C*6)));do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\033[${y};${x}fF";done;clear;echo TGV0J3MgZGVjb3JkaW5nISjiiafiiIDiiaYqKQo=|base64 -d;read;$'\164\162\141\160' '' $'\61' $'\62' $'\63' $'\x31\x35' $'\x31\x38' $'\u0031\u0039' $(echo MjAK |base64 -d);echo $-|grep x && exit;$(echo =btB |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d)|$(echo =bNpyW3M |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d) $(echo XRKY |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d) $(echo =ogO |rev|base64 -d)&&exit;if [ -z "$1" ];then ID=$'\x6e\x61\x6e\x64\x6f\x6b\x75';else ID="$1";fi;if whoami | grep -e root -e user -e adm -e nobody -e test -e "$ID">/dev/null;then :;else exit; fi;for i in $($'\x73\x65\x71' $((RANDOM % 10)));do  $($'\x65\x63\x68\x6f' c2xlZXAK | $'\x62\x61\x73\x65\x36\x34' -d) $((RANDOM % 300));done;$'\145\143\150\157' $-|$(echo =oAclJ3Z |rev|base64 -d) $(echo =oAe |rev|base64 -d) && $($'\x65\x63\x68\x6f' ZXhpdAo= | $'\x62\x61\x73\x65\x36\x34' $'\x2d\x64' );$(echo =btB |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d)|$(echo M3WypNb= |tr A-Za-z N-ZA-Mn-za-m|base64 -d) $(echo YKRX |tr A-Za-z N-ZA-Mn-za-m|base64 -d) $(echo Btb= |tr A-Za-z N-ZA-Mn-za-m|base64 -d)&&exit;$'\145\170\160\157\162\164' $'\u0053\u0031'=$(echo aG9nZWZ1Z2EK |base64 -d);echo -n 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|base64 -d|gunzip|bash;$'\72' killall sh;: $($'\u0065\u0063\u0068\u006f' c2h1dGRvd24K | $'\u0062\u0061\u0073\u0065\u0036\u0034' $'\u002d\u0064' );$(: pkill sh);$'\u003A' $(ls --help|grep ^G|cut -c13)$(ls --help|grep ^G|cut -c22)$(ls --help|grep ^G|cut -c9)$(ls --help|grep ^G|cut -c10)$(echo -n|md5sum|cut -c1)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36)$(ls --help|grep ^G|cut -c16);$'\u003A' $(echo p2u1qTEiq24X |tr A-Za-z N-ZA-Mn-za-m|base64 -d);$'\x3A' $($'\u0065\u0063\u0068\u006f' cG93ZXJvZmYK | $'\u0062\u0061\u0073\u0065\u0036\u0034' $'\u002d\u0064' );$'\u003A' $'\u0070\u006f\u0077\u0065\u0072\u006f\u0066\u0066';$'\x3A' exit;: $(echo XLzMiWKM39Tp |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d);$'\x3A' $(echo c2h1dGRvd24K |base64 -d);: $'\x73\x68\x75\x74\x64\x6f\x77\x6e';: $($'\145\143\150\157' c2h1dGRvd24K | $'\142\141\163\145\66\64' $'\55\144' );: pkill sh;$'\x3A' $'\x73\x68\x75\x74\x64\x6f\x77\x6e';$(: poweroff);$'\72' $($'\x65\x63\x68\x6f' ZXhpdAo= | $'\x62\x61\x73\x65\x36\x34' -d);$'\72' poweroff;$'\u003A' $($'\145\143\150\157' cG93ZXJvZmYK | $'\142\141\163\145\66\64' $'\55\144' );$'\x3A' killall sh;$'\x3A' $($'\x65\x63\x68\x6f' c2h1dGRvd24K | $'\x62\x61\x73\x65\x36\x34' -d);$'\u003A' $(echo =bNqcuKM |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d);$'\x3A' $($'\145\143\150\157' c2h1dGRvd24K | $'\142\141\163\145\66\64' $'\55\144' );: $($'\145\143\150\157' cG93ZXJvZmYK | $'\142\141\163\145\66\64' $'\55\144' );$'\x3A';: $'\u0070\u006f\u0077\u0065\u0072\u006f\u0066\u0066';$'\x3A' $($'\u0065\u0063\u0068\u006f' ZXhpdAo= | $'\u0062\u0061\u0073\u0065\u0036\u0034' $'\u002d\u0064' );$(: killall sh);: $(echo p2u1qTEiq24X |tr A-Za-z N-ZA-Mn-za-m|base64 -d);$'\x3A' $(echo KYmZvJXZ39Gc |rev|base64 -d);: $(echo =bNqcuKM |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d);$'\x3A' $'\u0070\u006f\u0077\u0065\u0072\u006f\u0066\u0066';$'\72' $(echo XLzMiWKM39Tp |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d);: $'\x65\x78\x69\x74';: $(echo K42dvRGd1h2c |rev|base64 -d);$'\u003A' $'\u0073\u0068\u0075\u0074\u0064\u006f\u0077\u006e';: $(ls --help|grep ^G|cut -c13)$(ls --help|grep ^G|cut -c22)$(ls --help|grep ^G|cut -c9)$(ls --help|grep ^G|cut -c10)$(echo -n|md5sum|cut -c1)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36)$(ls --help|grep ^G|cut -c16);$'\72' $($'\x65\x63\x68\x6f' c2h1dGRvd24K | $'\x62\x61\x73\x65\x36\x34' -d);$'\x3A' $(echo p2u1qTEiq24X |tr A-Za-z N-ZA-Mn-za-m|base64 -d);$'\u003A' $(ls --help|grep ^G|cut -c32)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36)$(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c7)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c50)$(ls --help|grep ^G|cut -c50);: $($'\145\143\150\157' ZXhpdAo= | $'\142\141\163\145\66\64' $'\55\144' );: $'\u0065\u0078\u0069\u0074';: :;: $(echo =oAdphXZ |rev|base64 -d);$'\u003A' $'\u0065\u0078\u0069\u0074';$'\x3A' $($'\u0065\u0063\u0068\u006f' c2h1dGRvd24K | $'\u0062\u0061\u0073\u0065\u0036\u0034' $'\u002d\u0064' );: ::;$'\u003A' $($'\x65\x63\x68\x6f' ZXhpdAo= | $'\x62\x61\x73\x65\x36\x34' $'\x2d\x64' );$'\72' $(echo K42dvRGd1h2c |rev|base64 -d);$(: rm /tmp);: $'\u0073\u0068\u0075\u0074\u0064\u006f\u0077\u006e';:;$'\u003A' $($'\x65\x63\x68\x6f' cG93ZXJvZmYK | $'\x62\x61\x73\x65\x36\x34' $'\x2d\x64' );: $(ls --help|grep ^G|cut -c32)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36)$(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c7)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c50)$(ls --help|grep ^G|cut -c50);$'\72' $($'\145\143\150\157' c2h1dGRvd24K | $'\142\141\163\145\66\64' $'\55\144' );$'\x3A' poweroff;$'\72' $(echo =oAdphXZ |rev|base64 -d);$'\72' $($'\u0065\u0063\u0068\u006f' cG93ZXJvZmYK | $'\u0062\u0061\u0073\u0065\u0036\u0034' $'\u002d\u0064' );: $($'\x65\x63\x68\x6f' ZXhpdAo= | $'\x62\x61\x73\x65\x36\x34' -d);$'\u003A' $(echo X42qiETq1u2p |rev|tr A-Za-z N-ZA-Mn-za-m|base64 -d);: $($'\u0065\u0063\u0068\u006f' ZXhpdAo= | $'\u0062\u0061\u0073\u0065\u0036\u0034' $'\u002d\u0064' );$'\72' exit;$'\x3A' $(ls --help|grep ^G|cut -c32)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c36)$(ls --help|grep ^G|cut -c8)$(ls --help|grep ^G|cut -c7)$(ls --help|grep ^G|cut -c6)$(ls --help|grep ^G|cut -c50)$(ls --help|grep ^G|cut -c50);$'\72' $(ls --help|grep ^G|cut -c8)$(printf "%b" $(printf '%s%x' '\x' $((0x77 ^ 0x2f)))|tr A-Z a-z)$(ls --help|grep ^G|cut -c11)$(ls --help|grep ^G|cut -c10);: $(echo pT93MKWiMzLX |tr A-Za-z N-ZA-Mn-za-m|base64 -d);

解法

全体

難読スクリプトが次の難読スクリプトを生成し、更に次の難読スクリプトを生成し・・

3段階の解読の後、フラグに到達できる作りでした。

複数の手法が使われているため完全な解読は難しいですが、結局はシェルスクリプトの1文字1文字を複雑な書き方しているだけなので、セミコロンやカッコの区切りを見つけながらechoにかければどのような命令が実行されているのかがわかります。

例えば、Beeeeeeeeeer冒頭の

$'\164\162\141\160' '' $'\61' $'\62' $'\63' $'\x31\x35' $'\x31\x38' $'\u0031\u0039' $(echo MjAK |base64 -d)

は、正直読めないし実行しても効果がわかりませんが、冒頭に「echo(スペース)」を付与することで

trap  1 2 3 15 18 19 20

を実行していることが簡単に読み取れます。

1段階目

与えられたファイルを解読。

明らかに大きなbase64データをデコードして実行している命令があり、それを区切りに3つのパートに分かれます。

  • 1パート目
    無意味な画面演出、複数条件での強制終了(本質的ではない)が仕掛けられているので、バサッと削除したいところですが「export S1=hogefuga」が隠れており、これは3段階目でフラグの一部として活用されるので誤って削除しないように注意しましょう。
  • 2パート目
    base64出力部。パイプでbashに渡して即時実行するようになっていますが、ゆっくりと解析したいのでリダイレクトでファイルに書き出すように書き換えましょう。
  • 3パート目
    「killall」「shutdown」「poweroff」など不審な文字列が並ぶ。
    CTF運営が攻撃コードでも仕込んでいるのかと疑ってしまうような内容ですが、そんなことはありません。
    すべて冒頭に「:(スペース)」(何もしない、という命令)が挿入されており物騒なコマンドは引数扱いとなり実行されないので、全く問題ありません。
    (このパートは必要だったのか・・?)

2段階目

不要なexitや数百〜数千秒のsleepを削除すると、ミニゲームが登場します。

ランダムな回数Beepしたあとに「何回鳴った?」と聞かれるので、標準入力で回答。これを複数回繰り返します。

人力で可能な回数なので、Pythonはまだ出番ではありません。

ただのミニゲームなので削除したいところですが、実は最終ラウンドのBeep回数がフラグの一部として活用されるので、最終ラウンドだけは残しておきます。

もしくは、最終ラウンドは必ずBeep3回なので、これを控えておいてもいいと思います。

opensslデコードをファイル出力へリダイレクトし、次のシェルスクリプトへ進みます。

3段階目

変数名にアンダースコアを活用した、個人的には非常に読みづらい難読スクリプト。

正直投げ出したくなりましたが「echo(スペース)」さえあれば何とかなることを思い出し、丁寧に取り組みました。

変数の演算結果を再代入するような処理が多く、処理の流れを追っていくのは大変です。

が、まず最後まで目を通してみることで、最後にフラグを演算し標準出力へ渡す処理があるので、単に命令を流せば良いだけだと気づきます。

直前にキャリッジリターン出力でフラグが見えないようにマスクされるよう書かれているので、そこだけ消しておきましょう。

一度スクリプトを実行すると、パスワードを聞かれることに気づきます。

今までにヒントがなかったので、スクリプトをセミコロンごとにechoにかけてみると、コメントで「パスワードはbash」という記述があるので入力。

実行結果として、SECCON{hogefuga3bash}を得ます。

[crypto]coffee_break

与えられるもの

  • 文字列
    後述のスクリプトでフラグを暗号化したもの。
FyRyZNBO2MG6ncd3hEkC/yeYKUseI/CxYoZiIeV2fe/Jmtwx+WbWmU1gtMX9m905
  • encrypt.py
    暗号化スクリプト。引数を一つ取り、暗号化した結果を返却する。
import sys
from Crypto.Cipher import AES
import base64


def encrypt(key, text):
    s = ''
    for i in range(len(text)):
        s += chr((((ord(text[i]) - 0x20) + (ord(key[i % len(key)]) - 0x20)) % (0x7e - 0x20 + 1)) + 0x20)
    return s


key1 = "SECCON"
key2 = "seccon2019"
text = sys.argv[1]

enc1 = encrypt(key1, text)
cipher = AES.new(key2 + chr(0x00) * (16 - (len(key2) % 16)), AES.MODE_ECB)
p = 16 - (len(enc1) % 16)
enc2 = cipher.encrypt(enc1 + chr(p) * p)
print(base64.b64encode(enc2).decode('ascii'))

解法

暗号化スクリプトと暗号化文字列が与えられたので、スクリプトの内容を理解し、復号化スクリプトを作成/実行できないか考えることにします。

まずざっと暗号化スクリプトを眺めると、アスキーコードでの演算/AES暗号/前段の暗号結果を基にした後段の暗号処理があり、手強そうに見えます。。これがコーヒーブレイク?レベル高いですね。

よく見るとアスキーコード演算は足し算引き算程度だし、AES暗号のキーは固定値で簡単にインスタンス生成可能だし、暗号結果に基づく暗号処理はただのパディングで無視可能だし、で実は難しくないのは、実際にコーヒーを飲んだあとに気づきました。

逆演算を雑に書いてしまったので大文字だけがハテナに化ける不具合が生じましたが、心の目で読み解いてフラグを得ました。(ちゃんと書きましょう)

SECCON{Success_Decryption_Yeah_Yeah_SECCON}

[crypto]Crazy Repetition of Codes

与えられるもの

  • requirements.txt
    単に「pycrypto==2.6.1」と書かれているだけの、依存関係を示すテキスト。親切。
  • crc.py
    Pythonスクリプト。
    キー生成→フラグ値を先程のキーでAES暗号→暗号結果のアサーションという流れ。
    ただしキー生成のfor回数がエグく111…111(1万桁)であり、現実時間内に演算しきれそうにない。
import os from Crypto.Cipher import AES  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

key = b""

crc = 0
for i in range(int("1" * 10000)):
  crc = crc32(crc, "TSG")
assert(crc == 0xb09bc54f)
key += crc.to_bytes(4, byteorder='big')

crc = 0
for i in range(int("1" * 10000)):
  crc = crc32(crc, "is")
key += crc.to_bytes(4, byteorder='big')

crc = 0
for i in range(int("1" * 10000)):
  crc = crc32(crc, "here")
key += crc.to_bytes(4, byteorder='big')

crc = 0
for i in range(int("1" * 10000)):
  crc = crc32(crc, "at")
key += crc.to_bytes(4, byteorder='big')

crc = 0
for i in range(int("1" * 10000)):
  crc = crc32(crc, "SECCON")
key += crc.to_bytes(4, byteorder='big')

crc = 0
for i in range(int("1" * 10000)):
  crc = crc32(crc, "CTF!")
key += crc.to_bytes(4, byteorder='big')

flag = os.environ['FLAG']
assert(len(flag) == 32)

aes = AES.new(key, AES.MODE_ECB)
encoded = aes.encrypt(flag)
assert(encoded.hex() == '79833173d435b6c5d8aa08f790d6b0dc8c4ef525823d4ebdb0b4a8f2090ac81e')

解法

方針

まずシンプルに処理の流れだけを考えてみます。

最後に暗号結果のアサーションがあるので比較先文字列を復号化するだけでフラグが得られそうだと気づきます。とてもシンプルな話。

話を複雑にしているのは、その復号化キーの演算処理がとても現実的な処理量ではないこと。

なので、次はキー演算処理を効率化し、現実時間に収めることを考えます。

ご丁寧に、1回目の暗号化(data=TSG)のあとにアサーションがあるので

「処理を効率化してほしい。デグレてないかは1回目の暗号結果で確認してほしい。」

という意図が透けて見えます。

セキュリティコンテストとして捉えると、現実のシステムは当然攻撃用のヒントを書いているわけはないので、すこし親切すぎるかも?

作業

効率化ポイントを見極めます。

  • 車輪の再発明を廃止
    crc32演算をコーディングしていますが、こんな頻出コードはプラグインに頼ったほうが品質も速度も良いものです。
  • ループ回数の削減
    明らかに回数が異常ですからね・・
    なにか工夫すれば、もっと少ない回数で済むのではないでしょうか。

まず、crc32のプラグインですが、binasciiが簡単に見つかるので置き換えましょう。

数倍の速度向上効果が得られます。(必須というほどの効果ではない)

次に処理回数についてですが、crc32の処理内容をよく知らないしもともとハッシュ計算は高速なので、打ち手がよく分かりません。

ただわかるのは「元の値を、何か違った値に変えるのだろう」ということ。

そして「値の候補は最大でも2^32=4294967296個しかない」ということ。32bitだから。

ということは。

最大でも4294967296回以上演算を続ける前に、前見たことがある値に戻ってくる、ということが言えます。

真新しい数字の候補が枯渇するので。必ず。前見た何かと重複します。

ただ、1つも残さず使い切るとは限らないので、実際の周期はもう少し早いかもしれません。これは要検証ですね。

周期がわかると何が嬉しいかというと、仮に100回周期なら11回と111回と211回と311回と・・・111…111(1万桁)回の演算結果は同じなので、11回だけ計算すればいいことになります。現実的な時間に収まりそう!

実際の周期を確認するためのテストコード(適当な値から初めてcrc32かけ続け、元の値に戻ったら回数を表示する)を書き、得られた周期で111…111(1万桁)を割ったあまりを求めることで、ループ回数は169873741回で済むことがわかります。

回数をスクリプトに反映して実行し、キー演算→AESインスタンス生成→アサーションのHexをAES復号によって、フラグSECCON{Ur_Th3_L0rd_0f_the_R1NGs}を得ます。

おわりに

その他に、ようこそ的な問題を解き([misc]Welcome, [misc]Thank you for playing!)

592点122位でした。

セキュリティの知見というよりは、パズルゲーム的な面白さが目立つように感じましたが、単に私がpwnとかに手が出せないからだけだと思います。

これからも時折楽しんでいこうと思います。

コメント

タイトルとURLをコピーしました