SECON 2016 Online CTF-Write Up-
SECCONとは・・・http://2016.seccon.jp/about/
情報セキュリティをテーマに多様な競技を開催する情報セキュリティコンテストイベントです。
SECCONオンライン予選「SECCON 2016 Online CTF」に参加してきました
この記事は「CTF Advent Calendar 2016」の13日目の記事です
今回はあまり解けていないのでそのあたりは・・・
今回は解いている人が多いこの3問しか解けませんでした・・・
BiPhone(@Akashi_SN,@Snow_Poijio,@yamasy1549)で出場し、
300点で420位でした・・・精進します
Write Up
競技時間中に解けた問題のWrite Upを書いていきます。
Vigenere[Crypto-100pt]
Question
k: ???????????? p: SECCON{???????????????????????????????????} c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe |ABCDEFGHIJKLMNOPQRSTUVWXYZ{} -+---------------------------- A|ABCDEFGHIJKLMNOPQRSTUVWXYZ{} B|BCDEFGHIJKLMNOPQRSTUVWXYZ{}A C|CDEFGHIJKLMNOPQRSTUVWXYZ{}AB D|DEFGHIJKLMNOPQRSTUVWXYZ{}ABC E|EFGHIJKLMNOPQRSTUVWXYZ{}ABCD F|FGHIJKLMNOPQRSTUVWXYZ{}ABCDE G|GHIJKLMNOPQRSTUVWXYZ{}ABCDEF H|HIJKLMNOPQRSTUVWXYZ{}ABCDEFG I|IJKLMNOPQRSTUVWXYZ{}ABCDEFGH J|JKLMNOPQRSTUVWXYZ{}ABCDEFGHI K|KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ L|LMNOPQRSTUVWXYZ{}ABCDEFGHIJK M|MNOPQRSTUVWXYZ{}ABCDEFGHIJKL N|NOPQRSTUVWXYZ{}ABCDEFGHIJKLM O|OPQRSTUVWXYZ{}ABCDEFGHIJKLMN P|PQRSTUVWXYZ{}ABCDEFGHIJKLMNO Q|QRSTUVWXYZ{}ABCDEFGHIJKLMNOP R|RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR T|TUVWXYZ{}ABCDEFGHIJKLMNOPQRS U|UVWXYZ{}ABCDEFGHIJKLMNOPQRST V|VWXYZ{}ABCDEFGHIJKLMNOPQRSTU W|WXYZ{}ABCDEFGHIJKLMNOPQRSTUV X|XYZ{}ABCDEFGHIJKLMNOPQRSTUVW Y|YZ{}ABCDEFGHIJKLMNOPQRSTUVWX Z|Z{}ABCDEFGHIJKLMNOPQRSTUVWXY {|{}ABCDEFGHIJKLMNOPQRSTUVWXYZ }|}ABCDEFGHIJKLMNOPQRSTUVWXYZ{ Vigenere cipher
https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
Answer
問題文とヒントのリンクからわかるようにこれはVigenere暗号
だな~とわかる
http://elliptic-shiho.hatenablog.com/entry/2015/11/12/041637
ここのサイトを参考にした
鍵の前7文字はわかるのであとの5文字つまりlog(28^5)=7.15
と全探索できそうなので鍵を全探索するコードを書く
#!/usr/bin/env python3 import hashlib Base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ{}' key = "" Cipher = "LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ" KnownPlain = "SECCON{" Plain = "" Md5_Plain = "f528a6ab914c1ecf856a1d93103948fe" for i in range(len(KnownPlain)): Index_Of_KnownPlain = Base.find(KnownPlain[i]) Index_Of_Cipher = Base.find(Cipher[i]) Index_Of_key = Index_Of_KnownPlain - Index_Of_Cipher key += Base [-Index_Of_key] print("key:{}".format(key)) Allkey = [x+y+z+a+b for x in Base for y in Base for z in Base for a in Base for b in Base] j = 0 for k in Allkey: Plain = "" for i in range(len(Cipher)): Index_Of_Cipher = Base.find(Cipher[i]) genKey = key+k Index_Of_Key = Base.find(genKey[i%12]) Index_Of_Plain = Index_Of_Cipher - Index_Of_Key Plain += Base[Index_Of_Plain] j+=1 if j%10000000 == 0: print("{} Times".format(j)) if hashlib.md5(Plain.encode('utf8')).hexdigest() == Md5_Plain: print("Find!!!! ...{} Times".format(j)) print(Plain) break
$ python q1.py key:VIGENER 10000000 Times 20000000 Times 30000000 Times 40000000 Times 50000000 Times 60000000 Times 70000000 Times 80000000 Times 90000000 Times 100000000 Times Find!!!! ...108084499 Times SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}
1分ぐらいでフラグが出てくる
VoIP[Forensics-100pt]
Question
VoIP Extract a voice. The flag format is SECCON{[A-Z0-9]}.
Answer
Ip電話のパケットのようなので、Wiresharkの電話(y)→VoIP通話(V)→ストリーム再生
で音声を聞ける。
V
の発音がわからず苦労した
FLAG:SECCON{9001IVR}
Memory Analysis[Forensics-100pt]
Question
Find the website that the fake svchost is accessing. You can get the flag if you access the website!! The challenge files are huge, please download it first. Hint1: http://www.volatilityfoundation.org/ Hint2: Check the hosts file password: fjliejflsjiejlsiejee33cnc
Answer
http://www.volatilityfoundation.org/のメモリダンプの解析ソフトを使ってやる
https://github.com/volatilityfoundation/volatility/wiki/Volatility-Usage ドキュメント
volatility-2.5.standalone.exe -f forensic_100.raw imageinfo Volatility Foundation Volatility Framework 2.5 INFO : volatility.debug : Determining profile based on KDBG search... Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86) AS Layer1 : IA32PagedMemoryPae (Kernel AS) AS Layer2 : FileAddressSpace (D:\SECCON-2016-Online-CTF\Forensics\100\Memory Analysis\memoryanalysis\forensic_100.raw) PAE type : PAE DTB : 0x34c000L KDBG : 0x80545ce0L Number of Processors : 1 Image Type (Service Pack) : 3 KPCR for CPU 0 : 0xffdff000L KUSER_SHARED_DATA : 0xffdf0000L Image date and time : 2016-12-06 05:28:47 UTC+0000 Image local date and time : 2016-12-06 14:28:47 +0900
どうやらWinXPのメモリダンプらしい
プロセス一覧
volatility-2.5.standalone.exe -f forensic_100.raw psscan Volatility Foundation Volatility Framework 2.5 Offset(P) Name PID PPID PDB Time created Time exited ------------------ ---------------- ------ ------ ---------- ------------------------------ ------------------------------ 0x0000000001805d40 disable_outdate 1376 1928 0x09480360 2016-10-26 09:44:04 UTC+0000 2016-10-26 09:44:04 UTC+0000 0x00000000018dc630 tcpview.exe 2844 1464 0x09480320 2016-12-06 05:13:57 UTC+0000 2016-12-06 05:26:18 UTC+0000 0x0000000001bb4380 tcpview.exe 3308 1556 0x091c0360 2016-12-06 05:28:42 UTC+0000 0x0000000001c18020 smss.exe 540 4 0x091c0020 2016-12-06 05:27:04 UTC+0000 0x0000000001c309e8 vmtoolsd.exe 1820 676 0x04c00260 2016-10-25 10:17:40 UTC+0000 2016-10-26 09:05:05 UTC+0000 0x0000000002018da0 svchost.exe 848 672 0x091c00e0 2016-12-06 05:27:08 UTC+0000 0x0000000002041928 svchost.exe 1320 672 0x091c0180 2016-12-06 05:27:10 UTC+0000 0x000000000204b4b0 vmtoolsd.exe 312 672 0x091c02a0 2016-12-06 05:27:13 UTC+0000 0x000000000204f560 svchost.exe 1704 672 0x091c0200 2016-12-06 05:27:10 UTC+0000 0x0000000002056228 wscntfy.exe 720 1036 0x091c03a0 2016-12-06 05:27:18 UTC+0000 0x00000000020886f0 GoogleUpdate.ex 372 1984 0x091c02c0 2016-12-06 05:27:13 UTC+0000 0x0000000002089200 wmiprvse.exe 596 848 0x091c0340 2016-12-06 05:27:13 UTC+0000 0x00000000020f6da0 csrss.exe 604 540 0x091c0040 2016-12-06 05:27:07 UTC+0000 0x0000000002100558 VGAuthService.e 196 672 0x091c0280 2016-12-06 05:27:13 UTC+0000 0x000000000210dbe0 spoolsv.exe 1644 672 0x091c01e0 2016-12-06 05:27:10 UTC+0000 0x000000000212cb20 wuauclt.exe 3164 1036 0x091c01a0 2016-12-06 05:28:15 UTC+0000 0x0000000002146238 alg.exe 2028 672 0x091c0380 2016-12-06 05:27:16 UTC+0000 0x0000000002165da0 svchost.exe 1776 672 0x091c0220 2016-12-06 05:27:10 UTC+0000 0x000000000218c9a0 lsass.exe 684 628 0x091c00a0 2016-12-06 05:27:07 UTC+0000 0x0000000002192778 svchost.exe 1088 672 0x091c0140 2016-12-06 05:27:08 UTC+0000 0x0000000002262b20 wuauclt.exe 488 1036 0x091c02e0 2016-12-06 05:27:13 UTC+0000 0x0000000002351ca8 svchost.exe 936 672 0x091c0100 2016-12-06 05:27:08 UTC+0000 0x0000000002354880 vmacthlp.exe 836 672 0x091c00c0 2016-12-06 05:27:08 UTC+0000 0x000000000236a5e8 DumpIt.exe 3740 1556 0x091c0320 2016-12-06 05:28:46 UTC+0000 0x000000000236e670 services.exe 672 628 0x091c0080 2016-12-06 05:27:07 UTC+0000 0x0000000002370da0 ctfmon.exe 1872 1556 0x091c0160 2016-12-06 05:27:11 UTC+0000 0x0000000002373da0 winlogon.exe 628 540 0x091c0060 2016-12-06 05:27:07 UTC+0000 0x00000000023f8438 vmtoolsd.exe 1856 1556 0x091c0240 2016-12-06 05:27:11 UTC+0000 0x000000000245bda0 IEXPLORE.EXE 380 1776 0x091c03c0 2016-12-06 05:27:19 UTC+0000 0x0000000002467900 rundll32.exe 1712 1556 0x091c0260 2016-12-06 05:27:16 UTC+0000 0x000000000249f7e8 IEXPLORE.EXE 1080 380 0x091c0300 2016-12-06 05:27:21 UTC+0000 0x0000000002512450 svchost.exe 1036 672 0x091c0120 2016-12-06 05:27:08 UTC+0000 0x000000000251f698 explorer.exe 1556 1520 0x091c01c0 2016-12-06 05:27:10 UTC+0000 0x00000000025c8660 System 4 0 0x0034c000
ニセのsvchost
がアクセスしてるサイトを見つける
次にすべてのsvchost
をダンプする
volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 936 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x82151ca8 0x01000000 svchost.exe OK: executable.936.exe >volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 1704 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x81e4f560 0x01000000 svchost.exe OK: executable.1704.exe >volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 848 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x81e18da0 0x01000000 svchost.exe OK: executable.848.exe >volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 1776 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x81f65da0 0x00400000 svchost.exe OK: executable.1776.exe >volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 1320 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x81e41928 0x01000000 svchost.exe OK: executable.1320.exe >volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 1088 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x81f92778 0x01000000 svchost.exe OK: executable.1088.exe >volatility-2.5.standalone.exe -f forensic_100.raw procdump -D dump/ -p 1036 Volatility Foundation Volatility Framework 2.5 Process(V) ImageBase Name Result ---------- ---------- -------------------- ------ 0x82312450 0x01000000 svchost.exe OK: executable.1036.exe
dump$ file * executable.1036.exe: PE32 executable (GUI) Intel 80386, for MS Windows executable.1088.exe: PE32 executable (GUI) Intel 80386, for MS Windows executable.1320.exe: PE32 executable (GUI) Intel 80386, for MS Windows executable.1704.exe: PE32 executable (GUI) Intel 80386, for MS Windows executable.1776.exe: PE32 executable (console) Intel 80386, for MS Windows executable.848.exe: PE32 executable (GUI) Intel 80386, for MS Windows executable.936.exe: PE32 executable (GUI) Intel 80386, for MS Windows
executable.1776.exe
だけ違うので、
$ strings executable.1776.exe | grep http C:\Program Files\Internet Explorer\iexplore.exe http://crattack.tistory.com/entry/Data-Science-import-pandas-as-pd
何かアクセスしようとしてる・・・
Hint2: Check the hosts file
らしいので、
volatility-2.5.standalone.exe -f forensic_100.raw filescan | grep hosts Volatility Foundation Volatility Framework 2.5 0x000000000217b748 1 0 R--rw- \Device\HarddiskVolume1\WINDOWS\system32\drivers\etc\hosts
あった!ダンプしてみよう!
volatility-2.5.standalone.exe -f forensic_100.raw dumpfiles -D output/ -Q 0x000000000217b748 Volatility Foundation Volatility Framework 2.5 DataSectionObject 0x0217b748 None \Device\HarddiskVolume1\WINDOWS\system32\drivers\etc\hosts
cat file.None.0x819a3008.dat # Copyright (c) 1993-1999 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host 127.0.0.1 localhost 153.127.200.178 crattack.tistory.com
どうやらcrattack.tistory.com
にアクセスしようとすると153.127.200.178
にアクセスしてしまうよう
つまりhttp://153.127.200.178/entry/Data-Science-import-pandas-as-pd
にアクセスすれば良さそう
するとファイルがダウンロードされるので表示するとフラグが手に入る
FLAG:SECCON{_h3110_w3_h4ve_fun_w4rg4m3_}
感想
ほんとにまだまだということがわかったので精進します・・・
友利奈緒になりたい
友利奈緒 彼女はGoogleで検索したときに”友利奈緒 seccon”とサジェストされるようにCTFerにとっての憧れである
この記事はそんな彼女になろうとした話である・・・・
というわけで、これは”友利奈緒 Advent Calendar 2016”の11日目の記事です。
はじめ
“友利奈緒”が文部科学大臣賞を受賞!
画像はhttp://www.data-max.co.jp/280203_knk_1/より
セキュリティの興味がわき始めたときにこのニュースを知り友利奈緒に憧れるようになった いつか友利奈緒でセキュリティコンテストに出たいと思っていたが、チャンスはあったもののなかなか一歩を踏み出せなかった・・・
そして、
高専セクコンで友利奈緒のコスプレしようかな〜?
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月16日
やっと踏ん切りがついた
友利奈緒になるために
なるほど pic.twitter.com/WbEee0u7az
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月16日
間に合わない、、、 pic.twitter.com/weIXxnJGoH
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月16日
あかん、間に合わない、、、 pic.twitter.com/QLiMbeMH4i
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月20日
色々調べてみてウィッグは間に合うけど制服は間に合いそうになかったので、出品者に直接お願いすることに
あぁぁぁ~~~ pic.twitter.com/eVCemt7GI9
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月20日
あぁぁぁぁ~~~~
うわぁ~ん間に合わないよう・・・
すると、
女神様~🙏🙏🙏
これで友利奈緒になるための準備ができた
注文した制服は出品者が優しかったおかげで返金することができた
友利奈緒になる
前日の集合時間・・・
うわぁぁぁ~やってしまった~
ほんとにご迷惑をおかけしました
・・・なんとか1本あとの特急で高知につくことができた
着いた pic.twitter.com/25xGKkSOq8
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月26日
試合開始・・・
サーバーの再起動を待っている間にCharlotte鑑賞会が始まった
Charlotte鑑賞会(サーバー再起動待ち) #KOSENSEC pic.twitter.com/e3l2eJRmoN
— やましー@BiPhone (@yamasy1549) 2016年11月27日
選手からポッキーをもらうという謎の儀式が執り行われました #KOSENSEC pic.twitter.com/lPrVDWbitF
— りょたろ(O23) (@RyoutaK) 2016年11月27日
ちゃんとポッキーも渡した
結果、特別賞をもらいました!
お疲れ様でした!特別賞もらえて良かったです!次はSECCON Online で頑張らなきゃ(^O^)v #KOSENSEC pic.twitter.com/SDEvgtt45X
— Akashi_SN@BiPhone (@Akashi_SN) 2016年11月27日
このツイートをしたら、
野良友利奈緒...
— 【TomoriNao】しふくろ (@shift_crops) 2016年11月27日
何故一人だけ普段着なのか
やるならやるで,もっと完璧を目指そうな(何を要求してるのか) https://t.co/BEgBCfZvAD
本物のTomoriNaoのTomoriNaoさんにアドバイスをもらった🙏
@yamasy1549 @Akashi_SN 制服作るなんて相当手間かかるでしょうに,本当にすごいですわ
— 【TomoriNao】しふくろ (@shift_crops) 2016年11月27日
もしいずれ,チームTomoriNaoに興味があったら是非(笑)
ふぇぇぇ~
頑張ります!
さいご
みんなも友利奈緒になろう!
Nexus5Xを工場出荷時初期化~Xposed導入まで
今まではAndroid 7.0 Nougat
をRoot化して使っていたのだが、最近カメラが落ちる、起動に時間がかかるなどの不具合が出ていた。
更に、相変わらずXposedの開発が終わらないので一旦Android 6.0 Marshmallow
に戻したので、その時のメモ
自己責任でお願いします
環境
- Android 7.0 Nougat
- Androidセキュリティパッチレベル:2016年11月5日
手順
- ファクトリーイメージのダウンロード
- Android SDK(イメージ書き込みの際に必要)のインストール
- ブートローダーアンロックのための前準備
- ブートローダーアンロック(非Rootの場合)
- イメージ書き込み
- 端末の初期設定
- カスタムリカバリの書き込み(Root化する場合)
- SuperSUのインストール(Root化する場合)
- Xposedの導入
ファクトリーイメージのダウンロード
まずAndroid 7.0 Nougat
をAndroid 6.0 Marshmallow
にダウングレードする。
NexusシリーズはGoogleがファクトリーイメージを公開してるので、それを書き込むことで実現する。
Factory Images for Nexus and Pixel Devices
ここで自分に合ったバージョンを選ぶ
今回は"bullhead" for Nexus 5X 6.0.1 (MTC20K)
をダウンロードした。
バージョンの数字のあとに書いてる文字列はビルド番号を表している。
Platform Toolsの入手 (2017/05/26追記)
GoogleからPlatform Toolsのみをダウンロードするリンクが公開されたのでそこから入手する
SDK Platform Tools Release Notes
ここから各プラットフォームに応じてダウンロードして展開する
これからはplatform-tools-latest-windows\platform-tools
以下で作業する
fastboot
などは各自.\fastboot.exe
などに読み替えてください
ブートローダーアンロックのための前準備
ブートローダーをアンロックするとインストールしているアプリなどが削除されるので、バックアップを取る。
また、設定→開発向けオプションからUSBデバッグ、OEMロック解除をそれぞれ設定する。(写真ではもうすでにロック解除されてるので選択できなくなっている。)
設定できたらシャットダウンしておく。
ブートローダーアンロック
電源ボタンと音量ボタンの下を同時に押し続けて、ブートローダーを起動する
DEVICE STATE - locked
となっているのでこれを解除する
ブートローダーを起動した状態で、PCに接続して
コマンドプロンプトを開き
$ fastboot oem unlock
と打ち込み実行する。
するとこういう画面が表示されるので、音量ボタンでYes Unlock bootloader (may void warranty)
を選択し電源ボタンで確定する
$ fastboot oem unlock ... OKAY [233.564s] finished. total time: 233.565s
DEVICE STATE - unlocked
となれば解除成功
ファクトリーイメージの書き込み
先程ダウンロードしたbullhead-mtc20k-factory-4a950470.zip
を解凍する
bullhead-mtc20k\image-bullhead-mtc20k.zip
これも解凍する
bullhead-mtc20k\
ここのディレクトリでShift
を押しながら右クリックして
コマンドウィンドをここで開く(w)
を選択しコマンドプロンプトを開く
次のコマンドを実行する[#]以下はコメントなので実行しない
$ fastboot flash bootloader bootloader-bullhead-bhz10r.img #ブートローダー $ fastboot reboot-bootloader #ブートローダーを再起動 $ fastboot flash radio radio-bullhead-m8994f-2.6.32.1.13.img #ラジオ $ fastboot reboot-bootloader #ブートローダーを再起動 $ cd image-bullhead-mtc20k #ディレクトリ移動 $ fastboot flash boot boot.img #カーネル領域 $ fastboot flash cache cache.img #キャッシュ領域 $ fastboot flash recovery recovery.img #リカバリ領域 $ fastboot flash system system.img #システム領域 $ fastboot format userdata #ユーザーデータの初期化 $ fastboot flash vendor vendor.img #ファイルが存在している端末のみ $ fastboot reboot-bootloader #ブートローダーを再起動
エラーが出なかったら成功
端末の初期設定
端末をPCから抜いて起動
音量ボタンでStart
を選択し、電源ボタンで確定
Androidが起動したら初期設定をする。
初期設定が完了したらまたシャットダウンする。
カスタムリカバリの書き込み
カスタムリカバリのイメージをダウンロード
https://dl.twrp.me/bullhead/から
twrp-3.0.2-2-bullhead.img
をダウンロード
電源ボタンと音量ボタンの下を同時に押し続けてブートローダーを起動する。
先程同じようにダウンロードしたディレクトリでShift
を押しながら右クリックして
コマンドウィンドをここで開く(w)
を選択しコマンドプロンプトを開く
次のコマンドを実行して書き込む
$ fastboot flash recovery twrp-3.0.2-2-bullhead.img $ fastboot reboot-bootloader
$ fastboot flash recovery twrp-3.0.2-2-bullhead.img target reported max download size of 536870912 bytes sending 'recovery' (16433 KB)... OKAY [ 0.444s] writing 'recovery'... OKAY [ 0.147s] finished. total time: 0.596s $ fastboot reboot-bootloader rebooting into bootloader... OKAY [ 0.020s] finished. total time: 0.022s
書き込み成功
SuperSUのインストール
Recovery mode
で起動する
書き込み権限を与えますかと出てくるのでスワイプして許可する
メインメニュー
SperSUをダウンロード
https://download.chainfire.eu/1014/SuperSU/SR5-SuperSU-v2.78-SR5-20161130091551.zip
SR5-SuperSU-v2.78-SR5-20161130091551.zip
をダウンロードして端末にコピーする。
そして、メインメニューの「Install」からSR5-SuperSU-v2.78-SR5-20161130091551.zip
を選択し、スワイプしてインストール。
完了したらReboot System
から再起動
Androidが起動したら、アプリにSuperSU Free
が追加されてることを確認
これでRoot権限が取得できた!
Xposedの導入
リカバリーモードで起動しておく
Nexus5X/Marshmallow
はsdk23/arm64
なので、
http://dl-xda.xposed.info/framework/sdk23/arm64/xposed-v87-sdk23-arm64.zip先程と同じように
xposed-v87-sdk23-arm64.zip
をダウンロードして端末にコピーする
そして、メインメニューの「Install」から先程と同じように、xposed-v87-sdk23-arm64.zip
を選択し、スワイプしてインストール。
完了したらReboot System
から再起動
http://forum.xda-developers.com/showthread.php?t=3034811
公式からXposedInstaller_3.0_alpha4.apk
をダウンロードして端末にコピーする
https://play.google.com/store/apps/details?id=com.estrongs.android.pop&hl=ja
設定→セキュリティから提供元不明アプリのインストールを許可する設定にする
「Google Play Store」から「ES ファイルエクスプローラー」をインストールする。
アプリを起動し、XposedInstaller_3.0_alpha4.apk
を選びインストールする。
インストールできたらXposedの導入完了!
Xposedの豊富なモジュールを楽しもう!
Python3でSQLiteを扱おうとしたときにハマったこと
python3からSQLliteを扱おうとした時にハマったのでメモ
環境
- Python 3.5.2
- SQLite version 3.11.0
- Ubuntu
SQLite3のインストール
$ sudo apt install sqlite3 libsqlite3-dev
動作確認
ファイル構成
root@ubuntu:~/CHUNITHM$ tree . |-- chunithm.db `-- sqlite3.py 0 directories, 2 files
[sqlite3.py]
#!/usr/bin/env python3 import sqlite3 con = sqlite3.connect("/root/CHUNITHM/chunithm.db") c = con.cursor() c.execute("select * from Music") r = c.fetchall() print(r[0])
chunithm.db
の構造
chunithm.db
の中身
実行してみよう!
root@ubuntu:~/CHUNITHM$ python3 sqlite3.py Traceback (most recent call last): File "sqlite3.py", line 3, in module import sqlite3 File "/root/CHUNITHM/sqlite3.py", line 4, in module con = sqlite3.connect("/root/CHUNITHM/chunithm.db") AttributeError: module 'sqlite3' has no attribute 'connect'
AttributeError: module 'sqlite3' has no attribute 'connect'
・・・なんだ?
コマンドラインでは行けるのにファイルにして実行するとエラー出るの何なの💢💢 pic.twitter.com/k63obM568M
— Akashi_SN@BiPhone (@Akashi_SN) 2016年12月2日
Python謎
— Akashi_SN@BiPhone (@Akashi_SN) 2016年12月2日
Python嫌い
— Akashi_SN@BiPhone (@Akashi_SN) 2016年12月2日
Pythonを嫌いになりかけてたとき神リプが送られてきた
@Akashi_SN スクリプトファイル名がsqlite3になっていませんか?importで標準のモジュールではなくスクリプトファイルをimportしているとこうなるケースがあります。
— Noriyuki (@eiryplus) 2016年12月2日
神様🙏🙏🙏
つまりファイル名がsqlite3.py
だったのがまずかったよう
自分のファイルをImportしにいってたからエラーが発生してたよう
ファイル名を別に変えて
root@ubuntu:~/CHUNITHM$ tree . |-- chunithm.db `-- chunithm.py 0 directories, 2 files root@ubuntu:~/CHUNITHM$ python3 chunithm.py (3, 'B.B.K.K.B.K.K.', 'img/d739ba44da6798a0.jpg', None, 11.8)
できた!!!
ほんとしょうもないミスでお恥ずかしいばかりです・・・
@eiryplus様@rikibon_様ほんとにありがとうございました!
UbuntuのApacheでFlaskを用いてPython3でWebアプリケーションを作る
今PHPで作ってるCHUNITHM Rate CalculatorをPython3で作ってみようとしたときの備忘録
環境
- Ubuntu-Server:16.04(64bit)
- Python:3.5.2
前準備
$ sudo apt update
$ sudo apt upgrade
Flaskのインストール
$ sudo apt install python3-dev python3-pip
$ sudo pip3 install Flask
Flaskのインストール中に
locale.Error: unsupported locale setting
こんなエラーが出たら、
$ export LC_ALL=C
を打ってもう一度実行してみる
Apache2とApacheでPython3を使えるようにするmodのインストール
$ sudo apt install apache2
$ sudo apt install libapache2-mod-wsgi-py3
ファイル構成
root@Ubuntu:/var/www$ tree -l
.
└── flask
├── flask_script.py
└── flask_app.wsgi
1 directories, 2 files
アプリケーションの作成
#flask_script.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
.wsgiファイルの作成
#flask_app.wsgi
import os,sys
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
from flask_script import app as application
Apacheの設定
$ sudo vim /etc/apache2/sites-available/flask.conf
Flaskの設定ファイルつくる
#flask.conf
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess flask_app user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/flask/flask_app.wsgi
<Directory /var/www/flask>
WSGIProcessGroup flask_app
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
このように設定する。
この時アプリケーションのディレクトリ以下が、www-data
がオーナーになるように所有者を変えておく。
$ sudo chown -R www-data:www-data /var/www/flask/
$ sudo ln -s /etc/apache2/sites-available/flask.conf /etc/apache2/sites-enabled/flask.conf # Apacheに読み込んでもらうために、シンボリックリンクを作成する。
$ sudo rm /etc/apache2/sites-enabled/000-default.conf # デフォルトの設定ファイルを読み込まれないようにする
Apacheを再起動
$ sudo apachectl restart
もし、再起動の時に
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using localhost Set the 'ServerName' directive globally to suppress this message
というエラーが発生したら、
$ sudo echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
$ sudo a2enconf fqdn
と打ち込んで、もう一度再起動する
$ sudo apachectl restart
エラーが出なかったら、http://localhost
にアクセスしてみてHello World!
と表示されれば成功
ファイルを変更した際はApacheを再起動しないといけないよう?
SECCON2016 京都大会 「サイバー甲子園」 に参加したよ
サイバー甲子園とは・・・http://2016.seccon.jp/news/#121
18才、高校生以下の学生を対象としたCTF大会です。 クイズ形式(Jeopardy)によるセキュリティやITの技術を競うCTFで、 出題予定のジャンルはWeb、バイナリ、ネットワーク、暗号など。 さまざまなジャンルのさまざまな難易度の問題に挑戦していただき、総得点を競います。
前使ってたLet's noteが液晶の不具合かで、画面がずっと暗いままっだったので、新しいパソコンを買ってもらいました!
そういえば、昨日新しいノートパソコンが届きました!!(前のは液晶が壊れて、画面が暗かった) pic.twitter.com/zsgtnNic2U
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月9日
これからが大変だった・・・
届いてすぐブルースクリーンになり・・・
挙句には
これ、ひどくない、、、 pic.twitter.com/qGK5Glh4uc
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月10日
エクスプローラーとかが起動しなくなっt・・・
明日がサイバー甲子園の本番ですが、ここでPCを見てみましょう! pic.twitter.com/wBRyC5ojzb
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月11日
辛かった・・・
なんとかドライバ関係を解決しようと奮闘し、気づいたら3時・・・
相方のsnowと駅に8時半に待ち合わせしてたのだが・・・
ごめんなさい!!!
電車の時間は余裕を持ってて、良かった・・・
京都駅到着! pic.twitter.com/lesqTZIYMf
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月12日
京都は新幹線で通過するぐらいだから実質初めて来た
お昼はマックで食べたのだが、注文時、
マックにおいて
— Snow (@Snow_Poijio) 2016年11月12日
店員「再度メニューは何にしますか?」Akashi_SN「コーラ!」
・・・うん、とにかく会場につくと、
会場入り!#サイバー甲子園 pic.twitter.com/B7snbVlsly
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月12日
本貰った(2冊目) pic.twitter.com/Wky18Bt6xR
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月12日
机に本がおいてあった(ありがとうございます!)
でも、CTF forビギナーズ 2016博多で3位になって貰ったんだった・・・
(あとでスタッフで美味しくいただきました)
結構奮闘して結果4位でした・・・
2000越えて良かった#seccon pic.twitter.com/OiYGPeyhrv
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月12日
— Akashi_SN@31/36 (@Akashi_SN) 2016年11月12日
@Yukiくんすぐに煽るのはやめよう
WriteUp
競技中に解けたり解けなかったりの問題のWriteUp
[Sample-10pt] TRY FIRST
Question
これは練習問題です。
各問題には下記の形式のフラグがありますのでそれを入力してください。
SECCON{xxxxxx}
この問題のフラグは SECCON{Cyber_Koshien}
Answer
書いてあるのを提出するだけ
SECCON{Cyber_Koshien}
[Binary-100pt] sl is not ls
Question
slコマンドに秘められた謎を解け!
Answer
まず解凍
$ unzip sl.zip
Archive: sl.zip
inflating: sl
とにかくfile
コマンド
$ file sl
sl: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
実行してみうよう!
$ ./sl
bash: ./sl: cannot execute binary file: 実行形式エラー
は?
Bash on Windowsではだめなんかな?
あとでKaliLinuxで実行してみた
$ ./sl
bash: ./sl: そのようなファイルやディレクトリはありません
はい、32ビットのライブラリを入れよう!
$ sudo apt-get install lib32z1
$ ./sl
Error opening terminal: xterm-256color.
$ TERM='xterm-color' ./sl
これで実行できた
strings
コマンド
Try `./sl [-h] [OPTIONS]' for more information.
OPTIONS: -[%s%c]
____________________
| ___ ___ ___ ___ |
| |_| |_| |_| |_| |
|__________________|
(O) (O)
____
| \@@@@@@@@@@@
| \@@@@@@@@@@@@@_
| |
(O) (O)
++ +------
|| |+-+ |
/---------|| | |
+ ======== +-+ |
_|--O========O~\-+
//// \_/ \_/
_|--/O========O\-+
_|--/~O========O-+
_|--/~\------/~\-+
//// \_O========O
//// \O========O/
//// O========O_/
_________________
_| \_____A
=| |
-| |
__|________________________|_
|__________________________|_
|_D__D__D_| |_D__D__D_|
\_/ \_/ \_/ \_/
==== ________ ___________
_D _| |_______/ \__I_I_____===__|_________|
|(_)--- | H\________/ | | =|___ ___|
/ | | H | | | | ||_| |_||
| | | H |__--------------------| [___] |
| ________|___H__/__|_____/[][]~\_______| |
|/ | |-----------I_____I [][] [] D |=======|__
__/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__
|/-=|___|= || || || |_____/~\___/
\_/ \O=====O=====O=====O_/ \_/
|/-=|___|=O=====O=====O=====O |_____/~\___/
\_/ \__/ \__/ \__/ \__/ \_/
__/ =| o |=-O=====O=====O=====O \ ____Y___________|__
__/ =| o |=-~O=====O=====O=====O\ ____Y___________|__
|/-=|___|= O=====O=====O=====O|_____/~\___/
\_/ \_O=====O=====O=====O/ \_/
Help!
,,,,
....
SEC
CON{
F1aG}
CON{x1
SLm}
SECCON{S
SL_l
0v3}
1v3}
CON{dum
my?}
slだ~!
SEC
CON{
F1aG}
CON{x1
SLm}
SECCON{S
SL_l
0v3}
1v3}
CON{dum
my?}
フラグっぽいけど、dummy?
らしい
Try `./sl [-h] [OPTIONS]' for more information.
OPTIONS: -[%s%c]
オプションがあるのか・・・
$ ./sl -h
Try `./sl [-h] [OPTIONS]' for more information.
OPTIONS: -[alFS]
$ ./sl -S
でフラグが出てきた
SECCON{SL_l0v3}
[Binary-100pt] Assembler Tanka
Question
「アセンブラ短歌」は五・七・五・七・七の三十一バイト(みそひとバイト)から成る機械語コードでプログラムを書いてみるという近未来の文化的趣味であり,近年,国内のハッカー間で密かなブームが起きています.
問題:以下のアセンブラ短歌を実行せよ
68 37 35 37 37 # 5
68 4f 4e 7b 35 33 c9 # 7
68 53 45 43 43 # 5
ba f8 03 00 00 b1 0c # 7
89 e6 f3 6e b0 7d ee # 7
参考:ディスアセンブルの結果は以下の通り。
6837353737: push 0x37373537
684f4e7b35: push 0x357b4e4f
33c9: xor ecx, ecx
6853454343: push 0x43434553
baf8030000: mov edx, 0x3f8
b10c: mov cl, 0xc
89e6: mov esi, esp
f36e: rep outsb
b07d: mov al, 0x7d
ee: out dx, al
ヒント:実行環境がない場合は、JavaScriptでアセンブラ短歌の実行をエミュレートするサイトがあるので探してみましょう。
-- 以下,アセンブラ短歌のホームページより引用 --
アセンブラに関する知識はセキュリティの根本を理解する上で重要であり,セキュリティ教育の一貫としてアセンブラ学習が見直されています.しかしアセンブラ・リーディング/コーディングは空洞化してしまった技術分野でもあり,学習機会の不足や独学の困難さも問題視されています.このような状況の中,半分遊びの感覚で気軽にアセンブラを学習する方法として考え出されたのが「アセンブラ短歌」です.
アセンブラ短歌には, 31バイトの限られた機械語コードでプログラミングする,5・7・5・7・7の決められた位置で区切られるようにプログラミングする,決まったバイトパターンを(韻を踏むために)決まった位置に埋め込む,あえて特定の命令を使って(もしくは使わずに)プログラミングする,といった技術が必要になります.これらのことが,どのように役に立つのでしょうか?
攻撃から守るためには,まずはどのような攻撃があり得るのか,攻撃手法を理解することは避けて通れません.攻撃方法を知らなければ,防御はできません.
そしてバッファオーバーランの脆弱性攻撃によって送り込まれるいわゆる「シェルコード」には,被攻撃側のチェックを回避するために, NUL文字や空白文字を使わない機械語コードでプログラミングする,表示可能文字のみでプログラミングする,決められたサイズでプログラミングする,といった技法が使われます.
そのような攻撃から「守る」ためには,シェルコードの解析と理解が必要です.アセンブラ短歌を修得することはそのような解析技術や,対策を考えるための基礎知識に繋がるという目的があります.
Answer
アセンブラ短歌の実行できるサイトがあるそうなので、やってみる
http://07c00.com/asmtanka_on_js/
やってみた
できた
SECCON{57577}
[Binary-300pt] fakeransom
Question
お願い助けて!!私の大事なファイルが暗号化されてしまったの!
Answer
[Binary-200pt] guess the flag
Question
コマンドを実行し、フラグ文字列を当ててください。
フラグ文字列は SECCON{ で始まりますよ。
Answer
$ strings -e L guessflag
SECCON{Piece of cake!?}
strings
すごすぎ
SECCON{Piece of cake!?}
[Crypto-100pt] gokai?
Question
以下の文字列を頑張ってデコードしてみよう。
Vm14U1ExWXhTa2RTV0dSUVZsUnNjMVJWVm5kUk1WcFZVV3hhVG1GNlZrcFVWVkYzVUZFOVBRPT0=
Answer
5回Base64でデコードしてやる
#!/usr/bin/env python
str = "Vm14U1ExWXhTa2RTV0dSUVZsUnNjMVJWVm5kUk1WcFZVV3hhVG1GNlZrcFVWVkYzVUZFOVBRPT0="
for i in range(5):
str = str.decode("base64")
print(str)
これで出てくる
SECCON{BASE64}
[Crypto-100pt] very easy
Question
以下の文字列を解読してみよう。
53 45 43 43 4f 4e 7b 68 65 78 5f 64 75 6d 70 7d
Answer
asciiっぽいのでスクリプトをいい感じに書いてやる
#!/usr/bin/env python
arr = ["53","45","43","43","4f","4e","7b","68","65","78","5f","64","75","6d","70","7d"]
flag = ""
for i in arr:
flag += chr(int(i,16))
print(flag)
SECCON{hex_dump}
[Crypto-200pt] decode the flag
Question
フラグ文字列をopensslコマンドを使って暗号化したんだけど、暗号形式を忘れてしまいました。
openssl cipher で表示されるどれかだと思うんだけど・・・
パスワードは 53CC0NZOl6 です。
Answer
opensslコマンドで暗号化したそうなので、どんな暗号化方式が使えるのか調べてみる
$ openssl list-cipher-commands > crypto.txt
aes-128-cbc
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc
aes-256-ecb
base64
bf
bf-cbc
bf-cfb
bf-ecb
bf-ofb
camellia-128-cbc
camellia-128-ecb
camellia-192-cbc
camellia-192-ecb
camellia-256-cbc
camellia-256-ecb
cast
cast-cbc
cast5-cbc
cast5-cfb
cast5-ecb
cast5-ofb
des
des-cbc
des-cfb
des-ecb
des-ede
des-ede-cbc
des-ede-cfb
des-ede-ofb
des-ede3
des-ede3-cbc
des-ede3-cfb
des-ede3-ofb
des-ofb
des3
desx
rc2
rc2-40-cbc
rc2-64-cbc
rc2-cbc
rc2-cfb
rc2-ecb
rc2-ofb
rc4
rc4-40
seed
seed-cbc
seed-cfb
seed-ecb
seed-ofb
http://qiita.com/ikuwow/items/1cdb057352c06fd3d727
復号 パスワードを標準入力から取得する場合$ openssl aes-256-cbc -d -in encrypted.txt -out decrypted.txt
パスワードをファイルから読み込む場合enter aes-256-cbc decryption password: # パスワードを入力
$ openssl aes-256-cbc -d -in encrypted.txt -out decrypted.txt -pass file:./password.txt
なるほど・・・
ブルートフォースすればよさそう
#!/usr/bin/env python
import commands,re
enc = open("crypto.txt","r")
for i in enc:
cmd = "openssl {} -d -in flag.encrypted -pass file:./password.txt".format(i[:-1])
out = commands.getoutput(cmd).split("\n")[0]
if out != "bad decrypt":
if re.match("SECCON",out):
print(out.split("\n")[0])
print("Decrypted!")
実行したらフラグが出てくる
$ ./q8.py
SECCON{R U 4 0P3N55L M457ER?}
Decrypted!
SECCON{RDN��Q▼|��▲��2�n�� j�wY
Decrypted!
SECCON{R U 4 0P3N55L M457ER?}
[Crypto-100pt] onlineyosen
Question
online qualification will start at 10th Dec.
Answer
競技中は解けなかったけど解説のときの方法でやってみる
とにかくstrings
(一部抜粋)
SECCON
tEXtModel
onlineCTFFX
iTXtXML:com.adobe.xmp
<?xpacket begin='
' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 10.31'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<rdf:Description rdf:about=''
xmlns:dc='http://purl.org/dc/elements/1.1/'>
<dc:type>
<rdf:Bag>
<rdf:li>lsb</rdf:li>
</rdf:Bag>
</dc:type>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>
IEND
なんだ・・・?
lsb
?
LSBは十進数の1を指す。
最下位ビット(さいかいビット、least significant bit、LSBと略記)は、コンピュータにおいて二進数で最も小さな値を意味するビット位置のことである。
LSBは右端ビットとも言われる。 十進数に当てはめれば、「一の位」に相当する。
ぐぐってみた
https://www.google.co.jp/search?q=lsb+png
https://github.com/RobinDavid/LSB-Steganography
いい感じ!
$ ./LSBSteg.py -h
Traceback (most recent call last):
File "./LSBSteg.py", line 44, in <module>
import cv2.cv as cv
ImportError: No module named cv2.cv
う~ん
opencv
をインストールしないといけないのかな?
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-numpy
$ sudo apt-get install python-opencv
$ sudo ln /dev/null /dev/raw1394
$ ./LSBSteg.py -h
usage: LSBSteg.py [-h] [-image IMAGE] [-binary BINARY] [-steg-out STEG_OUT]
[-steg-image STEG_IMAGE] [-out OUT]
This python program applies LSB Steganography to an image and some type of
input
optional arguments:
-h, --help show this help message and exit
Hide binary with steg:
-image IMAGE Provide the original image
-binary BINARY The binary file to be obfuscated in the image
-steg-out STEG_OUT The resulting steganographic image
Reveal binary:
-steg-image STEG_IMAGE
The steganographic image
-out OUT The original binary
できた!
実行してみよう!
$ ./LSBSteg.py -steg-image online.png -out output.bin
0b101001101000101010000110100001101001111010011100111101101001000011010010110010001100101011100110110010101100011011100100110010101110100010010010110110100110100011001110011001101111101
2進数が出てくるのでこれをASCIIに変換してやると
#!/usr/bin/env python
f = open("output.bin","rb")
Bin = f.read()
Hex = hex(int(Bin,2))
print(Hex)
$ ./q9.py
0x534543434f4e7b48696465736563726574496d3467337dL
文字まで変換したかったけど、16進数からどうやってASCIIに変換するんだ?
オンラインツールを使った
SECCON{HidesecretIm4g3}
[Network-100pt] gettheflag
Question
パケットのキャプチャファイルからフラグを見つけよ
Answer
APIにアクセスして、{"result":"success","data":{"char":"S","last":true}}
のようなJSONデータを受信している
どうやらlast
がtrue
になってるのがフラグだな~
これは
$ strings gettheflag.pcap |grep true
すればフラグが出てくるそうだが、競技中はスクリプトを書いてフラグを取った(strings氏~)
ファイルをNetworkMinerでエキスポートしてスクリプトを実行した
#!/usr/bin/env python
import json
flag = ""
file = open("export/flag.php.json","rb")
data = file.read().decode("utf-8")
json_data = json.loads(data)
flag += json_data["data"]["char"]
for i in range(1,132):
file = open("export/flag.php["+str(i)+"].json","rb")
data = file.read().decode("utf-8")
json_data = json.loads(data)
if json_data["data"]["last"] == True:
flag += json_data["data"]["char"]
print(flag)
実行するとフラグが出てくる
$ ./q10.py
SECCON{42LbAwGV}
SECCON{42LbAwGV}
[Network-200pt] sample
Question
Answer
これも競技中は解けなかったもの
request
に注目してみると
Ping
標準のTTL
の長さの64
でも128
でもないので、なんか怪しい・・・
並べてみた
[61,61,61,80,66,64,64,76,75,120,77,102,107,100,70,112,75,108,68,108,108,97,122]
なんかASCIIコードっぽいな~
スクリプト書いてみよう
#!/usr/bin/env python
arr = [61,61,61,80,66,64,64,76,75,120,77,102,107,100,70,112,75,108,68,108,108,97,122]
string = ""
for i in arr:
string += chr(i)
print(string)
$ ./q11.py
===PB@@LKxMfkdFpKlDllaz
なんか違いそう・・・
う~んずらしたりするのかな?
#!/usr/bin/env python
import sys
arr = [61,61,61,80,66,64,64,76,75,120,77,102,107,100,70,112,75,108,68,108,108,97,122]
for i in range(-61,61):
string =""
for ch in arr:
string += chr(ch+i)
if "SECCON" in string:
print(string)
sys.exit()
$ ./q11.py
@@@SECCON{PingIsNoGood}
あった!!
SECCON{PingIsNoGood}
[Network-200pt] get the flag
Question
Answer
220 (vsFTPd 3.0.3)
USER seccon2016
331 Please specify the password.
PASS kyoto=butiful
530 Login incorrect.
SYST
530 Please login with USER and PASS.
USER seccon2016
331 Please specify the password.
PASS kyoto=beautiful
230 Login successful.
SYST
215 UNIX Type: L8
PORT 10,100,4,123,174,34
200 PORT command successful. Consider using PASV.
LIST
150 Here comes the directory listing.
226 Directory send OK.
QUIT
221 Goodbye.
こんな感じでFTPは平文でパスワードが流れる・・・
実際に、FTPでアクセスしてログインする
-r--r--r-- 1 0 0 2264 Nov 08 20:44 flag.zip
とのことなので、
flag.zipをダウンロードする
SECCON{Plain text communication is dangerous}
[Programming-100pt] megrep
Question
目grepの特訓をしてみよう。
Answer
そんなにBzEditorで開いてほしいんだな
はい・・・
SECCON{bsdbanner}
[Programming-100pt] x2.txt
Question
2倍になって文字化けしてしまったので、半分にしてみよう。
Answer
バイナリエディタで開いてみた
おそらくASCIIコードを2倍にしたんだな~
スクリプトを書いてみる
#!/usr/bin/env python
f = open("x2.txt","rb")
print "".join(map(lambda x:chr(ord(x) / 2),list(f.read())))
f.close()
$ ./q14.py
I have a pen. I have an apple. SECCON{lshift_or_rshift}!
流石に草
SECCON{lshift_or_rshift}
[Programming-200pt] decode the trapezoid QR code
Question
Answer
Gimpでまっすぐにしたら普通に読めた・・・Programingとは・・・
SECCON{The QR code system was invented by Denso Wave in Japan}
[Programming-100pt] sum primes
Question
暗号通信では素数が重要な要素として使われています。
その素数を使った計算問題です。
1番目の素数は2、
2番目の素数は3、
3番目の素数は5、
1番目から3番目までの素数の合計値は10です。
では、12345番目の素数から31337番目までの素数の合計値はいくつでしょう?
フラグは SECCON{合計値} です。「合計値」の部分を合計した数値に置き換えてください。
ちなみに、31337はeleetのLeet(ハッカー語)です。
Answer
スクリプトを書いてみる
追記
@shiracamusさんに修正版をいただきました
#!/usr/bin/env python
import math
def is_prime(x):
if x < 2: return False
if x == 2 or x == 3 or x == 5: return True
if x % 2 == 0 or x % 3 == 0 or x % 5 == 0: return False
prime = 7
step = 4
while prime <= math.sqrt(x):
if x % prime == 0: return False
prime += step
step = 6 - step
return True
sum_prime = 0
i = 2
num_prime = 0
while 1:
if num_prime > 31337:
break
if is_prime(i):
num_prime += 1
if 12345 <= num_prime <= 31337:
sum_prime += i
i += 1
print sum_prime
$ ./q16.py
4716549971
あってるかな?
SECCON{4716549971}
[Web-100pt] sessionhijack
Question
admin でログインして、フラグをゲットせよ
http://10.100.7.2
Answer
http://10.100.7.2
に接続し新規登録をした後ログインしてみてる。
cookieを見てみると、
JSESSIONID=70efdf2ec9b086079795c442636b55fb
となっているのでとりあえず、70efdf2ec9b086079795c442636b55fb
をgoogleで検索してみるとどうやらmd5のようだ。
http://www.kiyori.co.jp/md5reverse/
上記のサイトで70efdf2ec9b086079795c442636b55fb
を逆変換すると"17"ということが分かった。
おそらくuseridをmd5でハッシュ化したものをセッションとして使用していると考えられるので。
md5(1) = c4ca4238a0b923820dcc509a6f75849b
であるc4ca4238a0b923820dcc509a6f75849b
をEditThisCookie
などを用いてセットしてログインしてみるとflagが表示される。
SECCON{SequentialMD5}
[Trivia-100pt] blacked out PDF
Question
個人情報漏洩のお詫びのPDFファイルの中から隠されたフラグを見つけよう
Answer
黒塗りされているがコピーできてしまう
お客様各位
個人情報漏洩のお詫びについて
2016年11月12日
この度、弊社では本来外部に出てはならない個人情報がインターネット上で閲覧可能に
なっているとの外部からの連絡を受け、事実関係を調査いたしましたところ、サーバの設定
ミスにより2016年11月11日から11月12日まで、一般ユーザーがインターネッ
トから閲覧可能になっていたことが判明いたしました。
一時閲覧可能になっていた情報は、個人情報(氏名、郵便番号、住所)が含まれておりまい
たことから、情報流出の対象となった全ての皆様方には、個別に書面でお詫びと説明をさせ
ていただきました。情報が流出してしまいました皆様には、大変なご迷惑とご心配をおかけ
しましたこと、深くお詫び申し上げます。
なお、今回流出した項目は以下の通りです。
氏名 郵便番号 住所
坂田胡桃 769-2906 香川県東かがわ市川股 1-11-14
森下隆吾 922-0126 石川県加賀市山中温泉河鹿町 4-15
橋口清美 329-2337 栃木県塩谷郡塩谷町泉 1-6-2
笠井竹男 770-0832 徳島県徳島市寺島本町東 4-5 寺島本町東マンション 406
加賀真里 894-2403 鹿児島県大島郡瀬戸内町実久 2-1 実久スイート 304
飯島果凛 880-0927 宮崎県宮崎市源藤町 3-16-13 ガーデン源藤町 404
横溝常吉 210-0836 神奈川県川崎市川崎区大島上町 2-19-3
藤岡伊吹 899-5307 鹿児島県姶良郡蒲生町久末 1-20-2 久末タワー302
今野貞 871-0151 大分県中津市大悟法 1-18
平本由美子 922-0864 石川県加賀市大聖寺西栄町 1-19-11
↑偽物情報 111-1111 SECCON{kuronuri_ha_dame_zettai}
弊社では、これまでも個人情報取り扱い業務にあたっては、厳格な取り扱いを求め、情報管
理の徹底に努めてまいりましたが、このような情報流出が発生したことを踏まえ、今後は更
なる再発防止策を講じて再発防止に全力で取り組んでまいります。
株式会社セクコン
代表戸締役社長 竹迫悪範
黒塗りは絶対だめ
SECCON{kuronuri_ha_dame_zettai}
[Trivia-200pt] blacked out PDF again
Question
セキュリティ制限のかかったPDFファイルの中から隠されたフラグを見つけよう
Answer
今度はコピープロテクトがかかってる
即錠★PDFというソフトで解除できるようなので
解除した
そして同じようにコピーする
お客様各位
個人情報漏洩のお詫び(その2)について
2016年11月12日
この度、弊社では本来外部に出てはならない個人情報がインターネット上で閲覧可能に
なっているとの外部からの連絡を受け、事実関係を調査いたしましたところ、サーバの設定
ミスにより2016年11月11日から11月12日まで、一般ユーザーがインターネッ
トから閲覧可能になっていたことが判明いたしました。
一時閲覧可能になっていた情報は、個人情報(氏名、郵便番号、住所)が含まれておりまい
たことから、情報流出の対象となった全ての皆様方には、個別に書面でお詫びと説明をさせ
ていただきました。情報が流出してしまいました皆様には、大変なご迷惑とご心配をおかけ
しましたこと、深くお詫び申し上げます。
なお、今回流出した項目は以下の通りです。
氏名 郵便番号 住所
土井和人 708-1507 岡山県久米郡美咲町百々4-3
重松徳蔵 739-1741 広島県広島市安佐北区真亀 3-4-1 グリーン真亀 211
東海佳奈子 750-0074 山口県下関市彦島本村町 3-4-19 彦島本村町アパート 304
浅野綾子 285-0055 千葉県佐倉市瓜坪新田 3-19-7
秋葉良太 349-1114 埼玉県北葛飾郡栗橋町河原代 4-11
阪本紗弥 863-2424 熊本県天草市五和町手野 1-10-2 五和町手野の杜 103
沼田由依 300-2442 茨城県つくばみらい市西ノ台 2-15-8
鶴岡咲月 970-8018 福島県いわき市平四ツ波 2-9-17 平四ツ波ロイヤル 217
金野省三 891-6217 鹿児島県大島郡喜界町伊砂 1-2-5 コーポ伊砂 203
↑偽物情報 222-2222 SECCON{1234567890}
弊社では、これまでも個人情報取り扱い業務にあたっては、厳格な取り扱いを求めてまいり
ましたが、度重なる情報流出が発生したことを踏まえ、本日を情報管理体制の折り返し地点
とし、従業員一同再発防止策を読み上げ、全力で個人情報保護に取り組んでまいります。
株式会社セクコン
代表戸締役社長 竹迫悪範
SECCON{1234567890}
[Trivia-300pt] how much a fine?
Question
次に挙げる【行為】は犯罪に該当する可能性があるでしょうか?
以下に列挙する【選択肢】の中から最も可能性のある番号を選び、【フラグ形式】に変換して回答して下さい。
【行為】
a. 匿名電子掲示板サイトに、「京都すばる高校を爆破する。」と書き込んだ。
b. クラスメートの0点の答案用紙を撮影し、無断でfacebookに投稿し公開。
c. 交際相手(17歳)に、自分で裸の写真を撮影させ、LINEで送ってもらった。
d. フラれた腹いせに、元交際相手の名前と裸の画像をTwitterでツイー卜した。
e. 交際を断られ続けているのに、「つき合って」としつこくメールした。
【選択肢】
1. 無罪
2. 名誉設損罪 (罰則:懲役 3年以下、 罰金 50万円以下)
3. 著作権侵害 (罰則:懲役10年以下、 罰金1000万円以下)
4. 威力業務妨害罪 (罰則:懲役 3年以下、 罰金 50万円以下)
5. 児童ポルノ法違反 (罰則:懲役 3年以下、 罰金 300万円以下)
6. ストーカー規制法違反 (罰則:懲役 6ケ月以下、罰金 50万円以下)
7. 私事性的画像記録の被害防止法違反 (罰則:懲役 3年以下、 罰金 50万円以下)
【フラグ形式】
SECCON{(a.の選択番号)(b.の選択番号)(c.の選択番号)(d.の選択番号)(e.の選択番号)}
フラグ回答例: SECCON{12123}
Answer
a. 匿名電子掲示板サイトに、「京都すばる高校を爆破する。」と書き込んだ。・・・威力業務妨害罪
b. クラスメートの0点の答案用紙を撮影し、無断でfacebookに投稿し公開。・・・名誉設損罪
c. 交際相手(17歳)に、自分で裸の写真を撮影させ、LINEで送ってもらった。・・・児童ポルノ法違反
d. フラれた腹いせに、元交際相手の名前と裸の画像をTwitterでツイー卜した。・・・私事性的画像記録の被害防止法違反
e. 交際を断られ続けているのに、「つき合って」としつこくメールした。・・・ストーカー規制法違反
チームメイトに常識がないと言われた・・・
SECCON{42576}
[Trivia-100pt] acronym
Question
下記組織名・団体名のフルスペルを調べ、下線部の単語を下記フラグ形式に変換せよ。
組織名・団体名:
NISC: National center of Incident readiness and Strategy for ___(1)___
NICT: National Institute of Information and ___(2)___ Technology
IPA: Information-technology Promotion ___(3)___, Japan
JPCERT/CC: Japan Computer Emergency Response Team ___(4)___ Center
JC3:Japan ___(5)___ Control Center
JNSA: Japan Network Security ___(6)___
フラグ形式:
SECCON{(1)_(2)_(3)_(4)_(5)_(6)}
・括弧で囲まれた数字の部分を「組織名・団体名」の該当単語に置き換える
・単語はすべて小文字にする
・単語間はアンダーライン文字で接続する
Answer
ググった
NISC: National center of Incident readiness and Strategy for Cybersecurity
NICT: National Institute of Information and Communications Technology
IPA: Information-technology Promotion Agency, Japan
JPCERT/CC: Japan Computer Emergency Response Team Coordination Center
JC3:Japan Cybercrime Control Center
JNSA: Japan Network Security Association
SECCON{cybersecurity_communications_agency_coordination_cybercrime_association}
おわりに
サイバー甲子園は交通費支給・懇親会が豪華なのは、スポンサー様のおかげです。
スポンサー様ありがとうございます!