프로그램을 개발할 때 어떤 기능을 구현함에 있어서,
스스로 코드를 작성하기보다 system 함수로 이미 설치된 소프트웨어를 사용하는 것이 훨씬 쉽다는 것은 자명하다.
그러나 함수의 인자를 셸 명령어로 전달하기에, 명령어를 실행해주는 함수를 잘못 사용하면 취약점이 발생한다.
Command Injection
사용자의 입력을 시스템 명령어로 실행되게 하는 것
명령어를 실행하는 함수에 사용자가 임의의 인자를 전달할 수 있을 때 발생
임의 IP에 ping을 전송하기: system("ping [user-input]")
임의 파일 읽기: system("cat [user-input]")
사용자의 입력을 제대로 검사하지 않으면 메타 문자 때문에 임의 명령어가 실행
ping [user-input] 실행 시 공격자가 a; /bin/sh 를 전달하면,
ping a; /bin/sh 가 되어 ping을 실행하고 sh를 실행해 셸을 획득하게 된다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int kMaxIpLen = 36;
const int kMaxCmdLen = 256;
int main() {
char ip[kMaxIpLen];
char cmd[kMaxCmdLen];
// Initialize local vars
memset(ip, '\0', kMaxIpLen);
memset(cmd, '\0', kMaxCmdLen);
strcpy(cmd, "ping -c 2 ");
// Input IP
printf("Health Check\n");
printf("IP: ");
fgets(ip, kMaxIpLen, stdin);
// Construct command
strncat(cmd, ip, kMaxCmdLen);
printf("Execute: %s\n",cmd);
// Do health-check
system(cmd);
return 0;
}
IP로 127.0.0.1 입력 -> 정상 작동
; 을 메타문자로 사용해 셸을 실행
ping 뒤에 /bin/sh 실행
'SYSTEM HACKING' 카테고리의 다른 글
[SWING] Pwnable 06 - Path Traversal (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 |