들어가며
서론
우리가 프로그램을 개발할떄, 코드를 작성하는 것보다
이미 설치된 소프트웨어를 사용하는 것이 더 쉬울 때가 있따.
뭐, 파일 내용출력하는 셸프로그랢을 작성에서 파일 출력 코드를 직점 작성하느게 아니라,
시스템에 있는 cat을 활용하는 예가 있다.
이러한 이유로 c/c++ 프로그래밍에선 system 함수를 사용한다.
system 함수는 전달된 인자를 셸프로그렘애 보내서 실행한다. (system("cat flag") == 쉘에서 cat flag )
하지만 함수의 인자를 셸에 명령어로 전달 하는 것에서 취약점으로 이어지기도 한다.
Command Injection
Command Injection
인젝션(Injection)
: 악의적인 데이터를 입력해서 시스템 명령어, 코드, 데이터 베이스 쿼리(DB 조작) 등으로 실행되게 하는 기법을 말한다.
여기서 사용자 입력을 시스템 명령어로 실행하는 것이 command injection 이다.
그리고 이 command injection은 사용자가 인자를 명령어를 실행하는 함수에 전달이 가능할 때 발생한다.
(system 함수 같은 사용자의 입력을 전달하는것들에서 발생한다.)
여기서 사용자의 입력을 제대로 검사하지 않으면 문제가 된다.
👇아래는 셸 프로그렘이 지원하는 메타 문자들 이다.
여기서 아주 나이스 한 것들은 &&, ;, | 이것 등 이다.
여러개의 명령어를 사용할 수 있게 해주는 친구들 이다.
이러 문제로 pint [user-input]을 실행했을 때, a; /bin/sh를 전달해서 ping a를 하고 /bin/sh를 할 수도 있다.
마치며
command injection 을 알았고 단순한 취약점이지만 치명적이다.
👇 키워드
- 인젝션(injection)
- 커맨드 인젝션(command injection)
- 메타 문자(Meta Character)
끝
'hacking > pwnable' 카테고리의 다른 글
[Dream hack] Memory Corruption: Out of Bounds (6) | 2024.09.19 |
---|---|
[Dream hack] Return Address Overwrite (0) | 2024.09.18 |
[Dream hack] sint (p32) (0) | 2024.09.05 |
[Dream hack] cmd_center (0) | 2024.09.04 |
[Dream hack] Logical Bug: Path Traversal (0) | 2024.09.01 |