본문 바로가기

IT Security/HACKABLE

[Two Greedy] Defacement Using Web Shell

가상으로 구축된 환경 외에 시도하는 것은 엄연히 불법입니다. 모든 책임은 개개인에게 있으니 조심해주세요

안녕하세요 Retain0입니다. 이번 시간에 배워볼 것은 webshell 을 이용해서 대상의 website를 Defacement를 해보도록 하겠습니다. 악의적인 사용자들은 일명 해커들은 금전적인 이유에서 활동하는 경우도 있지만 대부분 자신을 과시하고 싶어 하는 경우가 많습니다. Google에 " 웹사이트 디페이스 "라고 검색해보셔도 다양한 기사가 나옵니다. 즉 정상적으로 서비스해야 하는 사이트가 공격자가 원하는 화면으로 바꿔치기해서 해당 사이트에 접속하고자 하는 사용자는 모두 공격자가 바꿔놓은 화면을 볼 수밖에 없습니다. 아래의 링크 사이트를 접속해보시면 Defacement를 한 결과물을 마치 공유하듯이 올리는 사이트를 확인하실 수 있습니다. http://zone-h.org/

전에 포스팅했던 DNS Spoofing 과는 다릅니다. 사이트 접속하면 리다이렉션 되는 것이 아닌 " index.html " 또는 php를 변조시킴으로써 사이트 접속 시 가리키는 방향은 공격자가 변조한 곳으로 가게 됩니다.

index말 그대로 색인, 표시 등을 말하며, html 은 " HpyerText Markup Language "의 약자로 인터넷을 통해 모든 사람들에게 글, 그림 등을 보여주거나 표현하고 싶을 때 맨 뒤에 확장자를. html 을 붙여 사용합니다.

webshell 을 업로드할 수 있는 방법은 여러 가지가 있겠지만 필자는 Wordpress의 관리자 계정을 도출 후 취약한 plugin 버전이 설치되어 있다는 가정하에 진행하도록 하겠습니다.(wordpress 계정은 " wpscan " 수업 때 도출되었습니다)

① Web Defacement use Webshell

실습 환경
사진 1 정상적인 서비스 화면

오늘의 실습 순서는 관리자 페이지도 출 -> 계정 탈취 후로 그인 -> webshell 업로드 -> index. 파일을 찾기 -> 공격자가 준비해둔 Deface Script로 바꿔두기 -> 사이트 변조 성공입니다.

계정 탈취의 경우 전 시간에 다뤄본 내용이 좀 있기에 패스하고 관리자 페이지 도출의 경우 여러 도구들이 존재하지만 만약 일반적으로 많이 이용하는 주소를 사용하게 될 경우 쉽게 노출이 될 수 있습니다.

 webshell(웹 셸) 이란

  • " Upload " 취약점을 통해 시스템에 다양한 명령을 내릴 수 있는 것을 뜻합니다. 즉 이것이 업로드되면 우리는 웹페이지를 통해 --> 서버에게 명령을 내릴 수 있게 되어 여러 디렉터리를 열람, 악성 스크립트, db 유출(개인 정보 포함) 등 대상에게 아주 위협적인 존재입니다.

사진 2 관리자 페이지 찾아주는 도구

(사진 2) 추측하기 쉬운 관리자 페이지의 경우 쉽게 노출이 될 수 있다는 것을 보여드리기 위함입니다. 이 도구는 Windows에서도 사용이 가능하며 사용법도 쉬운 편입니다.

사진 3 관리자 페이지 및 로그인 폼 도출

python3 okadminfinder.py -u 대상주소

사진 3 약 500여 개가 넘는 사전 파일들로 하나씩 대입해보며 존재하는 페이지들은 저렇게 나열해줍니다. 저 도구가 유용한 이유는 다양한 옵션들의 조합을 통해 자신을 익명으로 숨기고 스캔하거나 ip를 변조하여 추적을 우회해줄 수 있는 기능도 포함되어 있는 것 같습니다.

※설치 경로는 하단의 링크 참조

사진 4 관리자 페이지 도출

사진 4  ID 와 PWD는 저번 시간에 알아뒀으니 그대로 접속하도록 하겠습니다.

사진 5 접속화면

(사진 5) 접속한 화면입니다. 우리는 취약한 플러그인을 사용하여 업로드를 할 것이니 plugin을 설치해야 합니다.

사진 6 플러그인 추가하기

사진 6 플러그인 추가하기를 눌러서 새로운 플러그인을 받도록 하겠습니다.

사진 7 Advanced File Manager 설치
사진 8 새로운 탭

사진 8 설치후 활성화 까지 클릭하셨다면 좌측 상단에 사진과 같은 카테고리가 생겼을 겁니다. 클릭하셔서 들어가시면 됩니다.

사진 9 설치된 plugin

사진 9 다양한 디렉터리 항목들이 보이며 상단에 빨간 박스를 보시면 upload 할 수 있는 기능이 있습니다. 해당 빨간 박스를 클릭해서 웹셀을 올리도록 하겠습니다.

사진 10 webshell 업로드

사진 10 webshell 을 성공적으로 올린 것을 확인할 수가 있습니다. 예상했던 대로 파일을 올리면서 아무런 검증조차 없었습니다. 그럼 이제 webshell을 실행해 봐야겠지요

사진 11 webshell 접속

사진 11 webshell 접속 화면입니다. 해당 pwd를 입력하고 접속하면 되는데요 보통 대부분 webshell 이름 그대로 가 pwd입니다. 아니면 webshell 들어가서 script 문을 보면 패스워드가 나와있습니다.

사진 12 접속화면

사진 12 webshell 을 접속하면 대상 웹서버에 관련된 모든 디렉터리를 볼 수 있으며 공격자가 원하는 형태로 변조를 할 수가 있습니다. 필자는 빨간 박스로 되어있는 " index.php "를 변조시켜버려 해당 사이트를 다른 변조된 사이트로 만들도록 하겠습니다.

사진 13 정상적인 index.php script

사진 13 아직 변조시키기 전 index.php script 문입니다. 우리는 원리의 이해와 실습을 하기 위해서이니 테스트해보고 다시 되돌려야겠지요??.기존 내용들은 백업을 해둡시다!!

사진 14 Defacement Script

사진 14 바꿔치기될 Script 입니다. 사진13에 있는 정상적인 script문은 날려버리고 악의적인 스크립트를 삽입하겠습니다.

사진 15 변조

사진 15 정상적인 index.php의 내용을 --> 공격자의 Defacement Script의 내용으로 바꿨습니다. 하단에 >> 작은 화살표 모양을 클릭하면 수정이 완료됩니다.

사진 16 수정완료
사진 17 변조된 워드프레스 사이트

사진 17 성공적으로 Defacement 된 사진입니다. 보통 공격자들은 이런 방식을 이용하여 자신을 과시하는 경우가 많습니다. 이러한 행위는 해당 서비스에대한 가용성(Availability) 을 침해하게됩니다. 사실 webshell이 업로드되고 실행되는 것만으로도 엄청 한 취약점입니다. 사이트 더페이스뿐만 아니라 " jquery " 쪽 파일을 수정함으로써 해당 사이트에 접속하는 모든 사용자가 악성코드에 감염될 수 있도록 하는 " Drive by Download " 형틀로 연계가 될 수도 있으며 다양한 민감정보 수집, 대상 웹 서버의 모든 디렉터리를 삭제해버릴 수 있습니다.

◆대응 방안

wordpress 같은 다양한 플러그인을 관리자의 편의에 맞게 사용할 수 있는 플랫폼을 제외하고 apache2 같은 다른 환경에서는 file upload 기능이 꼭 필요한 게 아니라면 개발자 측 분들과 협의를 통해 애초에 생성을 하지 않는 것이 좋다. 또한 기능이 있다면 업로드되는 파일 및 확장자 검사를 통해 정상적인 파일인지 검증할 필요가 있습니다.

1. 탐지된 파일 삭제 PLURA에서 웹쉘로 탐지한 파일이 시스템 개선, 유지 또는 보수를 위한 파일이 아닌 경우 격리하거나 삭제해야함.

2. 업로드 확장자 체크 White list방식으로 허용된 확장자(ex> .png, .gif, .pdf)만 업로드 할 수 있도록 Server측에서 체크합니다.

3. 업로드 파일 이름 변경, 이동 및 실행권한 제거 

- 서버 보안 설정 -

(1) Apache.conf

더보기

이미지 파일에 존재하는 php code가 실행되지 않도록 업로드 디렉터리에 php 코드가 실행되는 것을 방지합니다. 이러한 설정은 업로드된 이미지 파일에 실행 php code가 존재하더라도 실행되지 않습니다.

<Directory /home/web/public_html/upload_dir>

php_admin_value engine Off

</Directory>

 

(2) php.conf

- disable_functions

더보기

php에서 지원하는 함수 기능을 허용하지 않는 옵션입니다. 이 옵션으로 시스템 명령이 실행되는 것을 방지할 수 있습니다.

disable_functions = system, exec, shell_exec, passthru, phpinfo, show_source, popen, proc_open, fopen_with_path, dbmopen, dbase_open, putenv, move_uploaded_file, chdir, mkdir, rmdir, chmod, rename, filepro, filepro_rowcount, filepro_retrieve, posix_mkfifo

- allow_url_fopen

더보기

php에서 원격지에 있는 파일을 읽어오지 못하다 록 하는 옵션입니다. 이 옵션으로 원격지의 악성 스크립트(webshell)가 실행되는 것을 방지할 수 있습니다.

allow_url_fopen = Off

install adminfinder location :https://github.com/mIcHyAmRaNe/okadminfinder3

refer to : http://blog.plura.io/?p=6079