Загружаем каталог…
Загружаем каталог…
들어가며 이번 문제는 Amazon S3에 관한 문제라고 한다. 이번 기회에 Amazon 서비스와 더불어 관련된 웹서비스, 공격 방법 등을 공부해보자. Task 1.How many TCP ports are open? nmap으로 열린 포트를 확인해보자. 물론 전체 포트를 전수조사해야할 수도 있으나 우선은 옵션없이 해보자. 2개의 포트가 나왔고, 22번 포트와 80번 포트가 열려있다. Task 2.What is the domain of the email address provided in the "Contact" section of the website? Contact 라는 섹션이 있는 듯 하다. 해당 웹페이지로 접속해 Contact 섹션을 확인하자. 이메일은 mail@thetoppers.htb 이므로 도메인은 thetoppers.htb 이다. Task 3.In the absence of a DNS server, which Linux file can we use to resolve hostnames to IP addresses in order to be able to access the websites that point to those hostnames? 문제에서는 DNS 서버가 없을 시에 호스트네임을 IP로 변환하는 파일이 무엇이냐고 묻고 있다. 해당 파일은 처음 리눅스 설정 시 8.8.8.8 주소를 작성하는데 사용했던 /etc/hosts 파일이다. 찾아보니 해당 파일은 DNS서버에 질의 이전에 가장 먼저 참조하는 파일이라고 한다. 형식은 IP 호스트네임 형식을 사용한다. 그래서 도메인에 http://thetoppers.htb 를 입력하면 아래와 같이 서버를 찾을 수 없다고 한다. 이는 공용 인터넷 DNS에 .htb 도메인이 등록되어있지 않기 때문이다. 이때 이전에 말했던 /etc/hosts 파일에 IP-호스트네임 매핑 정보를 저장해야 한다. 해당 정보를 저장한 후에는 해당 도메인 네임으로 서버에 접근 가능하다. Task 4. Which sub-domain is discovered during further enumeration? 이전까지 특정 도메인의 서브디렉토리를 Gobuster 를 이용해서 찾곤 했다. 하지만 이들은 서브도메인을 찾을 수는 없었다. 하지만 서브도메인 또한 서브디렉토리처럼 gobuster를 이용해 찾을 수 있을 것 같았다. 따라서 Gobuster를 이용해 서브도메인을 탐색하는 방법을 찾아보았다. 찾아보니 dns 옵션을 이용하는 방법과 vhost 옵션을 이용하는 방법이 존재했다. dns 옵션은 -d 옵션과 함께 특정 도메인에 대해 DNS 서버에 워드리스트의 단어를 붙혀 질의하는 방식이며, vhost 는 -u 옵션과 함께 특정 URL에 대해 워드리스트의 단어를 붙혀 HTTP 헤더의 Host 값을 가상호스트의 서브도메인 값으로 변경하여 request를 전송하는 방식을 사용한다. dns 방식은 워드리스트의 단어들을 하나씩 도메인에 붙혀 서브도메인으로 만든 후 DNS 서버에 이를 질의하는 방식이다. 따라서 이는 퍼블릭 DNS 레코드가 존재해야 한다. 하지만 우리는 .htb 도메인에 대해 탐색중이므로 해당 방식을 사용할 수 없다. vhost 방식은 가상호스트에게 질의한다. 가상호스팅은 하나의 서버에서 여러 웹사이트 혹은 도메인을 운영하는 것이다. 가상 호스트는 하나의 IP주소에 해당하는 여러 개의 호스트가 운영될 수 있으며 Public DNS 레코드를 가지지 않을 수 있다. vhost 모드는 DNS 질의 대신 HTTP 헤더의 Host 필드에 워드리스트를 이용해 서브도메인을 작성한다. IP는 가상호스트이므로 동일하기 때문에 HTTP 헤더를 조작하는 것만으로도 브루트포싱이 가능한 것이다. (출처: https://www.moonding.co.kr/how-to-use-gobuster/ ) 첫 번째 이미지는 vhost 방식을, 두 번째 이미지는 dns 방식을 이용했다. 첫 번째 이미지에서 s3.thetoppers.htb , gc._msdcs.thetoppers.htb 서브도메인이 발견되었다. gc._msdcs 는 AD에서 글로벌 카탈로그 서버를 찾기 위해 사용되는 DNS 레코드 및 경로라고 한다. s3.thetoppers.htb 는 Amazon S3 서비스가 동작중인 서버라고 한다. 물론 사용자가 임의로 서브도메인네임을 s3.~~로 설정했을 수도 있다. 본 Task의 정답은 두 서브도메인 중 s3.thetoppers.htb 였다. Task 5. Which service is running on the discovered sub-domain? Task 4에서 기술하였듯, Amazon S3 서비스가 동작중이다. 추가로, /etc/hosts에 s3.thetoppers.htb 도메인에 대한 IP 정보를 추가하면 해당 도메인에 접근할 수 있다. Task 6. Which command line utility can be used to interact with the service running on the discovered sub-domain? Amazon S3와 상호작용가능한 CLI 유틸리티라니.... 모르겠다. 찾아보자. 출처: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3.html Amazon CLI를 이용하면 Amazon S3 기능에 접근할 수 있다고 한다. 근데 S3가 뭐지? 또한 찾아보자. 출처: https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/Welcome.html S3(Simple Storage Service)란 클라우드 저장소 서비스라고 한다. 또한 모든 데이터는 고유한 HTTP/HTTPS URL을 통해 웹 기반 API로 업로드, 다운로드가 가능하다고 한다. 결국 구글드라이브처럼 클라우드 스토리지 서비스지만 REST API를 통해 업로드, 다운로드가 가능하다. 이를 CLI 명령어를 통해서도 실행할 수도 있고. 따라서 이번 Task의 답은 awscli . Task 7. Which command is used to set up the AWS CLI installation? 해당 task의 답은 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html 를 참고하라고 한다. 위의 이미지는 https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html 를 참조했다. aws configure 명령어를 이용해 AWS CLI setup이 가능하다고 한다. Task 8. What is the command used by the above utility to list all of the S3 buckets? 문제의 힌트에서 https://docs.aws.amazon.com/cli/latest/reference/s3/ 를 참고하라고 한다. 주 내용은 다음과 같다. 저수준 API 제어가 필요할 경우 aws s3api 를 이용할 것 LOCALPATH (로컬 파일 혹은 디렉토리의 경로), S3URi 중 하나의 옵션을 반드시 이용할 것 aws s3 <명령어> 의 형태를 가지며, 명령어는 cp,ls,mb(버킷 생성) ,rb(버킷 삭제), mv 등의 명령어가 있다. 따라서 aws s3 ls 로 S3 버킷의 리스트를 확인할 수 있다. 이때 위와 같이 사용할 경우 에러가 발생한다. 이는 옵션을 주지 않을 시 퍼블릭 AWS 클라우드 주소( https://s3.<리전>.amazonaws.com )로 접속을 시도하기 때문이라고 한다. 따라서 로컬 머신의 엔드포인트를 지정해야 한다. 이때 --endpoint-url 옵션을 이용한다. S3 버킷 내부에 index.php가 존재한다. 따라서 본 Task의 정답은 aws s3 ls . Task 9. This server is configured to run files written in what web scripting language? 위 이미지에서 봤듯, PHP 파일이 존재한다. 따라서 답은 PHP . Task 10.Submit the flag located in /var/www/. Task 9에서 PHP가 존재한다고 했으므로 S3에 PHP 웹쉘을 업로드해 실행하면 리버스쉘을 실행시킴과 동시에 flag를 찾아서 읽을 수 있을 것이다. 우선 시험용 php파일인 shell.php를 생성했다. 업로드는 이전의 ls 대신 cp를 사용하면 된다. 이제 /shell.php로 접속해보자. php가 실행되었다. 이제 /var/www에 위치한 flag를 출력해보자. 이때 리버스쉘을 실행시키기 전에 cat /var/www/flag.txt 를 실행시켜보자. 운이 좋으면 권한상승 없이 가능할 것이다. shell.php를 <?php system('cat /var/www/flag.txt'); ?> 로 수정한 후 파일을 S3 버킷에 재업로드한 후 shell.php에 재접속했다. flag 출력 완료! 마치며 사실 이전에 풀다가 중간에 다시 풀이를 작성하느라 생략된 부분이 많다(aws configuration 에러 등). 가상호스팅도 짧게 풀어냈지만 실제로는 이해하는데 시간을 꽤나 잡아먹었고, AWS도 많이 써보지 않았어서 꽤나 애먹으며 힌트의 도움을 받은 문제였다. 결론은 AWS 또한 권한설정 등을 세부적으로 설정해야하며, 온디멘드 서버 또한 보안서비스에 의존하지 않고 내부 파일 보안설정 등이 필수적이라는 것이다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
HTB LABS:Three. 들어가며 이번 문제는 Amazon S3에 관한 문제라고 한다. 이번 기회에 Amazon 서비스와 더불어 관련된 웹서비스, 공격 방법 등을 공부해보자. Task 1.How many TCP ports are open? nmap으로 열린 포트를 확인해보자. 물론 전체 포트를 전수조사해야할 수도 있으나 우선은 옵션없이 해보자. 2개의 포트가 나왔고, 22번 포트와 80번 포트가 열려있다. Task 2.What is the domain of the email address provided in the "Contact" section of the website? Contact 라는 섹션이 있는 듯 하다. 해당 웹페이지로 접속해 Contact 섹션을 확인하자. 이메일은…
Открыть источник