본문 바로가기

SYSTEM HACKING

[SWING] Pwnable 06 - Command Injection

프로그램을 개발할 때 어떤 기능을 구현함에 있어서,

스스로 코드를 작성하기보다 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