본문 바로가기

모의해킹

[BeeBox] 인젝션 공격 유형(OS & PHP & SSI(Server side Includes))

*가상환경 구축 후 실습을 진행할 것을 권고드리며 대외 서버 및 홈페이지에 해킹 시도는 불법입니다.

OS Commnad 인젝션

- 시스템 명령어를 쿼리문에 주입하여 취약한 변수를 통해 서버 운영체제에 접근하는 공격

os command injection 취약점 있는 환경

DNS lookup의 도메인에 대한 IP를 확인 시켜주는 웹 사이트가 존재한다.

 - 해당 웹 서버의 입력 시 실행 코드를 확인한 결과 시스템 명령어 실행 함수인 shell_exec를 통한 nslookup 명령어를 실행하여 홈페이지에 출력 결과를 보여주는 것을 확인했다.

 - shell_exec의 실행 명령의 취약점을 사용하기 위해 파이프(|)를 사용하여 공격자가 임의의 명령어를 실행을 한다.

 - 명령어를 추가 입력하는 파이프를 사용하여 웹 사이트에 입력한 결과 서버에서 명령이 실행되고 홈페이지에 출력이 된다. 

PHP Code 인젝션

- phpi.php 파일 변수 message에 입력값 검증 미흡으로 시스템 정보 호출 가능

=> 위 홈페이지는 message parameter를 사용하여 홈페이지에서 사용자가 원하는 임의의 메시지를 출력가능하다.

취약점

=> 파라미터를 시스템 함수로 호출함.

=> message patameter 값에 추가로 시스템 호출 함수를 사용하여 명령어를 실행 후 서버의 정보를 확인할 수 있다.

SSI(Server Side Includes) 인젝션

HTML 페이지의 전체 코드를 수정하지 않고 공통 모듈 파일로 관리하며 동적인 내용을 추가하기 위해 만들어진 기능으로 주로 방문자 수를 확인하거나 홈페이지 로고 수정 등 간단한 기능을 추가할 때 사용한다. 또한, '.shtml' 확장자 파일을 사용한다.

악성 스크립트: <!--#echo var="DATE_LOCAL" -->

- 악성 스크립트를 사용하여 서버에서 현재 시각을 확인할 수 있다. 

- 홈페이지의 취약점으로 시스템 명령어를 사용하여 pwd, find를 사용하여 현재 경로의 파일 목록 확인가능하다.

 

취약점

 

=> 입력값에서 받아오는 값들이 하드코딩되서 실행하며 서버 사이드에서 필터링을 하지않고 출력한다.

활용 방안

- 취약한 서버에 명령어가 실행할 수 있다면 공격자가 인바운드로 웹쉘을 접근하는 것이 아닌 서버에서 공격자로 아웃바인드로 통한 리버스쉘을 사용하여 원격 연결을 할 수 있다.

1. 공격자 서버에서 netcat 명령어를 사용하여 서버 리스닝 

2. 취약한 홈페이지에서 시스템 호출 명령어를 사용하여 netcat 명령어를 수행하여 공격자 컴퓨터로 connect 시도

3. 연결 성공 시 공격자의 컴퓨터에서 희생자 서버로 원격 연결이 성공하여 원하는 명령어를 실행할 수 있다.

4. 연결 성공 후 권한 상승을 시도하고 백도어 설치 및 주기적 접근을 하기 위해 crontab 목록에 공격자 서버와 연결시도하는 nc 명령어를 등록한다. 

대응방안

- 입력값 검증 시 escapeshellcmd함수를 사용하여 커멘드가 인젝션이 되지 않도록 한다.

- 입력값에 대한 필터링을 수행

*escapeshellcmd () 는 임의의 명령을 실행하도록 쉘 명령을 속이는 데 사용될 수있는 문자열의 모든 문자를 이스케이프합니다. 이 함수는이 데이터가 exec () 또는 system () 함수 또는 백틱 연산자 로 전달되기 전에 사용자 입력에서 오는 데이터가 이스케이프되었는지 확인하는 데 사용해야합니다.