작은 메모장
38. 취약점 진단 실습 1 본문
제공받은 리눅스 도커 서버를 실행하여 취약점을 진단할 것이다.
Nmap의 기본 기능으로 포트를 스캔해본다.
열려있는 포트는 22, 2375, 8000의 3개
8000번 포트는 통상적으로 사용되는 포트는 아니다.
때문에 8000번 포트로 직접 접속하면 웹 서비스가 동작하는 것을 확인할 수 있다.
더 많은 정보를 얻기 위해, -sC 옵션을 사용하여 더욱 자세하게 스캔해본다.
결과를 분석을 해보자.
아까 확인한 8000번 포트의 아파치 정보를 확인할 수 있다.
버전 정보부터, 해당 페이지가 어떤 익스텐션을 사용하여 동작되고 있는지 확인이 가능하다.
해당 버전의 취약점을 이용하여 공격을 시도할 수 있다.
2375 포트에 대한 정보도 확인할 수 있다.
해당 포트는 외부에서 도커 서비스를 접근할 때 진입하는 포트로, 이 포트를 통해 해당 서비스로 진입할 수 있다.
문제는, 이 포트를 통해 외부에서 내부 도커 서비스를 제어할 수 있다는 점.
실제로 이 포트에 대해 컨테이너 확인을 하면, 컨테이너 목록을 그대로 전달하는 것을 확인할 수 있다.
통상적으로 이를 이용하여 악성 컨테이너를 설치하는 방식으로 공격이 진행된다.
굉장히 위험한 취약점인 것.
실제로 도커 서비스에서 2375 포트를 열어놓은 경우를 여러개 확인할 수 있다.
아까 얻은 웹 서비스 포트 값으로 nikto를 실행해볼 것이다.
또, dirb를 이용하여 디렉토리 정보를 확인한다.
중간에 xmlrpc.php라는 파일이 존재하는데 이는 나중에 한번 더 살펴볼 것이다.
WordPress를 사용하는 것을 확인했으므로, 이를 통한 스캔 또한 진행한다.
더욱 자세한 스캔을 돌려본다.
이번에는 플러그인, 테마, 그리고 사용자를 중심으로 스캔한다.
다른 건 큰 변화가 없지만, 사용자 정보에서 유의미한 결과를 볼 수 있다.
bob이라는 이름의 유저를 확인했다.
해당 링크로 들어가면, 여러 정보가 노출된 것을 확인할 수 있다.
그러나 유저 정보를 알아도 이 유저의 비밀번호를 알아낼 수 없었다.
때문에, 로그인 페이지에서 레인보우 테이블로 비밀번호를 유추해본다.
분석을 진행하고 있는 해당 웹 페이지는 wordpress 로그인을 지원하고 있다.
이를 분석할 것이다.
로그인을 뚫기위한 비밀번호 세트를 받을 것이다.
해당 링크(https://github.com/danielmiessler/SecLists)에서 다운받자.
이제 대입을 시작해보자.
bob 계정의 비밀번호를 획득한 것을 확인할 수 있다.
이를 가지고 로그인을 성공한 것을 확인할 수 있다.
플러그인 페이지를 확인해보면, 설치는 되어 있는데 활성화가 되어있지 않은 것을 볼 수 있다.
이를 이용한 공격은 여러가지가 있는데, 직접적으로 악성 플러그인을 업로드하는 경우도 있고,
칼리 리눅스를 이용한 리버스 공격도 진행할 수 있다.
활성화를 하지 않은 hellodolly 플러그인을 수정한다.
중간에 강제로 빈 공간을 생성하고, 저 위치에 웹 쉘을 주입할 것이다.
weevely를 사용하여 웹 쉘을 생성한 후, 이 코드를 그대로 주입한다.
주입한 후, Update File을 눌러 저장한다.
이후 웹 쉘을 실행하면, 실행하는 것은 잘 되는데, 권한이 없어 대부분의 명령어를 사용할 수 없다.
그래도 IP 확인이나 리눅스 버전정보 등의 기본적인 명령어를 사용할 수 있다.
IP를 확인한 결과 172.18번대 IP로 통신하고 있는 것을 확인할 수 있다.
따라서 이 환경은 도커 환경임을 알 수 있고, 컨테이너 격리 공간이 존재하고 있는 것을 유추할 수 있다.
때문에 cgroup을 확인하면 이 환경이 어떤 환경인지 확인할 수 있다.
명령어를 확인하면, cgroup으로 cpu와 메모리 및 쿨러 등의 이미지가 가상으로 잡혀있는것을 확인할 수 있고,
이 환경이 도커 컨테이너 내부임을 유추할 수 있다.
해당 서비스가 도커 컨테이너를 얼마나 가지고 있는지는 모르겠지만,
접속해있는 환경이 그 도커 컨테이너 중 하나라는 것 까지는 유추했다.
이 환경에서 스캔을 하면 내부에서 스캔을 하는 것과 마찬가지의 효과를 가질 수 있을 것이다.
그러나 이 환경에는 스캔할 수 있는 패키지가 설치되어 있지 않다.
따라서 패키지가 이미 바이너리 상태로 완성된 파일을 직접 업로드하여 실행시킬 것이다.
nmap 패키지(https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nmap)를 업로드한다.
물론 이 파일은 실행 권한이 없으므로, 실행 권한을 부여한다.
그 후, 파일을 실행하면, nmap을 쓰듯이 실행할 수 있다.
그 후, nmap을 172.18번대 대역으로 스캔한다.
그 결과,
0.2가 3306으로,
0.3이 80으로,
0.4가 22, 8022으로 열려있는 것을 확인할 수 있다.
즉, 한 컨테이너에서 다른 컨테이너 2개의 유무를 확인하였다.
특이한 점은, 0.4에 용도를 모르는 8022포트가 열려있는 것을 확인하였다.
이 포트를 집중적으로 분석하면 뭔가 나올 수 있다는 생각을 염두해두자.
현재 상황을 요약해보자.
다른 컨테이너들(DB, SSH)을 들어가기 위해서는
퍼블릭 영역의 도커 호스트를 통과하여,
프라이빗 영역의 워드 프레스를 통과 한 후,
다른 컨테이너로 진입하여야한다.
상당히 귀찮고 조작하기도 번거롭기 때문에, 포트포워딩으로 이 두 컨테이너의 퍼블릭 진입점을 뚫어줄 것이다.
이 과정에서 metaspolit을 사용할 것이다.
우선 초기화를 해준다.
이후, 실행을 해준다.
metaspolit에는 wordpress에 대한 공격 도구가 매우 많다.
이 중 적당한 것 하나를 사용한다.
여기서는 xmlrpc_login을 사용할 것이다.
이 후, msf을 설정한다.
설정에는 타겟 IP, 포트, 통과에 필요한 파일, 아이디, 스레드 값, 성공 시 멈춤 여부 등을 설정하였다.
어떤식의 공격이 오가는지 확인하기 위해, wireshark를 켜고 공격을 시도해본다.
msf에서 exploit을 한다.
wireshark를 보면, 중간에 POST로 요청을 전송하는 부분이 있다.
이 부분의 HTTP 흐름을 보면, 해당 요청의 결과를 성공했는지, 실패했는지 대놓고 알려주는 부분이 드러나 있다.
이 부분이 취약점이 된다.
성공이 뜬 모습.
아까 했던 웹 쉘 업로드 및 admin 계정 탈취를 자동으로 진행할 것이다.
wp_admin_shell로 진행한다.
얻은 비밀번호를 가지고 웹 쉘 공격을 시도한다.
성공시, 자동으로 쉘로 접속하는 것을 확인할 수 있다.
기존에 확인한 0.3 컨테이너로 진입한 것을 확인할 수 있다.
연결해야하는 서비스는 0.2와 0.4의 두 컨테이너를 대상으로 한다.
하나는 SSH, 나머지 하나는 DB이다.
DB, 즉 0.2로 진입하는 포트는 3306포트고,
SSH, 즉 0.4로 진입하는 포트는 22와 8022포트다.
만만한 0.4부터 시작해보자.
지금 당장 SSH 계정을 모르므로, 8022 포트가 그 대상이 될 것이다.
칼리리눅스, 즉 자신의 8022포트를 대상의 8022포트로 포트포워딩한다.
포트포워딩이 끝난 후, 해당 주소, 즉 자기자신의 8022번 포트로 들어가면 터미널이 나오는 것을 확인할 수 있다.
해당 웹 서버는 wordpress 기반으로 동작하므로, 이 wordpress 설정 안에 각종 인증정보들이 들어가 있을 것이다.
이를 확인해보자.
config 파일을 확인하면, sql의 아이디와 비밀번호를 확인할 수 있다.
해당 정보를 가지고 SQL 접속을 시도하면, 접속이 되는 것을 확인할 수 있다.
이로써, SSL부터 DB까지 접속할 수 있는 통로를 획득하였다.
'실더스 루키즈 교육' 카테고리의 다른 글
40. 취약점 진단 실습 3 (0) | 2024.02.28 |
---|---|
39. 취약점 진단 실습 2 (0) | 2024.02.27 |
37. 도커 파일과 도커 컴포즈 (0) | 2024.02.23 |
36. 도커 실습 (0) | 2024.02.22 |
35. 도커와 마이크로서비스 (0) | 2024.02.21 |