[TryHackMe] Command Injection - 1

코준·2025년 6월 27일

TryHackMe

목록 보기
21/32

Command Injection

명령어 삽입이라는 의미의 Command Injection은 애플리케이션 내에서 원격으로 코드를 실행할 수 있어 원격 코드 실행(Remote Code Execution, RCE)으로도 불린다.

명령어 삽입은 애플리케이션이 사용자의 장치에서 실행되는 것과 동일한 권한을 가지고 운영체제에서 명령어를 실행하도록 애플리케이션을 악용하는 것이다.

취약한 시스템과 공격자가 직접적으로 상호작용할 수 있기 때문에 공격자에게 가장 효과적인 공격 방식이다.

명령어 삽입은 2019년 AppSec Intelligence 보고에 의한 상위 10개의 취약점 중 하나였으며, OWASP 프레임워크에서도 웹 애플리케이션 상위 10가지 취약점 중 하나로 지속적으로 제안하고 있다.

Discovery

종종 PHP, Python, NodeJS같은 언어를 사용해서 시스템을 구성한 애플리케이션에서 발견된다. 입력 필드가 존재하는 경우를 예로 들 수 있다.

위 코드에서는 사용자가 $title이라는 입력 필드에 데이터를 입력해 디렉토리에서 노래 제목을 검색한다.

    1. 애플리케이션에서 운영체제에 포함된 디렉토리에 MP3 파일을 저장한다.
    1. 사용자가 입력한 노래 제목을 $title에 저장한다.
    1. grep명령어로 songtitle.txt내에서 탐색한다.
    1. 검색 결과는 존재하는지, 존재하지 않는지 알려준다.

애플리케이션이 노래가 저장된 디렉토리에 접근하고 저장까지 하기 때문에 공격자는 본인이 원하는 명령을 이 애플리케이션에 삽입할 수 있다.

예를 들어서 grep을 사용해 노래 리스트에 접근하는 대신에 다른 민감한 파일에 접근해 데이터를 읽어내도록 요청할 수 있다.

이런 방식은 어떤 애플리케이션이 어떤 프로그래밍 언어를 사용했는지에 관계없이 사용할 수 있다. 애플리케이션이 운영체제와 상호작용하는 이상, 명령어 삽입은 일어날 수 있다.

Exploit

실습 세션에서 나오겠지만 명령어 삽입이 발생하는지 여부를 애플리케이션 동작을 통해서 판단할 수도 있다.

사용자 입력으로 시스템 명령에 데이터를 저장하는 애플리케이션은 개발자가 의도하지 않는 동작으로 이어질 수 있는데, 쉘 연산자 중 ;, &, &&등의 시스템 명령을 결합해 실행할 수 있다.

Blind Command Injection

애플리케이션에서 직접적인 출력이 없는 경우 애플리케이션의 동작을 살펴봐야 발생 여부를 판단할 수 있다.

블라인드 유형을 탐지하려면 시간 딜레이를 유발하는 페이로드를 사용해야 한다.
예를 들어서 ping, sleep명령어는 테스트에 중요한 페이로드이다. ping은 지정한 횟수에 비례해 애플리케이션이 몇 초간 멈추도록 한다.

다른 방법으로는 출력을 강제하는 것이 있다.
>과 같은 리다이렉션 연산자를 사용해서 whoami같은 명령어를 실행하고 파일로 리다이렉션하도록 지시할 수 있고, cat명령어로 해당 파일을 읽도록 할 수 있겠다.

블라인드 유형은 확인이 즉각적이지 않거나 아예 존재하지 않기 때문에 복잡하고, Linux와 Window 시스템의 명령어 구문이 다르기 때문에 테스트가 많이 필요하다.

curl명령어는 매우 훌륭한 방법인데, 페이로드 내에서 애플리케이션에 데이터를 보내고 받아볼 수 있다.

curl http://vulnerable.app/process.php%3Fsearch%3DThe%20Beatles%3B%20whoami

위 코드와 같이 명령어 삽입이 가능할 수 있다.

Verbose Command Injection

블라인드 탐지보다 훨씬 쉽다고 할 수 있다. 상세 명령어 삽입은 말그대로 애플리케이션이 어떤 일을 하고 있는지, 무엇이 실행되고 있는지 상세하게 출력을 제공한다.
ping, whoami같은 명령어 출력이 애플리케이션에 직접 표시된다.

Linux Payload

페이로드기능
whoami애플리케이션이 어떤 사용자 권한으로 실행되는지 확인
ls현재 디렉토리의 내용을 나열, 구성 파일, 환경 파일(토큰 및 애플리케이션키 등) 같은 파일을 찾을 수 있다.
ping애플리케이션을 지연, 블라인드 명령어 삽입 테스트 시 유용
sleep머신에 ping 명령어가 설치되지 않은 경우 사용
ncNetcat, 애플리케이션에 역방향 셀을 생성하는 데 사용될 수 있음, 대상 머신을 탐색해 다른 서비스, 파일 또는 권한 상승 수단을 찾을 수 있음.

Window Payload

페이로드기능
whoami애플리케이션이 어떤 사용자 권한으로 실행되는지 확인
dir현재 디렉토리의 내용을 나열, 구성 파일, 환경 파일(토큰 및 애플리케이션키 등) 같은 파일을 찾을 수 있다.
ping애플리케이션을 지연, 블라인드 명령어 삽입 테스트 시 유용
timeout머신에 ping 명령어가 설치되지 않은 경우 사용
profile
Hi !

0개의 댓글