免责声明本文内容仅供网络安全技术学习和研究使用所有操作均在授权的CTF竞赛环境或本地环境中进行。请勿将所述技术用于任何非法用途否则后果自负。本笔记基于在合法CTF平台上的练习经历总结了七类常见Web安全漏洞的原理、检测方法及修复建议。所有示例中的目标地址均为虚构或已获授权的测试环境。一、PHP反序列化漏洞漏洞原理PHP的unserialize()函数将用户可控的字符串还原为对象如果程序中定义了魔术方法如__wakeup()、__destruct()攻击者可以构造特定的序列化数据来触发非预期的逻辑。典型场景一个用户类User在反序列化时检查用户名和密码是否为特定值如果是则包含敏感文件。安全测试方法构造序列化字符串使对象的属性满足条件。注意私有属性在序列化时名称会包含空字节%00类名%00属性名长度需正确。示例代码仅用于学习// 假设目标类定义如下 class User { public $username; private $password; public function __wakeup() { if ($this-username admin $this-password password) { include(/flag.txt); echo Welcome, admin! The flag is: . $flag; } } } // 攻击者构造的序列化字符串 $payload O:4:User:2:{s:8:username;s:5:admin;s:16:%00User%00password;s:8:password;}; // 通过 POST 参数 data 提交修复建议避免反序列化不可信数据。使用allowed_classes选项限制可反序列化的类。对序列化字符串进行签名校验。二、文件包含漏洞PHP伪协议漏洞原理当include()、require()等函数的参数由用户控制且未经过滤时攻击者可以包含任意文件。利用php://filter协议可以读取PHP源码因为直接包含PHP文件会执行而看不到代码。安全测试方法尝试参数如?file、?page等先读取/etc/passwd验证漏洞存在再读取目标PHP文件。示例Payloadhttp://example.com/?filephp://filter/convert.base64-encode/resourcesecret.php返回的Base64字符串解码后即为源码。修复建议禁用allow_url_fopen和allow_url_include。使用白名单限制可包含的文件。对用户输入进行严格过滤避免路径遍历。三、SSRF服务器端请求伪造漏洞原理服务端提供了从指定URL获取内容的功能如file_get_contents()、curl_exec()但未对协议和地址做限制攻击者可以诱使服务器访问内部资源或本地文件。安全测试方法尝试file://协议读取本地文件?urlfile:///etc/passwd。若成功则可尝试读取/flag.txt等敏感文件。示例Payloadhttp://example.com/fetch?urlfile:///flag.txt修复建议限制允许的协议仅允许 http/https。对请求的目标IP进行白名单或内网IP过滤。使用URL解析库验证域名合法性。四、命令注入漏洞原理当后端将用户输入拼接到系统命令中执行如system()、exec()且未做转义时攻击者可以通过特殊字符如;、|、注入额外命令。安全测试方法观察是否存在参数可以影响命令执行例如预设命令的下拉框修改其值为; cat /flag.txt或cat /flag.txt。示例PayloadPOST /command.php HTTP/1.1 ... radiocat /flag.txtsubmitRun修复建议使用escapeshellcmd()或escapeshellarg()转义用户输入。避免直接使用系统命令改用内置函数或API。采用白名单机制限制可执行的命令。五、越权漏洞IDOR漏洞原理应用程序依赖用户提交的标识如id、user来访问资源但没有对当前登录用户的权限进行校验导致攻击者可以修改标识访问他人的数据。安全测试方法在密码重置、资料查看等请求中尝试添加或修改参数如useradmin、uid1等观察是否能够操作其他账户。示例PayloadGET /reset_password.php?new_password12345678useradminsubmit1修复建议服务端必须验证当前会话的用户是否拥有操作目标资源的权限。使用不可预测的标识符如UUID代替自增数字ID。对于敏感操作要求重新验证密码或进行二次确认。六、XXEXML外部实体注入漏洞原理应用程序解析XML输入时如果允许外部实体攻击者可以定义实体指向本地文件或内部URL从而读取敏感信息。安全测试方法找到接受XML数据的接口如登录、API提交包含外部实体的XML观察响应是否包含文件内容。示例Payload?xml version1.0 encodingUTF-8? !DOCTYPE root [ !ENTITY xxe SYSTEM file:///flag.txt ] user usernamexxe;/username passwordtest/password /user修复建议禁用外部实体libxml_disable_entity_loader(true)。使用JSON格式替代XML或使用安全的XML解析配置。对用户提交的XML进行严格过滤。七、业务逻辑漏洞价格/数量篡改漏洞原理电子商务类应用中后端如果信任前端提交的价格、折扣等参数攻击者可以修改这些参数以低价购买商品或非法获取权益。安全测试方法在购买请求中尝试修改quantity为负数、极大值或添加price、total等参数覆盖服务端计算。示例PayloadPOST /checkout.php?id2 quantity1price0修复建议所有价格、折扣等关键数据应在服务端计算不信任客户端提交的值。对数量进行严格的类型和范围校验正整数。使用数据库中的价格字段不接受用户传入的price参数。八、学习总结上述漏洞在CTF竞赛中极为常见掌握它们的原理和测试方法有助于提升Web安全防护意识。在实际开发中应遵循“永远不信任用户输入”的原则采用白名单、输入过滤、输出编码、权限校验等多层防御措施。注意本笔记所有技术点均基于授权的CTF环境学习整理仅供安全研究人员参考。请勿在未授权的情况下对任何系统进行测试。