3. 메타스플로잇을 활용한 PHP-CGI 취약점 공격
- PHP 버전 5.3.12와 5.4.2 이전 버전(오래된 버전)에 소스코드가 노출되거나 공격자가 임의의 코드를 실행할 수 있는 취약점(CVE-2012-1823) 존재
- 요청 URI의 쿼리스트링 부분을 잘못 처리함으로써 발생됨
- bWAPP의 /admin/ 경로에서 PHP-CGI 취약점 공격 실습 가능
실습 : PHP-CGI 취약점에 의해 소스코드가 노출될 수 있는 것을 확인하고, 메타스플로잇 프레임워크를 이용하여 리버스 쉘 획득
<소스코드 노출>
- 웹 브라우저를 이용하여 /bWAPP/admin/ 경로로 접속 ->관리자 포털 페이지
- 웹 브라우저 주소창에서 경로 뒤에 추가로 ? 를 입력한 후 쿼리스트링 부분에 -s 입력
192.168.56.102/bWAPP/admin/?-s
- admin 페이지의 PHP 소스코드가 출력됨
- PHP 웹 애플리케이션은 PHP로 작성된 코드가 서버에서 실행된 후, 그 결과가 HTML이나 자바스크립트의 형태로만 웹페이제에 표시되어야 함
→ PHP 소스코드 노출 시, 웹 애플리케이션의 내부 로직이 드러나고, 공격자가 이를 분석하여 이차 공격 시도 가능
<메타스플로잇을 이용한 공격>
- 이 취약점을 이용하여 임의의 코드 실행 가능
* 메타스플로잇 (Metasploit) : 종합 익스플로잇 프레임워크이며, 웹 모의해킹뿐만 아닌 시스템 해킹을 비롯한 모든 분야의 모의해킹 수행하는 데 사용되는 소프트웨어
- 메타스플로잇을 이용하여 공격에 성공하면, 대개 그 결과로 쉘 흭득
* 메타스플로잇의 공격 과정
① search 명령어 : 공격 모듈 검색
search php_cgi
- php_cgi_arg_injection 모듈이 검색되었음
② use 명령어 : 공격 모듈 설정 단계로 진입
③ option 설정 : show options 명령어로 옵션을 확인하고 set 명령어로 필요한 옵션 설정
- 각 옵션의 이름(Name), 현재 설정(Current, Setting), 필수 옵션 여부(Required), 옵션 설명(Description) 이 출력됨
- 옵션들 중 필수 옵션은 모듈을 사용하기 위해 필수적으로 설정해야 하는 옵션들이며, 기본값이 이미 지정되어 있는 경우에는 그 값을 그래도 사용해도 됨 (상황 따라 설정 변경 필요하기도 함)
* 필수 옵션 중 RHOST 옵션은 기본값이 설정되어 있지 않음
→ RHOST는 공격 대상의 IP 주소를 설정하는 옵션으로, bWAPP의 주소 설정
- 필수는 아니지만 공격에 성공하기 위해 별도로 설정해야 하는 옵션
→ TARGETURI 옵션 : 취약점이 존재하는 경로 설정 (취약점이 /bWAPP/admin/ 경로에 있어서)
- 옵션 설정은 set 명령어를 이용해서 실행
④ 공격에 성공하게 되면 실행할 페이로드(payload)를 설정. 일반적으로 바인드 쉘이나 리버스 쉘 등 쉘을 획득하는 페이로드 설정
- show payloads 명령어로 페이로드 목록 확인
- 이 중 리버스 쉘을 생성하는 generic/shell_reverse_tcp 페이로드 사용
- set payload 명령어로 페이로드 지정하고, 그 다음 show options 명령어로 페이로드를 위한 옵션 다시 확인
- 일반적으로 리버스 쉘 페이로드의 경우 LHOST와 LPORT 옵션 설정하도록 되어 있음
→ LHOST와 LPORT는 리버스 쉘에서 접속을 기다리게 될 로컬 호스트의 IP 주소와 포트
- set 명령어로 LHOST에 칼리 리눅스의 IP 주소 입력하고 LPORT는 지정되어 있는 기본값 혹은 원하는 포트 새로 지정
- 페이로드 설정을 마친 후 show options를 통한 최종 옵션 설정 확인
⑤ run 명령어 : 공격 수행
- 공격이 자동으로 진행된 후 공격에 성공하면 쉘이 생성됨
- www-data 사용자의 권한 획득
⑥ 공격에 성공하면 페이로드가 실행되고 이후 포스트 익스플로잇 과정 수행
- 공격자는 이후 루트 권한을 획득하기 위한 권한 상승 공격을 시도함 (2장의 웹 공격 단계 섹션 참고)
4. 알려진 취약점 공격 대응
- 취약한 소프트웨어를 최신 버전 또는 취약점이 수정된 버전으로 업데이트하여 대응 가능
- 운영체제에서 제공하는 구성 요소에 취약점이 존재하는 경우에는, 사용자가 개별 패키지를 직접 컴파일하여 업데이트하지 않더라도, 대다수의 운영체제가 자동 업데이트 방식을 포함하여 패키지 업데이트를 위한 방법을 별도로 제공하고 있음 → 시스템 항상 최신 업데이트 상태로 유지
- 오픈 소스 사용 시 각 오픈소스에 대한 관리 필요! 오픈소스의 구성요소를 분석하고 나열하고, 모니터링하며, 항상 최신 패치가 적용될 수 있도록 관리하는 프로세스 정립
- OWASP Dependency-Check를 이용하면 오픈소스 라이브러리를 찾고, 각 라이브러리의 알려진 취약점 정보 확인 가능
→ 알려진 취약점을 확인할 수 있는 소프트웨어를 CI/CD에 포함해 개발 프로세스 자동화를 구축
'웹해킹' 카테고리의 다른 글
웹해킹 #14 자바 역직렬화 취약점 공격 (2) | 2020.04.15 |
---|---|
웹해킹 #13 알려진 취약점을 이용한 공격 - 쉘쇼크 취약점 (0) | 2020.04.15 |
웹해킹 #13 알려진 취약점을 이용한 공격 - 하트블리드 취약점 (0) | 2020.04.15 |
웹해킹 #12 XXE(XML 외부 엔티티) 공격 (0) | 2020.04.15 |
웹해킹 #11 접근 통제 취약점 공격 (1) | 2020.04.15 |