본문 바로가기

Security Study/Web

[Dreamhack] Command Injection

ServerSide: Command Injection

1. Command Injection

1.1. Command Injection

인젝션(Injection)

악의적인 데이터를 프로그램에 입력하여 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법

Command Injection

이용자의 입력을 시스템 명령어로 실행하게 하는 취약점

  • 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 발생
  • 시스템 함수를 사용하면 이용자의 입력을 소프트웨어의 인자로 전달할 수 있음
  • 파이썬으로 개발된 웹 애플리케이션에서 입력한 임의 IP에 ping을 전송하고 싶다면 os.system("ping[user-input]")을, 임의 파일을 읽고 싶다면 os.system("cat[user-input")등의 형태로 시스템 함수를 사용할 수 있음
  • 함수를 사용할 때, 이용자의 입력을 제대로 검사하지 않으면 임의 명령어가 실행될 수 있음
  • 리눅스 셸 프로그램이 지원하는 다양한 메타 문자 때문
  • 시스템 함수는 셸 프로그램에 명령어를 전달하여 실행하는데, 셸 프로그램은 다양한 메타 문자를 지원

메타 문자

메타 문자 설명 Example
`` 명령어 치환
`` 안에 들어있는 명령어를 실행한 결과로 치환
$ echo `echo theori`
theori
$() 명령어 치환
$()안에 들어있는 명령어를 실행한 결과로 치환 중복 사용이 가능(echo $(echo $(echo theori)))
$ echo $(echo theori)
theori
&& 명령어 연속 실행
한 줄에 여러 명령어를 사용하고 싶을 때 사용 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행(Logical And)
$ echo hello && echo theori hello
theori
|| 명령어 연속 실행
한 줄에 여러 명령어를 사용하고 싶을 때 사용 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행(Logical Or)
$ cat / || echo theori
cat: /: Is a directory
theori
; 명령어 구분자
한 줄에 여러 명령어를 사용하고 싶을 때 사용 ;은 단순히 명령어를 구분하기 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 뒷 명령어를 실행
$ echo hello ; echo theori
hello
theori
| 파이프
앞 명령어의 결과가 뒷 명령어의 입력으로 들어감
$ echo id | /bin/sh
uid=1001(theori) gid=1001(theori) groups=1001(theori)

1.2. Command Injection 실습

@app.route('/ping')
def ping():
	ip = request.args.get('ip')
	return os.system(f'ping -c 3 {ip}')
  • URL 쿼리를 통해 전달되는 ip값을 ping 명령어의 인자로 전달
  • 127.0.0.1을 입력하면 의도한대로 프로그램이 작동
  • 공격자는 입력값이 명령어의 일부로 실행되는 것을 확인하고, Command Injection을 시도할 수 있음
  • id명령어를 실행

1.3. Command Injection 실습 풀이

  • id명령어를 실행하기 위해서는 메타 문자를 사용해야 함

메타 문자를 사용한 명령줄

$ ping -c 3 1.1.1.1; id
$ ping -c 3 1.1.1.1 && id
$ ping -c 3 1.1.1.1 | id
  • 메타 문자를 사용해 id명령어를 실행하는 명령줄
  • 명령줄은 인터렉티브 모듈에 삽입해보면 id명령어가 주입된 모습을 확인할 수 있음
반응형

'Security Study > Web' 카테고리의 다른 글

[Dreamhack] File Vulnerability  (0) 2024.05.13
[Dreamhack] SQL Injection  (2) 2024.02.20
[Dreamhack] Cross Site Request Forgery (CSRF)  (2) 2024.02.14
[Dreamhack] Cross-Site-Scripting (XSS)  (2) 2024.02.09
[Dreamhack] Cookie & Session  (2) 2024.02.07