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 설정 변경도 가능
'SYSTEM HACKING' 카테고리의 다른 글
[SWING] Pwnable 06 - Command Injection (0) | 2023.11.25 |
---|---|
[SWING] Pwnable 06 - Type Error (0) | 2023.11.25 |
[SWING] Pwnable 05 - Tcache Poisoning (0) | 2023.11.19 |
[SWING] Pwnable 05 - Double Free Bug (0) | 2023.11.19 |
[SWING] Pwnable 04 - Use After Free (0) | 2023.11.11 |