[WEB] command injection
2023. 8. 30. 18:34ㆍSTUDY
320x100
injection: 악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법
command injection: 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점
- 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 발생
- 리눅스 셸 프로그램이 지원하는 다양한 메타문자로 인해, 이용자의 입력을 제대로 검사하지 않으면 임의 명령어가 실행될 수 있다
메타문자 | 설명 | ex |
' ' | 명령어 치환 ' ' 안에 들어있는 명령어를 실행한 결과로 치환 |
$ echo `echo theori`theori |
$() | 명령어 치환 $() 안에 들어있는 명령어를 실행한 결과로 치환. 중복 사용 가능 ( echo $(echo $(echo theori)) ) |
$ echo $(echo theori)theori |
&& | 명령어 연속 실행 한 줄에 여러 명령어 사용하고 싶을 때 사용. 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행. (local and) |
$ echo hello && echo theorihellotheori |
| | | 명령어 연속 실행 한 줄에 여러 명령어 사용하고 싶을 때 사용. 앞 명령어에서 에러가 발생해야 뒷 명령어 실행. (local or) |
$ cat / || echo theori cat: /: Is a directory theori |
; | 명령어 구분자 한 줄에 여러 명령어 사용하고 싶을 때 사용. 앞 명령어 에러 유무와 관계 없이 뒷 명령어 실행 |
$ echo hello ; echo theorihellotheori |
| | 파이프 앞 명령어의 결과가 뒷 명령어의 입력으로 들어감. |
$ echo id | /bin/shuid=1001(theori) gid=1001(theori) groups=1001(theori) |
다음은 Command Injeciton이 발생하는 코드이다. "/flag" 파일을 읽을 수 있게 하는 코드는?
@app.route('/ping')
def ping():
ip = request.args.get('ip')
return os.system(f'ping -c 3 "{ip}"')
"; cat /fl*; "
320x100
320x100
'STUDY' 카테고리의 다른 글
[WEB] web (0) | 2023.10.12 |
---|---|
[SYSTEM] OS (0) | 2023.10.11 |
computer science (2) | 2023.10.11 |
Docker (0) | 2023.10.11 |
[SYSTEM] computer architecture (0) | 2023.08.29 |