Pentesting CTF/tryhackme

[Tryhackme] - RootMe

Roronoa 2023. 3. 20. 02:26
반응형

문제 이름

[그림 1] RootMe 문제

https://tryhackme.com/room/rrootme

 

TryHackMe | RootMe

A ctf for beginners, can you root me?

tryhackme.com

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

정보 수집

[그림 2] target ip

대상 ip를 확인하였다.

 

[그림 3] 포트스캐닝

nmap을 이용하여 포트스캔을 진행하였다. sV 옵션으로 열린 포트의 서비스와 버전정보를 탐색하고 O옵션을 통해 운영체제를 탐색하였고 리다이렉션을 이용해 scan_res에 nmap결과 값을 저장시켰다.

scan_res를 확인해보면 22번 ssh 포트와 80번 http포트가 열려있다. 포트가 2개가 열려있다.

Apache 버전은 2.4.29 버전이다.

해당 웹 사이트를 들어가보도록 하겠다.

 

[그림 4] 해당 web site

해당 웹 사이트에 들어가니 root를 획득할 수 있냐고 묻는다.

일단 정보가 부족하니 gobuste를 이용하여 Directory scan을 진행한다.

[그림 5] 디렉토리 스캔

디렉토리 스캔을 진행하였다.

uploads 페이지와 panel 페이지가 수상하다.

 

[그림 6] uploads 페이지

uploads 페이지는 말 그대로 uploads한 결과를 보여주는 페이지이다.

 

[그림 7] panel 페이지

panel 페이지는 file을 upload하는 기능을 하는 페이지이다.

웹 쉘을 올려서 실행하면 해당 서버를 장악할 수 있을것이라고 생각이 든다.

 

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

위 사이트에서 리버스 쉘을 다운받았다.

[그림 8] 리버스 쉘 다운

리버스 쉘을 다운받고 이름을 변경하였다.

 

[그림 9] 리버스 쉘 코드 수정

ip와 포트를 설정 해주었다.

 

[그림 10] 리버스쉘 업로드

리버스 쉘 업로드를 진행한다.

 

[그림 11] 업로드 실패

php가 필터링되어 업로드가 안되는 것 같다.

php를 Php, PhP 이렇게 대문자로 바꿔서 업로드해도 실패를 하였다.

php와 다른 확장자이지만 php랑 똑같은 역할을 하는 확장자인 php4, php5, phtml로 확장자를 변경하여 업로드를 진행해보도록 하겠다.

php5로 진행을 하였다.

 

[그림 12] php5 확장자 업로드

php5로 확장자를 변경하여 업로드를 진행하였다.

 

[그림 13] 업로드 성공

php5로 업로드를 진행하니 업로드가 성공하였다.

 

[그림 14] uploads 페이지

uploads 페이지에 들어가보니 성공적으로 리버스쉘이 올라가 있음을 확인할 수 있다.

 

[그림 15] 포트 열기

nc를 이용하여 9999번 포트를 열었다.

 

[그림 16] 리버스 쉘 실행

uploads에 리버스쉘을 클릭하여 실행하였다. 실행하니 쉘을 얻었다.

 

[그림 16] setuid 파일 찾기

find / -type f -perm -4000 -ls 2> /dev/null

이 명령어를 이용하여 setuid가 적용된 파일을 찾을 수 있다.

 

[그림 17] setuid가 적용된 수상한 파일 발견

python이 setuid가 걸려있다.

python을 이용하여 권한 상승이 가능할 것이라고 예상된다.

 

[그림 18] 대화형 터미널 업그레이드

python -c "import pty;pty.spawn('/bin/bash')"

위 명령어를 이용하여 대화형 터미널로 업그레이드 시켰다.

 

https://gtfobins.github.io/

 

GTFOBins

pg Shell File read SUID Sudo

gtfobins.github.io

위 사이트에서 권한 상승을 위한 형식을 찾을 수 있다.

 

[그림 19] python setuid shell 실행 명령어

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

위 명령어를 이용하여 root shell을 얻을 수 있다.

 

[그림 20] root shell 획득

id 를 쳐보면 uid가 33으로 root를 획득 못했다고 생각할 수 있지만 옆에보면 euid가 0으로 root로 설정되어 있다.

EUID는 SetUID 권한이 설정된 실행 파일에 의해 변경되며, 일시적으로 다른 계정의 UID를 저장해서 사용할 수 있도록 해준다. 즉 일시적으로 파일 소유자의 권한을 얻게 되는 것이다.

따라서 euid가 root이므로 일시적으로 root의 역할을 한다.

[그림 21] shadow 파일 확인

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