基础系列的 XSS、文件上传、CSRF 与越权各写过一篇,这篇是课堂串讲版——重点是把这几个洞当成一条攻击链来看,以及几个”为什么”层面的细节。
0x01 XSS 三类:一个数据流视角
统一用数据流表述,三类 XSS 的区别一目了然:
- 反射型:恶意脚本在 URL 参数里 → 服务器原样拼回响应 → 在受害者浏览器执行。不持久,“像镜子一样反射回来”;
- 存储型:脚本经表单提交存入数据库 → 每个访问页面的用户都会从库里加载到这段代码 → 危害最大。评论区是经典落点;
- DOM 型:前后端不交互,前端 JS 自己把可控数据写进 DOM(
innerHTML一类)→ 服务器上看不到任何异常。
反复验证下来的本质:后端没过滤 + 输入被当代码执行。XSS-Labs 第一关($_GET['name'] 直接 echo 进 <p> 标签)就是把这条本质裸露给你看。
对抗:htmlentities 的边界
后端用 htmlentities() 把 < > & " 转成 HTML 实体,<script> 变成文本——但这不是万能保险:
- 输出上下文在标签内属性(如
<input value="$input">)时,实体编码挡不住逃逸属性再闭合; - JS 上下文(
var x = "$input")里 HTML 实体完全不设防; - 所以防御要按输出上下文选编码函数,一个
htmlentities走天下是误区。
0x02 文件上传与文件包含:一体的两条腿
课堂把上传和包含放一节讲,因为图片马必须配合文件包含才能打:
- 制作图片马:
copy /b normal.jpg + shell.php muma.jpg——PHP 代码藏进图片尾部; - 上传突破(后缀白名单绕过、
%00截断、二次渲染对抗,见旧文); - 关键一步:图片不会被 PHP 解析器执行——必须有文件包含漏洞(
include($_GET['f'])一类)把这个”图片”当 PHP 处理,代码才活。
所以经常出现”上传失败但攻击成功”的怪现象:只要包含漏洞在,换个渠道把图片传上去(甚至通过别的功能)就行。上传是腿,包含是肌肉,测试时要一起看。
一句话木马的原理顺便记了:<?php @eval($_POST['cmd']);?> 把请求参数当代码执行,配合蚁刀/中国菜刀类客户端管理——所有免杀技术(后面WebShell 免杀篇)都在对抗对这一行的检测。
0x03 CSRF 与越权:信任与授权的两面
CSRF:攻击者诱导已登录用户的浏览器向目标站点发伪造请求,浏览器自动携带 Cookie——攻击的是”服务器对浏览器的信任”。标准防御是 token:服务端下发随机 token、请求必须携带,攻击者跨域拿不到 token。
越权:攻击的是”服务器对用户身份的授权判断”——
- 水平越权:同级用户之间,改 ID 看别人订单(Pikachu 里改
user_id参数实锤); - 垂直越权:普通用户访问管理员功能,直接请求后台 URL。
实战里越权是产出最高的洞之一(我的 SRC 战果里占比很高),测试方法就是双账号对比改参数。
0x04 扫描器的定位:AWVS / Xray
课堂演示了 AWVS 的标准流程(新建扫描任务 → 输入目标 → 配置策略 → 跑出报告),并推荐了长亭 Xray。定位要说清楚:
- 扫描器是发现面的工具,报告里的每一项都要人工验证(误报率高是常态);
- 基础系列第 12 讲的综合实战就是把扫描器结果和手工测试串成完整链路;
- 收费的商业系统漏扫(如 Nessus 系)了解即可。