本文适合
已掌握基本 XSS(三种类型、输出位置、基本测试)的学习者。学完你能:围绕 CSP、DOM Sink、mXSS 和 JSONP 建立进阶 XSS 验证链,判断脚本是否真的能在目标上下文执行
一句话判断
当基础 <script>alert(1)</script> 不再生效,但页面仍存在可控 HTML、危险 DOM Sink、弱 CSP、JSONP callback 或浏览器解析差异时,就进入 XSS 进阶排查。
本文适合
已掌握基本 XSS(三种类型、输出位置、基本测试)的学习者。学完你能:围绕 CSP、DOM Sink、mXSS 和 JSONP 建立进阶 XSS 验证链,判断脚本是否真的能在目标上下文执行
当基础 <script>alert(1)</script> 不再生效,但页面仍存在可控 HTML、危险 DOM Sink、弱 CSP、JSONP callback 或浏览器解析差异时,就进入 XSS 进阶排查。
本文适合
已掌握基本 SQL 注入(布尔/联合/报错/时间)的学习者。学完你能:绕过 WAF、使用 sqlmap 高级功能、理解二次注入和堆叠注入
二次注入是指恶意数据先被安全地存入数据库,后续读取使用时未转义导致注入。
场景:
1. 用户注册时输入用户名: admin'--
2. 注册时使用了参数化查询,安全存入数据库
3. 用户修改密码时,代码从数据库读取用户名构造 SQL
4. SQL 变成: UPDATE users SET password='new' WHERE name='admin'--'
5. 实际修改的是 admin 的密码
本文适合
已掌握 JavaScript 对象、JSON 参数和 Node.js Web 基础的学习者。学完你能:判断对象合并是否可污染原型,区分污染点和触发点,并把污染推进到权限绕过、XSS 或服务端利用
原型链污染是 JavaScript 生态中的一类漏洞。攻击者通过控制对象属性合并、解析或赋值过程,污染 Object.prototype 等原型对象,从而影响后续对象行为。
请求走私发生在前端代理和后端服务器对 HTTP 请求边界理解不一致时。攻击者构造一个请求,让不同组件把它切成不同的请求序列。
HTTP/1.1 中,服务器需要知道一个请求从哪里结束、下一个请求从哪里开始。
常见长度依据:
Content-Length
Transfer-Encoding: chunked
本文适合
已掌握基本 Web 安全的学习者。学完你能:识别检查和使用分离的业务窗口,构造并发请求验证竞态,并用结果差异证明漏洞成立
当同一个资源、状态或 token 被多个请求同时操作,并且后端先检查再修改时,就要怀疑竞争条件或 TOCTOU。
竞态题不是看单次请求能不能成功,而是看多个请求在同一个时间窗口里是否能一起通过检查,从而得到本不该重复获得的结果。
本文适合
已掌握反序列化基本概念(序列化/反序列化、gadget chain、观察入口)的学习者。学完你能:构造 PHP/Java/Python 的 gadget chain,利用字符串逃逸和 __wakeup 绕过
PHP 反序列化利用魔术方法构造调用链:
<?php
// 常见可利用魔术方法
// __wakeup() - 反序列化时自动调用
// __destruct() - 对象销毁时调用
// __toString() - 对象转字符串时调用
// __call() - 调用不存在方法时调用
// __get() - 读取不存在属性时调用
// __set() - 写入不存在属性时调用
// 常见 gadget 场景
class FileHandler {
public $filename;
public $content;
public function __destruct() {
// 危险: 对象销毁时写入文件
file_put_contents($this->filename, $this->content);
}
}
class Logger {
public $logFile;
public $message;
public function __destruct() {
// 危险: 对象销毁时执行系统命令
system("echo " . $this->message . " >> " . $this->logFile);
}
}
// 构造恶意序列化数据
$evil = new Logger();
$evil->logFile = "/tmp/test";
$evil->message = "; id > /tmp/output";
echo serialize($evil);
// O:6:"Logger":2:{s:7:"logFile";s:9:"/tmp/test";s:7:"message";s:22:"; id > /tmp/output";}
?>