이번 문제는 TryHackMe 사이트에서 풀어볼 수 있는 RootMe 입니다.
RootMe는 처음에 침투 대상의 IP주소만 제공하고, 정보 수집, 웹 공격, 시스템 루트권한 획득까지 침투과정을 한번에 연습해볼 수 있는 문제입니다.
저의 공격 대상 IP는 10.10.171.198 입니다.
nmap을 이용해서 가동중인 서비스 및 포트, os 정보를 확인하도록 하겠습니다.
(공격대상 서버가 켜진 직후엔 서버가 닫혀있다며 스캔이 안될 수 있습니다. 3분정도 기다린 후 하면 될겁니다.)
스캔에는 약 1분정도가 소요되었습니다.
22번, 80번 포트가 열려있고, 리눅스 시스템이라는 것을 알 수 있습니다.
80번 포트를 서비스 중이라는 것은 웹 서비스를 제공중 이라는 건데요, 직접 접속해 봅시다.
ip주소를 URL창에 직접 입력해 줍시다. 그러면 이런 사이트가 나옵니다.
다만 어떠한 입력 폼이나 클릭할 곳이 없어 아무것도 할 수가 없네요.
이 사이트에 숨겨진 페이지가 있는지, GoBuster 툴을 이용해서 찾아보도록 합시다.
이렇게 명령어를 입력해 줍니다.
dir 옵션은 디렉터리를 찾겠다(페이지를 찾겠다)
-u 옵션엔 스캔대상 주소
-w 옵션엔 사용할 단어 리스트(예상되는 페이지 이름을 대입하면서 찾는 원리이기 때문), 보통 kali 시스템에 존재할겁니다.
-t 는 전송할 스레드 수(설정하지 않을 시 10이 기본값)
그리고 기다려 주면 결과가 나옵니다.
숨겨진 페이지들이 몇개 있네요.
index.php 페이지는 메인 페이지입니다. 또한 php 언어를 사용한다는 걸 알 수 있죠.
대부분 익숙한 이름들이지만, 눈에 띄는 이름이 있네요. panel , uploads 페이지 말입니다. panel 페이지부터 살펴봅시다.
panel 페이지 입니다. 파일 업로드 기능이 존재하는군요. 여기를 이용해서 공격하면 될 것 같은데요?
이곳은 uploads 페이지 입니다. panel 페이지를 통해 업로드된 파일이, 이 디렉터리에 저장되는 것이 아닌가 예상해 봅니다.
저는 리버스 쉘을 업로드하여, 웹서버의 쉘을 획득해 보겠습니다.
적당히 구글링하여 리버스쉘 코드를 찾아 내 시스템에 저장하겠습니다. 금방 찾을 수 있습니다.
코드를 구글링해서 찾은 후 wget 명령어를 이용해서 kali에 다운로드했습니다.
하지만 바로 사용할 수 없습니다.
vi로 파일을 연 후 조금 내리면 이런 부분이 있습니다.
ip와 포트번호를 제 것으로 바꿔주면 됩니다. 그러면 상대 시스템에서 저에게 접속하게 되고, 쉘을 열게 됩니다.
저는 33333 포트 이용하겠습니다.
이후 해당 파일을 업로드 시도해 봤는데, 오류가 뜨면서 업로드에 실패했습니다.
정확한 뜻은 모르겠지만, PHP 파일을 제한하고 있는 것 같습니다.
확장자를 기준으로 필터링 하는 듯 한데, 확장자 필터링을 우회해 봅시다.
저는 확장자를 php대신 phtml로 바꾸어 주었습니다.
php와 이름은 다르지만 php와 똑같이 동작하는 확장자들이 있습니다. php4, php5, phtml 등이 있는데요,
php4로 업로드 해 봤지만 실패하여 저는 phtml 확장자를 이용했습니다.
phtml 확장자로 업로드에 성공하였습니다! 이제 확인해 봅시다.
uploads 디렉터리에 잘 업로드 되어 있습니다. 저걸 클릭하면 쉘을 획득할 수 있습니다.
하지만 그 전에 준비과정이 있습니다.
바로 포트를 열어주는 것입니다.
제 시스템의 포트가 열려있어야 상대방이 접속할 수 있겠죠?
이렇게 listening 상태로 만들어 둔 후, 리버스 쉘 파일을 클릭합니다.
성공! 쉘을 획득하였습니다.
하지만 아직 시스템을 장악하진 못했습니다. 권한이 www-data 인 것 보이시나요? 저것은 웹사이트에서 사용자에게 제공하는 최소한의 권한입니다.
root권한을 획득해야 진정으로 해킹에 성공했다고 할 수 있겠죠? 그러기 위해서 저는 SetUID 가 설정된 파일을 찾아보겠습니다.
SetUID가 설정된 파일을 실행하면, 실행하는 동안 파일 소유자의 권한을 얻게 됩니다. 소유자가 root라면 root의 권한을 잠시 획득할 수 있죠.
find 명령어로 SetUID 비트가 설정되어 있는 파일을 찾아보겠습니다.
다양한 파일이 있습니다만.. 대부분은 시스템 필수 명령어들이거나 우리가 이용하기 힘든 파일들입니다.
그러나 가운데에서 약간 위쪽에, python 프로그램에 SetUID가 설정되어 있는것을 확인할 수 있습니다.
python에 SetUID가 설정되어 있다니.. 이걸 이용하면 반드시 root권한을 획득할 수 있을 것 같습니다.
GTFOBins 사이트는 시스템에서 권한을 상승시킬 수 있는 수많은 방법을 담고 있는 사이트입니다.
이곳에서 python을 이용한 권한 상승 방법도 배울 수 있습니다.
python에 SUID가 설정되어 있는 경우 root권한 획득법 입니다.
파이썬의 os모듈을 이용하는 방법인데요.
2번째 줄에 있는 명령어를 입력하면, root쉘을 획득할 수 있을 것 같습니다!
root 권한을 획득하였습니다. euid를 보시면 root로 설정되어 있죠? euid는 실제로 적용되는 권한을 의미합니다. 실질적으로 root권한이나 다름이 없다는 뜻입니다.
root권한을 획득했으니 시스템을 맘대로 요리할 수 있고, 백도어를 생성해서 맘대로 드나들 수도 있겠죠?
오늘은 RootMe 문제, 포트 스캔부터 시작하여 웹 사이트 취약점을 통해 시스템에 접속한 후, SetUID비트가 설정된 파일을 악용해 root권한을 획득하는 과정까지 진행해보았습니다.
'Hacking > [모의침투]TryHackMe' 카테고리의 다른 글
TryHackMe[Overpass] (0) | 2023.06.01 |
---|---|
TryHackMe[OhSINT] (0) | 2023.06.01 |
TryHackMe [Basic Pentesting] (0) | 2023.05.25 |