EYEN

[드림핵 웹 해킹] STAGE 7 : COMMAND INJECTION 본문

Wargame/Web

[드림핵 웹 해킹] STAGE 7 : COMMAND INJECTION

EYEN 2022. 10. 31. 11:01

#1 서론

  1. 언어별 시스템 함수

: 전달된 인자를 셸 프로그램에 전달해 명령어를 실행

예)  system(“cat /etc/passwd”)호출→ 셸 프로그램에서 cat /etc/passwd을 수행

  1. PHP의 system
  2. Node JS의 child_process
  3. 파이썬의 os.system
  4. Injection: 악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법
  • SQL Injection은 이용자의 입력을 데이터베이스 쿼리로 실행하게 하는 취약점
  • Command Injection은 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점

#2 Command Injection

이용자의 입력을 제대로 검사하지 않아서 리눅스 셸 프로그램이 지원하는 다양한 메타문자를 이용해 추가적인 명령을 내릴 수 있을 때 발생

시스템 함수를 사용하면 이용자의 입력을 소프트웨어의 인자로 전달할 수 있다.

:예) 파이썬으로 개발된 웹 애플리케이션

임의 IP에 ping을 전송→os.system(“ping [user-input]”)

임의 파일을 읽기→ os.system(“cat [user-input]”)

리눅스 셸 프로그램이 지원하는 다양한 메타 문자( &&, ;, | )를 이용해 여러 개의 명령어를 연속으로 실행시켜 셸을 획득할 수 있다

     
`` 명령어 치환 ``안에 들어있는 명령어를 실행한 결과로 치환됩니다.  
$() 명령어 치환$() 안에 들어있는 명령어를 실행한 결과로 치환됩니다. 이 문자는 위와 다르게 중복 사용이 가능합니다 $ echo $(echo theori)theori

 

이러한 취약점을 막으려면 입력 값에 대해 메타 문자의 유무를 검사하거나 시스템 메타 문자를 해석 하지 않고 그대로 사용하는 함수를 사용해야 한다.