본문 바로가기

보안 프로젝트

[TryHackMe] Silver Platter 문제풀이

반응형

안녕하세요 이번에 풀어볼 문제는 Silver Platter입니다.

 

https://tryhackme.com/r/room/silverplatter

 

Silver Platter

Can you breach the server?

tryhackme.com

 

처음에 주어진 자료는 타겟의 IP이고 목표는 타겟의 서버의 유저와 root에 위치한 파일 확보문제입니다.

 

우선 타겟 IP를 상대로 nmap을 이용하여 지정된 IP 주소에 대해 포트 스캔 및 서비스 탐지를 수행하며, 결과를 파일에 저장합니다.

-sC의 경우 Nmap의 기본 스크립트를 실행하여 서비스 버전 검출, 취약점 탐지, 기본 인증 확인, 기타 정보 수집과 같은 추가 정보들을 수집합니다.

-sV의 경우 각 열린 포트에서 실행 중인 서비스의 이름과 버전을 식별합니다.

-oN nmap_scan.txt 의 경우 스캔 결과를 nmap_scan.txt라는 파일에 일반 텍스트 형식으로 저장합니다.

이 명령어는 Nmap사용하여 지정된 IP 주소에 대해 포트 스캔 및 서비스 탐지를 수행하며, 결과를 파일에 저장합니다.

 

여기서 중요하게 봐야 할 부분은 타겟 IP에는 22번 포트에 SSH가 열려 있고 80번과 8080포트가 열려있다는 사실을 확인할 수 있습니다.

 

그렇다면 이번에는 gobuster를 이용해서 지정된 URL의 디렉토리 및 파일을 열거하고, 숨겨진 디렉토리나 파일을 찾아봅시다.

-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 의 경우 디렉토리나 파일 검색에 대입할 wordlist의 경로로

공격자 pc에서 사용할 wordlist의 파일경로를 지정해줍니다.

 

-x php,txt,html,sh,js,css,py 의 경우 검색할 파일의 확장자를 지정합니다.

 

 

위와 마찬가지로 8080번 포트 역시 진행해줍니다.

 

허나, 유효하다고 생각할만한 정보가 나오지 않으므로 타겟IP에 브라우저를 이용해 접속하여 정보를 수집해봅시다.

 

이런 페이지가 나옵니다. 본격적인 탐색을 시작해봅시다.

 


contact에서 Silverpeas라는 project명과 scr1ptkiddy라는 제작자의 이름을 수집하였습니다.

 

 

이번에는 메인 페이지의 소스코드를 뜯어보았습니다. 우리는 주석에서 ajlkn라는 이름을 수집하였습니다.

 

이제 해볼 일은 수집한 정보를 활용할 차례입니다.

silverpeas를 검색하게되면

 

띠용? 이런 사이트가 나옵니다. 이제 여기를 더 뒤져봅시다.

 

우리는 여기서  여기서 새로운 url과 해당 기본 자격증명으로 아이디를 SilverAdmin으로 설정하면 된다는 중요한 정보를 확인합니다.

허나, 우리는 현재 열려있는 포트가 22, 80, 8080이 열려있다는 사실을 알고 있습니다.

이를 이용하여 http://10.10.242.8:8080/silverpeas/ 에 접속을 하게되면

 

 

http://10.10.242.8:8080/silverpeas/defaultLogin.jsp 사이트에 연결이 되게 됩니다.

 

이제 해야 할 일은 아래에 2001-2022의 개발 기간을 고려해서 CVE를 찾아봅시다.

 

 

2024년이라는 늦게 발견된 CVE를 발견했습니다.

해당 CVE에 따르면 password omitting 취약점이 존재함을 알 수 있습니다.

 

따라서 이제 id는 기본 자격증명으로 아이디를 SilverAdmin로 설정하고 password omitting을 이용해봅시다.

 

일단 proxy를 이용해 request를 intercept한 후

 

password를 아예 지워서 forward해줍니다.

 

자 이제 성공했으니 탐색을 추가적으로 해줍시다.

 

 

아까 contact에서 본 정겨운 이름인 scr1ptkiddy가 있습니다. 잘 하고있다는 자신감을 줍니다.

허나, 별다른 정보를 얻을것이 없으니 다시 한 번 CVE를 검색해봅시다.

 

 

CVE-2023-47323: Broken Access Control Allows Attacker to Read All Messages 이런 CVE가 있습니다. 

이를 이용하여 메시지 확인하는 곳을 찾아봅시다.

 

뭔가 찾았습니다. http://10.10.242.8:8080/silverpeas/RSILVERMAIL/jsp/ReadMessage.jsp?ID=2 이런 url인데 CVE에서 찾은 근거를 기반으로 ID parameter를 조작하여 순회해서 다양한 메시지를 찾아봅시다.

 

 

우리는 tim의 SSH 계정을 찾았습니다.

이제 tim의 SSH 계정에 접속해봅시다.

 

성공했습니다. 이제 tim의 권한을 파악해봅시다. sudo -l 을이용해 해당 사용자가 sudo 명령어를 통해 실행할 수 있는 작업 범위와 제한 사항을 확인해봅시다.

 

 

이건 뭐 딱히 별다른 권한을 갖고 있지 않습니다. 이번에는 id 명령어를 이용해 id 현재 사용자의 UID(User ID), GID(Group ID), 그리고 소속된 그룹을 확인해봅시다. 이 명령어는 시스템 관리 및 권한 확인 시 매우 유용합니다.

 

자 일단 group이 존재한다는 사실을 확인하였습니다.

 

또한 여기서 tim을 이용해 1번 문제인 user flag를 찾아봅시다.

 

ls를 통해 디렉토리와 파일을 탐색하고 나온 user.txt 파일안에서 우리는 cat user.txt 명령어를 통해 1번 문제의 답인 user flag를 찾아내었습니다. 이제 2번 문제인 root flag를 찾으러 떠납시다.

 

 

이번에는 cat /var/log/auth* | grep -i pass 명령어를 통해 auth관련 Log를 뒤져봅시다.

 

/var/log/auth* 의 경우 /var/log/ 디렉터리 내에서 auth로 시작하는 모든 파일(auth.log, auth.log.1, auth.log.gz 등)을 읽습니다.

| 의 경우 파이프로 앞의 cat 명령어 출력 결과를 뒤의 grep명령어 입력으로 전달합니다.

grep의 경우 텍스트에서 특정 문자열을 검색합니다.

-i pass의 경우 대소문자를 구분하지 않고 "pass"라는 단어를 포함한 모든 줄을 검색합니다.

 

이를통해 tyler가 DB의 비밀번호를 알고있고 접속했다는 사실을 확인하였습니다.

 

우리는 DB의 비밀번호와 인간의 심리를 이용해서 tyler의 SSH 계정에 접속해봅시다.

 

역시 모든 인간들의 생각은 거기서 거기인거 같습니다. 

이제는 tyler의 sudo 권한을 확인해봅시다. 

 

다됩니다. 이제 root flag를 얻으러 갑시다.

 

sudo su를 이용해 root권한을 얻어오고  위 사진과 같이 root flag를 찾아오게되며 문제를 마무리하게 됩니다.

 

긴 글 읽어주셔서 감사합니다.

반응형