Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

[Web Hacking] Bee - Box -OS Command Injection- 본문

정보보안/BWAPP Bee-box

[Web Hacking] Bee - Box -OS Command Injection-

프로앱등이 2020. 5. 3. 18:12

[A1-(5)]–OS Command INJECTION

 

 

OS 커맨드 인젝션 이란 취약한 변수로 시스템 명령어를 주입하여 서버 운영체제에 접근하는

공격이다. 보통 웹 페이지에서 서버의 시스템 셸을 호출할 때 관리자가 의도한 명령어가 아

닌 다른 명령어를 주입하여 서버 정보를 알아낸다.

OS Command Injection 공격 (난이도 하)

 

 

‘commandi.php’ 는 입력한 주소의 DNS 주소를 출력한다. 이때 DNS를 조회하는 시스템 명령

어인 nslookup을 사용한다. 여기서는 디렉터리의 목록을 표시하는 ls를 사용한다. 파이프라인

은 둘 이상의 명령어를 실행할 때 사용하며 앞의 명령어를 실행한 후 파이프라인 뒤에 있는

명령어를 실행한다.

 

 

파이프라인을 사용한 OS 커맨드 인젝션의 결과로 서버 시스템의 가장 상위에 있는 디렉터리

정보를 출력한다.

위의 결과값으로 OS Command Injection 취약점이 있다고 판단하고 NC(NetCat)을 이용하여 "리버스쉘" 을 이용하여 서버의 쉘을

가지고 올것이다.

쉘을 가지고 오는 방법에는 크게 2가지가 있다.

1. 바인드 쉘

2. 리버스 쉘

첫번째 바인드 쉘의 경우에는 파일 업로드 취약점 , RFI , HTTP METHOD 등 을 이용하여 웹쉘 또는 NC 업로드시 Connection(연결) 을

할때 공격자가 서버의 특정 Port 로 접속하는것이 바인드 쉘이다.

두번째 리버스 쉘의 경우에는 취약점을 이용하여 웹쉘 업로드시 바인드쉘이 막혀있을때 즉 , 서버가 80번 port 이외의 포트 접근을 차단 하였을때

방화벽의 인바운드 정책등으로 외부에서 들어오는 포트를 80번 이외에 모두 차단 되어 있을경우 사용한다 공격자가 특정 포트를 열어놓고

서버가 공격자에게 접근하는것이다 그렇다면 서버의 인바운드 정책에 위배되지 않으므로 우회가 가능하다. 보통 아웃바운드 정책에 대한 설정은

되어 있지않는점을 이용.

그렇다면 NC 의 리버스 쉘을 이용하여 공격을 실습해보자.

 

 

OS 커맨드 인젝션에 넷켓 명령어를 입력하면 비박스의 서버 정보를 외부에서 파악할수 있다.

칼리 리눅스를 실행하여 리스닝 모드로 넷켓을 실행한다. 다음 명령에서 –l은 리스닝 모드,

-p는 포트 번호를 지정하는 옵션이다.

 

칼리리눅스(공격자) 는 7777번 포트를 열고 Listen 상태로 대기한다.

 

 

칼리 리눅스(공격자) 의 ip를 확인한다.

 

 

칼리 리눅스에서 넷캣을 실행한 다음 commandi.php 페이지의 입력란에 넷캣을 실행하는 명

령어를 입력한다. 단, Bwapp 에는 netcat이 설치가 되어있다. 넷켓과 연결하기 위하여 칼리 리

눅스의 ip주소와 공격자가 열어놓은 포트 번호 7777번으로 접속하는 명령어를 입력한다.

또한, -e 옵션으로 bash셸을 실행한다.

 

 

칼리리눅스(공격자)의 터미널에서 ls명령어를 입력하자 Bwapp 서버 내의 파일들이 출력한다.

이와 같이 netcat을 이용하여 취약점이 존재하는 PC에 netcat을 설치하고 netcat을 실행시키면

공격자의 서버로 셸을 전송할수 있다. 이것이 바로 리버스 텔넷을 이용한 공격이다.

 

OS Command Injection 대응방안

 

 

Commandi_check_2 함수는 Function_exterbal.php에 정의되어 있다 ‘escapeshellcmd’ 함수를 사용

하여 입력 값을 필터링한다. Escapeshellcmd 함수는 시스템 셸로 실행할 수 있는 특수 문자에

백슬레시를 붙여 명령을 실행할 수 없도록 방어한다.

사용할 수 있는 우회 문자는 ‘ # , $ ‘ | , * , < , > , ~ ‘ 등이 있다.

 

 

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

어를 사용하여야 할 경우에는 필요한 명령어 이외에 다른 명령어를 사용 할 수 없도록 ‘ & ,

; , | ‘ 문자를 필터링한다.