본문 바로가기

SYSTEM HACKING

[SWING] Pwnable 06 - Path Traversal

Path Traversal

권한 없는 경로에 프로세스가 접근할 수 있는 취약점

리눅스 파일 시스템이 아닌 서비스 로직 관점에서의 권한

사용자가 접근하려는 경로에 대한 검사가 미흡하여 발생

임의 파일 읽기 및 쓰기의 수단을으로 활용될 가능

 

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

const int kMaxNameLen = 0x100;
const int kMaxPathLen = 0x200;
const int kMaxDataLen = 0x1000;
const char *kBasepath = "/tmp";

int main() {
  char file_name[kMaxNameLen];
  char file_path[kMaxPathLen];
  char data[kMaxDataLen];
  FILE *fp = NULL;

  // Initialize local variables
  memset(file_name, '\0', kMaxNameLen);
  memset(file_path, '\0', kMaxPathLen);
  memset(data, '\0', kMaxDataLen);

  // Receive input from user
  printf("File name: ");
  fgets(file_name, kMaxNameLen, stdin);

  // Trim trailing new line
  file_name[strcspn(file_name, "\n")] = '\0';

  // Construct the `file_path`
  snprintf(file_path, kMaxPathLen, "%s/%s", kBasepath, file_name);

  // Read the file and print its content
  if ((fp = fopen(file_path, "r")) == NULL) {
    fprintf(stderr, "No file named %s", file_name);
    return -1;
  }

  fgets(data, kMaxDataLen, fp);
  printf("%s", data);

  fclose(fp);

  return 0;
}

 

 

Q. 위 코드에서 /etc/passwd 를 읽을 수 있는 입력은?

A. File name: ../etc/passwd

 

 

 

서버의 중요한 데이터를 공격자에게 노출시키는 취약점

 

파일에 데이터를 쓸 수 있다면,

/etc/passwd 조작 -> root 비밀번호 제거 or ssh 설정 변경도 가능