Skip to content

Instantly share code, notes, and snippets.

@nikuyoshi
Last active February 3, 2016 17:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nikuyoshi/e65cc18879e3234a7e94 to your computer and use it in GitHub Desktop.
Save nikuyoshi/e65cc18879e3234a7e94 to your computer and use it in GitHub Desktop.
2014/05/18 DEFCON参加記録

DEFCON

開催日時

2014/5/18〜5/19

情報共有

IRC, サイボウズ

チーム

mochigoma

一日目、二日目午前まで予定があったため、私が参加したのは二日目の19日12時から。 事前に NTTコムの予選参加レポート 、Writeupなどを確認してWeb系ならまだ行けそうだな、という感覚で臨んだ。大会1週間を切ってからDEFCONに参加することになったため、準備不足感が半端ない。 バイナリ問題全然解けんぞ。。。

カテゴリに関して

本番二日目、問題に手をつけ始める前にまずカテゴリがどうなっているのか確認した。 https://2014.legitbs.net/scoreboard/categories を参照のこと。

こんな問題が出題されるのかなーと思って自分用にメモしておいた。下記に記載する。

  • Baby’s First
    • 最初に開かれている問題
  • Duchess
    • ソフトウェア関連の問題
  • Gynophage
    • バイナリ関連の問題
  • HJ
    • どんな分野の問題が出てくるのか分からなかった。ホラー映画に出てくるような山小屋に住んでいる、ひげの生えたフランス言語学の熱狂者?
  • Jymbolia
    • パズル問題
  • Lightning
    • 常軌を逸した考えが必要な問題
  • Selir
    • ネットワーク関連の問題
  • Sirgoon
    • 電波、電気の復調に関する問題? 暗号の復号化なんですかね。
  • Vito Genovese
    • 暗号問題

ソフトウェア関連問題がこの中で解けそうだったので、Duchessから取り組もうと思ったが、19日13時時点でまだロックされた状態だった。

Baby’s First

19日12時時点でチームメンバーに全て解かれていたため、何も手をつけなかった。

Gynophage

polyglot

問題文

Just open /flag, and write it to stdout. How hard could it be?

polyglot_9d64fa98df6ee55e1a5baf0a170d3367.2014.shallweplayaga.me 30000

Password: w0rk_tHaT_tAlEnTeD_t0nGu3

とりあえずNetCatで繋いでみる。

$ nc polyglot_9d64fa98df6ee55e1a5baf0a170d3367.2014.shallweplayaga.me 30000
Password: w0rk_tHaT_tAlEnTeD_t0nGu3

Give me shellcode.  You have up to 0x1000 bytes.  All GPRs are 0.  PC is 0x41000000.  SP is 0x42000000.

0Throwing shellcode against linux26-x86.(http://services.2014.shallweplayaga.me/polyglot_9d64fa98df6ee55e1a5baf0a170d3367)
xx
Didn't send back the right value.  Fail.

実行結果に、 http://services.2014.shallweplayaga.me/polyglot_9d64fa98df6ee55e1a5baf0a170d3367 が書かれていたため、 wget http://services.2014.shallweplayaga.me/polyglot_9d64fa98df6ee55e1a5baf0a170d3367 を叩いてみたら実行ファイルを手に入れられた。 file コマンドを叩いてみたら、 ELF 32-bit LSB executable ということが分かったので、 objdump -Dreadelf -a で解析してみるものの、これといった手がかりが掴めなかったため、途中で断念した。

sftp

問題文

Such a simple daemon.

http://services.2014.shallweplayaga.me/sftp_bf28442aa4ab1a4089ddca16729b29ac

sftp_bf28442aa4ab1a4089ddca16729b29ac.2014.shallweplayaga.me:115

さっそくNetCatで繋いでみた。

$ nc sftp_bf28442aa4ab1a4089ddca16729b29ac.2014.shallweplayaga.me 115
+LegitimateBusinessSyndicate SFTP

この状態でテキトーに文字入力をしてみると、 -Not Logged In. と表示された。どうやらログインをしなければ次に進めない様子。 wget http://services.2014.shallweplayaga.me/sftp_bf28442aa4ab1a4089ddca16729b29ac でバイナリをゲット後、file コマンドでどのようなファイルか確認した。

$ file sftp_bf28442aa4ab1a4089ddca16729b29ac
sftp_bf28442aa4ab1a4089ddca16729b29ac: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, stripped

今回もELF 32bitのため、IDAで解析をしていった。 まずログインをするのにパスワードが必要だと思い、Hex ViewでPASSを検索していったところ、怪しい箇所を発見した。

image

defcon2014と入力したらいけんじゃね?と思ったらダメで、チームメイトが先にバイナリ解析をして PASS defcon2014 と入力すれば良いと教えてくれた。慣れない作業で終始辛い。。。

$ nc sftp_bf28442aa4ab1a4089ddca16729b29ac.2014.shallweplayaga.me 115
+LegitimateBusinessSyndicate SFTP ServicePASS defcon2014
! Logged in

今回バイナリ解析ができないとチームに貢献できないことが分かったので、 Hacking: 美しき策謀 第2版アナライジング・マルウェア を早速買って帰ってきて読み始めている。 CTF終了後のWriteupを読み進めやすくするためにも基礎となる部分をこの本で補いたい。

感想

DEFCON CTF、全く歯が立たなかったけど純粋に面白かった。 周りの方と一緒に取り組んで非常に刺激を受けたし、セキュリティ分野の引き出しが増えたので、参加して本当に良かった。 次回も参加したい。最低一問は解けるようになりたいっすね。 参加者各位、本当に2日間お疲れ様でした。

番外

ざっくりとしたメモ書き

gdbの使い方

disas で逆アセンブル

(gdb) disas main
Dump of assembler code for function main:
   0x08048180 <+0>: push   %ebp
   0x08048181 <+1>: mov    %esp,%ebp
   0x08048183 <+3>: sub    $0x18,%esp
   0x08048186 <+6>: and    $0xfffffff0,%esp
   0x08048189 <+9>: mov    $0x0,%eax
   0x0804818e <+14>: add    $0xf,%eax
   0x08048191 <+17>: add    $0xf,%eax
   0x08048194 <+20>: shr    $0x4,%eax

break でブレークポイントを設定

(gdb) break *0x080481dd
Breakpoint 1 at 0x80481dd

run でプログラムの実行

(gdb) run
Starting program: /home/nikuyoshi/Downloads/polyglot_9d64fa98df6ee55e1a5baf0a170d3367
Breakpoint 1, 0x080481dd in main ()

info でブレークポイントに関する情報を表示。

(gdb) info register
eax            0xffffd908 -9976
ecx            0x804d928 134535464
edx            0x804d928 134535464
ebx            0x804d928 134535464
esp            0xffffd8e0 0xffffd8e0
ebp            0xffffd918 0xffffd918
esi            0xffffdb1c -9444
edi            0x0 0
eip            0x80481dd 0x80481dd <main+93>
eflags         0x296 [ PF AF SF IF ]
cs             0x23 35
ss             0x2b 43
ds             0x2b 43
es             0x2b 43
fs             0x0 0
gs             0x0 0

x でメモリの内容を表示

(gdb) x/x 0xffffd908
0xffffd908: 0x00000005

IDA Pro free

逆アセンブルをするのに使用した。 Macで無償版が無いようだったので、Windowsにインストールした。

その他

32bitバイナリ

32bitで動くバイナリを64bit環境で気付かずに実行しててハマった。

$ ./sftp_bf28442aa4ab1a4089ddca16729b29ac
zsh: そのようなファイルやディレクトリはありません: ./sftp_bf28442aa4ab1a4089ddca16729b29ac

実行ファイルあるのにメッセージがこれで、なんじゃコレってなってたら、32bit用のバイナリ実行用のパッケージをインストールすれば問題ないことが分かった。

$ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
$ ./sftp_bf28442aa4ab1a4089ddca16729b29ac
+LegitimateBusinessSyndicate SFTP Service

参考: http://askubuntu.com/questions/107230/what-happened-to-the-ia32-libs-package

擬似コード

IDAでバイナリを追いながら、擬似コードを作成していくと良いとのこと。 http://www.ntt.com/wideangle_security/images/DEFCON_CTF.pdf

int ff(){
    do {
        get_meta();
    } while (handle_checks());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment