SECON 2016 Online CTF-Write Up-

f:id:akashisn:20181027131621p:plain

SECCONとは・・・http://2016.seccon.jp/about/

情報セキュリティをテーマに多様な競技を開催する情報セキュリティコンテストイベントです。

SECCONオンライン予選「SECCON 2016 Online CTF」に参加してきました

この記事は「CTF Advent Calendar 2016」の13日目の記事です

今回はあまり解けていないのでそのあたりは・・・

f:id:akashisn:20181027131647p:plain

今回は解いている人が多いこの3問しか解けませんでした・・・

BiPhone(@Akashi_SN,@Snow_Poijio,@yamasy1549)で出場し、

f:id:akashisn:20181027131703p:plain

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]}.

voip.pcap

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 

memoryanalysis.zip

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_}

感想

ほんとにまだまだということがわかったので精進します・・・

友利奈緒になりたい

友利奈緒 f:id:akashisn:20181027131121p:plain 彼女はGoogleで検索したときに”友利奈緒 seccon”とサジェストされるようにCTFerにとっての憧れである

この記事はそんな彼女になろうとした話である・・・・

というわけで、これは”友利奈緒 Advent Calendar 2016”の11日目の記事です。

はじめ

“友利奈緒”が文部科学大臣賞を受賞!

f:id:akashisn:20181027131249j:plain

画像はhttp://www.data-max.co.jp/280203_knk_1/より

セキュリティの興味がわき始めたときにこのニュースを知り友利奈緒に憧れるようになった いつか友利奈緒でセキュリティコンテストに出たいと思っていたが、チャンスはあったもののなかなか一歩を踏み出せなかった・・・

そして、

やっと踏ん切りがついた

友利奈緒になるために

色々調べてみてウィッグは間に合うけど制服は間に合いそうになかったので、出品者に直接お願いすることに

あぁぁぁぁ~~~~

うわぁ~ん間に合わないよう・・・

すると、

f:id:akashisn:20181027131426p:plain

女神様~🙏🙏🙏

これで友利奈緒になるための準備ができた

注文した制服は出品者が優しかったおかげで返金することができた

友利奈緒になる

前日の集合時間・・・

f:id:akashisn:20181027131447p:plain

うわぁぁぁ~やってしまった~

ほんとにご迷惑をおかけしました

・・・なんとか1本あとの特急で高知につくことができた

試合開始・・・

サーバーの再起動を待っている間にCharlotte鑑賞会が始まった

ちゃんとポッキーも渡した

結果、特別賞をもらいました!

このツイートをしたら、

本物のTomoriNaoのTomoriNaoさんにアドバイスをもらった🙏

ふぇぇぇ~

頑張ります!

さいご

みんなも友利奈緒になろう!

Nexus5Xを工場出荷時初期化~Xposed導入まで

今まではAndroid 7.0 NougatをRoot化して使っていたのだが、最近カメラが落ちる、起動に時間がかかるなどの不具合が出ていた。 更に、相変わらずXposedの開発が終わらないので一旦Android 6.0 Marshmallowに戻したので、その時のメモ

自己責任でお願いします

環境

  • Android 7.0 Nougat
  • Androidセキュリティパッチレベル:2016年11月5日

手順

  1. ファクトリーイメージのダウンロード
  2. Android SDK(イメージ書き込みの際に必要)のインストール
  3. ブートローダーアンロックのための前準備
  4. ブートローダーアンロック(非Rootの場合)
  5. イメージ書き込み
  6. 端末の初期設定
  7. カスタムリカバリの書き込み(Root化する場合)
  8. SuperSUのインストール(Root化する場合)
  9. Xposedの導入

ファクトリーイメージのダウンロード

まずAndroid 7.0 NougatAndroid 6.0 Marshmallowにダウングレードする。

NexusシリーズはGoogleがファクトリーイメージを公開してるので、それを書き込むことで実現する。

Factory Images for Nexus and Pixel Devices

ここで自分に合ったバージョンを選ぶ

今回は"bullhead" for Nexus 5X 6.0.1 (MTC20K)をダウンロードした。

バージョンの数字のあとに書いてる文字列はビルド番号を表している。

f:id:akashisn:20181027125452p:plain

Platform Toolsの入手 (2017/05/26追記)

GoogleからPlatform Toolsのみをダウンロードするリンクが公開されたのでそこから入手する

SDK Platform Tools Release Notes

ここから各プラットフォームに応じてダウンロードして展開する

これからはplatform-tools-latest-windows\platform-tools以下で作業する

fastbootなどは各自.\fastboot.exeなどに読み替えてください

ブートローダーアンロックのための前準備

ブートローダーをアンロックするとインストールしているアプリなどが削除されるので、バックアップを取る。

また、設定→開発向けオプションからUSBデバッグ、OEMロック解除をそれぞれ設定する。(写真ではもうすでにロック解除されてるので選択できなくなっている。)

設定できたらシャットダウンしておく。

f:id:akashisn:20181027125720p:plainf:id:akashisn:20181027125615p:plain

ブートローダーアンロック

電源ボタンと音量ボタンの下を同時に押し続けて、ブートローダーを起動する

f:id:akashisn:20181027125832j:plain

DEVICE STATE - lockedとなっているのでこれを解除する

ブートローダーを起動した状態で、PCに接続して

コマンドプロンプトを開き

$ fastboot oem unlock

と打ち込み実行する。

f:id:akashisn:20181027125923j:plain

するとこういう画面が表示されるので、音量ボタンでYes Unlock bootloader (may void warranty)を選択し電源ボタンで確定する

$ fastboot oem unlock
...
OKAY [233.564s]
finished. total time: 233.565s

f:id:akashisn:20181027130013j:plain

DEVICE STATE - unlockedとなれば解除成功

ファクトリーイメージの書き込み

先程ダウンロードしたbullhead-mtc20k-factory-4a950470.zipを解凍する

bullhead-mtc20k\image-bullhead-mtc20k.zipこれも解凍する

bullhead-mtc20k\ここのディレクトリでShiftを押しながら右クリックして

コマンドウィンドをここで開く(w)を選択しコマンドプロンプトを開く

f:id:akashisn:20181027130130p:plain

次のコマンドを実行する[#]以下はコメントなので実行しない

$ 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で起動する

f:id:akashisn:20181027130447j:plain

書き込み権限を与えますかと出てくるのでスワイプして許可する

f:id:akashisn:20181027130523j:plain

メインメニュー

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を選択し、スワイプしてインストール。

f:id:akashisn:20181027130633j:plainf:id:akashisn:20181027130636j:plain

完了したらReboot Systemから再起動

f:id:akashisn:20181027130724j:plain

Androidが起動したら、アプリにSuperSU Freeが追加されてることを確認

f:id:akashisn:20181027130805p:plain

これでRoot権限が取得できた!

Xposedの導入

リカバリーモードで起動しておく

Nexus5X/Marshmallowsdk23/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の構造

f:id:akashisn:20181027124844p:plain

chunithm.dbの中身

f:id:akashisn:20181027124909p:plain

実行してみよう!

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'・・・なんだ?

Pythonを嫌いになりかけてたとき神リプが送られてきた

神様🙏🙏🙏

つまりファイル名が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-mod_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が液晶の不具合かで、画面がずっと暗いままっだったので、新しいパソコンを買ってもらいました!

これからが大変だった・・・

届いてすぐブルースクリーンになり・・・

挙句には

エクスプローラーとかが起動しなくなっt・・・

辛かった・・・

なんとかドライバ関係を解決しようと奮闘し、気づいたら3時・・・

相方のsnowと駅に8時半に待ち合わせしてたのだが・・・

f:id:akashisn:20181027124603p:plain

ごめんなさい!!!

電車の時間は余裕を持ってて、良かった・・・

京都は新幹線で通過するぐらいだから実質初めて来た

お昼はマックで食べたのだが、注文時、

・・・うん、とにかく会場につくと、

机に本がおいてあった(ありがとうございます!)

でも、CTF forビギナーズ 2016博多で3位になって貰ったんだった・・・

(あとでスタッフで美味しくいただきました)

結構奮闘して結果4位でした・・・

@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コマンドに秘められた謎を解け!

sl.zip

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コマンド

strings.txt

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/

やってみた

img

できた

SECCON{57577}

[Binary-300pt] fakeransom

Question

お願い助けて!!私の大事なファイルが暗号化されてしまったの!

binary300.zip

Answer

[Binary-200pt] guess the flag

Question

コマンドを実行し、フラグ文字列を当ててください。

フラグ文字列は SECCON{ で始まりますよ。

guessflag.zip

Answer

$ strings -e L guessflag
SECCON{Piece of cake!?}

stringsすごすぎ

SECCON{Piece of cake!?}

[Crypto-100pt] gokai?

Question

以下の文字列を頑張ってデコードしてみよう。
Vm14U1ExWXhTa2RTV0dSUVZsUnNjMVJWVm5kUk1WcFZVV3hhVG1GNlZrcFVWVkYzVUZFOVBRPT0=

Answer

5回Base64でデコードしてやる

q6.py

#!/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っぽいのでスクリプトをいい感じに書いてやる

q7.py

#!/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 です。

opensslcipher.zip

Answer

opensslコマンドで暗号化したそうなので、どんな暗号化方式が使えるのか調べてみる

$ openssl list-cipher-commands > crypto.txt

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

なるほど・・・

ブルートフォースすればよさそう

q8.py

#!/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.

online.png

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

$ ./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

output.bin

0b101001101000101010000110100001101001111010011100111101101001000011010010110010001100101011100110110010101100011011100100110010101110100010010010110110100110100011001110011001101111101

2進数が出てくるのでこれをASCIIに変換してやると

q9.py

#!/usr/bin/env python

f = open("output.bin","rb")
Bin = f.read()
Hex = hex(int(Bin,2))
print(Hex)
$ ./q9.py
0x534543434f4e7b48696465736563726574496d3467337dL

文字まで変換したかったけど、16進数からどうやってASCIIに変換するんだ?

http://singoro.net/16henkan/

オンラインツールを使った

SECCON{HidesecretIm4g3}

[Network-100pt] gettheflag

Question

パケットのキャプチャファイルからフラグを見つけよ

gettheflag.pcap

Answer

APIにアクセスして、{"result":"success","data":{"char":"S","last":true}}のようなJSONデータを受信している

どうやらlasttrueになってるのがフラグだな~

これは$ strings gettheflag.pcap |grep trueすればフラグが出てくるそうだが、競技中はスクリプトを書いてフラグを取った(strings氏~)

ファイルをNetworkMinerでエキスポートしてスクリプトを実行した

q10.py

#!/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

sample.pcap

Answer

これも競技中は解けなかったもの

requestに注目してみると

img

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

なんか違いそう・・・

う~んずらしたりするのかな?

q11.py

#!/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

ftp.zip

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をダウンロードする

flag.png

SECCON{Plain text communication is dangerous}

[Programming-100pt] megrep

Question

目grepの特訓をしてみよう。

megrep.zip

Answer

img

そんなにBzEditorで開いてほしいんだな

img1

はい・・・

SECCON{bsdbanner}

[Programming-100pt] x2.txt

Question

2倍になって文字化けしてしまったので、半分にしてみよう。

x2.txt

Answer

バイナリエディタで開いてみた

image

おそらくASCIIコードを2倍にしたんだな~

スクリプトを書いてみる

q14.py

#!/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

qrcode.png

Answer

Gimpでまっすぐにしたら普通に読めた・・・Programingとは・・・

img

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さんに修正版をいただきました

q16.py

#!/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

であるc4ca4238a0b923820dcc509a6f75849bEditThisCookie

などを用いてセットしてログインしてみるとflagが表示される。

SECCON{SequentialMD5}

[Trivia-100pt] blacked out PDF

Question

個人情報漏洩のお詫びのPDFファイルの中から隠されたフラグを見つけよう

owabi1.pdf

Answer

img

黒塗りされているがコピーできてしまう

お客様各位
個人情報漏洩のお詫びについて
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ファイルの中から隠されたフラグを見つけよう

owabi2.protected.pdf

Answer

今度はコピープロテクトがかかってる

即錠★PDFというソフトで解除できるようなので

解除した

owabi2.protected.unlocked.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}

おわりに

サイバー甲子園は交通費支給・懇親会が豪華なのは、スポンサー様のおかげです。

スポンサー様ありがとうございます!