环境搭建&网络协议

Web应用框架

Web应用框架整体流程

终端用户 → 应用客户端(浏览器:IE、Firefox……)→ 应用传输协议(HTTP、HTTPS)→ 服务端Web应用(IIS、Apache)→ 应用服务器 → 数据库服务器

  • 客户端语言:HTML、javascript、css
  • 服务端语言:PHP、JSP、ASP……
  • 数据库编程语言:SQL

环境搭建&网络协议

客户端&服务端系统访问权限

  • 客户端:几乎没有访问底层操作系统的路径
  • 服务端:拥有有权限的底层操作系统访问路径

常见Web应用框架

主流框架组合及对应组件说明:

框架 组成
LAMP Linux + Apache + MySQL + PHP
LNMP Linux + Nginx + MySQL + PHP
WISP Windows + IIS + SQLserver + ASP
LTMJ Linux + Tomcat + MySQL + JAVA

组件分类

  • 操作系统:LINUX、WINDOWS
  • 中间件:apache、nginx、IIS、tomcat
  • 数据库:mysql、SQL server、access(mysql适用于中小型网站/个人站点)

Apache优点

  1. 运行更稳定
  2. 处理动态请求时性能更高(动态请求会用到伪静态,Apache对rewrite支持更好)
  3. rewrite模块更完善
  4. 支持的模块数量众多

Nginx优点

  1. 轻量级,相比Apache占用更少的内存和系统资源
  2. 非阻塞型架构,高并发场景下能保持低资源低消耗,更适合高并发业务
  3. 处理静态网页的表现更优(操作简单、占资源少)

环境搭建

本次环境搭建基于phpstudy(小皮) 套件,适用于Windows系统,核心操作均在phpstudy面板完成。

phpstudy面板核心组件

可在面板中进行启动、重启、配置、停止操作:

  • Web服务:Apache2.4.39、Nginx1.15.11
  • 数据库:MySQL5.7.26
  • 文件传输:FTP0.9.60
  • 其他功能:软件管理、数据库工具、开机自启设置、资源信息查看、日志文件查看

环境搭建&网络协议

目录说明

  1. 网站目录:/phpstudy安装目录/www/站点域名
  2. 错误提示页面:/phpstudy安装目录/www/站点域名/emor/
  3. 该目录下的所有文件支持删除/修改操作

操作注意事项

  1. 新建站点、数据库、FTP均需在phpstudy面板操作;数据库可在环境中下载对应的数据库管理软件
  2. 将网站程序放到站点目录时请使用复制操作,剪切可能造成程序文件损坏/读取异常
  3. 官方支持:使用手册、视频教程、BUG反馈可访问官网www.xp.cr
  4. PHP版本支持:面板可安装/切换多版本PHP,如php5.2.17nts、php5.3.29nts、php7.0.9nts、php7.1.9nts等

站点创建

创建后可通过http://localhost访问,面板会提示站点创建成功,并显示对应运行状态。

本地搭建靶场

靶场搭建核心路径:

  • Linux系统:/var/www/html
  • Windows系统:/www/文件夹
    将靶场源码直接放入对应根目录,完成数据库配置后即可访问使用。

1. DVWA

  1. 核心配置:修改数据库配置文件,指定数据库服务器、库名、账号、密码、端口
    1
    2
    3
    4
    5
    $_DVWA['db_server']='127.0.0.1';
    $_DVWA['db_database']='dvwa';
    $_DVWA['db_user']='root';
    $_DVWA['db_password']='root';
    $_DVWA['db_port']='3306';
  2. 数据库操作:在面板创建对应数据库,访问DVWA页面点击Setup/Reset DB完成数据库初始化
  3. 初始化成功提示:创建users/guestbook表并插入数据,自动生成备份文件/config/config.inc.php.bak
  4. 包含漏洞类型:暴力破解、命令注入、CSRF、文件包含、文件上传、SQL注入、XSS(DOM/反射型/存储型)、弱会话ID等

环境搭建&网络协议

环境搭建&网络协议

环境搭建&网络协议

2. Pikachu

  1. 访问路径:http://127.0.0.1/pikacu-master/
  2. 初始化:首次访问提示PHP未初始化,点击对应按钮完成初始化即可
  3. 包含漏洞类型:XSS、CSRF、SQL注入、暴力破解、RCE、文件包含、不安全文件下载/上传、越权访问、敏感信息泄露等

环境搭建&网络协议

环境搭建&网络协议

3. 其他靶场

  • upload-labs-master、xss-labs-master:直接将源码放入根目录即可访问,无固定通关方法,可灵活尝试

环境搭建&网络协议

  • sqli-labs:需使用php5.3.29版本,在phpstudy面板切换PHP版本后,创建站点并放入源码,访问页面完成数据库初始化即可,专注于SQL注入漏洞练习

环境搭建&网络协议

环境搭建&网络协议

HTTP协议

基本定义

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从WWW服务器传输超文本到本地浏览器的传送协议.
HTTP是一个应用层协议,由请求(request)和响应(response)构成,是一个标准的客户端服务器模型。 HTTP是一个无状态的协议。
请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期 Web成功的有功之臣,因为它使开发和部署非常地直截了当。

  • 请求/响应消息头:以ASCII形式给出
  • 消息内容:采用类似MIME的格式

核心标识

  1. URL:统一资源定位器,用于定位网络资源
  2. URI:统一资源标识符,支持资源定位/搜索,渗透测试中可将payload拼接至URL中
    • URL格式:协议://域名:端口/路径?[查询/请求参数]
    • 示例:http://127.0.0.1:80/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit&user_token=f060048bdc9b602411dcc01a5a385277#

MIME类型

MIME(多用途互联网邮件扩展)是互联网标准,最初用于电子邮件系统,后应用于浏览器,服务器通过MIME类型告知浏览器多媒体数据的类型,使其调用对应插件解析。

常见MIME类型:

文件后缀 MIME类型
.gif image/gif
.jpeg/.jpg image/jpeg
.txt text/plain
.mp3 audio/x-mpeg
.mp4 video/mp4

HTTP协议工作流程

  1. 客户端与服务端建立连接
  2. 客户端向服务端发起请求
  3. 服务端解析请求数据
  4. 服务端向客户端返回响应数据包
  5. 客户端接收响应数据
  6. 双方释放资源,连接关闭

环境搭建&网络协议

Cookie是在远程浏览器端存储数据并跟踪、识别用户的机制,是存储在客户端的一小段数据,浏览器通过HTTP协议与服务器进行Cookie交互。

Cookie工作流程

  1. 无Cookie信息时:客户端发送请求 → 服务器生成Cookie并记录归属 → 服务器在响应中添加Cookie并返回 → 客户端保存Cookie
  2. 有Cookie信息时:客户端在请求中添加已保存的Cookie并发送 → 服务器检查Cookie并识别用户 → 服务器返回对应响应

环境搭建&网络协议

Session

Session在网络应用中称为“会话控制”,是服务器为保存用户状态创建的特殊对象,用于在服务端存储用户信息。

  • 多客户端隔离:服务器为不同客户端(A/B)创建独立的Session对象,避免信息混淆
  • 交互流程:客户端发送HTTP请求 → 服务器判断是否存在对应Session,无则创建 → 服务器基于Session处理请求并返回响应
对比维度 Cookie Session
存储位置 客户端 服务端
安全性 较低 较高
服务器性能消耗 几乎无消耗 大量用户请求时,消耗服务器资源较多
信息存储适用场景 非敏感信息 更重要的核心信息

Request 请求数据包

请求数据包是客户端向服务端发送的请求信息,由请求行、请求头、空行、请求体四部分组成,空行用于分隔请求头和请求体,是协议规范要求。

1. 请求行

请求行由请求方法、请求URL、HTTP版本三个标记组成,以空格间隔,是请求数据包的首行。

  • 核心请求方法:GET、POST(本质均基于TCP/IP的应用层协议,仅报文格式不同)
  • 请求参数位置:GET参数在请求行中,POST参数在请求体中

GET & POST核心对比

分类 GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器会提示用户)
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或multipart/form-data(二进制数据用多重编码)
历史记录 参数保留在浏览器历史中 参数不会保存在浏览器历史中
数据长度限制 有(URL最大长度2048个字符) 无限制
数据类型限制 仅允许ASCII字符 无限制,支持二进制数据
安全性 较差,参数在URL中明文显示 更高,参数不在URL中显示
可见性 数据在URL中对所有人可见 数据不显示在URL中

2. 请求头

请求头是客户端向服务端传递的附加信息,由多个键值对组成,每个字段对应特定含义,以下为核心请求头字段说明:

Header 解释 示例
Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html
Accept-Charset 浏览器可以接受的字符编码集 Accept-Charset: iso-8859-5
Accept-Encoding 指定浏览器支持的web服务器返回内容压缩编码类型 Accept-Encoding: compress, gzip
Accept-Language 浏览器可接受的语言 Accept-Language: en, zh
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
Connection 表示是否需要持久连接(HTTP 1.1默认持久连接) Connection: keep-alive
Cookie 发送该请求域名下的所有cookie值给web服务器 Cookie: Version=1; Skin=new;
Content-Length 请求的内容长度 Content-Length: 348
Content-Type 请求的内容对应的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
Host 指定请求的服务器的域名和端口号(必选字段) Host: www.doone.com
Referer 表示当前请求从哪个页面的链接触发 Referer: http://www.zcmhi.com/archives/71.html
User-Agent 包含发出请求的用户端信息(浏览器/系统等) User-Agent: Mozilla/5.0 (Linux; X11)
X-Forwarded-For/client-ip 代理服务器标记用户的真实IP X-Forwarded-For:1.1.1.1 client-ip:2.2.2.2

3. 请求数据包示例

1
2
3
4
5
6
7
8
9
10
11
12
13
GET / HTTP/1.1
Host: 43.139.149.11:33562
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: close
Cookie: BEEFHOOK=KHmsqjZpGsqU64Nw3sRVaBPHYDal0p4aNfPwkS4XXIcGm7Zx7MZZtUpYwujSSZTImO4KrFvXzHceixit
Upgrade-Insecure-Requests: 1
Priority: u=0, i

(空行)
(请求体,GET请求无请求体)

环境搭建&网络协议

Request 响应数据包

响应数据包是服务端向客户端返回的处理结果,由状态行、响应头、空行、响应数据四部分组成。

1. 状态行

状态行由HTTP协议版本、数字状态代码、状态描述三部分组成,空格分隔,以回车换行符结尾。

  • 状态代码:三位数字,第一个数字定义响应类别,共5类
  • 空行:分隔响应头和响应数据,是协议规范要求

状态代码分类

  1. 1xx:指示信息 → 请求已接收,继续处理
  2. 2xx:成功 → 请求已被成功接收、理解、接受
  3. 3xx:重定向 → 需进一步操作才能完成请求
  4. 4xx:客户端错误 → 请求有语法错误或无法实现
  5. 5xx:服务器端错误 → 服务器未能实现合法的请求

常见状态码

状态码 描述 说明
200 OK 请求成功 最常见,所请求资源返回至客户端
301 Found 永久重定向 跳转到另外一个页面
304 Not Modified 缓存未修改 F5刷新页面时,使用本地缓存的文档
400 Bad Request 客户端请求错误 请求有语法错误,服务器无法理解
403 Forbidden 服务器拒绝服务 可能是权限不足导致
404 Not Found 请求资源不存在 服务器未找到请求的URL对应资源
500 Internal Server Error 服务器内部错误 服务器发生不可预期的错误
503 Service Unavailable 服务器暂时不可用 一段时间后可恢复正常

2. 响应头

与请求头格式一致,是服务端向客户端传递的附加信息,包含服务器类型、响应时间、内容长度、MIME类型等,核心字段与请求头通用。

3. 响应数据

服务端返回的实际内容,浏览器会提取该部分数据并生成对应的网页,如HTML代码、数据库查询结果等。

4. 响应数据包示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HTTP/1.1 200 OK
Date: Sat, 27 Sep 2025 06:12:10 GMT
Server: Apache/2.4.7 (Ubuntu)
Vary: Accept-Encoding
Content-Length: 250
Connection: close
Content-Type: text/html; charset=UTF-8

(空行)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MySQL Union SQLi</title>
</head>
<body>
<h2>MySQL 数字型 SQLi</h2>
<p>/sqli/union_sz.php?id=1</p>
</body>
</html>
1 : admin : e10adc3949ba59abbe56e057f20f883e

环境搭建&网络协议

越权问题示例

基于响应数据返回的用户信息,易出现越权访问漏洞:

  • 管理员信息:id:1, name:"admin", age:20
  • 普通用户信息:id:5, name:"xiaoming", age:20
    若未做权限校验,普通用户可通过修改id参数访问管理员信息。

HTTP和HTTPS的区别

HTTPS是基于SSL/TLS加密的HTTP协议,核心差异体现在安全性、部署成本、性能等方面,具体区别如下:

  1. 传输方式:HTTP明文传输,数据易被窃取/篡改;HTTPS通过SSL/TLS加密传输,安全性更高
  2. 端口:HTTP默认80端口;HTTPS默认443端口
  3. 证书:HTTP无需证书;HTTPS需要购买/申请SSL证书,功能越强的证书费用越高,且传统SSL证书通常需绑定IP,同一IP无法绑定多个域名
  4. 性能:HTTPS页面加载时间延长近50%,增加10%-20%设备耗电;握手阶段耗时,影响网站响应速度
  5. 缓存:HTTPS连接缓存效率低于HTTP
  6. 服务器资源:HTTPS对服务器资源占用更高,高访问量网站需投入更高的硬件成本
  7. 部署建议:采用分而治之策略,如12306,主页用HTTP,用户信息相关模块用HTTPS

DNS

1. 域名格式

完整URL的域名/路径组成:协议://登录信息@服务器地址:端口/带层次的文件路径?查询字符串#片段标识符
示例:http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1

2. DNS定义

DNS(域名系统,Domain Name System)是互联网的核心服务,是将域名和IP地址相互映射的分布式数据库,实现域名到IP的解析,使人更方便地访问互联网,同时支持TCP和UDP端口。

常见公共DNS服务器

  • 114.114.114.114(国内运营商通用)
  • 8.8.8.8(谷歌)
  • 218.85.157.99(福州电信)

3. HOSTS文件

  • 本质:无扩展名的系统文件,可通过记事本等工具编辑
  • 作用:将域名与IP地址建立静态关联,浏览器访问域名时,先从Hosts文件查找对应IP,找到则直接访问,未找到则提交至DNS服务器解析
  • 路径(Windows):C:\Windows\System32\drivers\etc
  • 注意:映射为静态,若服务器IP更改,需及时更新Hosts文件,否则无法访问。

4. CDN

CDN(内容分发网络,Content Delivery Network)是构建在现有网络基础上的智能虚拟网络,依靠各地边缘服务器,通过中心平台的负载均衡、内容分发、调度功能,让用户就近获取内容,核心作用:

  • 降低网络拥塞
  • 提高用户访问响应速度
  • 提升资源访问命中率
  • 关键技术:内容存储技术、内容分发技术

代理工具:Burpsuite

Burpsuite是渗透测试核心代理工具,支持抓包、改包、漏洞扫描、爆破等功能,核心模块及功能如下:

1. 抓包/代理模块(Proxy)

核心用于捕获、分析客户端与服务端的网络流量,核心功能:

  1. 流量控制:放行/丢弃/拦截关闭
  2. 漏洞扫描:
    • 被动扫描:不额外发送请求,仅分析捕获的请求/响应数据
    • 主动扫描:在现有请求基础上,自动构造并发送测试payload,尝试触发漏洞(可能触发WAF告警)
  3. 数据包操作:修改请求参数、抓取响应包、复制文件地址
  4. 上游代理:实现多层代理,如将Burpsuite抓包端口(8080)的出网流量转发至7897端口,实现外网访问

关联WAF

  • WAF本质:一组检测规则,通过特征检测(预先设定关键词:如select)、限制请求长度/速率、语义解析等方式检测恶意请求
  • 检测对象:URL、请求参数等

2. 仪表盘(Dashboard)

用于查看扫描任务的整体情况,核心功能:

  • 实时查看Proxy捕获的所有流量
  • 过滤、汇总扫描结果
  • 查看站点地图、任务日志、告警信息
  • 注意事项:主动扫描可能引发日志告警风险(频繁访问、爆破参数、日志异常被封禁IP)和误触业务逻辑(自动访问删除/修改链接,引发误操作)

3. 重放器(Repeater)

用于手工修改数据包并重复发送,核心优势:无需在浏览器重新提交请求,直观查看响应变化。

核心用途

  1. 验证参数篡改漏洞(如修改商品价格、页面ID)
  2. 手工验证漏洞(如SQL注入、XSS)

与Proxy的区别

  • Repeater:离线修改、重放数据包
  • Proxy:实时拦截、分析在线流量

4. 爆破模块(Intruder)

用于对请求参数进行批量测试,支持四种爆破模式,可根据参数数量和测试需求选择:

  1. 阻击手(Sniper):单一变量,仅对一个参数进行测试替换
  2. 碰撞物(Battering Ram):用一个payload同时替换所有标记位置(如多个参数同时使用同一payload)
  3. 交叉(Pitchfork):多参数并行使用不同payload列表,参数与payload一一对应(参数A用列表1,参数B用列表2,每次取第x个组合发送)
  4. 集束炸弹(Cluster Bomb):多参数全排列组合,穷举所有payload组合可能,覆盖最全面但耗时最长

爆破结果判断依据

通过响应长度、状态码、响应内容的差异,判断是否爆破成功。