가상으로 구축된 환경 외에 시도하는 것은 엄연히 불법입니다. 모든 책임은 개개인에게 있으니 조심해주세요
안녕하세요 Retain0입니다. 이번 시간에 해볼 것은 " wpscan "이라는 도구를 사용해서 wordpress 기반으로 만들어진 사이트를 Dictionary Attack , Vulnerability Scan 을 해보도록 하겠습니다.
" wordpress " 란
- 세계에서 가장 많이 사용되고 있는 CMS(Contents Management System)로 사용 비중이 대략 전 세계의 약 59% 정도를 차지하고 있는 웹사이트입니다. "코카콜라, Sonymusic, 뉴욕타임스 블로그, BBC America, 쿠팡 뉴스룸, 현대종합상사, 삼성전자 뉴스룸 등 점차 워드프레스의 사용 비중이 올라가고 있습니다.
wordpress 특징
- 쉬운 사용법
- 다양한 플러그인
- 쉽고 편한 디자인
- 모바일 최적화
등 사용자들을 위한 다양한 편의 시스템을 가지고 있기 때문입니다. 하지만 반대로 wordpress 가 생소하신 분들도 계실 텐데요 단점은 " 네이버 검색엔진에는 노출 x " 이기 때문에 평소 네이버 플랫폼을 사용하시는 분들이면 잘 모르실 수도 있습니다.
그럼 " wpscan " 은 무엇일까요?
- " wordpress " 기반으로 만들어진 사이트를 대상으로 보안을 테스트하기 위해 만들어진 Vulnerability Scanner 즉 취약점 스캐너입니다. wpscan 은 다양한 명령어를 내포하고 있기에 잘 만 활용한다면 공격자가 원하는 형태로 다양한 시도를 해볼 수 있겠습니다.
① WPscan
사진 1 해당 워드프레스 사이트로 접속해서 오늘의 타깃이 되어줄 계정들을 확인해둡니다. 두 계정 모두 관리자의 권한을 얻은 계정들입니다.
wpscan --help
(사진 2) " wpscan --help "를 입력해보면 다양한 명령어들이 나오는 것을 확인해 볼 수 있다. 사진에 보이는 것 말고도 하단에 더 많은 옵션들이 있으니 한번 직접 쭉 훑어보시면 되겠습니다.
wpscan --url http://대상주소 --detection-mode mixed --clear-cache -e u
--url : 대상 주소
--detection-mode mixed(default) : 수동 + 자동 혼합모드
--clear-cache : 스캔전 캐쉬 제거
-e : enumerate 의 줄인단어로 wordpress 취약점 열거
u : user 를 의미
Wordpress 사이트에 대해 wpcan을 실행할 수 있는 3가지 감지 모드가 있는데 " passive, aggressive, mixed " 가 있습니다.
- passive 모드 : 비 침입감지를 받도록 하며, 수동 모드라 고도 하는데 이경우 보안솔루션 장비들이 감지할 가능성이 적습니다
- aggressive 모드 : 서버에 수천 건의 요청을 보내면서 수행합니다. 굉장히 공격적이며 이로 인해 보안장비에 걸릴 확률이 있음
- mixed 모드 : default 즉 기본 옵션으로 사용하며 수동적 + 공격적 혼합하여 사용
위의 옵션으로 스캔 한 결과 해당하는 admin , retain0라는 사용자 계정들이 도출된 것을 확인할 수가 있습니다.
사진 5 계정의 ID는 알아냈으니 Pwd(패스워드) 를 알아내보도록 하겠습니다.
사진 6 패스워드를 알아내기 위해 공격자는 예측할만한 패스워드를 만들어두고 Dictionary Attack 을 해보도록 하겠습니다. 예측 가능하다면 저처럼 사전 파일을 작성해봐도 되고 그게 아니면 Hydra 수업 때 해본 " crunch " 도구를 통해서 사전 파일을 만드시면 되겠습니다.
wpscan --url http://대상주소 --detection-mode passive -U 대상ID --passwords 사전파일경로 --password-attack wp-login
--url : 대상주소
--detection-mode passive : 수동스캔이며 소량의 요청을 보내기에 보안장비 감지 피할가능성높음
-U : 대상ID
--passwords : 사전파일
--password-attack : 공격위치
사진 8 준비해둔 사전 파일에 맞는 패스워드를 찾은 것을 확인할 수 있다.
wpscan --url http://대상주소 --detection-mode passive -U 대상ID --passwords 사전파일경로 --password-attack wp-login
--url : 대상주소
--detection-mode passive : 수동스캔이며 소량의 요청을 보내기에 보안장비 감지 피할가능성높음
-U : 대상ID
--passwords : 사전파일
--password-attack : 공격위치
사진 9 이번에는 admin이라는 계정을 찾았었으니 아까 작성했던 사전 파일을 그대로 사용해서 공격을 시도해보겠습니다.
※ admin이라는 타깃 계정을 입력하지 않고 그대로 공격하면 해당 wordpress의 여러 사용자에 대해 테스트해볼 수 있음( -t를 통해 thread 지정을 좀 낮추고 할 것)
사진 10 마찬가지로 password 가 사전 파일 안에 있었기에 도출이 된 것을 확인할 수가 있었습니다.
wpscan --url http://대상주소 -e vp
--url : 대상주소
-e : enumerate 의 줄인단어로 wordpress 취약점 열거
vp : 설치된 플러그인
사진 11 사용자의 계정들을 도출해낼 수도 있지만 그 외에도 해당 wordpress에 설치된 각종 plugin 들에 대한 취약점을 스캔할 수가 있습니다.
사진 12 상단에는 각종 버전들과 기본 정보가 나오고 하단부터 취약점들이 도출되는데 필자의 경우 취약점이 굉장히 많았습니다. 잘 보시면 " CVE " 코드들도 나오는 것을 확인하실 수 있습니다. 이렇게 도출된 취약정보들을 토대로 추가 공격 방향을 잡으시면 되겠습니다.
wpscan --url http://대상주소 -e vt
--url : 대상주소
-e : enumerate 의 줄인단어로 wordpress 취약점 열거
vt : 설치된 테마들
(사진 12) 플러그인 말고도 " vt " 옵션을 통해 테마를 기점으로 취약지점을 스캔할 수가 있습니다.
※이외에도 주로 사용하는 명령어
-o : output 으로 스캐닝 결과를 파일로저장
-t : thread를 지정할 수가 있다. 빠를수록 결과는 금방 도출되지만 무리하게 돌릴시 서비스에 무리가갈 가능성이 있음
-e ap : all plugin 으로 취약한 플러그인 외에도 모든 플러그인에 대한 정보를 알려줌
사진 14 에서 wordpress 플러그인 중에 " wpscan " 을 차단시키는 기능을 사용한다거나, WAF(Web Application Firewall) 가 차단을 하는 경우 저 빨간 박스 안쪽에 문구가 나올 테니 안된다면 확인해보시면 되겠습니다.
◆대응 방안
(1) wpscan 을 차단시킬 수 있는 plugin을 추가
(2) 계정의 ID는 되도록 남들이 많이 사용 안 하는 고유 ID를 쓰는 것이 좋다 왜냐하면 ID가 너무 기본적이다보면 패스워드도 쉬울 것으로 예상하고 공격 수행을 할 것이기 때문이다.
(3) 패스워드는 숫자, 소문자, 대문자, 특수문자 중 3가지 이상 조합하여 8자 이상을 쓸 것
(4) 되도록 최신 버전을 유지
wpscan install location : https://github.com/wpscanteam/wpscan
이번 시간은 여기까지 해보도록 하겠습니다. 어떤 권한을 가지던 계정의 암호는 양방향이기에 유추할 수도 있으며 crack을 하면 언젠가는 깨질 수밖에 없습니다. 다만 crack을 하는 게 얼마나 걸리느냐가 문제이기에 공격자가 도중에 포기할 수 있도록 조합을 까다롭게 사용하시는 것을 권해드립니다. 그럼 다음 시간에 뵙도록 하겠습니다. 감사합니다.
'IT Security > HACKABLE' 카테고리의 다른 글
[Two Greedy] theharvester 를 활용한 Email 수집 (0) | 2020.04.11 |
---|---|
[Two Greedy] Web Scanning Using Nikto (0) | 2020.04.10 |
[Two Greedy] Defacement Using Web Shell (0) | 2020.04.08 |
[Two Greedy] MiMikatz 를 활용한 Windows 계정탈취 (0) | 2020.04.07 |
[Two Greedy] Frackzip 으로 암호화 압축풀기 (0) | 2020.04.06 |