본문 바로가기

보안지식/pentest

pentest 실습 (Rootme)

안녕하세요 이번엔 tryhackme에 있는 Rootme 문제을 풀어보려고 합니다.

 

간단하게 관리자 권한을 가져오면 되는 문제입니다.

 

 

시작하죠 당연히 openvpn이 되어 있어야 합니다.

 

join room!

 

그리고 start machine 까지 누르고 IP 주소 나올 때까지 기다립니다.

 

 

 

1.정보수집

 

저희의 친구 nmap을 이용하겠습니다.

 

nmap -sV -O [ip주소] > scan_res

 

nmap의 결과를 scan_res에 저장한다는 이야기입니다.

 

https://hagsig.tistory.com/94

 

Nmap 모든 옵션/스캔 방식 총 정리(설명과 예시)

Nmap 모든 옵션/스캔 방식 총 정리(설명과 예시) 1. 대상 사양(TARGET SPECIFICATION) 옵션 설명 예시 -iL 스캔할 대상을 파일에서 가져옴 nmap -iL /hagsig/scanlist.txt -iR 지정한 숫자만큼 무작위 대상을 스캔 nma

hagsig.tistory.com

저는 여기서 참고했습니다!

 

 

오호라

 

일단 tcp ssh 로 22번 포트가 열려 있고요 그리고 아파치 http가 열려 있네요.

 

80번 포트는 취약점 맛집인 웹 사이트가 열려 있다는 이야기이니 한 번 들어가 볼게요

 

 

음..

 

없네요 또 웹 소스 코드도 봤는데도 아무런 정보가 없네요.

 

그럼 어느 디렉터리가 있는지 gobuster을 이용하겠습니다.

 

gobuster dir -u http://[IP주소]/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100

 

-t 100 은 100명의 일꾼이 일을 한다는 것과 같습니다.

 

 

음 panel이 있네요 또 uploads 도 있네요

 

한 번 들어가 볼게요

 

 

아하!

 

아마 유추하지만 여기에 파일을 올리면 uploads에 파일이 올라가질 것 같습니다.

여길 이용 해서 파일 업로드 취약점을 이용해 볼게요.

 

 

 

2. 서비스 분석

 

 

그럼 간단하게 php문을 작성 후 올려볼게요

 

간단하게 안에 hello만 적었어요

 

음 무슨 언어인지 몰라도 안 올라간다는 건 알겠네요.

 

php문이 안 올라간다.. 너무 빠르게 단정 짓지 말고 다른 형식으로 보내보겠습니다. php4,php5,phtml 이 형식도 전부

php문 역할을 하니깐요.

 

 

되네요!

 

저는 phtml 형식으로 올렸습니다.

 

올라가진 것을 확인 했구요

 

실행도 되네요.

 

그럼 이제 저희가 저번에 보셨다시피 리버스 쉘을 올리겠습니다.

 

구글에 php reverse shell github 검색한 후 가장 인기 있는 걸로 가져오겠습니다.

 

https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php

 

저는 이걸 사용했어요 제일 위에 있는 걸로요.

 

그리고 wget으로 가져오겠습니다.

 

wget [깃허브 링크] 하시면 가져와질 거예요.

 

이렇게요

 

밑에 php-reverse-shell.php 파일 이름이 너무 길고 형식을 바꿔야 하니

일단 간단하게 저는 이름을 shell2.phtml로 바꾸고

 

안에 내용을 수정하겠습니다.

 

ip에는 저희 가상 IP을 적으시면 되구요 포트번호는 자유입니다

 

리버스 쉘이 간단히 말하자면 서버 측에서 원격 요청을 공격자에게 하는 코드 이잖아요?

그러니 ip에 저희 ip을 적고 포트 번호는 저는 7777로 했습니다.

 

그리고 저장 후 업로드 할게요.

 

되겠죠

 

 

 

좋아요!

 

 

 

3. Exploit

 

이제 본격적으로 쉘을 가져오겠습니다.

 

저희가 올린 리버스 쉘을 실행하기 전에 일단 새로운 터미널을 열어서 포트번호 7777을 열어두겠습니다.

 

nc -nlvp 7777

 

네트워크를 연결하고 읽는데 옵션으로 포트를 숫자로 입력, 읽기 정용, 더 많은 정보 가져오고, 우리 컴퓨터의 port로 연결

 

https://websecurity.tistory.com/109

 

리눅스(Linux) Netcat(nc) 명령어

nc(netcat)넷캣(Netcat)은 TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램이다. 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일

websecurity.tistory.com

참고는 여기서 했습니다.

 

 

이 상태로 냅두시고

 

이제 실행해보겠습니다.

 

uploads로 가서 shell2.phtml을 실행해 볼게요

 

 

리버스 쉘 잘 올라가져 있네요.

 

클릭을 하면?

 

 

 

이렇게 쉘을 얻어 온 것을 알 수 있습니다!

 

참고로 find -type f -name "user.txt" 2> /dev/null 이용해서 user.txt 위치를 찾고

안에 cat 명령어로 보시면 task 3의 답이 있습니다.

 

 

 

4. Post-Exploit

 

이걸로 만족을 하면 안 되죠. 이제 시스템에 관리자 권한을 가져올 수 있는 취약점을 찾아야 됩니다.

관리자 권한으로 바꿔주는 방법은 많은데 이번에는 SetUid을 이용하겠습니다.

 

setuid는 특수 권한이라고 보시면 돼요. 만약 root에서 setuid 설정되어 있으면 root 권한으로 비밀번호 없이

실행이 가능하게 해주는 것이 setuid 입니다.

 

 

https://eunguru.tistory.com/115

 

[UNIX / Linux] 특수 권한(setuid, setgid, sticky bit)

프로세스 번호 - UNIX 시스템에서는 프로세스에 다섯 가지 번호 부여 1. 프로세스에 부여되는 번호들 1) 프로세스 식별자(PID) 2) 실제 사용자 ID(RUID) 3) 유효 사용자 ID(EUID) 4) 실제 사용자 그룹(RGID) 5)

eunguru.tistory.com

참고는 여기서 하시면 돼요.

 

 

그럼 setuid 찾는 명령어가 필요하겠죠?

저는 이걸 이용하겠습니다.

 

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

 

find 명령어로 파일을 찾는데 / 루트 디렉터리부터 검색을 합니다.

 

-type f는 검색 대상은 파일을 뜻하고요.

 

-perm -04000 은 권한을 보는데 setuid(4000) 있는 파일을 검색을 합니다.

 

2> /dev/null 은 에러메시지를 무시한다는 이야기입니다.

 

 

실행하겠습니다.

 

엄청 많네요

 

 

그리고 여기서 한 번 찾아보겠습니다.

 

어?

 

파이썬

 

원래는 이렇게 쉽게 취약점이 안 알려주긴 합니다.

파이썬이 setuid 설정되어 있네요.

심지어 root 권한으로요!

 

즉 파이썬을 실행할 때는 root 권한으로 실행한다는 이야기이네요!

 

 

 

그럼 파이썬 작성해서 root 권한을 가져오기만 하면 끝이겠죠.

 

일단 쉘을 바꾸겠습니다.

 

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

 

명령어 실행 시키는 쉘을 바꾸는 거에요.

 

이걸 하는 이유는 여러 가지가 있는데 더 편리한 환경을 만드는 것이 주 목표입니다.

 

 

여기서 의심을 하실 수 있어요 파이썬을 실행하는 데 관리자 권한으로 하는 건데,

그럼 저 파이썬으로 쉘을 받아 왔으니깐 root로 돼야 되는 게 아닌가요?

 

 

이상하죠 의심 들 수 있습니다.

setuid의 특징입니다. 본래는 root의 비밀번호 입력해서 root의 권한인 상태에 실행을 하는 건데

setuid 설정되어 있으면 root의 권한을 안 주고 root인 걸로 간주하고 실행을 하는 겁니다.

 

그러니 root 권한이 없는 상태에서 그저 파이썬을 실행한 거나 다름없어요.

그래서 저렇게 id가 그대로이고요.

 

 

어쨌든 이제 관리자 권한으로 바꿔주는 파이썬 코드를 찾고 실행시키기만 하면 끝이겠죠?

 

매우 좋은 사이트가 있습니다.

 

https://gtfobins.github.io/

 

GTFOBins

pg Shell File read SUID Sudo

gtfobins.github.io

 

이 사이트는 setuid가 걸려있는 파일을 이용해서 어떻게 하면 root을 가져오는지 전부 정리해둔 곳입니다.

또 쉘도 있고요 sudo도 있고요. 그래서 setuid 취약점이 있으면 여기서 코드를 찾습니다.

 

찾아볼게요!

 

저는 ctrl + f 눌러서 사이트에 python을 검색하겠습니다.

 

 

그리고

 

저희는 SUID 즉 SetUid을 이용해 root을 가져오는 거니깐 SUID 클릭합니다.

 

그럼 사용 방법이 나와요

 

그대로 이용하면 되겠죠

 

sudo install은 할 필요 없죠.

 

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

 

이걸 쓰기만 하면 된다네요

 

python인 형식에 -c 로 바로 코드 작성 후 명령어 실행 하게 하고

 

os 모듈에 있는 함수 exel에 /bin/sh을 실행하면 된다는 이야기이네요!

 

해보겠습니다

 

 

쨘!

 

이렇게 손쉽게 root 권한을 가져온 것을 알 수 있습니다.

시스템 장악 성공!

 

참고로 find -type f -name "root.txt" 하시면 root.txt 위치 알 수 있고 안에 task 4의 답이 있습니다.

 

 

________________________________________________________________________________________________

 

 

제가 저번 포스팅에는 sudo 명령어로 어느 명령어가 이용 가능 한지 찾고 그리고 패스워드 없이도 sudo 기능을 사용 가능한 명령어에 파일을 찾았잖아요?

 

이번에는 setuid을 이용해 root에 관련된 setuid을 찾은 다음 그에 맞춰서 root 으로 바꿀 수 있는 코드 또는 쉘을

 

https://gtfobins.github.io/

 

GTFOBins

pg Shell File read SUID Sudo

gtfobins.github.io

이 사이트 통해 찾았습니다.

 

그리고 쓰여있는 데로 실행하기만 하면 됐었죠.

.

.

.

.

대응방법은 별 거 없어요!

 

만약 이 취약점을 막고 싶으시다면 먼저 웹 사이트 파일 업로드하는 것을 DB에 넣던가

아니면 파일 서버를 따로 만들어 실행을 못하게 하던가 해야 되겠죠.

 

시스템 내에서는 python 같은 중요한 것들은 setuid을 설정할 때 조심해야 합니다.

되도록이면 root에 setuid 설정을 피하는 거죠.

 

긴 글 읽어주셔서 감사합니다. 즐거운 하루 보내세요!

'보안지식 > pentest' 카테고리의 다른 글

pentest 실습 (GLITCH)  (0) 2023.06.26
pentest 실습 (Basic Pentesting)  (0) 2023.06.23
pentest 실습 (LazyAdmin) - Post Exploit  (0) 2023.06.21
pentest 실습 (LazyAdmin) - Exploit 까지  (0) 2023.06.20
pentest - 서비스 분석하기  (0) 2023.06.19