[DreamHack] [Pwnable] Return to Library

bof 풀다보니 기억이 새록새록 나서 그냥 RTL 진행하기로 했다.

RTL(Return To Library) 기법이란?

스택이 실행 불가능하게(NX bit) 설정되어 있어 쉘코드를 삽입할 수 없는 상황에서 사용하는 대표적인 공격 기법이다.

핵심 개념

취약점 분석

rtl 바이너리 파일, rtl.c 소스 코드 두개가 존재한다.

따라서, 바로 소스 코드부터 확인해보겠다.

// Name: rtl.c
// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie

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

const char* binsh = "/bin/sh";

int main() {
  char buf[0x30];

  setvbuf(stdin, 0, _IONBF, 0);
  setvbuf(stdout, 0, _IONBF, 0);

  // Add system function to plt's entry
  system("echo 'system@plt'");

  // Leak canary
  printf("[1] Leak Canary\\n");
  printf("Buf: ");
  read(0, buf, 0x100);
  printf("Buf: %s\\n", buf);

  // Overwrite return address
  printf("[2] Overwrite return address\\n");
  printf("Buf: ");
  read(0, buf, 0x100);

  return 0;
}

전체 소스코드는 이런식이고, 취약점이 있는 곳이나 공격 기법을 정하는 부분 위주로 분석을 진행하겠다.

const char* binsh = "/bin/sh";
  char buf[0x30];
	setvbuf(stdin, 0, _IONBF, 0);