본문 바로가기
Web/Burp Suite

Burp Suite: Server-side vulnerabilities (Part 5): OS command injection

by secumark 2025. 6. 21.
728x90

OS command injection : 운영체제 명령 실행 취약점

 

OS command injection은 운영 체제(OS)의 명령어를 서버에서 실행하도록 공격자가 주입할 수 있는 취약점으로 공격자는 해당 애플리케이션과 그 데이터에 대해 완전한 통제권을 얻을 수 있다. 서버뿐만 아니라 서버가 신뢰하는 다른 시스템, 내부 인프라까지도 공격을 확장할 수 있음.

 

기본 정보 수집용 명령어

목적 Linux Windows
현재 로그인된 사용자 whoami whoami
운영체제 정보 uname -a ver
네트워크 설정 확인 ifconfig (또는 ip a) ipconfig /all
네트워크 연결 상태 확인 netstat -an  netstat -an
실행 중인 프로세스 확인 ps -ef tasklist

 

netstat은 열려 있는 포트나 외부 연결 여부 확인 가능

ps는 백그라운드에서 어떤 서비스나 악성코드가 실행되고 있는지 탐지 가능

 

어떤 쇼핑 웹사이트에서 사용자가 특정 매장의 상품 재고를 확인할 수 있는 기능이 있는데, 해당 기능은 다음의 url을 통해 접근 가능하다. 

 

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

이 URL을 호출하면 서버는 다음처럼 쉘 명령어를 실행하여 재고 정보를 가져온다.

stockreport.pl 381 29

 

여기서 stockreport.pl은 Perl 스크립트로, 381은 상품 ID, 29는 매장 ID다. 서버가 이 명령을 실행한 결과(예: 재고 있음/없음 등)를 사용자에게 보여주는 방식이다.

 

Perl 스크립트란 1987년에 만들어진 오래된 스크립트 언어로 텍스트 처리, 로그 분석, 시스템 자동화, CGI 웹 개발 등에 자주 사용됐다. 현재는 Python에게 밀렸으나 레거시 시스템에서 여전히 많이 쓰이고 있다. 

* 레거시 시스템: 오래된 서버 운영체제: Windows Server 2003, Solaris, AIX 등, 구형 프로그래밍 언어: COBOL, Perl, Pascal 
, 옛날 방식의 데이터베이스: Oracle 9i, MS Access 등, 인터넷 뱅킹에서 아직도 사용하는 ActiveX 같은 기술 등!

웹 애플리케이션이 OS 명령어 삽입 방어를 하지 않으면, 공격자는 다음과 같은 입력을 통해 임의의 명령어를 실행할 수 있다.

& echo aiwefwlguh &
 
 

이 입력을 productID 파라미터에 넣으면, 애플리케이션이 실제로 실행하는 명령어는 아래와 같다.

stockreport.pl & echo aiwefwlguh & 29
 

 

여기서 & 기호는 셸 명령어 구분자로, 여러 개의 명령어를 차례대로 실행하게 만든다.

 

즉, 위 명령은 아래의 세 개 명령어로 분리되어 실행되는데

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

 

  1. stockreport.pl 인자가 없어서 에러 발생
  2. echo aiwefwlguh 그대로 출력함
  3. 29 ← 명령어처럼 취급되어 오류 발생

Lab

OS Command Injection 취약점을 활용해 현재 서버에서 명령어를 실행해보는 연습을 한다. 웹 애플리케이션의 상품 재고 확인 기능에 OS 명령어 삽입 취약점이 있고, 이를 이용해 whoami 명령어를 실행해서 현재 서버 사용자의 이름을 확인하는 것이 목표.

 

 

productId, storeId가 있다.

 

proxy로 패킷 확인, 

 

성공!

 

| (파이프), && (앞 명령 성공 시 뒤 명령 실행), `명령어` (백틱) 사용도 가능하다.

728x90

댓글