본문 바로가기

Dreamhack/웹해킹

[🌱Beginner] command-injection-1

🛡️ 커맨드 인젝션(Command Injection) 이란?

Command Injection은 웹 애플리케이션이 사용자 입력을 운영체제(OS) 명령어에 직접 전달하는 경우 발생하는 취약점입니다.
즉, 공격자가 입력값을 조작해 원래 의도된 명령어 뒤에 추가 명령을 실행시킬 수 있게 되는 것이죠.

 

웹 서비스에 접속하면 아래와 같은 화면이 표시됩니다.
이 서비스는 사용자가 입력한 Host 주소로 ping 패킷을 전송하는 기능을 제공합니다.
문제 설명에 따르면, 이 기능에 존재하는 Command Injection 취약점을 이용해 시스템 내부의 플래그(flag.py)를 획득하는 것이 목표입니다.

Host 입력 후 Ping을 실행할 수 있는 기본 화면입니다.

예시로 8.8.8.8을 입력하게 되면 아래와 같은 결과가 나오게 됩니다.

기본적으로 입력한 Host 값이 서버 측에서 그대로 명령어에 반영되기 때문에, 이를 악용해 Command Injection 공격을 시도할 수 있습니다.
이를 위해 Burp Suite를 활용하여 클라이언트에서 서버로 전달되는 요청 패킷을 가로채고, Host 입력값을 직접 수정하여 악의적인 명령을 삽입해 보겠습니다.

🔎  Burp Suite란?

Burp Suite는 웹 애플리케이션 보안 테스트를 위해 가장 널리 사용되는 통합 보안 툴킷입니다.
주로 프록시(Proxy) 기능을 활용하여 클라이언트와 서버 간의 HTTP/HTTPS 트래픽을 가로채고, 수정하거나 재전송할 수 있습니다. 이를 통해 취약점 스캐닝, 파라미터 조작, 인젝션 공격 시도 등 다양한 보안 테스트를 수행할 수 있으며, CTF나 모의해킹 환경에서 자주 활용됩니다.

 

이제 Burp Suite를 활용하여 실제 요청을 가로채고, 입력값을 변조하는 과정을 진행해 보겠습니다.

 

Burp Suite에서 제공하는 Open Browser 기능을 이용해 테스트용 브라우저를 실행합니다.

이후 해당 브라우저 주소창에 문제에서 제공된 링크를 직접 입력하여, Burp Suite 프록시를 거쳐 서비스와 연결되도록 설정합니다.

서비스와의 연결이 완료되면, Burp Suite에서 Intercept 모드를 활성화하여 클라이언트와 서버 간의 요청을 가로채도록 설정합니다.

 

Burp Suite의 Intercept 모드를 활성화한 상태에서, 사용자가 8.8.8.8을 입력하고 Ping 버튼을 클릭하면 위와 같이 요청이 가로채집니다.

화면 하단의 Request 영역을 보면 POST /ping HTTP/1.1 요청이 전송되었으며, 본문(body)에 host=8.8.8.8 값이 포함되어 있는 것을 확인할 수 있습니다.
이제 이 부분을 조작하여 원래 의도된 ping 명령어 대신, 추가적인 명령어를 삽입해 Command Injection을 시도할 수 있습니다.

 

가로챈 요청에서 host 파라미터 값을 단순 IP가 아닌, 다음과 같이 변조해 보았습니다.

8.8.8.8"; cat flag.py #

여기서 "는 기존 문자열을 닫아주기 위해 사용되었고, ;는 새로운 명령어를 이어붙이는 역할을 합니다.
이후 cat flag.py를 실행하여 플래그 파일의 내용을 출력하도록 하였으며, 마지막 #은 뒤따르는 구문을 주석 처리하여 오류가 발생하지 않도록 하기 위한 장치입니다.

 

이렇게 입력하면 ping 명령이 정상적으로 실행된 뒤, 이어서 cat flag.py가 실행되어 플래그를 확인할 수 있습니다.

공격 페이로드를 삽입한 결과, 정상적으로 플래그가 출력되는 것을 확인하였습니다. 🚩

'Dreamhack > 웹해킹' 카테고리의 다른 글

[🌱Beginner] simple-web-request  (0) 2025.08.22
[🌱Beginner] session  (0) 2025.08.22
[🌱Beginner] web-misconf-1  (0) 2025.08.19
[🌱Beginner] file-download-1  (0) 2025.08.18
[🌱Beginner] path traversal  (0) 2025.08.17