网站架构安全:前后端分离、集成软件、Docker与分站系统
一、课程概述
1.1 知识衔接
-
上节课回顾:常规化搭建(源码+数据库同服务器)、站库分离(源码与数据库分离)
-
本节课核心:四种特殊架构的安全测试差异
-
前后端分离架构
-
集成软件搭建(宝塔/PHPStudy)
-
Docker容器化部署
-
建站分配站(分站系统)
-
1.2 核心学习目标
理解不同架构对渗透测试路径的根本性影响------"架构决定攻击面,搭建方式决定利用难度"
二、前后端分离架构
2.1 核心概念
表格
| 对比维度 | 常规架构 | 前后端分离架构 |
|---|---|---|
| 技术栈 | PHP/JSP/ASP + HTML混合 | 前端:Vue/React/Angular(JS框架) 后端:独立API服务 |
| 部署方式 | 前后端同域名、同目录 | 前端静态页面 + 后端独立域名/API |
| 数据交互 | 服务端渲染,直接输出HTML | 异步API请求(AJAX/RESTful) |
| 后台位置 | /admin/、/manage/等子目录 |
完全独立域名或子域名 |
2.2 典型特征识别
前端页面特征:
-
页面简洁,单页应用(SPA)风格
-
无传统分页,内容通过JS动态加载
-
URL多为
#/或路径路由,无文件后缀 -
网络监控可见大量XHR/Fetch API请求
后端独立特征:
plain
复制
示例:
前端:www.example.com(Vue.js构建的静态页面)
后端:admin.example.com 或 api.example.com(独立服务)
2.3 安全测试影响
表格
| 影响维度 | 具体表现 | 测试策略 |
|---|---|---|
| 漏洞面缩小 | 前端无服务端逻辑,传统SQL注入、RCE等消失 | 聚焦API接口测试:未授权访问、越权、IDOR |
| 后台隐蔽性 | 后台不在同域名,目录扫描无效 | 子域名枚举、API文档分析、JS文件逆向 |
| 权限隔离 | 前端GetShell≠后端受影响 | 需分别获取前后端权限,可能完全隔离 |
| 技术栈差异 | 前端框架漏洞(Vue XSS配置等) | 关注框架历史漏洞、CORS配置、API鉴权 |
2.4 渗透测试流程
Mermaid
全屏
下载
复制
代码预览
识别前后端分离特征前端JS分析提取API端点后端子域名枚举API安全测试未授权/越权/注入获取后端权限判断前后端关联同域名子域?影响前端:独立部署?需分别控制
关键注意点:
-
⚠️ 前端上传点GetShell通常无法控制后端(域名隔离)
-
⚠️ 必须找到真实后端地址,否则测试无法深入
-
⚠️ API鉴权绕过是核心突破口(JWT伪造、Session固定等)
三、集成软件搭建(宝塔 vs PHPStudy)
3.1 搭建方式对比
表格
| 维度 | 手动搭建(IIS/Apache) | 宝塔面板 | PHPStudy |
|---|---|---|---|
| 部署复杂度 | 高(逐个安装配置) | 极低(一键安装) | 极低(一键安装) |
| 环境隔离 | 系统级服务 | 软件级隔离 | 软件级隔离 |
| 默认权限 | 继承系统权限(Administrator) | 严格限制(无法跨目录、禁命令执行) | 继承系统权限(较宽松) |
| 安全投入 | 依赖管理员配置 | 内置安全防护(持续更新) | 基础防护(默认关闭) |
| 市场份额 | 企业级自建 | 个人/中小站长主流 | 逐渐被宝塔替代 |
3.2 宝塔安全机制详解
文件管理限制:
-
WebShell只能看到当前网站目录
-
无法访问上级目录(
C:\、/等) -
提示:"路径没有发现或没有权限"
命令执行限制:
-
默认禁用
system()、exec()等函数 -
返回错误:
Warning: system() has been disabled for security reasons
权限原理:
plain
复制
宝塔设计:网站运行用户 ≠ 系统管理员
↓
独立用户权限(如 www 用户)
↓
仅对网站目录有读写权限
↓
即使GetShell,也无法突破目录隔离
3.3 PHPStudy安全机制
默认状态:
-
无强制权限隔离
-
WebShell继承运行用户权限(通常为Administrator)
-
可执行系统命令、可遍历全盘
可配置防护:
plain
复制
网站管理 → 安全设置 → 可启用:
- 防跨站攻击(open_basedir)
- 禁用危险函数
- 目录权限限制
3.4 三者权限对比实验
表格
| 测试项 | IIS手动搭建 | 宝塔面板 | PHPStudy |
|---|---|---|---|
| 查看上级目录 | ✅ 可见 | ❌ 拒绝 | ✅ 可见 |
| 查看C盘/根目录 | ⚠️ 部分可见(权限决定) | ❌ 完全拒绝 | ✅ 完全可见 |
| 执行系统命令 | ⚠️ 部分可执行 | ❌ 函数被禁用 | ✅ 完全可执行 |
| 当前权限用户 | IIS_IUSRS/自定义 | 隔离用户(www) | Administrator |
核心结论:
宝塔 > IIS手动 > PHPStudy(默认安全强度) 但需注意:PHPStudy开启安全设置后可接近宝塔水平
四、Docker容器化部署
4.1 核心概念
技术本质:操作系统级虚拟化,共享内核,隔离进程/文件/网络
与传统虚拟机对比:
表格
| 特性 | 传统虚拟机 | Docker容器 |
|---|---|---|
| 启动速度 | 分钟级 | 秒级 |
| 资源占用 | GB级(独立OS) | MB级(共享内核) |
| 隔离级别 | 硬件级完全隔离 | 进程级隔离(Namespace/Cgroup) |
| 镜像分发 | 整机镜像 | 分层镜像(Docker Hub) |
4.2 快速部署流程
bash
复制
# 1. 安装Docker(以Ubuntu为例)
curl -fsSL https://get.docker.com | sh
# 2. 拉取镜像(以Tomcat为例)
docker pull tomcat:8.0
# 3. 启动容器(端口映射)
docker run -d -p 8080:8080 --name my-tomcat tomcat:8.0
# 4. 验证访问
curl http://localhost:8080
4.3 安全测试核心差异
容器内视角 vs 宿主机视角:
表格
| 操作 | 容器内看到 | 宿主机实际 |
|---|---|---|
whoami |
root | 容器内的root(非真实root) |
ls / |
容器文件系统 | 仅overlay层,非宿主机根目录 |
| 创建文件 | 容器内可见 | 宿主机特定目录(Volume/overlay2) |
| 进程列表 | 仅容器进程 | 宿主机可见所有进程 |
关键安全影响:
"容器逃逸"成为核心课题------GetShell只是起点,突破容器边界才是目标
容器逃逸前提条件:
-
内核漏洞(如Dirty Cow、CVE-2016-5195)
-
危险挂载(Docker Socket、/proc、/sys挂载到容器)
-
特权模式运行(
--privileged) -
Capabilities配置不当
五、建站分配站(分站系统)
5.1 模式定义
表格
| 类型 | 特征 | 示例 |
|---|---|---|
| 全权托管 | 用户仅使用,无控制权 | 凡科建站、阿里云速成美站 |
| 申请分配 | 平台分配子域名,用户可配置内容 | 免费建站平台、部分网校系统 |
5.2 识别特征
域名特征:
plain
复制
真实用户域名:www.xiaodi-blog.com(备案信息:个人/企业)
建站平台分配:xiaodi123.vip.fkw.com(备案信息:凡科建站)
xiaodi456.my3w.com(备案信息:万网/阿里云)
技术识别方法:
-
备案查询:工信部备案系统查域名主体
-
Whois查询:注册信息是否匹配网站宣称主体
-
指纹特征:特定JS文件、CSS类名、HTML注释
5.3 安全测试边界
表格
| 场景 | 测试对象 | 实际影响 |
|---|---|---|
| 免费建站平台 | 平台本身 | 用户无真实资产,测试价值低 |
| 政务托管网站 | 托管服务商 | 需区分"展示型"vs"业务型" |
| 企业分站系统 | 主站平台 | 一个平台漏洞影响所有分站 |
关键判断:
域名所有权 ≠ 网站控制权 ≠ 数据归属权
六、静态网站与伪静态
6.1 静态网站特征
表格
| 维度 | 动态网站 | 纯静态网站 |
|---|---|---|
| 技术 | PHP/JSP/ASP + 数据库 | HTML + CSS + JS(无服务端) |
| 内容更新 | 后台管理,数据库存储 | 直接修改HTML文件 |
| 交互性 | 用户登录、评论、搜索等 | 仅展示,无交互或JS模拟 |
| 漏洞面 | SQL注入、RCE、文件上传等 | 几乎无漏洞(无数据传输) |
| 识别特征 | URL带参数(?id=1)、有后台 |
单页面、无后台、无数据库交互 |
6.2 伪静态技术
原理:动态内容生成静态HTML文件,或URL Rewrite伪装
实现方式:
apache
复制
# Apache .htaccess 示例
RewriteEngine On
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L]
识别方法:
-
表面URL:
/article/123.html(看似静态) -
实际处理:服务器内部重写为
article.php?id=123 -
判断技巧:修改URL参数看是否动态响应、查看HTTP头X-Powered-By
七、核心工具与命令
7.1 Docker操作命令
表格
| 命令 | 用途 | 示例 |
|---|---|---|
docker pull <镜像> |
拉取镜像 | docker pull tomcat:8.0 |
docker run [选项] <镜像> |
启动容器 | docker run -d -p 8080:8080 tomcat:8.0 |
docker ps |
查看运行容器 | docker ps -a(含已停止) |
docker exec -it <ID> /bin/bash |
进入容器 | docker exec -it abc123 /bin/bash |
docker stop/start <ID> |
停止/启动容器 | docker stop abc123 |
docker rm <ID> |
删除容器 | docker rm -f abc123 |
端口映射详解:
bash
复制
docker run -d -p 宿主机端口:容器端口 --name 容器名 镜像名
# 示例:将容器8080映射到宿主机8080
docker run -d -p 8080:8080 --name my-tomcat tomcat:8.0
7.2 WebShell连接工具
表格
| 工具 | 适用场景 | 特征 |
|---|---|---|
| 哥斯拉(Godzilla) | 加密通信、绕过WAF | 支持ASP/PHP/JSP/ASPX,流量加密 |
| 蚁剑(AntSword) | 插件扩展、快速连接 | 开源,插件市场丰富 |
| 冰蝎(Behinder) | 高隐蔽性需求 | 基于Java加密,特征隐蔽 |
7.3 信息收集工具
表格
| 工具 | 用途 | 关键参数 |
|---|---|---|
| Nmap | 端口扫描 | nmap -sV -p 1-65535 target.com |
| Sublist3r | 子域名枚举 | python sublist3r.py -d target.com |
| Dirsearch | 目录爆破 | python dirsearch.py -u target.com -e php,asp |
| WhatWeb | 指纹识别 | whatweb target.com |
八、可复现实验流程
实验1:三种搭建方式权限对比
环境准备:
-
Windows Server 2012/2016
-
宝塔面板安装包(官网下载)
-
PHPStudy(官网下载)
-
IIS(系统自带)
步骤1:宝塔搭建
Markdown
复制
代码预览
1. 安装宝塔面板 → 运行安装包 → 等待完成
2. 登录面板 → 软件商店 → 安装Apache/Nginx + MySQL + PHP
3. 一键部署WordPress/Z-Blog
4. 上传WebShell(PHP)→ 连接测试
5. 记录:能否执行命令?能否跨目录?
步骤2:PHPStudy搭建
markdown
复制
1. 安装PHPStudy → 启动Apache + MySQL
2. 创建网站 → 绑定域名 → 选择PHP版本
3. 同目录放置相同WebShell
4. 连接测试 → 对比权限差异
步骤3:IIS手动搭建
Markdown
复制
代码预览
1. 服务器管理器 → 添加角色 → Web服务器(IIS)
2. 勾选ASP.NET、CGI等必要组件
3. 手动配置站点 → 绑定域名
4. 部署相同WebShell
5. 对比三种环境的命令执行与目录遍历能力
预期结果对比表:
表格
| 测试项 | 宝塔 | PHPStudy | IIS手动 |
|---|---|---|---|
| 命令执行 | ❌ 禁用 | ✅ 允许 | ⚠️ 部分允许 |
| 跨目录访问 | ❌ 拒绝 | ✅ 允许 | ⚠️ 依赖配置 |
| 系统信息获取 | ❌ 有限 | ✅ 完整 | ⚠️ 部分 |
实验2:Docker容器逃逸认知
bash
复制
# 1. 启动漏洞环境(以Vulhub为例)
git clone https://github.com/vulhub/vulhub.git
cd vulhub/tomcat/CVE-2017-12615
# 2. 启动环境
docker-compose up -d
# 3. 获取WebShell后,观察容器内环境
uname -a # 内核版本(与宿主机相同)
cat /proc/1/cgroup # 查看cgroup确认容器身份
ls / # 容器文件系统
# 4. 对比宿主机
# 在宿主机执行相同命令,观察差异
九、本章核心考点总结
简答题高频考点
表格
| 考点 | 标准答案要点 | 考察频率 |
|---|---|---|
| 前后端分离识别方法 | ①页面简洁无刷新(SPA特征) ②大量API请求(XHR/Fetch) ③后台独立域名/子域名 ④前端Vue/React框架特征 | ⭐⭐⭐⭐⭐ |
| 宝塔 vs PHPStudy 安全差异 | 宝塔:内置权限隔离、命令禁用、目录限制 PHPStudy:默认继承系统权限、宽松配置 原因:安全投入与设计理念差异 | ⭐⭐⭐⭐⭐ |
| Docker容器逃逸概念 | 突破Namespace/Cgroup隔离,获取宿主机权限 前提:内核漏洞、危险挂载、特权模式 防御:最小权限原则、Capabilities限制 | ⭐⭐⭐⭐⭐ |
| 建站平台识别方法 | ①域名备案信息查询 ②Whois注册主体比对 ③技术指纹(特定JS/CSS) ④子域名特征(平台统一后缀) | ⭐⭐⭐⭐ |
| 静态网站安全特征 | 无服务端处理、无数据库交互 漏洞面极小(仅前端XSS、JS问题) 识别:单页面、无后台、无动态参数 | ⭐⭐⭐⭐ |
实操题高频场景
-
架构识别:给定目标,判断是前后端分离/常规架构/静态网站
-
权限绕过:宝塔环境下寻找可执行命令的替代方法
-
容器判断:通过WebShell特征判断是否在Docker内
-
平台识别:通过域名信息判断是否为建站分配站
关键记忆口诀
plain
复制
前后端分离看API,后台独立难寻觅
宝塔安全靠隔离,PHPStudy看配置
Docker里面是假象,逃逸才是真目标
建站平台查备案,域名信息露马脚
静态网站光秃秃,无洞可找真头疼