웹 해킹/portswigger

버프슈트를 이용한 웹 해킹, 서버 측 취약점: OS 명령 주입

코드라니(CODERANY) 2026. 3. 30. 23:37

OS 명령 주입이란 무엇인가요?

OS 명령 주입은 셸 주입이라고도 합니다. 이 공격을 통해 공격자는 애플리케이션이 실행 중인 서버에서 운영 체제(OS) 명령을 실행할 수 있으며, 일반적으로 애플리케이션과 그 데이터를 완전히 손상시킬 수 있습니다. 공격자는 OS 명령 주입 취약점을 이용하여 호스팅 인프라의 다른 부분을 손상시키고, 신뢰 관계를 악용하여 조직 내 다른 시스템으로 공격을 확산시킬 수 있습니다.

유용한 명령어

운영체제 명령 주입 취약점을 발견한 후에는 몇 가지 초기 명령어를 실행하여 시스템 정보를 얻는 것이 유용합니다. 다음은 Linux 및 Windows 플랫폼에서 유용한 몇 가지 명령어에 대한 요약입니다.

명령의 목적 리눅스 윈도우
현재 사용자의 이름 whoami whoami
운영 체제 uname -a ver
네트워크 구성 ifconfig ipconfig /all
네트워크 연결 netstat -an netstat -an
실행 중인 프로세스 ps -ef tasklist

OS 명령 주입

이 예시에서 쇼핑 애플리케이션은 사용자가 특정 매장에 상품 재고가 있는지 여부를 확인할 수 있도록 합니다. 이 정보는 URL을 통해 접근할 수 있습니다.

https://insecure-website.com/stockStatus?productID=381&storeID=29

재고 정보를 제공하기 위해 애플리케이션은 다양한 기존 시스템을 조회해야 합니다. 예전에 만든 이유로 해당 기능은 제품 ID와 매장 ID를 인수로 사용하여 셸 명령어를 호출하는 방식으로 구현되었습니다.

stockreport.pl 381 29

이 명령은 지정된 품목의 재고 현황을 출력하여 사용자에게 반환합니다.

OS 명령어 주입 - 계속

이 애플리케이션은 운영체제 명령 주입 공격에 대한 방어 기능을 구현하지 않았으므로 공격자는 다음과 같은 입력을 제출하여 임의의 명령을 실행할 수 있습니다.

& echo aiwefwlguh &

이 입력값이 매개변수로 제출되면 productID애플리케이션에서 실행되는 명령은 다음과 같습니다.

stockreport.pl & echo aiwefwlguh & 29

 echo명령은 입력된 문자열을 출력에 그대로 출력합니다. 이는 일부 유형의 OS 명령 주입 공격을 테스트하는 데 유용한 방법입니다. &문자는 셸 명령 구분자입니다. 이 예제에서는 세 개의 명령이 순차적으로 실행됩니다. 사용자에게 반환되는 출력은 다음과 같습니다.

Error - productID was not provided
aiwefwlguh
29: command not found

출력된 세 줄은 다음을 보여줍니다.

  • 원래 stockreport.pl명령은 예상되는 인수 없이 실행되었으므로 오류 메시지가 반환되었습니다.
  • 주입된 echo명령이 실행되었고, 제공된 문자열이 출력에 그대로 출력되었습니다.
  • 원래 인수가 29명령으로 실행되어 오류가 발생했습니다.

삽입된 명령 뒤에 추가적인 명령 구분자를 배치하는 것은 &삽입된 명령과 그 뒤의 내용을 분리하는 데 유용합니다. 이렇게 하면 뒤의 내용이 삽입된 명령의 실행을 방해할 가능성을 줄일 수 있습니다.

 

1. 버프슈트->프록시 -> 오픈 브라우저 -> 인터셉트 오프 -> 연구실 페이지를 버프 슈트 브라우저로 연다.

 

2. 제품 페이지를 방문하여 "재고 확인"을 클릭한 다음, Burp Suite에서 해당 요청을 가로채서 Burp Repeater로 보냅니다.


4. 매개변수를 수정하여 storeID값을 지정하십시오 1|whoami.

  • | 기호를 URL 인코딩한 값인 %7c를 사용하세요.
  • Burp Suite에서 |를 입력한 후, 해당 글자만 드래그해서 **Ctrl + U**를 누르면 자동으로 %7c로 인코딩됩니다.

응답에 현재 사용자의 이름이 포함되어 있음을 확인하십시오.