문제 이름
https://tryhackme.com/room/rrootme
TryHackMe | RootMe
A ctf for beginners, can you root me?
tryhackme.com
위 사이트에 접속하면 해당 문제를 풀 수 있다.
정보 수집
대상 ip를 확인하였다.
nmap을 이용하여 포트스캔을 진행하였다. sV 옵션으로 열린 포트의 서비스와 버전정보를 탐색하고 O옵션을 통해 운영체제를 탐색하였고 리다이렉션을 이용해 scan_res에 nmap결과 값을 저장시켰다.
scan_res를 확인해보면 22번 ssh 포트와 80번 http포트가 열려있다. 포트가 2개가 열려있다.
Apache 버전은 2.4.29 버전이다.
해당 웹 사이트를 들어가보도록 하겠다.
해당 웹 사이트에 들어가니 root를 획득할 수 있냐고 묻는다.
일단 정보가 부족하니 gobuste를 이용하여 Directory scan을 진행한다.
디렉토리 스캔을 진행하였다.
uploads 페이지와 panel 페이지가 수상하다.
uploads 페이지는 말 그대로 uploads한 결과를 보여주는 페이지이다.
panel 페이지는 file을 upload하는 기능을 하는 페이지이다.
웹 쉘을 올려서 실행하면 해당 서버를 장악할 수 있을것이라고 생각이 든다.
https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php
위 사이트에서 리버스 쉘을 다운받았다.
리버스 쉘을 다운받고 이름을 변경하였다.
ip와 포트를 설정 해주었다.
리버스 쉘 업로드를 진행한다.
php가 필터링되어 업로드가 안되는 것 같다.
php를 Php, PhP 이렇게 대문자로 바꿔서 업로드해도 실패를 하였다.
php와 다른 확장자이지만 php랑 똑같은 역할을 하는 확장자인 php4, php5, phtml로 확장자를 변경하여 업로드를 진행해보도록 하겠다.
php5로 진행을 하였다.
php5로 확장자를 변경하여 업로드를 진행하였다.
php5로 업로드를 진행하니 업로드가 성공하였다.
uploads 페이지에 들어가보니 성공적으로 리버스쉘이 올라가 있음을 확인할 수 있다.
nc를 이용하여 9999번 포트를 열었다.
uploads에 리버스쉘을 클릭하여 실행하였다. 실행하니 쉘을 얻었다.
find / -type f -perm -4000 -ls 2> /dev/null
이 명령어를 이용하여 setuid가 적용된 파일을 찾을 수 있다.
python이 setuid가 걸려있다.
python을 이용하여 권한 상승이 가능할 것이라고 예상된다.
python -c "import pty;pty.spawn('/bin/bash')"
위 명령어를 이용하여 대화형 터미널로 업그레이드 시켰다.
GTFOBins
pg Shell File read SUID Sudo
gtfobins.github.io
위 사이트에서 권한 상승을 위한 형식을 찾을 수 있다.
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
위 명령어를 이용하여 root shell을 얻을 수 있다.
id 를 쳐보면 uid가 33으로 root를 획득 못했다고 생각할 수 있지만 옆에보면 euid가 0으로 root로 설정되어 있다.
EUID는 SetUID 권한이 설정된 실행 파일에 의해 변경되며, 일시적으로 다른 계정의 UID를 저장해서 사용할 수 있도록 해준다. 즉 일시적으로 파일 소유자의 권한을 얻게 되는 것이다.
따라서 euid가 root이므로 일시적으로 root의 역할을 한다.
cat으로 shadow파일을 읽었다. root의 역할을 하는 것을 알 수 있다.
'Pentesting CTF > tryhackme' 카테고리의 다른 글
[Tryhackme] - GLITCH (0) | 2023.04.01 |
---|---|
[Tryhackme] - Basic Pentesting (0) | 2023.03.21 |
[Tryhackme] - LazyAdmin (0) | 2022.10.27 |
Tryhackme OpenVPN 설정 방법 (0) | 2022.10.26 |