Docker 컨테이너 취약점 분석을 위해 취약점이 존재하는 Docker 가상환경을 공격해보는 실습을 진행했다.
취약점 분석을 진행할 환경은 다음과 같다. Vulnhub에서 제공하는 docker 취약점 ova이다. docker_ova를 VM ware에서 실행하게 되면, Hard와 Easy로 난이도를 선택할 수 있고, 나는 Easy로 진행했다.
먼저, 실행하면 IP Address가 192.168.5.135인 것을 확인할 수 있는데 다음과 같은 절차로 점검을 진행했다.
1) 포트 점검
2) 프로토콜별 정보 수집
3) 디렉토리 검사(dirb)
4) nikto 웹 스캔
5) 웹 해킹 취약점분석
6) 시스템 해킹
I) 포트 점검 - Nmap을 통해 칼리 리눅스 192.168.5.135를 먼저 분석한다.
Nmap을 통해 포트스캔을 해보면 22, 2375, 8000번 포트가 열려있는 것을 확인할 수 있고, 8000번 포트가 웹 서버인것을 확인할 수 있다.
II) 포트 별 정보수집
웹서버인 것을 확인했으므로, 192.168.5.135:8000에 접근하면 다음과 같은 페이지를 확인할 수 있으며 Post의 문구를 확인해보았을때 WordPress로 만든 페이지임을 확인할 수 있다.
III) dirb 디렉토리 분석
디렉토리 분석을 통해 wp-admin이라는 페이지가 존재하는 것을 확인할 수 있다. 특히, wp-content나 wp-includes는 플러그인을 통해 만든 페이지라면 숨길수 없다. 이를 접근해보면
다음과 같은 페이지가 존재하는 것을 확인할 수 있다. 또, robots.txt 페이지도 존재하는 것을 확인할 수 있다. 접근해보면,
다음과 같이 확인할 수 있다.
또, xmlrpc.php를 통한 취약점을 exploit database에 검색해보면
다음과 같이 존재하는 것을 확인할 수 있다. 이를 통해, xmlrpc가 Wordpress의 취약점인 것을 알 수 있다.
다음 페이지가 WordPress를 통해 제작이 되었음을 확인했으니, Wordpress 전용 스캔도구인 WPscan을 통해 scan을 진행한다.
wpscan을 통해 확인을 하면 다음과 같이 취약점이 존재함을 확인할 수 있다.
또한, 다음과 같이 옵션을 준다.
- -e : 이 옵션은 다양한 항목들을 열거(enumerate)하는데 사용된다. 뒤에 오는 매개변수에 따라 열거되는 항목이 달라진다.
- ap (all plugins) : 설치된 모든 플러그인을 열거한다. 이는 설치된 플러그인 중에 알려진 취약점이 있는지 확인하는 데 유용하다.
- at (all themes) : 설치된 모든 테마를 열거한다. 이는 설치된 테마 중에 알려진 취약점이 있는지 확인하는 데 유용하다.
- u (users) : 사용자 계정을 열거한다. 이는 잠재적인 공격 대상이 될 수 있는 사용자 계정을 확인하는 데 유용하다.
즉, 명령어 wpscan --url http://192.168.5.135:8000 -e ap -e at -e u는 지정된 WordPress 사이트에서 설치된 모든 플러그인, 모든 테마, 그리고 사용자 계정을 스캔하여 열거한다. 이러한 정보는 사이트의 보안 상태를 평가하고 잠재적인 취약점을 식별하는 데 도움이 된다.
결과를 확인해보면 bob이라는 계정이 존재함을 확인할 수 있다. 앞서 발견한 로그인 페이지에 bob이라는 계정을 알았으니 ID는 bob 패스워드는 무차별 대입 공격을 진행해서 알아 낼 수 있다. 무차별 대입 공격을 하기 위해, github seclists를 이용했다.
gitclone 명령어를 통해 kali Linux에 받아준 다음,
다음과 같이 명령어를 수행한다.
결과를 통해 ID는 bob , Password는 Welcome1임을 알수 있었다.
따라서, 앞서 발견한 wp-admin 페이지로 접속해서 알아낸 계정을 통해 로그인을 시도하면 다음과 같이 WordPress Dashboard에 접근이 가능하다.
플러그인 페이지를 접근하면 Add New를 눌러 파일업로드가 가능함을 알수 있다. 따라서, 웹 쉘을 제작하여 공격이 가능하다는 것이다. 또한, 기존의 플러그인에 소스코드를 업로드하는 RCE공격이 가능함을 알 수 있다. 여기서 RCE공격을 진행할 것이다.
먼저, 웹 쉘을 weevely를 통해서 shell.php라는 쉘을 제작한다.
weevely란 세션 연결 기반의 악성코드 웹쉘이다. 그 후,
다음과 같이 제작한 웹쉘을 코드사이에 삽입한다.
삽입한 코드를 저장하고 코드를 삽입한 파일을 실행하게 되면 정상적으로 세션이 연결되는 것을 확인할 수 있다.
접근했으면 ip addr을 통해 정보를 확인했을때 ip들을 확인할 수 있다. 172.18.0.4인 것을 확인할 수 있다.
실행중인 proc들을 확인하기 위해 /proc로 접근하고 확인하면 다음과 같은 실행중인 프로세스들이 있는 폴더를 확인할 수 있고 1로 접근해서 cat cgroup을 통해 확인하면
지금 현재 들어와있는 세션이 도커환경임을 알 수 있다. 들어와있는 Docker환경의 정보를 수집하기위해 nmap 바이너리 파일을 wget 명령어를 통해서 가져와야한다. 하지만 wget 명령어를 수행할 수 있는 권한이 없다. 따라서, 권한이 부여돼있는 tmp폴더로 접근해서 가져와야한다.
다음과 같이 가져온다. 그 후 nmap에 chmod를 통해 실행 권한을 부여하고 nmap을 통해 앞서 보았던 eth0 ip의 대역폭을 스캔한다.
포트 스캐닝을 진행하면 22,3306,22,80 포트가 열려있는 것을 확인할 수 잇다. 0.4가 웹서버이고 우리가 접근했던 환경임을 알 수 있다. 여기에서 중요한 정보인 mysql이란 db서버의 ip를 확인할 수 있다.
그 후, wp-config.php 의 정보를 확인하여 db의 연결정보를 확인하면
다음과 같은 정보를 확인할 수 있다.
Db에 정보를 얻기위해서 db서버에 연결해야하는데, 터널링 공격을 통해 연결할 수 있다.
따라서 metasploit을 통해 공격을 진행할 것이다. 먼저 msfconsole을 열어주고, wordpress_xmlrpc에 대한 취약점 스크립트가 존재하는지 확인한다. wp_admin_shell_upload라는 취약점 스크립트를 통해
다음과 같이 설정해주고 공격을 진행하게되면 세션이 연결됨을 확인할 수 있다. 세션이 연결됐으므로 이제 포트포워딩을 진행해야한다.
다음과 같이 포트포워딩을 해주고 8022번 포트로 접속을 하게 되면,
다음과 같이 db서버에 접속이 되는것을 확인할 수 있다.
다음 명령어를 수행하고 앞서 db연결정보를 확인했을 때 알아낸 db 비밀번호를 입력하면 다음과 같이 172.18.0.3의 db서버에 접속할 수 있다. 이런식으로 다른 컨테이너로 접속하여 정보를 알아낼 수 있다.
'모의해킹' 카테고리의 다른 글
Union SQL injection (0) | 2024.06.11 |
---|---|
Vulnhub: BOREDHACKERBLOG:Social Network 모의해킹 (0) | 2024.05.12 |