WEB渗透概述
环境搭建&网络协议
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优点
- 运行更稳定
- 处理动态请求时性能更高(动态请求会用到伪静态,Apache对rewrite支持更好)
- rewrite模块更完善
- 支持的模块数量众多
Nginx优点
- 轻量级,相比Apache占用更少的内存和系统资源
- 非阻塞型架构,高并发场景下能保持低资源低消耗,更适合高并发业务
- 处理静态网页的表现更优(操作简单、占资源少)
环境搭建
本次环境搭建基于phpstudy(小皮) 套件,适用于Windows系统,核心操作均在phpstudy面板完成。
phpstudy面板核心组件
可在面板中进行启动、重启、配置、停止操作:
- Web服务:Apache2.4.39、Nginx1.15.11
- 数据库:MySQL5.7.26
- 文件传输:FTP0.9.60
- 其他功能:软件管理、数据库工具、开机自启设置、资源信息查看、日志文件查看

目录说明
- 网站目录:
/phpstudy安装目录/www/站点域名 - 错误提示页面:
/phpstudy安装目录/www/站点域名/emor/ - 该目录下的所有文件支持删除/修改操作
操作注意事项
- 新建站点、数据库、FTP均需在phpstudy面板操作;数据库可在环境中下载对应的数据库管理软件
- 将网站程序放到站点目录时请使用复制操作,剪切可能造成程序文件损坏/读取异常
- 官方支持:使用手册、视频教程、BUG反馈可访问官网
www.xp.cr - 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
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'; - 数据库操作:在面板创建对应数据库,访问DVWA页面点击
Setup/Reset DB完成数据库初始化 - 初始化成功提示:创建
users/guestbook表并插入数据,自动生成备份文件/config/config.inc.php.bak - 包含漏洞类型:暴力破解、命令注入、CSRF、文件包含、文件上传、SQL注入、XSS(DOM/反射型/存储型)、弱会话ID等



2. Pikachu
- 访问路径:
http://127.0.0.1/pikacu-master/ - 初始化:首次访问提示PHP未初始化,点击对应按钮完成初始化即可
- 包含漏洞类型: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的格式
核心标识
- URL:统一资源定位器,用于定位网络资源
- URI:统一资源标识符,支持资源定位/搜索,渗透测试中可将payload拼接至URL中
- URL格式:
协议://域名:端口/路径?[查询/请求参数] - 示例:
http://127.0.0.1:80/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit&user_token=f060048bdc9b602411dcc01a5a385277#
- URL格式:
MIME类型
MIME(多用途互联网邮件扩展)是互联网标准,最初用于电子邮件系统,后应用于浏览器,服务器通过MIME类型告知浏览器多媒体数据的类型,使其调用对应插件解析。
常见MIME类型:
| 文件后缀 | MIME类型 |
|---|---|
| .gif | image/gif |
| .jpeg/.jpg | image/jpeg |
| .txt | text/plain |
| .mp3 | audio/x-mpeg |
| .mp4 | video/mp4 |
HTTP协议工作流程
- 客户端与服务端建立连接
- 客户端向服务端发起请求
- 服务端解析请求数据
- 服务端向客户端返回响应数据包
- 客户端接收响应数据
- 双方释放资源,连接关闭

Cookie & Session
Cookie
Cookie是在远程浏览器端存储数据并跟踪、识别用户的机制,是存储在客户端的一小段数据,浏览器通过HTTP协议与服务器进行Cookie交互。
Cookie工作流程
- 无Cookie信息时:客户端发送请求 → 服务器生成Cookie并记录归属 → 服务器在响应中添加Cookie并返回 → 客户端保存Cookie
- 有Cookie信息时:客户端在请求中添加已保存的Cookie并发送 → 服务器检查Cookie并识别用户 → 服务器返回对应响应

Session
Session在网络应用中称为“会话控制”,是服务器为保存用户状态创建的特殊对象,用于在服务端存储用户信息。
- 多客户端隔离:服务器为不同客户端(A/B)创建独立的Session对象,避免信息混淆
- 交互流程:客户端发送HTTP请求 → 服务器判断是否存在对应Session,无则创建 → 服务器基于Session处理请求并返回响应
Cookie & 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 | GET / HTTP/1.1 |

Request 响应数据包
响应数据包是服务端向客户端返回的处理结果,由状态行、响应头、空行、响应数据四部分组成。
1. 状态行
状态行由HTTP协议版本、数字状态代码、状态描述三部分组成,空格分隔,以回车换行符结尾。
- 状态代码:三位数字,第一个数字定义响应类别,共5类
- 空行:分隔响应头和响应数据,是协议规范要求
状态代码分类
- 1xx:指示信息 → 请求已接收,继续处理
- 2xx:成功 → 请求已被成功接收、理解、接受
- 3xx:重定向 → 需进一步操作才能完成请求
- 4xx:客户端错误 → 请求有语法错误或无法实现
- 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 | HTTP/1.1 200 OK |

越权问题示例
基于响应数据返回的用户信息,易出现越权访问漏洞:
- 管理员信息:
id:1, name:"admin", age:20 - 普通用户信息:
id:5, name:"xiaoming", age:20
若未做权限校验,普通用户可通过修改id参数访问管理员信息。
HTTP和HTTPS的区别
HTTPS是基于SSL/TLS加密的HTTP协议,核心差异体现在安全性、部署成本、性能等方面,具体区别如下:
- 传输方式:HTTP明文传输,数据易被窃取/篡改;HTTPS通过SSL/TLS加密传输,安全性更高
- 端口:HTTP默认80端口;HTTPS默认443端口
- 证书:HTTP无需证书;HTTPS需要购买/申请SSL证书,功能越强的证书费用越高,且传统SSL证书通常需绑定IP,同一IP无法绑定多个域名
- 性能:HTTPS页面加载时间延长近50%,增加10%-20%设备耗电;握手阶段耗时,影响网站响应速度
- 缓存:HTTPS连接缓存效率低于HTTP
- 服务器资源:HTTPS对服务器资源占用更高,高访问量网站需投入更高的硬件成本
- 部署建议:采用分而治之策略,如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)
核心用于捕获、分析客户端与服务端的网络流量,核心功能:
- 流量控制:放行/丢弃/拦截关闭
- 漏洞扫描:
- 被动扫描:不额外发送请求,仅分析捕获的请求/响应数据
- 主动扫描:在现有请求基础上,自动构造并发送测试payload,尝试触发漏洞(可能触发WAF告警)
- 数据包操作:修改请求参数、抓取响应包、复制文件地址
- 上游代理:实现多层代理,如将Burpsuite抓包端口(8080)的出网流量转发至7897端口,实现外网访问
关联WAF
- WAF本质:一组检测规则,通过特征检测(预先设定关键词:如select)、限制请求长度/速率、语义解析等方式检测恶意请求
- 检测对象:URL、请求参数等
2. 仪表盘(Dashboard)
用于查看扫描任务的整体情况,核心功能:
- 实时查看Proxy捕获的所有流量
- 过滤、汇总扫描结果
- 查看站点地图、任务日志、告警信息
- 注意事项:主动扫描可能引发日志告警风险(频繁访问、爆破参数、日志异常被封禁IP)和误触业务逻辑(自动访问删除/修改链接,引发误操作)
3. 重放器(Repeater)
用于手工修改数据包并重复发送,核心优势:无需在浏览器重新提交请求,直观查看响应变化。
核心用途
- 验证参数篡改漏洞(如修改商品价格、页面ID)
- 手工验证漏洞(如SQL注入、XSS)
与Proxy的区别
- Repeater:离线修改、重放数据包
- Proxy:实时拦截、分析在线流量
4. 爆破模块(Intruder)
用于对请求参数进行批量测试,支持四种爆破模式,可根据参数数量和测试需求选择:
- 阻击手(Sniper):单一变量,仅对一个参数进行测试替换
- 碰撞物(Battering Ram):用一个payload同时替换所有标记位置(如多个参数同时使用同一payload)
- 交叉(Pitchfork):多参数并行使用不同payload列表,参数与payload一一对应(参数A用列表1,参数B用列表2,每次取第x个组合发送)
- 集束炸弹(Cluster Bomb):多参数全排列组合,穷举所有payload组合可能,覆盖最全面但耗时最长
爆破结果判断依据
通过响应长度、状态码、响应内容的差异,判断是否爆破成功。





