【write-up】SECCON BeginnersCTF【[Rev]ghost】
前書き
SECCON BeginnersCTFから既に一週間近くが経過してしまいましたが、未だに後追いをしています。やらなきゃいけないこと、やりたいこと等山積ですが、のんびりやっていきたいと思います。あと、個人的な感想ですが、この問題はReversingというよりかはMisk感の方があったかなぁと言う気がします。
write-up
よく分からないソースコードと出力ファイルが渡される。written by a ghost 👻
とのことで、調べてみるとGhostscriptのようである。gsコマンドで実行できるので、実行し、ctf4b{
と入力してみる。
output.txtの先頭部分と一致する。以下、一致する文字をブルートフォースで探索するスクリプトを作成し実行する。
import subprocess cmd='gs chall.gs' flag='ctf4b{' echo='echo' strBase='_!$%&0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz}' decLaw=[] FILE=open('output.txt','rt') dec=FILE.read() FILE.close() decLaw=dec.split(' ') for i in range(len(decLaw)-7): for j in range(len(strBase)): flagTmp=flag+strBase[j] run1=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE) run2=subprocess.Popen([echo,flagTmp],stdin=subprocess.PIPE,stdout=run1.stdin) output=run1.stdout.read().decode('utf-8') output=output.split('\n') tmp=output[4].split(' ') if( decLaw[:len(tmp)-1]==tmp[:-1] ): flag+=strBase[j] print(flag) break run1.kill() run2.kill()
subprocessを用いることで新にプロセスを生成したり、入力やその出力結果を取得することが出来る。詳しくはドキュメントを参照。このスクリプトを動かすとflagを得る。
ctf4b{st4ck_m4ch1n3_1s_4_l0t_0f_fun!}