一,环境的搭建;
VM17 官网下载
kali 2023.4版 https://mirrors.tuna.tsinghua.edu.cn/kali-images/kali-2023.4/
靶场文件 https://download.vulnhub.com/dc/DC-2.zip
二,攻略(找到隐藏的5个flag)
1,flag1
首先根据已知的MAC地址;扫IP地址;
接下来扫端口;
发现开放了两个端口;
80端口和7744端口;
首先从80端口入手;
访问之后发现网站被重定向到https://www.dc-2.com/
windows在如下的目录下加入
C:\Windows\System32\drivers\etc\hosts
同样的,在kali的/etc/hosts文件下也要配置该命令;
192.168.20.145 dc-2
hosts文件的作用:优先解析,优先级高于DNS,将IP地址解析为域名;
这样就拿到了flag1;
flag1的提示:
Your usual wordlists probably won't work, so instead, maybe you just need to be cewl.
More passwords is always better, but sometimes you just can't win them all.
Log in as one to see the next flag.
If you can't find it, log in as another.
你的常用词汇表可能不适用,所以也许你只需要保持酷炫。
更多的密码总是更好,但有时你就是无法赢得所有。
以一个身份登录以查看下一个标志。
如果你找不到它,就以另一个身份登录。
2,flag2
对于flag1中的提示;得到一个新的工具--->cewl;
cewl
是一个开源工具,通常用于 Kali Linux 中的网络渗透测试。它的主要功能是从给定的网页中抓取单词,并生成一个自定义的字典文件,这在进行密码破解和社交工程时非常有用。
选项:
-w <filename>
:指定输出字典文件的名称。-m <number>
:指定最小单词长度,只有长度大于或等于此值的单词才会被包含在字典中。-d <number>
:指定递归深度,控制抓取网页时的深度。-s <number>
:设置抓取时的延迟,用于避免对目标服务器的过多请求。-H
:包括 HTTP 头,以便抓取需要身份验证的页面。
执行该命令;
cewl -d 2 -m 5 -w dc-2.txt http://dc-2
生成字典文件;
接下来尝试使用wpscan这个工具;
对于cms为wordpress,这个工具有很大的作用;
主要功能是:
- 识别 WordPress 版本:可以确定目标网站所使用的 WordPress 版本。不同版本的 WordPress 可能存在特定的安全漏洞,通过识别版本信息,安全人员可以有针对性地进行漏洞检测。
- 检测插件和主题漏洞:WPScan 能够扫描目标网站上安装的插件和主题,查找已知的安全漏洞。许多插件和主题可能由于代码质量问题或未及时更新而存在安全风险。
- 枚举用户:可以尝试枚举 WordPress 网站上的用户。了解网站上的用户信息对于进一步的安全评估和潜在的攻击路径分析非常有帮助。
- 暴力破解密码:虽然不建议在未经授权的情况下进行暴力破解,但在某些合法的安全测试场景中,WPScan 可以尝试对 WordPress 管理员用户等进行密码暴力破解,以评估密码强度和潜在的安全风险。
枚举用户;
wpscan --url http://dc-2 -e u
wordpress的版本:
识别到了三个用户:
接下来可以根据前面获取到的密码字典进行一个爆破;
wpscan --url http://dc-2 -U user.txt -P dc-2.txt
拿到了jerry和tom的密码;
尝试登录;
使用jerry的账号和密码成功登录;
拿到第二个flag;
If you can't exploit WordPress and take a shortcut, there is another way.
Hope you found another entry point.
如果你无法利用WordPress走捷径,还有另一种方法。
希望你能找到另一个切入点。
3,flag3
根据flag2的提示,从另一个端口入手;
存在着一个7744端口,提供了ssh服务,这个可能是一个安全策略,通过改变端口来隐藏服务;
用上面拿到的两个账号和密码分别登录;
tom登录成功;jerry用户未登录成功;
存在一个flag3文件,但是无法查看;
发现解释为rbash;即受限的 Bash
特点
- 限制命令执行,在rbash环境中,用户只能执行在`PATH`环境变量所列出的目录中的可执行文件。这意味着如果一个命令不在这些指定目录中,即使它在系统中存在且可执行,用户也无法直接运行它。例如,如果`/usr/local/bin`不在`PATH`中,而某个自定义脚本放在该目录下,用户在rbash中就无法直接运行这个脚本。
- 限制重定向操作, rbash对输入输出重定向操作进行了限制。它禁止使用一些可能会导致安全风险的重定向方式。比如,不允许使用`>`进行文件覆盖重定向操作,除非在某些特定的、被允许的情况下(可能通过配置白名单等方式实现部分允许)。这样可以防止用户恶意覆盖重要文件。
- 限制环境变量修改,用户在rbash中对环境变量的修改能力受到限制。一般情况下,不能随意设置新的环境变量或者修改现有重要环境变量的值。例如,不能轻易地修改`PATH`环境变量来绕过命令执行的限制,也不能设置一些可能会影响系统安全的其他环境变量,如`LD_LIBRARY_PATH`等。
仅可以使用这四个命令;
我们可以使用rbash逃逸;(可以使用如下的6个命令)
[1]ftp
[2]more //分页查看
[3]less //分页查看
[4]man //查看帮助
[5]vi
[6]vim
这里我们使用vi进行rbash进行逃逸(还有其他逃逸的办法)
首先使用vi随便编辑一个文件,在命令行输入如下命令
:set shell=/bin/sh
回车之后
:shell
然后添加环境变量;
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
这样就实现了rbash逃逸;
可以正常执行cat命令;
拿到了flag3;
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
提到了jerry,接下来应该尝试使用jerry用户;
4,flag4
接下来常规操作,查看/etc/passwd
发现jerry用户的命令解释为/bin/bash;说明该用户的命令是不受限制的;
接下来尝试切换用户;
这里的原理涉及到su 和 su- 的区别:
- su命令,只会更改当前用户,而不会更改当前的用户环境,比如你从oracle 用户su到root账户中,当前路径仍是你刚才的路径,环境变量仍是oracle用户的
- su- 命令,则在更改当前用户信息的同时还会更改用户环境,但是假如你从oracle 用户su -到root账户,你会发现你的当前路径已经变为/root,环境变量也变了
所以使用su-来切换用户;
成功的切换到了jerry用户;
在jerry的目录下拿到了flag4;
Good to see that you've made it this far - but you're not home yet.
You still need to get the final flag (the only flag that really counts!!!).
No hints here - you're on your own now.
Go on - git outta here!!!!
很高兴看到你已经走到了这一步,但你还没有完成任务。
你仍然需要获得最后的旗帜(唯一真正重要的旗帜!!!)。
这里没有提示------现在你只能靠自己了。
继续前进------赶紧离开这里!!!!
5,flag5
下一步自然就是提权,拿到root权限;
常规思路:
- 找敏感文件;ls -a
- 查看以root用户去执行的程序;sudo -l
- 查看历史ml;history
- 使用内核漏洞提权;uname -a
flag4提示没有提示;仔细查找,发现一个git,想到git提取;
恰好有一个git命令,可以使用root用户的权限去执行,而且不需要密码;
sudo git help config #进入git交互式界面
!/bin/bash #输入命令回车,拿到root权限
进入一个git的交互式环境,然后输入!/bin/bash
就拿到了root用户的权限;
提权成功,拿到root用户的权限;
这样就拿到了最终的flag;
三,总结
rbash逃逸的时候要根据具体的情况选择合适的方法;
git提权;
对市面上常见的cms,要选择合适的工具,可以达到事半功倍的效果;
hosts文件,且它的解析优先级比DNS更高,可以将目标主机ip地址和域名写入hosts文件;
使用nmap扫描的时候,有时候处于安全考虑,会修改ssh服务的端口;