Vulnhub란? 가상환경 모의침투를 제공하는 사이트로 virtuallbox 또는 vmware등 가상머신에 ova파일을 업로드해서 취약점을 가지고있는 가상환경을 구축한다.
그 후, 가상환경 제작자의 의도에 맞게 취약점을 파악한 뒤 공격해서 정보를 취득한 후 권한탈취하여 플래그를 얻는 방식이며, Wargame의 다른 방식이라고 할 수 있다.
Vulnhub 사이트의 목적으로 누구나 디지털 보안, 컴퓨터 소프트웨어 및 네트워크 관리 분야에서 실질적인 '실습' 경험을 얻을 수 있는 자료를 제공한다. Vulnhub는 https://www.vulnhub.com/ 링크로 접속할 수 있다.
이번엔 Vulnhub에서 BOREDHACKERBLOG:Social Network 가상환경을 통해 모의해킹을 진행했다.
사용한 도구 : Kali Linux (dirb, metasploit, msfvenom) 등등
먼저 Vulnhub에서 BoredHackerBlog:Social Network ova파일을 받아 실행하면 다음과 같은 화면을 확인할 수 있다.
1) 네트워크 탐색
먼저 공격자의 ip인 Kali 환경의 ip를 확인하면 10.0.2.4로 IP를 확인할 수 있다.
가상환경을 실행하면 아무런 정보도 얻을 수 없고 확인할 수 없기 때문에, 칼리 리눅스에서 네트워크 스캔을 통해서 먼저 공격대상의 ip를 확인해야 한다.
그 후, Kali Linux의 ip주소가 10.0.2.4 이므로 같은 대역폭의 모든 ip를 조사하기 위해서 명령어를 수행한다.
다음과 같이 명령어를 수행하면 10.0.2.5가 살아있는 것을 확인할 수 있고, 공격 대상의 ip임을 확인할 수 있다.
2) 포트스캐닝
다음 10.0.2.5의 ip에 포트스캐닝을 수행하면 열려있는 포트를 확인할 수 있다.
위와 같은 결과가 출력된다. 이를 확인해보면 22번, 5000번 포트가 열려있는 것을 확인할 수 있고, 5000번포트가 http인 것을 확인할 수 있다. 따라서 10.0.2.5의 5000번 포트로 홈페이지에 접속할 수 있음을 확인하였다.
3) 웹 정보 수집
앞서 발견한 홈페이지를 접속하면 다음과 같은 화면을 확인할 수 있다.
발견한 홈페이지 URL을 dirb 도구를 통해서 분석하게 되면,
/admin 페이지가 있는 것을 확인할 수 있다./admin 페이지를 들어가면 소스코드를 입력할 수 있는 부분을 확인할 수 있고, 소스코드 업로드 취약점을 이용해서 리버스 쉘을 통해 접근할 수 있었다.
4) 리버스 쉘 공격
소스코드를 업로드 할 수 있는 텍스트 창을 확인할 수 있기 때문에 소스코드 업로드 취약점을 이용해서 리버스 쉘을 통해 접근할 수 있었다.
소스코드는 https://www.revshells.com/ 리버스 쉘 코드를 만들어주는 사이트를 이용하였고, Python3 shortest에 ip에 공격자 ip 포트번호는 4444로 하였다.
위에서 제작한 소스코드를 admin 페이지에 입력하게되면, 다음과 같이 업로드 할 수 있다.
Nc란 netcat의 약자로 TCP 또는 UDP 프로토콜을 사용하여 네트워크 연결을 통해 데이터를 읽고 쓰는 명령줄 유틸리티 이다. 포트 오픈을하고 확인할 수 있다.
그 후, admin 페이지에 앞 서 제작한 리버스 쉘 코드를 업로드하게되면 세션을 탈취하는 것을 확인할 수 있다.
포트를 열고 리버스 쉘 코드를 업로드하게 되면 파일에 접근하게 되고, ls명령어를 수행하면 Dockerfil과 main.py등 파일들이 있는 것을 확인할 수 있다.
proc 명령어를 수행하면 들어온 환경이 도커임을 알 수 있다.
5) 도커 포트 스캐닝
Ipconfig를 확인하면 172.17.0.3인 것을 확인할 수 있다. 인접한 다른 도커 네트워크를 확인하기 위해서 nmap binary 파일을 통해 수행해야 한다. 따라서 nmap static binary 파일을 칼리 리눅스 환경에 받아놓는다.
Nmap 파일을 받은 후, 명령어를 통해 python 서버를 열고 wget을 통해 파일을 wget 명령어를 통해 받을 준비를 한다.
그 후, 8000번 포트를 통해 wget 명령어를 수행하여 Nmap 바이너리 파일을 내려 받는다.
Wget을 통해 파일이 있는 경로를 지정해주어 내려받게 되면 도커환경 측에 정상적으로 파일을 다운로드 받을 수 있는 것을 확인할 수 있다. 그 후, nmap 파일에 대한 실행 권한이 없기 때문에 실행 권한을 chmod +x 를 통해 준다.
Nmap 파일을 권한을 부여한 뒤 앞서 도커 ip인 172.17.0.3과 같은 대역폭의 네트워크를 스캔한다.
Nmap을 통해 네트워크 스캔을 수행하면, 다음과 같은 결과가 출력된다.
다음을 확인 해보면 172.17.0.1과 172.17.0.2가 존재하는 것을 확인할 수 있고, 172.17.0.1에는 22번 포트가 열려있는 것을 확인할 수 있고, 172.17.0.2에는 9200번 포트가 열려있는 것을 확인할 수 있었다.
9200번 포트는 elasticsearch에 포트번호로 확인할 수 있었다.
6) Reverse TCP 공격
9200번 포트가 오픈되어있는 것을 확인했으니, 9200번 포트를 이용해서 172.17.0.2로 접근할 수 있어야한다. 따라서, 먼저 쉘을 탈취하기 위해 스크립트를 msfvenom을 통해서 작성한다.
그 후, metasploit을 통해 쉘을 탈취해야 하므로
먼저 msfconsole을 통해 exploit/multi/handler를 연다.
그 다음, msfvenom을 통해 생성한 x.py파일을 도커 환경으로 다운로드 받아 실행한다. 사진에서는 reverse.py라고 제작했지만 이후, x.py로 똑같은 파일을 하나 더 생성해서 진행했다. 앞에서 했던 nmap binary 파일을 다운로드 받을 때와 동일하게 받았다. Python3 –m http.server를 통해 서버를 열고 wget를 통해 경로를 지정하고 받아온다.
x.py를 받아와서 실행하기 위해서는 python을 붙혀서 x.py를 실행하면 handler를 통해 쉘을 제어할 수 있다.
핸들러로 쉘 탈취에 성공한 후, elasticsearch 포트를 통해 172.17.0.2의 쉘을 탈취하기 위해서 먼저, 포트포워딩을 한다.
포트 포워딩을 한 후, use exploit/multi/elasticsearch/search_groovy_scrip
T를 사용해 리버스 쉘 공격을 진행한다.
다음과 같이 설정한 뒤, 공격을 수행하면. 성공했다는 메시지와 함께 세션이 열리는 것을 확인할 수 있고, background에서 실행된 세션이 두 개 인 것을 확인할 수 있고, 172.17.0.2에 접근한 것을 확인할 수 있다.
Reverse_tcp 공격을 수행한 뒤, 탈취된 세션에 ls명령어를 수행하게 되면 파일들을 확인할 수 있는데, 그 중 password라는 파일을 볼 수 있다.
이 password 파일을 cat 명령어를 통해 확인하면 암호화된 해쉬값을 확인할 수 있는데, 유형을 확인하기 위해 https://crackstation.net 라는 사이트를 사용하여 해쉬함수 유형이 MD5인 것을 확인할 수 있었다.
그림 4-19의 해쉬 값을 해독하기 위해서 passwords에 있는 내용을 md5.lst라는 텍스트파일로 저장해서 hashcat을 사용했다. hashcat이란 암호 해독 및 크래킹 도구로 해시 함수로 암호화된 비밀번호를 복구 하는 데 사용하는 도구이다.
$hashcat –username –m 0 –a 3 md5.lst -1 ?d -2 ?l ?1?1?1?1?2?2?2?2 –force |
md5.lst 파일에 앞서 password의 내용을 저장하고 다음과 같은 명령어를 수행하게 되면,
다음과 같은 결과가 출력된다. 또 앞 명령어 뒤에 –show 옵션을 붙혀주면 다음과 같은 결과를 확인할 수 있었다.
이를 통해, john의 id와 password를 확보할 수 있었다. John 이외에 아이디와 패스워드로 공격대상에 로그인을 시도하였지만 실패하였다. 접속은 ssh를 통해 성공적으로 로그인 되는 것을 확인할 수 있었다
7) Root 권한 탈취
먼저 boredhackerblog ova에 john으로 접속을 해서 unmae –a를 확인해보면 다음과 같다.
위 uname –a를 통해 정보를 OS 정보를 확인했을 때 3.13-0.24-generic버전을 사용하고 있었고 이를 구글에 검색해 보았다.
다음과 같이 37292파일로 CVE2015-1328, overlayfs 취약점이 존재하는 것을 확인했다. 다음을 실행하기 위해서 37292파일을 받아서 wget을 통해 john쪽으로 넘겼으나 실행이 되지 않았고 exp파일로 변환하여 실행해보았으나 glibc 2.34가 필요하다는 오류가 발생하였다. 찾아보니 낮은 버전의 ubuntu의 gcc로 exp파일로 변환하여 똑같이 실행해보았지만 gcc가 없어서 동적라이브러리 생성이 불가하다는 오류가 발생하였으며, john의 계정으로는 권한이 존재하지 않아서 gcc를 설치하거나 할 수 없었다.
3.13-0.24-generic은 낮은 버전의 라이브러리를 사용하고 있기 때문에 gcc가 존재하지 않고, make나 다른 도구들도 존재하지 않았다. 여기서 GCC란 GNU 프로젝트의 일환으로 널리 쓰이고있는 컴파일러이다.
'모의해킹' 카테고리의 다른 글
Union SQL injection (0) | 2024.06.11 |
---|---|
Vulnhub : Vulnerable Docker(easy) (1) | 2024.06.01 |